Appearance
召回之后如何形成证据:Reranking、Threshold 与 Grounding
前置:语义搜还是关键词搜:Semantic、BM25 与 Hybrid Search
核心问题:初始检索返回几十个候选后,怎样筛成少量可信 evidence,并证明最终答案确实依据了这些证据?
一次召回结果怎样变成真正 Evidence
假设 Retriever 先拿到 50 个候选,其中真正相关的政策条款排在第 17。流程可以是:
text
candidate recall: top-50
→ reranker 重新排序
→ threshold 去掉低相关候选
→ final top-8
→ attach source/chunk/version provenance
→ ContextManager 注入 Evidence如果第一阶段只取 top-10,正确条款根本没有进入 reranker;后面再强的模型也找不回来。这就是为什么 candidate recall、rerank 和最终 evidence selection 要分开评估。
Reranking:花更高成本把真正相关的候选排到前面
Reranker 只处理第一阶段已经召回的小候选集,用 cross-encoder/LLM 等更昂贵方法重新估计 query-document 相关性。它主要改善 top positions,不负责补召回。
因此常见设计是“便宜 Retriever 扩大 recall,较贵 Reranker 缩小最终集合”,而不是让昂贵模型扫描整个语料库。
Top-K 与 Threshold:分别控制数量上限和最低质量
Top-K 回答“最多留多少条”,score threshold 回答“低到什么程度宁可不填满 K”。二者共同影响 recall、precision、rerank 成本和 Context token。
短事实问题可能 top-3 已足够;跨文档比较可能需要更多 evidence。固定 K/threshold 可以作为 baseline,但最终应由真实 query 分布和 eval 决定,而不是认为“Context 还有空间就把 K 填满”。
Grounding / Citation / Provenance:证明答案依据了哪份证据
Grounding 的底层事实不是“回答里出现一个链接”,而是 Evidence 能回到:
text
document / chunk id
source version
位置/span
当时实际进入 Context 的 evidence identityCitation 是 provenance 的用户可见表现。如果文档更新后引用无法定位到当时真正使用的 chunk/version,这个引用就无法审计。
Failure Modes
Rerank 前候选过早裁剪
后果: 正确证据没有进入候选集,reranker 无法补救。
处理: 分别调 candidate-K、rerank-K 与 threshold,并同时观察 recall、precision、latency。
Citation 不能回到实际 Evidence
后果: 看似有来源,但无法证明模型当时使用的是哪个版本/片段。
处理: Evidence 保留 source/chunk/version/span provenance,生成只能引用实际选入的 evidence。
如何验证
| 场景 | 必须成立 |
|---|---|
| 正确证据初始排名较低 | 增大 candidate-K 后 reranker 有机会把它提升到最终集合 |
| threshold 提高 | 最终 evidence 变少,但不会用低质量候选强行填满 K |
| 文档版本被替换 | citation validator 能识别旧 evidence/version,而不是指向当前同名文档 |
自测
- 正确证据初始只排第 18,如果 candidate-K 在 rerank 前就截到 10,后面的 reranker 还能救回来吗?
- 最终答案引用了一个 chunk。除了“检索到了”,还需要保存什么 provenance 才能验证答案确实受该证据支持?