← 返回闯关手册
ArchSynapse AI · 2026-07-29 · ★★★★☆ 精读(RAG 评测的诊断表)

《Agent 评测实战》19 | 检索与事实性评测:groundedness、faithfulness 与幻觉检测

为什么值得读

RAG 型 Agent 投诉最集中的两件事——幻觉和答非所问——这篇拆成可测的 RAGAS 2+2 指标,附「哪个低修哪段」的诊断表、faithfulness≠真相的致命细节、多跳检索链评测。藏书中 RAG 评测的最完整操作指南。

核心内容速览

适合谁 · 怎么用

先修:了解 RAG 基本结构即可。所有 RAG / 知识库问答 / 「查了再答」型 Agent 团队。先算四个指标定位病灶,再决定修检索还是修生成。

闯关自测

先合上原文在心里作答,再点开对照。全对 = 本篇真正通关。

Q1 RAGAS 四个核心指标各测什么?

Context Recall(该找的找全没)和 Context Precision(找回的相关吗)测检索;Faithfulness(每条结论有证据吗)和 Answer Relevancy(答到点子上吗)测生成。

Q2 为什么 faithfulness 高不等于回答正确?

faithfulness 只查「忠不忠于检索到的证据」,不查证据本身对不对——忠实复述一份错误文档照样高分。要四指标一起看,有 ground truth 时加事实正确性兜底。

Q3 Faithfulness 0.95、Recall 0.4,该修哪段?

修检索:模型忠实地基于残缺证据作答,根子是检索没找全——这时调生成的 prompt 一点用都没有。

以下为原文全文

上方为本站原创导读,下方为原文完整收录,便于对照阅读。

这一讲攻一个面向大量 RAG 型 Agent 的高频刚需——检索与事实性。为什么单列一讲?因为相当比例的 Agent 是"先检索、再回答"的:查知识库、翻文档、搜网页,拿到资料再组织答案。而生产里对这类 Agent 投诉最集中的两件事,恰恰是:它一本正经地胡说(幻觉)、以及答非所问。这一讲教你把"幻觉""答不对"从模糊的抱怨,拆成可测的指标,并精确定位——到底是检索的锅,还是生成的锅。

(提醒:即便你的主 Agent 不是问答型,只要它某一步要"查点什么再据此行动"——比如退款 Agent 里"查退款政策再判断"那一步——这一讲的方法就用得上。)

一、RAG 型 Agent 是两段式:检索 + 生成

要评它,先看清它的结构。一个 RAG 型 Agent 干活分两段:检索(retrieve)——根据用户问题,去知识库/文档里找相关资料,在 Agent 里这往往是一次工具调用;生成(generate)——基于检索到的资料,组织出回答。

两段各有各的病,而且会互相甩锅:检索错了(没找到该找的、或找回一堆无关的)→ 生成得再好也是巧妇难为无米之炊;检索对了,但生成瞎编(不忠于找到的证据,自己脑补)→ 这就是幻觉。

所以,评这类 Agent 的第一原则是:分两段评。把"这个 RAG 不准"这句笼统的话,拆成"检索准不准"和"生成忠不忠实"两个独立问题。

二、RAGAS 四件套:两个测检索,两个测生成

业界有一套广泛使用的指标框架叫 RAGAS(它其实提供了十几个指标,这里说的是最经典的四个核心指标),正好两两对应上面两段。记住这个"2+2"结构,你就抓住了检索评测的骨架。

测检索的两个:

测生成的两个:

指标测哪一段回答什么问题
上下文召回 Context Recall检索该找的找全了吗(漏没漏)?
上下文精确 Context Precision检索找回的相关吗、排序对吗(噪声多不多)?
忠实度 Faithfulness / groundedness生成每条结论有证据支撑吗(有没有幻觉)?
答案相关性 Answer Relevancy生成答到点子上了吗(对不对题)?

举个知识库问答的例子:用户问"你们的会员年费多少、怎么退"。检索段要找回"年费价格"和"退费政策"两份资料(召回)、且别混进无关的"积分规则"(精确);生成段要只依据找到的资料作答(忠实,不能脑补一个价格)、且把年费和退费都答了(相关,别只答一半)。

三、一个致命的细节:faithfulness ≠ 真相

忠实度(faithfulness)只检查"回答忠不忠于检索到的证据",不检查"证据本身对不对"。

这意味着一个危险的情形:如果检索器返回了一份错误的文档,而模型忠实地复述了它——faithfulness 会很高,但答案是错的。模型没"撒谎"(它老老实实用了给它的资料),可它被喂了错料。

所以,高 faithfulness ≠ 回答正确。光盯 faithfulness,你会漏掉"检索错了但忠实复述"这一整类错误。这恰恰是为什么四个指标要一起看:

如果你的任务有 ground truth(标准答案),最好再加一个最终事实正确性(回答和标准答案比对),作为"证据对不对"的兜底——因为 RAGAS 那四个指标里,没有一个直接保证"回答在真实世界里是对的"。

四、用四个指标定位:检索的锅,还是生成的锅

这是这一讲最实用的产出。有了"2+2",你就能把"RAG 不准"精确定位到具体环节,对症下药:

症状说明是谁的问题怎么修
Context Recall 低检索器漏了该找的修检索:索引覆盖、召回策略、query 改写、多跳检索
Context Precision 低检索器噪声多/排序差修检索:重排序、过滤、chunk 切分
Faithfulness 低生成器瞎编、忽略证据修生成:prompt 约束"只用给定证据"、换更强模型
Answer Relevancy 低生成器答非所问修生成:改 prompt、澄清意图

有了这张表,你团队里就不会再有"RAG 感觉不太准,调调 prompt 试试"这种拍脑袋了——先算四个指标,看是哪个低,再决定去修检索还是修生成。很多团队一遇到幻觉就猛调生成的 prompt,其实根因是 context recall 太低(压根没检索到)——那怎么调 prompt 都没用。

四个数要连起来读。举例:某次问答,Context Recall 0.9、Context Precision 0.5、Faithfulness 0.95、Answer Relevancy 0.9。怎么解?该找的基本找全了、生成也忠实也对题——唯一短板是 Precision 0.5:检索回来一半是噪声。这次虽答对了,但一堆噪声塞进上下文,既费 token、又随时可能在别的问题上把模型带偏,所以结论明确:去修检索的排序/过滤,别动生成。反过来,若是 Recall 0.4、Faithfulness 0.95——那是"忠实地基于残缺证据作答",根子在检索没找全,你调生成的 prompt 一点用都没有。单看一个指标会误诊,四个一起读才知道往哪使劲。

五、怎么算这些指标,以及接进流水线

这些指标大多是用 LLM-as-a-Judge 算的。以 faithfulness 为例,典型做法是:把回答拆成若干条独立断言,再逐条问裁判"这一条能从检索到的上下文里推出来吗?"——能推出的算"忠实",推不出的就是幻觉。

举个具体的。用户问会员政策,Agent 答:"年费 199 元,30 天内可无理由退款,退款 3 个工作日到账。" 拆成三条断言:① 年费 199 元;② 30 天内可无理由退款;③ 退款 3 个工作日到账。逐条比对检索到的政策文档:①② 文档里都有 → 忠实;③ 文档里根本没提到账时间 → 这条是模型脑补的。于是 faithfulness = 2/3 ≈ 0.67,而且你精确定位到了那条编造的结论。这种"拆断言、逐条验"的做法,比笼统问"这回答有没有幻觉"可靠得多。

所以——LLM 裁判的一切(偏差、Rubric、校准)在这里全部适用:这些指标不是绝对真理,用之前要拿人工校准(人机一致率),否则你只是把"幻觉"换成了"裁判觉得像幻觉"。

工程上:

建检索评测集,比普通问答评测集多标一样东西。除了"问题 + 标准答案",你还得标出"为回答这个问题,应该检索到哪几条关键资料"(业界叫 golden context)。有了它,你才算得出 context recall 和 precision。这份标注是检索评测的主要成本,但也是你能把"检索"和"生成"分开评的前提——没有它,你就只能评最终答案对不对,又退回黑箱了。

别只报平均 faithfulness。一个"平均忠实度 0.95"可能掩盖着"5% 的回答里塞着离谱的幻觉"——而在事实性上,偶发的严重幻觉,往往比普遍的轻微不准更伤用户信任。所以对幻觉,除了看均值,更要盯尾部:有多少条 faithfulness 特别低、都错在哪类问题上。高风险场景里,甚至该用"可靠性视角"(有没有偶发的严重编造)来卡,而不是满足于一个好看的平均分。

六、Agent 场景的特殊性

上面的框架源自"一问一答"的 RAG,但 Agent 场景更复杂,有三点特殊:

小结

思考题

  1. 你的 RAG 型 Agent(或某个"查了再答"的步骤)出现"不准"时,你现在能分清是检索的锅还是生成的锅吗?先把四个指标算出来,看是哪个低。
  2. 自查 faithfulness 陷阱:你有没有可能"忠实地复述了错误检索结果"却以为答案没问题?你的评测里,有没有一个"证据本身对不对"的兜底检查?
  3. 你的 Agent 是多跳检索吗?如果是,你评的是"单次检索质量",还是"多轮下来最终有没有凑齐该有的证据"?
原文出处:公众号「ArchSynapse AI」· 2026-07-29。本文全文仅用于个人学习交流,版权归原作者及发布方所有;如原作者认为不妥,请联系删除。