考察点
RAG 面试必问指标定义,很多人只会背名词,面试官一追问分子分母就露馅。这道题看候选人能不能把每个指标的口径讲精确,以及知不知道指标背后标注成本从哪来。追问常往「召回率怎么标数据」「忠实度怎么自动化算」「检索好但答案差怎么定位」走。
参考答案
检索侧:召回率的两种口径
召回率(Recall@k)最常见的定义是:前 k 条检索结果中命中的相关文档数,除以该查询的全部相关文档数。分子是「检出来的相关文档」,分母是「这个查询本来有多少相关文档」。
| 指标 | 分子 | 分母 |
|---|---|---|
| Recall@k | 前 k 条中相关的文档数 | 该查询全部相关文档数 |
| Hit Rate@k | 前 k 条至少命中 1 条的查询数 | 总查询数 |
| MRR | 首个相关结果排名的倒数之和 | 总查询数 |
| nDCG@k | 前 k 条的折损相关度得分 | 理想排序的折损得分 |
实际工程里更常用 Hit Rate@k 这个变体:只要前 k 条里有一条相关文档就算命中,分子是命中的查询数,分母是总查询数。因为 RAG 场景大多只需要「把正确答案所在的 chunk 送进上下文」,命中一条就够用,而且逐查询标注「全部相关文档」成本极高,很多场景根本标不全——这时严格口径的 Recall 分母拿不到,Hit Rate 是务实选择。
MRR 关注第一个相关结果排在第几位,适合 rerank 效果评估;nDCG 考虑排序位置和多级相关性,标注需要给每个文档打相关度等级,成本更高,一般在精调检索排序时才上。
生成侧:忠实度
忠实度(Faithfulness)衡量生成的答案是否被检索到的上下文支撑,是幻觉检测的核心指标。RAGAS 框架的定义:把答案拆成若干原子陈述,逐条判断该陈述能否从上下文中推出,分子是「能被上下文支撑的陈述数」,分母是「答案的总陈述数」。
举个例子:答案有三句话,两句能在检索内容里找到依据,一句是模型自己编的,忠实度就是 2/3。自动化实现通常用 LLM 做陈述拆分加 NLI 式的蕴含判断,temperature 设 0。
配套的还有 Answer Relevancy(答案有没有答非所问,常用反向生成问题再算相似度的办法)和 Context Precision/Recall(上下文里相关 chunk 的浓度和覆盖度,用来诊断「检索回来的东西有没有用」)。
定位问题靠指标组合
单个指标价值有限,组合起来才能定位问题。一个典型排查路径:Hit Rate 低,问题在检索,去查 embedding 模型、chunk 切分、query 改写;Hit Rate 高但忠实度低,说明材料送进去了但模型没用好,去查 prompt 里「严格依据上下文」的约束、上下文长度是否超限、是否有干扰 chunk;忠实度高但 Answer Relevancy 低,说明答非所问,问题在问题理解或指令遵循。这套「检索看命中、生成看忠实、整体看相关」的三段式定位法,是 RAG 调优的基本功。
标注成本要单独说:检索指标的标注难点在于穷举相关文档,实操里常用查询改写加多路检索合并候选、再人工判定池化文档的相关性,或者用点击行为日志当弱标注。忠实度基本可以全自动化,但建议抽样人工校验自动判定本身的准确率。
可能的追问
- Recall@k 和 Hit Rate@k 什么场景用哪个? 一个查询有多个独立相关文档、且都需要召回时用 Recall(比如法规检索);只要命中一条就够的问答场景用 Hit Rate。标不全全部相关文档时,Recall 的分母不可靠,老老实实用 Hit Rate。
- 忠实度高就等于没幻觉吗? 不等于。忠实度只管「答案和上下文一致」,如果检索回来的上下文本身就是错的,答案错得再忠实也是错答案。所以还要配合答案正确性(对标准答案)指标。
- 线上怎么低成本监控忠实度? 全量跑 LLM 判定太贵,按 1%-5% 比例抽样跑,重点抽点踩、长答案、低检索分数的会话,这些是高危样本。