深色模式
04 · 评估与常见坑:RAG 为什么答不好
学完你能说出:
- RAG 要分两段评估:检索得准不准、回答得好不好,各看什么指标。
- 答错了怎么一步步排查:先查资料在不在 → 再查检索到没到 → 最后查模型用没用对。
- 5 个常见的坑和对应的解决办法。
先看地图
RAG 模块的最后一篇。前面讲了怎么搭(01–03),这里讲怎么判断搭得好不好,坏了怎么修。面试里「你的 RAG 效果怎么评估」几乎必问。
本篇讲 3 个点:① 评估分两段 → ② 排查顺序 → ③ 常见的坑。
一句话本质
RAG 答不好,要么是没找到(检索问题),要么是找到了没用好(生成问题)。评估和排查都要把这两段分开看。
生活类比:学生考试答错了
学生答错一道开卷题,原因可能是:
- 书里根本没有这个知识点(资料缺失);
- 书里有,但没翻到那一页(检索失败);
- 翻到了,但看错了、或者没照着写(生成失败)。
三种原因的补救办法完全不同:补教材、教他查目录、教他认真读题。先定位原因,再对症下药。
一步步看
1. 先准备一套测试题
评估的前提是有一份测试集:比如 50 个真实问题,每题标好「标准答案」和「答案在哪一块」。没有测试集,所有「效果变好了」都是凭感觉。
2. 检索阶段:看找没找到
| 指标 | 意思 | 例子 |
|---|---|---|
| 命中率 / 召回率@K | 正确的那块是否出现在前 K 条里 | 50 题里有 40 题,正确块进了前 5 → 召回率@5 = 80% |
| MRR(平均倒数排名) | 正确块排第几:第 1 名得 1 分,第 2 名得 1/2,第 3 名得 1/3…… 再取平均 | 排得越靠前,分越高 |
3. 生成阶段:看用没用好
| 指标 | 问的是 | 例子 |
|---|---|---|
| 忠实度(Faithfulness) | 回答里的每句话,资料里都有依据吗? | 资料写 5 天,回答写 7 天 → 不忠实 |
| 答案相关性 | 回答的是用户问的问题吗? | 问年假,答了病假 → 不相关 |
| 正确性 | 和标准答案一致吗? | 需要标准答案 |
这些可以人工打分,也可以让另一个大模型当裁判打分(LLM-as-a-Judge),但裁判模型也会出错,要抽查。
4. 排查顺序:从前往后,一段一段排除
答错了
↓ ① 资料库里有这个答案吗? 没有 → 补资料
↓ ② 正确的块被检索到了吗? 没有 → 调切块 / 混合检索 / 改写问题
↓ ③ 检索到了,排在前 K 里吗? 没有 → 加重排 / 调 K
↓ ④ 给了模型,它答对了吗? 没有 → 改提示词 / 换模型一定从前往后查:资料都没有,调提示词是白费功夫。
为什么这么设计
为什么检索和生成要分开评估?
- 问题:只看最终答案对不对,答错了不知道是「没找到」还是「没用好」,只能乱调。
- 方案:检索看召回率、MRR;生成看忠实度、相关性。
- 好处:一眼看出问题出在哪一段,改动有的放矢。
一句话答法
RAG 是「检索 + 生成」两段,只看最终结果无法定位问题;分段评估,才能知道该优化检索还是生成。
为什么特别看重「忠实度」?
- 问题:RAG 的卖点是「有依据」。模型在资料之外自由发挥,即使碰巧答对,也失去了可信度。
- 方案:逐句检查回答能否在资料里找到依据。
- 好处:衡量的正是 RAG 最核心的价值:不编。
一句话答法
RAG 的价值是答案有据可查,忠实度衡量的就是「有没有编」;不忠实的回答即使碰巧对,也不可靠。
5 个常见的坑
| 坑 | 表现 | 解决 |
|---|---|---|
| 解析质量差 | PDF 乱码、表格错位,检索结果读不懂 | 换解析工具;表格单独处理 |
| 切块切断关键信息 | 「入职满一年」和「5 天」被分到两块 | 按结构切、加重叠(见 02) |
| 问题和文档说法不一样 | 用户说「请假」,文档写「休假申请」;或者问题太口语 | 混合检索;用模型先改写问题再检索 |
| 多块资料互相矛盾 | 新旧两版制度都被检索到 | 元数据过滤(只要最新版);按时间优先 |
| 问题需要综合很多块 | 「各部门年假规定有什么不同」 | 加大 K、分步检索,或先拆成子问题(Agent 的思路) |
英文术语拆解
| 术语 | 拆开看 | 一句话意思 |
|---|---|---|
| Evaluation | e 出 + value 价值 + -ation | 评估 |
| Test Set | test 测试 + set 集合 | 测试集:带标准答案的问题集合 |
| Recall@K | recall 召回 + at K | 前 K 条里有没有正确答案 |
| MRR | Mean 平均 + Reciprocal 倒数 + Rank 排名 | 正确答案名次倒数的平均值 |
| Faithfulness | faithful 忠实的 + -ness | 忠实度:回答是否都有资料依据 |
| LLM-as-a-Judge | 大模型 + as 作为 + judge 裁判 | 让大模型给回答打分 |
| Query Rewriting | query 查询 + rewriting 改写 | 检索前先把问题改写得更清楚 |
面试怎么问
Q:你的 RAG 项目怎么评估效果?
先构建测试集(真实问题 + 标准答案 + 相关文档块)。检索层看 Recall@K 和 MRR,生成层看忠实度、答案相关性和正确性;可以人工评,也可以用 LLM 当裁判再抽检。每次改动(换切块、换模型、加重排)都跑同一个测试集对比。
Q:RAG 回答不准,你怎么排查?
从前往后:先确认知识库里有答案;再看正确的块有没有被检索到、排名如何;最后看模型拿到正确资料后有没有答对。分别对应补资料、优化切块和检索(混合检索、重排、问题改写)、优化提示词或模型。
Q:检索到的资料相互矛盾怎么办?
入库时带上版本、日期等元数据,检索时过滤或按时间排序;提示词里要求模型以最新资料为准,并在有冲突时明确指出。
容易混的地方
- 答对了 ≠ 系统好:碰巧答对、但资料里没有依据的回答,换个问题就会出错。
- 一次测试不算数:要有固定的测试集,每次改动都在同一批题上对比。
- 大模型裁判不是标准答案:LLM-as-a-Judge 会有偏差,要抽查。
和其他知识的连接
- ← 来自 切块与入库、检索与重排:排查时对应前两段。
- → 影响 Agent 安全与评估:Agent 的评估是同样的思路,只是步骤更多。
- 类比 SQL 执行与优化:都是「先定位慢 / 错在哪一步,再针对性优化」。
自测 3 问
Q1:RAG 答错的三类原因是什么?
点开看答案
① 资料库里没有答案;② 有答案但没检索到(或排名太靠后);③ 检索到了但模型没用好。分别对应:补资料、优化检索、优化提示词或模型。
Q2:50 个测试问题中,有 40 个的正确块出现在前 5 条里,召回率@5 是多少?
点开看答案
40 / 50 = 80%。
Q3:什么是忠实度?为什么它对 RAG 特别重要?
点开看答案
回答里的每句话是否都能在给定资料里找到依据。RAG 的核心价值就是「有据可查、不编」,所以忠实度衡量的正是 RAG 最重要的能力。
✅ 验收清单
- 能用「学生开卷答错」类比,说出 RAG 答错的三类原因
- 能说出检索阶段的 2 个指标、生成阶段的 2 个指标,并能算召回率@K
- 能按「资料 → 检索 → 排名 → 生成」的顺序讲出排查流程
- 能说出 5 个常见坑中的至少 3 个及其解决办法
- 能说清为什么评估必须有固定的测试集
下一步该懂什么
- RAG 只会「查完再答」。要让 AI 自己决定查什么、查几次、还能调用其他工具?→ Agent 是什么