RAG 重排序观测性:召回多不代表答案稳
RAG 重排序观测性召回多不代表答案稳一、RAG 质量问题经常藏在重排序阶段RAG 系统出错时团队通常先看向量召回是不是没召回到相关文档但很多问题其实出在重排序阶段。召回到了正确文档却被 reranker 排到后面无关但文字相似的片段排在前面权限过滤后候选变少模型只能基于残缺上下文回答。召回多不代表答案稳。RAG 质量要看检索、过滤、重排序、截断和生成的完整链路。只看最终答案很难知道是哪一步出了问题。二、RAG Trace 要记录候选变化每个阶段都应该记录候选数量和 TopK 变化。flowchart TD A[用户问题] -- B[向量召回 Top50] B -- C[权限过滤] C -- D[重排序 Top10] D -- E[上下文截断] E -- F[模型生成] D -- G[候选评分记录]如果权限过滤后只剩两条文档答案质量差就不一定是模型问题。观测数据要能让团队看到上下文是怎么变少的。三、重排序日志要保留摘要而不是全文下面是一个候选记录结构。public record RagCandidate( String docId, double recallScore, double rerankScore, boolean permitted, int tokenLength ) {}生产日志不适合保存全文文档但可以保存 docId、分数、权限结果、长度和命中片段摘要。这样既能排障又能控制敏感信息风险。四、评估要分开看召回和排序RAG 评测不要只看最终回答准确率。要分别看 recallk、rerank hit rate、上下文覆盖率和答案引用命中率。召回低说明向量或分块有问题排序差说明 reranker 或特征设计要调引用错说明生成阶段没有正确使用证据。还要关注截断策略。重排序后 TopK 文档可能总 token 太长进入模型前还要裁剪。如果裁剪规则只按顺序截断可能把关键段落砍掉。重排序观测要延伸到最终进入 Prompt 的片段。线上反馈也要回流。用户点“答案无用”时系统应该保存当次候选链路。没有失败样本RAG 优化只能靠猜。最后重排序模型升级要灰度。新 reranker 看起来离线分数更高但可能偏好更长文档、更新文档或某类格式。线上要按问题类型观察不要只看总体平均。分块策略也会影响重排序。段落太短候选缺少上下文段落太长相关内容被无关内容稀释。重排序观测里要记录 chunk 大小和命中位置才能判断问题是排序模型还是文档切分本身。还要区分“答案错”和“证据不足”。如果候选文档本身没有覆盖问题生成模型再强也只能猜。系统可以在上下文覆盖率不足时明确拒答或提示需要人工补充资料而不是强行生成看似完整的答案。最后RAG 调优要保留基线。每次改 embedding、reranker、分块或 Prompt都要和上一版在同一评测集上对比。没有基线优化很容易变成凭感觉换参数。观测面板最好展示一次查询的候选瀑布。研发能看到每个阶段剩下哪些 docId、分数如何变化、哪些被权限过滤、哪些因 token 超限被截断。可视化不是为了好看而是减少定位时间。还要记录用户问题改写。很多 RAG 系统会先把用户问题改写成检索 query如果改写偏了后面召回和排序都会偏。重排序观测不能只从召回结果开始问题改写也要进入 trace。RAG 重排序还面临多语言、多领域适配的问题。通用 reranker 在特定领域如法律、医疗、金融的表现可能不如预期因为训练数据和目标领域的语义分布存在差异。观测系统需要能够按领域、按语言、按问题类型分解重排序效果而不是只看全局指标。如果某个领域的 rerank hit rate 明显偏低可能需要 fine-tune reranker或者为该领域单独训练排序模型。这种细分分析能力是 RAG 系统从能用到好用的关键。重排序的计算成本也需要纳入观测范围。Reranker 模型通常比 embedding 模型更重延迟更高。在生产环境中需要监控重排序的 P50/P95/P99 延迟、GPU 利用率如果用 GPU 推理、以及超时率。如果重排序成为端到端延迟的瓶颈可能需要优化模型如量化、蒸馏、减少重排序候选数量、或者采用多级排序策略先用轻量模型粗排再用重量模型精排。观测数据要能支撑这些工程决策。五、总结RAG 重排序观测性要记录候选在召回、过滤、排序、截断中的变化。召回多不代表答案稳进入模型的证据质量才是关键。把每一步变成可观察数据RAG 才能真正调得动。