RAG 评估
RAG 评估把一次问答拆成检索和生成两段分别衡量,再看端到端的回答质量。只看最终答案对不对,无法知道错误出在没检索到材料、材料排序靠后,还是模型没有忠实使用材料。本文讲分层指标、评测集构造、召回失败的排查顺序和方案对比。
1. 面试核心
先记住这几条,再读正文- 分三层评估:检索层(正确材料是否被召回、排在第几),生成层(回答是否忠实于材料、是否回答了问题),端到端(答案是否正确、引用是否准确)。卡 · 分层指标
- 检索层常用 Recall@K、MRR、NDCG;生成层常用忠实度和答案相关性;它们需要“问题—相关文档—参考答案”形式的标注。
- 召回失败按链路逐段排查:文档是否入库、解析与切分是否正确、查询与文档的表达差异、检索参数与过滤条件、重排是否把它挤出去。卡 · 召回失败的排查
- 评测集要避免污染:用公开资料时,模型可能凭训练记忆答对,掩盖检索问题;要加入私有或训练截止日期之后的内容,并检查无检索时的基线。卡 · 评测集
- 比较两套方案时,用同一评测集、同一模型和参数分层对比,并考虑延迟、成本和维护成本。卡 · 分层指标
2. 分层指标
| 层 | 指标 | 含义 |
|---|---|---|
| 检索 | Recall@K | 相关文档出现在前 K 个结果中的比例 |
| 检索 | Precision@K | 前 K 个结果中相关文档的比例 |
| 检索 | MRR | 第一个相关结果排名倒数的平均值,关注排第几 |
| 检索 | NDCG@K | 考虑多个相关文档及其相关程度和位置 |
| 生成 | 忠实度 | 回答中的陈述能否在提供的材料中找到依据 |
| 生成 | 答案相关性 | 回答是否针对问题 |
| 端到端 | 答案正确率 | 与参考答案对比 |
| 端到端 | 引用正确率 | 引用的来源是否真实支持对应陈述 |
| 端到端 | 拒答正确率 | 资料中没有答案时是否正确拒答 |
忠实度和相关性一般用 LLM 评审,按“把回答拆成独立陈述,逐条检查是否被材料支持”的方式计算,比直接打总分更稳定。Ragas 等框架提供了这类指标的实现,但评审模型的结果仍需用人工标注抽样校准。
检索指标高、答案正确率低,问题在生成或上下文组装;检索指标低,先优化检索。
3. 评测集
一条评测样本包含:问题、相关文档或块的 ID、参考答案,可选标注问题类型(事实、比较、多跳、无答案)。
- 来源:真实用户问题(最有价值);领域专家编写;用模型根据文档生成问题后人工审核。
- 覆盖:不同文档类型、问题类型、难度;包含资料中没有答案的问题,用于检验拒答。
- 相关文档标注:生成问题时记录来源块;真实问题需要人工标注哪些块相关。
- 污染:如果文档是公开资料,模型可能在预训练中见过,无需检索也能答对。对策是加入私有文档或较新的内容,并运行一次“不检索”的基线:基线已经很高的题目不能说明检索有效。
- 版本:知识库更新后,评测集中的参考答案和相关文档 ID 要同步更新。
4. 召回失败的排查
- 是否入库:在索引中按文档 ID 或关键词查找,确认文档已处理且没有被权限或版本过滤掉。
- 解析是否正确:查看对应块的原文,确认表格、扫描件、特殊格式没有解析成乱码或丢失。
- 切分是否合理:答案是否被切到两个块中,或者块太大导致语义被稀释。
- 查询与文档的差异:用户用口语或缩写,文档用正式术语。可以用查询改写、同义词扩展、混合检索中的 BM25 补足。
- 检索参数:Top-K 是否太小,相似度阈值是否太高,元数据过滤是否误伤。
- 重排与截断:粗召回中有,但重排后被截掉。检查重排分数和截断阈值。
- Embedding 模型:领域术语多时,通用模型表现差,可以换模型或用领域数据微调。
每步都用同一条失败样例验证,定位后修改,再在整个评测集上回归。
5 · 面试题卡片
5.1 RAG 系统如何评测?有哪些评测维度?
出现公司:快手、阿里淘天、TCS、蚂蚁、顺丰、字节跳动
考察重点
- 检索、生成、端到端三层指标。
- 指标需要的标注和用指标定位问题段。
参考回答
分层评估。检索层用 Recall@K 看相关文档是否进入前 K 个,用 MRR 或 NDCG 看排序位置;生成层看忠实度(回答中的陈述是否有材料支持)和答案相关性,通常把回答拆成陈述后用 LLM 逐条判断;端到端看答案正确率、引用正确率,以及资料中没有答案时的拒答正确率。另外记录延迟和成本。
评测集每条包含问题、相关块 ID、参考答案和问题类型。检索指标低先优化检索,检索指标高而答案差则查生成和上下文组装。LLM 评审的结果要用人工标注抽样校准。
5.2 文档中明明有目标内容,却召回失败,如何一步步排查?
出现公司:韶音、字节跳动、阿里淘天、百度
考察重点
- 沿入库、解析、切分、查询、检索、重排的链路排查。
- 每一步的验证方法与对应修复。
相关内容:召回失败的排查、文档解析与切分、混合检索与重排序。
参考回答
按链路逐段检查。先确认文档已入库,且没有被权限、版本过滤掉;再看对应块的原文,排除解析错误,比如表格或扫描件变成乱码;然后检查切分,答案是否被拆到两个块或者块太大语义被稀释。
接着比较查询和文档的表达:口语、缩写和正式术语不一致时,用查询改写或同义词扩展,并用 BM25 补充精确匹配。再检查 Top-K、相似度阈值和过滤条件;如果粗召回中存在但最终没有,检查重排分数和截断阈值。领域术语多时考虑更换或微调 Embedding 模型。每次修改用该样例验证后,在全量评测集上回归,并把样例加入评测集。
5.3 RAG 评测集怎样构造?公开文档可能已进入模型预训练数据,这会怎样影响评测?
出现公司:安软、快手
考察重点
- 样本组成、来源和人工与模型的分工。
- 训练数据污染及无检索基线。
相关内容:评测集。
参考回答
每条样本包含问题、相关块 ID、参考答案和问题类型,覆盖事实、比较、多跳和资料中无答案的问题。来源优先用真实用户问题,再由专家编写或让模型根据文档生成问题;模型生成的问题和参考答案要人工审核,相关块标注需要人工确认。
公开文档可能已被模型在预训练中学过,模型不检索也能答对,评测会高估检索效果,也发现不了检索缺陷。对策是加入私有或训练截止日期之后的文档,并运行一次不检索的基线,只有在基线答不对的题上,检索带来的提升才有说服力。
5.4 两个同事各开发了一套 RAG,你作为负责人如何选择?
出现公司:阿里云、阿里
考察重点
- 相同条件下的分层对比。
- 效果之外的延迟、成本、可维护性。
参考回答
先统一比较条件:同一份评测集(含业务真实问题和无答案问题),同一生成模型和参数,多次运行。分层对比检索指标(Recall@K、MRR)、生成指标(忠实度、相关性)和端到端指标(答案正确率、引用正确率、拒答正确率),并按问题类型分别查看,避免总分掩盖某类问题的明显差距。
效果之外比较 P95 延迟、单次查询成本、索引构建和更新成本、对文档格式的适应性,以及代码可维护性和监控能力。效果相近时选更简单、成本更低的方案;也可以把两者在不同问题类型上的优势组合起来,再用同一评测集验证。