人工智能实践(语言智能)
第4讲:RAG

4.4 评估方法

RAGAS 四大指标、离线与在线评估、常见故障模式的定位——让 RAG 变成一个可诊断的工程系统

为什么 RAG 评估特别难

和单模型任务不同,RAG 的输出质量受检索生成两个环节的联合影响。当回答错了,你需要知道:

  • 检索没找到相关文档?(召回问题)
  • 检索找到了但排名靠后被丢弃?(排序问题)
  • LLM 没用好上下文?(忠实度问题)
  • LLM 答得偏题?(相关性问题)

没有分解指标,工程师就只能靠经验"拍脑袋调参"。RAGAS 的核心贡献就是把 RAG 质量拆解为四个独立的、可 LLM 自动打分的指标,让每个环节都能被独立归因与改进。


RAGAS 四大指标

RAGAS(Es et al., 2024)定义了四个核心指标,分别刻画检索质量和生成质量:

指标评估什么指向哪个环节
Faithfulness(忠实度)回答中的每个声明是否都有上下文支持?生成
Answer Relevancy(回答相关性)回答是否切题?生成
Context Precision(上下文精确率)相关文档是否排在前面?检索排序
Context Recall(上下文召回率)所需信息是否都被检索到了?检索召回

Faithfulness:回答是否有凭据

Faithfulness={claims supported by context}{all claims in answer}\text{Faithfulness} = \frac{|\{\text{claims supported by context}\}|}{|\{\text{all claims in answer}\}|}

做法:LLM 先从回答中抽取所有独立声明(atomic claims),再对每条声明判断"上下文是否支持"。忠实度低 = 模型在幻觉。

Answer Relevancy:回答是否切题

从回答反向生成 n 个问题,计算这些问题与原问题的平均嵌入相似度:

AnswerRelevancy=1ni=1ncos(eqi,eqorig)\text{AnswerRelevancy} = \frac{1}{n}\sum_{i=1}^{n} \cos(e_{q_i}, e_{q_{\text{orig}}})

直觉:如果回答能导回原问题,就说明切题;如果导回了一个不同的问题,说明答非所问。

Context Precision:排名质量

按排名位置加权的相关文档比例(MAP@K 的变体):

ContextPrecision@K=1Kk=1KPrecision@kvk\text{ContextPrecision@K} = \frac{1}{K}\sum_{k=1}^{K} \text{Precision@k} \cdot v_k

其中 vk{0,1}v_k \in \{0, 1\} 是第 kk 个文档是否相关。精确率低 → 检索噪声多 → 需要 reranker。

Context Recall:召回完整性

标准答案(ground truth)中的句子被上下文覆盖的比例:

ContextRecall={GT sentences covered by context}{all GT sentences}\text{ContextRecall} = \frac{|\{\text{GT sentences covered by context}\}|}{|\{\text{all GT sentences}\}|}

召回率低 → 漏检了关键信息 → 改进切分 / 增大 Top-K / 换嵌入模型。


RAGAS 最小可运行示例

from ragas import evaluate
from ragas.metrics import (
    faithfulness, answer_relevancy,
    context_precision, context_recall,
)
from datasets import Dataset

eval_data = {
    "question":     ["Transformer 的核心创新是什么?", "..."],
    "ground_truth": ["核心创新是自注意力机制(Self-Attention)", "..."],
    "answer":       ["Transformer 引入了自注意力机制...", "..."],
    "contexts":     [["...Transformer 的核心创新是..."], ["..."]],
}

ds = Dataset.from_dict(eval_data)
results = evaluate(ds, metrics=[
    faithfulness, answer_relevancy,
    context_precision, context_recall,
])
print(results)
# {'faithfulness': 0.87, 'answer_relevancy': 0.92,
#  'context_precision': 0.78, 'context_recall': 0.85}

故障诊断矩阵

把四个指标的"高低"组合成诊断表,你可以直接定位问题:

FaithfulnessAnswer RelevancyContext PrecisionContext Recall诊断修复方向
模型在幻觉强约束 prompt / Self-RAG / 降低 temperature
答非所问改进提示模板 / 加回答要求约束
检索有噪声加 reranker / 换嵌入模型
召回不全调整 chunk_size / 增大 Top-K / Query 分解
整个系统问题先看单个 case 再判断

在诊断时,先看单个 case 的可视化(问题 + 检索上下文 + 回答 + ground truth),再看聚合指标。纯数字很容易误导——有时 F/AR/CP/CR 都在 0.8 左右,但单看会发现都卡在某一类问题上。


离线 vs 在线评估

离线评估

用固定的 test set 跑 RAGAS,适合:

  • CI/CD 回归测试(防止改了代码后指标退化)
  • 消融实验(验证某个组件是否真的有用)
  • 不同配置的 A/B 对比

关键工程实践:建议维护一个 30-100 条的金标数据集(包含人工核对过的 answer 和 ground_truth),每次改动后自动跑一遍 RAGAS。把指标变化纳入 PR review。

在线评估

生产环境中,你拿不到 ground truth,但可以监控:

在线信号反映什么
用户点"有帮助/无帮助"隐式回答质量信号
用户追问率回答不完整或不清晰
用户改写 query 率首次检索失败
引用来源点击率回答可信度
响应延迟 p50/p95/p99系统健康度

其他评估体系

除 RAGAS 外,还有几个值得关注的框架:

框架特点适用场景
ARES (Saad-Falcon et al., 2024)基于合成数据训练的 judge资源充足、追求极致评估
RGB (Chen et al., 2024)针对中文 RAG 的 Benchmark中文 RAG 标准化对比
TruLens工业级可视化框架生产环境全链路追踪
LangSmithLangChain 官方评估 + traceLangChain 生态

本节小结

核心记忆点:把 RAG 视为一个可分解诊断的工程系统,而非一个黑盒端到端模型。

  • 检索侧看 Context Precision / Recall
  • 生成侧看 Faithfulness / Answer Relevancy
  • 故障诊断矩阵 → 明确修哪个环节
  • 离线金标数据集 + 在线用户信号,两手都要抓