← 返回目录
ap4.4实操⏱ 约 10 分钟

检索质量评测:回答对了,不代表检索对了

实测 top-1 到 top-5 的拐点——以及为什么 k 越大不一定越好

🔎 最后验证 2026-08📚 来源:本节 top-k 对比为 ECS 实测(2026-08,deepseek-chat,10 条评测问题,脚本与原始输出见本节代码)🧰 DeepSeek API、Python
为什么学这个

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

  1. k=3 起步;
  2. 画出 k=1/3/5/8 的两条曲线(检索命中率、回答准确率);
  3. 找检索命中率的平台期起点——那就是你的 k(再大只是浪费);
  4. 如果回答准确率在平台期之前就开始降,说明你的块太大或噪声太多,回 4.2 调切分。

还该测的两件事

① 未命中样本的分布:那 3 条没检索到的,有什么共性?(问法太口语?文档里根本没有?块被切碎了?)——共性就是你的下一个优化点

② "文档里根本没有"的问题:评测集里要故意放 2-3 条知识库里没答案的问题,看系统会不会诚实说"没查到"(ap4.1 的 B 组能力)。这类问题在真实用户里占比不低,而很多 RAG 系统会强行用最相似的块编一个答案。

🔧 动手做:画出你的 k 曲线(12 分钟)

  1. 跑本节代码 rag_pipeline.py 的实验二,看 top-1/3/5 的两条数据。
  2. 给你的评测集补上"正确来源"列(第三列),这样才能算检索命中率。
  3. 跑 k=1/3/5/8,记下两条曲线——你的拐点在哪?
  4. 加 3 条"知识库里没有答案"的问题,看你的系统是拒答还是硬答。硬答的话,回 ap4.1 把"资料里没有必须说没查到"写进提示词。
  5. 分析未命中样本:它们有共性吗?

做到这里你应该有:你自己的 k 值(有数据支撑)+ 一份未命中样本分析 + 一个"无答案问题"的拒答率。

为什么:RAG 优化最容易走进的死胡同,是只盯着最终回答调提示词——而问题其实在检索。分科考试之后,你的每一次优化都能定位到具体环节:检索不行调切分和 k,回答不行调提示词和上下文组织

❓ 测验
实测中 k 从 3 加到 5,检索命中率不变(7/10),回答准确率反而从 9/10 降到 8/10。为什么?
⚠️ 避坑别用「回答准确率」一个指标来指导 RAG 优化

真实事故场景:回答准确率 85%,团队花两周精调提示词,涨到 87%。后来才发现检索命中率只有 60%——也就是说 40% 的问题模型根本没拿到正确资料,提示词再好也没用。先看检索,再看生成:检索命中率低于 80% 时,几乎所有精力都该花在切分/检索/k 值上,而不是提示词。

🤖 让 AI 帮你设计 RAG 评测集
我的知识库是【描述】。请帮我设计一套 20 条的 RAG 评测集,每条包含:问题、关键事实(答案)、正确来源(在哪个章节)。要求:1) 12 条常规问题;2) 5 条「问法和文档用词不同」的问题;3) 3 条「知识库里没有答案」的问题(测拒答);4) 说明每条在测什么能力。
✅ 小结

评测三句话:分科考试(检索命中率 + 回答准确率)、k 按拐点定(实测 3)、k 太大反而降准确率;检索命中率低于 80% 时别去调提示词。

下一节讲检索不够准时的两个补救:混合检索(字面 + 语义一起打分)和重排(先粗筛再精排)。

下一节 → 重排与混合检索:给检索加第二道判断
🔎 来源与核验· 1 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「按行切分下 top-k 实测:k=1 检索 6/10、回答 8/10;k=3 检索 7/10、回答 9/10;k=5 检索 7/10、回答 8/10」
📚 ECS 实测 rag_pipeline.py 实验二(2026-08,deepseek-chat)✓ 已核验 2026-08
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · ap4.5
混合检索与重排:给检索加第二道判断
继续读下一节 →