召回回归测试
AI 知识库改版后,怎么做 RAG 召回回归测试?
用版本化黄金评测集,对比语料、Embedding、切块、混合检索或 reranker 改动前后,是否仍能召回预期来源。
文章封包
Workflows
正在更换 AI 知识库语料、Embedding、切块、混合检索或 reranker 的开发者
8 分钟阅读
01
改检索前,先固定代表性问题与预期来源。
02
一次改一个因素,先对比召回,再评估生成回答。
03
逐条检查退步案例,原因没查清前保留回滚能力。
01
先说结论
要验证 AI 知识库改版后的检索质量,先建立一份有版本的黄金评测集:每题记录自然提问、预期 source ID 或文档、无答案案例与基准配置。改动一项语料或检索因素后,重跑同一批问题,先对比召回结果,再检查丢失或新增的来源,差异能够解释才接受新版本。
这和引用校验不同。引用校验从一个已经生成的回答出发,检查来源是否支持每个主张;召回回归测试发生在生成之前,确认改版后是否仍能取回原本应该出现的证据。
02
哪些改动之后要重跑?
新增、删除或更新来源文档,更换 Embedding,调整 chunk size、metadata filter、BM25 与向量权重、top-k 或 reranker,都可能让部分问题变好,却让另一些问题找不到原来的证据。不要只用一道 demo 题判断整体成功。
- 收录常见真实问题、已知失败、边界案例,以及知识库不应该回答的问题。
- 每个预期结果旁保留权威来源版本,来源真的改变时才明确更新标签。
- 新系统与黄金答案不同时,先调查原因,不要直接把新结果 bless 成正确。
03
黄金评测集至少记录什么?
每个案例需要稳定 ID、用户自然问题、预期来源、禁止出现的来源、是否允许无答案,以及这道题为什么重要。语料版本与检索配置要单独保存,否则两次结果无法公平比较。
最小黄金案例
version: 1
corpus_revision: docs-2026-08-26
cases:
- id: windows-installer
query: Windows 桌面版应该下载哪个文件?
expected_sources: [release-v0.16.0]
excluded_sources: [runtime-zip]
no_answer: false
- id: enterprise-price
query: 企业版价格是多少?
expected_sources: []
no_answer: true04
固定基线,一次只改一个因素
记录语料 revision、Embedding 模型、切块参数、filter、混合检索权重、reranker 版本、top-k 与运行环境。能一次只改一项最好;同时改很多项时,测试也许看得出 drift,却无法指出原因。
先对比 source-level Recall@k 或 Hit@k;排序重要时再看 MRR 或 NDCG。无答案案例与 latency 要分开保留,不要把所有数字合成一个分数,掩盖关键来源消失。
05
先查召回失败,再看回答好不好
对每个失败案例,依次检查 query rewrite、召回片段、分数、source ID、filter、融合结果、reranker 与最终排序。把文档缺失、错误标签、提取失败、metadata filter、Embedding drift、切块边界与 reranker 变化分开。
预期来源本身也可能标错;反过来,整体平均分数很好,也可能漏掉一个高风险问题。只有预期证据确实被取回后,才继续评估 grounding、回答质量与引用。
06
诚实使用 Wenlan 的 maintainer drift test
Wenlan repository 维护了带标签的检索 fixtures、仅针对 retrieval 的 Recall@5、MRR、NDCG@10 快照、固定 ranking goldens,以及 main canary 使用的 ignored drift test。它检测的是相对可信基线的漂移,不是绝对正确性。
这是 Wenlan 维护者工作流,不是已发布的 `wenlan eval` 用户命令,也不是 hosted CI 功能。即使不用 Wenlan,你仍可把黄金评测集、来源版本与回滚决策保存在自己的 repository。
仅供 Wenlan repository 维护者使用
cargo test -p wenlan-core --lib \
eval::retrieval_drift::tests::ranking_drift_vs_golden \
-- --ignored --nocapture先固定一份召回基线
选择代表性项目问题,记录预期来源与版本,再开始更换 Embedding、切块或 reranker。
FAQ