检索增强评测
先说结论
RAG 评测是对检索增强生成系统的检索质量和生成质量进行量化评估,核心目标是回答"检索到的内容是否相关"和"生成的回答是否忠实于检索内容且切题"。
QUESTION 面试高频:RAG 系统应该评测哪些维度? RAG 评测需要覆盖检索和生成两个环节的至少四个核心维度:上下文精确度(Context Precision,检索结果中相关内容的排名)、上下文召回率(Context Recall,检索是否覆盖了回答所需信息)、答案忠实度(Faithfulness,回答是否忠实于检索上下文)、答案相关性(Answer Relevancy,回答是否切题)。
RAG 评测框架对比
| 框架 | 核心特点 | 评测方式 | 开源 |
|---|---|---|---|
| RAGAS | 最流行的 RAG 评测框架 | LLM 辅助 + 自动指标 | 是 |
| TruLens | RAG Triad 三维度评估 | LLM 辅助 + 可视化 | 是 |
| DeepEval | 多维度 LLM 评估框架 | LLM-as-a-Judge | 是 |
| ARES | 自动化 RAG 评测 | 预测驱动 + 少量标注 | 是 |
| MLflow LLM Evaluate | 集成在 MLflow 中 | 多维度评估 | 是 |
核心评测指标
RAGAS 框架指标体系
QUESTION 面试高频:RAGAS 的四个核心指标分别是什么?
| 指标 | 衡量内容 | 计算方式 | 范围 |
|---|---|---|---|
| Faithfulness(忠实度) | 回答是否忠实于检索上下文 | 被上下文支持的声明数 / 总声明数 | [0, 1] |
| Answer Relevancy(答案相关性) | 回答是否切题 | 回答与问题的语义相关性 | [0, 1] |
| Context Precision(上下文精确度) | 检索内容中相关部分排名是否靠前 | 相关 chunk 在检索结果中的位置 | [0, 1] |
| Context Recall(上下文召回率) | 检索内容是否覆盖了回答所需信息 | 回答中的信息在上下文中的覆盖比例 | [0, 1] |
Faithfulness 计算详解
QUESTION 面试高频:Faithfulness 是如何计算的?
-
声明分解(Claim Decomposition):将模型生成的回答拆分为一组原子声明
- 例如:"张三毕业于清华大学计算机系,2020年入职" 拆分为:
- "张三毕业于清华大学"
- "张三的专业是计算机"
- "张三2020年入职"
- 例如:"张三毕业于清华大学计算机系,2020年入职" 拆分为:
-
逐条验证(Claim Verification):对每个原子声明,检查是否可以从检索上下文中推断出来
-
计算得分:
Context Precision 计算详解
衡量相关文档是否排名靠前——理想的检索系统应该将最相关的文档排在最前面。
Answer Relevancy 计算详解
通过用 LLM 从回答中"反向生成"问题,然后计算生成问题与原始问题的语义相似度:
其中 是嵌入函数, 是从回答生成的第 个问题, 是原始问题。
TruLens RAG Triad
TruLens 提出三个核心评估维度(Triad):
| 维度 | 检查内容 | 对应失败模式 |
|---|---|---|
| Context Relevance | 检索到的上下文是否与问题相关 | 检索了不相关的内容 |
| Groundedness | 回答中的每个声明是否有上下文支持 | 幻觉(编造上下文外的内容) |
| Answer Relevance | 最终回答是否真正回答了用户问题 | 答非所问 |
检索环节评测
检索质量指标
| 指标 | 公式 | 说明 |
|---|---|---|
| Precision@K | Top-K 中有多少是相关的 | |
| Recall@K | 所有相关文档被找到了多少 | |
| MRR | 第一个相关文档的排名倒数均值 | |
| nDCG@K | 考虑位置的归一化增益 | |
| Hit Rate | 有多少查询至少命中一个相关文档 | 简单但有价值 |
QUESTION 面试高频:如何评测检索质量? 构建标注数据集(query, relevant_docs),然后计算 Precision@K、Recall@K、MRR 和 nDCG@K。关键是标注成本——可以用 LLM 辅助标注,但必须人工抽检验证。实践中通常先构建 100-500 个 query 的标注集,再逐步扩大。
生成环节评测
生成质量指标
| 指标 | 说明 | 评估方式 |
|---|---|---|
| Faithfulness | 回答是否忠实于上下文 | RAGAS 声明分解 |
| Answer Correctness | 回答是否事实正确(需参考答案) | 与 golden answer 对比 |
| Answer Relevancy | 回答是否切题 | 语义相似度 |
| 无毒性 | 回答是否包含有害内容 | 分类器 + LLM 判断 |
幻觉检测方法
| 方法 | 原理 | 优缺点 |
|---|---|---|
| SelfCheckGPT | 多次采样检查一致性 | 无需外部知识,但漏检"自信的错误" |
| FactScore | 拆分为原子事实逐条验证 | 粒度细,但依赖可靠知识源 |
| NLI 判断 | 用蕴含模型判断上下文是否蕴含生成内容 | 速度快,但 NLI 模型精度有限 |
| LLM-as-a-Judge | 用强模型评估忠实度 | 灵活,但裁判模型可能引入偏差 |
端到端评测
评测数据集构建
| 数据来源 | 说明 | 成本 |
|---|---|---|
| 人工标注 | 专家编写 (query, context, answer) 三元组 | 高 |
| LLM 合成 | 用 GPT-4 从文档生成问答对 | 中 |
| 真实日志 | 从线上用户查询中采样 | 低 |
| 基准数据集 | MS MARCO, Natural Questions 等 | 免费 |
评测流程
1. 准备评测集:{query, golden_context, golden_answer}
2. 运行 RAG 管线:query → 检索 → 生成
3. 计算指标:
- 检索指标:检索结果 vs golden_context
- 生成指标:生成回答 vs golden_answer
- 忠实度:生成回答 vs 实际检索上下文
4. 分析瓶颈:是检索问题还是生成问题?
5. 针对性优化
设计时真正要权衡什么
| 取舍 | 说明 |
|---|---|
| 自动评测 vs 人工评测 | 自动评测覆盖面广但精度有限,人工评测精确但成本高 |
| 合成数据 vs 真实数据 | 合成数据构建快但分布偏差,真实数据质量高但收集慢 |
| LLM-as-a-Judge 偏差 | 裁判模型偏好更长、更格式化的回答 |
| 离线评测 vs 在线评测 | 离线评测可控但与真实场景有差距,在线评测真实但干扰多 |
如果要对外讲,可以怎么概括
"RAG 评测需要同时覆盖检索和生成两个环节。在检索端,我关注 Context Precision 和 Context Recall,前者衡量相关文档是否排名靠前,后者衡量检索是否覆盖了回答所需的所有信息。在生成端,Faithfulness 是最核心的指标——通过将回答分解为原子声明后逐条验证是否有上下文支持。实践中我使用 RAGAS 框架进行自动化评测,同时用 TruLens 的 RAG Triad(Context Relevance、Groundedness、Answer Relevance)进行交叉验证。关键是先定位瓶颈——如果 Context Recall 低说明检索不够,如果 Faithfulness 低说明生成在幻觉,然后针对性优化。"
最后记几条
- RAGAS 四指标:Faithfulness、Answer Relevancy、Context Precision、Context Recall
- Faithfulness = 被支持的声明数 / 总声明数——核心幻觉检测方法
- 评测先行:先建立评测管线,再做任何优化,否则是盲人摸象
- 定位瓶颈:检索问题 vs 生成问题,针对性优化
- LLM-as-a-Judge 有偏差:偏好更长更格式化的回答,需人工抽检
参考资料
- Es, S. et al. "RAGAS: Automated Evaluation of Retrieval Augmented Generation" (AAAI 2024)
- TruLens RAG Triad: https://www.trulens.org/
- ARES: "Automated Evaluation of Retrieval-Augmented Generation" (2024)
- Saad-Falcon, J. et al. "ARES: An Automated Evaluation Framework for RAG"