检索质量评测:回答对了,不代表检索对了
实测 top-1 到 top-5 的拐点——以及为什么 k 越大不一定越好
4.2 留了个尾巴:按行切的检索命中率只有 7/10,回答准确率却有 9/10。
模型靠相邻内容连蒙带猜,替你的检索遮了羞。等问题变难、蒙不出来时,你才会发现检索早就烂了——而那时你已经上线了。
这一节把 RAG 拆成两个可以分别测量的部分,并回答一个高频问题:top-k 到底取几?
考试成绩差,可能是没背对知识点(检索问题),也可能是背对了但答题跑偏(生成问题)。只看总分,你不知道该补哪一块。
RAG 评测必须分科考试。
两个指标,分开测
| 指标 | 怎么测 | 说明什么 |
|---|---|---|
| 检索命中率 | 标准答案所在的块,有没有出现在 top-k 里 | 你的切分+检索行不行 |
| 回答准确率 | 最终答案里有没有关键事实 | 端到端效果 |
标注方法:评测集每条除了"问题 + 标准答案",再加一个 "正确来源"(答案在哪个章节/块里)。本节代码里就是那个第三列:
EVAL = [
("退货的时限是多久?", "7", "退换货"), # 问题, 关键事实, 正确来源
("年费会员多少钱?", "199", "会员制度"),
...
]
标这一列会多花点时间,但它是你唯一能定位"到底哪一环坏了"的方式。
实测:top-k 取几个
按行切(最细粒度)下,改变 k:
【按行切 top-1】检索命中 6/10 (60%) 回答准确 8/10 (80%)
【按行切 top-3】检索命中 7/10 (70%) 回答准确 9/10 (90%)
【按行切 top-5】检索命中 7/10 (70%) 回答准确 8/10 (80%) ← 回答反而降了
三个结论:
① k 从 1 加到 3:检索和回答都涨。符合直觉——多给几块,命中概率更高。
② k 从 3 加到 5:检索命中率不动了(7/10)。说明该找到的已经找到了,再往下捞都是无关内容——这就是你的 k 拐点。
③ k=5 时回答准确率反而降了(9/10 → 8/10)。这是关键:塞进太多无关内容,会稀释模型的注意力,让它从正确答案旁边挑了个错的说法。
"k 越大越保险"是错的——它同时增加成本(更多 token)、延迟,还可能降低准确率。
怎么定你的 k
- 从 k=3 起步;
- 画出 k=1/3/5/8 的两条曲线(检索命中率、回答准确率);
- 找检索命中率的平台期起点——那就是你的 k(再大只是浪费);
- 如果回答准确率在平台期之前就开始降,说明你的块太大或噪声太多,回 4.2 调切分。
还该测的两件事
① 未命中样本的分布:那 3 条没检索到的,有什么共性?(问法太口语?文档里根本没有?块被切碎了?)——共性就是你的下一个优化点。
② "文档里根本没有"的问题:评测集里要故意放 2-3 条知识库里没答案的问题,看系统会不会诚实说"没查到"(ap4.1 的 B 组能力)。这类问题在真实用户里占比不低,而很多 RAG 系统会强行用最相似的块编一个答案。
🔧 动手做:画出你的 k 曲线(12 分钟)
- 跑本节代码
rag_pipeline.py的实验二,看 top-1/3/5 的两条数据。 - 给你的评测集补上"正确来源"列(第三列),这样才能算检索命中率。
- 跑 k=1/3/5/8,记下两条曲线——你的拐点在哪?
- 加 3 条"知识库里没有答案"的问题,看你的系统是拒答还是硬答。硬答的话,回 ap4.1 把"资料里没有必须说没查到"写进提示词。
- 分析未命中样本:它们有共性吗?
✅ 做到这里你应该有:你自己的 k 值(有数据支撑)+ 一份未命中样本分析 + 一个"无答案问题"的拒答率。
为什么:RAG 优化最容易走进的死胡同,是只盯着最终回答调提示词——而问题其实在检索。分科考试之后,你的每一次优化都能定位到具体环节:检索不行调切分和 k,回答不行调提示词和上下文组织。
真实事故场景:回答准确率 85%,团队花两周精调提示词,涨到 87%。后来才发现检索命中率只有 60%——也就是说 40% 的问题模型根本没拿到正确资料,提示词再好也没用。先看检索,再看生成:检索命中率低于 80% 时,几乎所有精力都该花在切分/检索/k 值上,而不是提示词。
我的知识库是【描述】。请帮我设计一套 20 条的 RAG 评测集,每条包含:问题、关键事实(答案)、正确来源(在哪个章节)。要求:1) 12 条常规问题;2) 5 条「问法和文档用词不同」的问题;3) 3 条「知识库里没有答案」的问题(测拒答);4) 说明每条在测什么能力。
评测三句话:分科考试(检索命中率 + 回答准确率)、k 按拐点定(实测 3)、k 太大反而降准确率;检索命中率低于 80% 时别去调提示词。
下一节讲检索不够准时的两个补救:混合检索(字面 + 语义一起打分)和重排(先粗筛再精排)。
🔎 来源与核验· 1 条,点开核对
