AI 评测系列(04):RAG 评测——RAGAS 四指标实战与一个反直觉发现

RAGAS 四个指标

RAGAS(RAG Assessment)是专门为 RAG 系统设计的评测框架,四个指标各自衡量 RAG 流水线的不同环节:

sql 复制代码
Faithfulness(忠实度)
  → 答案有没有编造上下文里没有的信息?
  → 低分 = 幻觉风险,模型在"脑补"而不是"检索后生成"
  → 计算:把答案拆成断言,逐条检查是否在上下文里有支撑

Answer Relevancy(答案相关性)
  → 答案有没有回答用户的问题?
  → 低分 = 答案跑题或过于模糊
  → 计算:从答案反向生成问题,与原问题计算相似度

Context Precision(上下文精确率)
  → 检索到的内容里,有多少是有用的?
  → 低分 = 检索引入了大量噪音,稀释了有用信息
  → 计算:每个检索到的 chunk,判断对生成答案是否有贡献

Context Recall(上下文召回率)
  → 生成正确答案所需的信息,有多少被检索到了?
  → 低分 = 检索遗漏了关键信息,答案不完整
  → 计算:把 ground_truth 拆成断言,逐条检查是否在上下文里

四个指标覆盖了 RAG 的两个核心模块:Retrieval(检索)对应 Context Precision + Context Recall,Generation(生成)对应 Faithfulness + Answer Relevancy。


实验设计

知识库内容: Python 开发规范文档(命名规范、异常处理、性能优化、测试、日志),8 个测试问题 + ground_truth。

两个版本对比:

css 复制代码
Version A(原始):
  原始企业文档,含会议纪要、草稿标记、文件引用、历史版本说明
  典型企业知识库的"真实状态"

Version B(清洗后):
  同一内容,经过知识蒸馏处理:
  → 去除无关元数据(会议时间、作者信息、版本历史)
  → 结构化为规则列表格式
  → 去掉感叹性语言和重复解释
  → 专注核心规则内容

运行结果

css 复制代码
RAGAS Evaluation Results
──────────────────────────────────────────────────────────────────────
Metric                    Version A (raw)  Version B (clean)   Delta
──────────────────────── ────────────────  ─────────────────  ──────
Faithfulness                        1.000              1.000  +0.000
Answer Relevancy                    0.732              0.721  -0.011
Context Precision                   1.000              1.000  +0.000
Context Recall                      1.000              1.000  +0.000
──────────────────────── ────────────────  ─────────────────  ──────
Average                             0.933              0.930  -0.003

预期是清洗版本得分更高:噪音少,检索更准确。

实际两个版本几乎没有差异。不是 Bug,是值得分析的发现。


为什么两个版本得分相同

原因 1:Context Precision = 1.0 的真正含义

Context Precision 满分说明"检索到的所有 chunk 都对生成答案有贡献"。但这个指标由 LLM 判断,而 LLM 倾向于找到任何借口认为一个 chunk"有用"------即使原始文档里有会议纪要,只要最后一段包含了规范内容,LLM 就会认为这个 chunk 是有贡献的。

RAGAS 的 Context Precision 测量的是 LLM 认为有用的比例,不是客观上无噪音的比例。

原因 2:小规模知识库,文档数量有限

这个实验只有 5 份文档。检索 top-3 时,5 份里取 3 份,几乎所有包含答案的 chunk 都会被检索到,Context Recall 自然接近满分。

扩展到 100 份文档,相似主题的文档竞争,Recall 才会分化。

原因 3:测试集问题过于直接

8 个问题都是直接问规范("命名风格是什么"、"slots 有什么作用"),答案在单个 chunk 里就能找到。这类问题用原始文档和清洗文档都能正确回答。

需要多跳推理的问题("结合异常处理和日志规范,如何设计一个故障诊断函数")才会放大文档质量差异。


RAGAS 在什么场景下能区分文档质量

真实企业 RAG 系统中,以下情况会导致 RAGAS 分数出现明显分化:

场景 影响的指标 预期差距
知识库 > 1000 文档,噪音文档多 Context Precision ↓ 0.3-0.5 分
答案需要跨文档推理 Context Recall ↓ 0.2-0.4 分
原始文档含幻觉式描述 Faithfulness ↓ 0.1-0.3 分
文档语言与问题语言不匹配 Answer Relevancy ↓ 0.1-0.2 分
Chunk 大小不当(过大/过小) Context Precision ↓ 0.2-0.5 分

使用 RAGAS 的正确方式: 先用小测试集建立 Baseline(不要期望看到大差距),再在真实生产流量上做采样评测,RAGAS 的价值在于持续监控质量变化,而不是单次比较得出绝对结论。


RAGAS 的常见误解

误解 1:RAGAS 分数高 = RAG 系统好

Context Precision 和 Context Recall 满分只说明"检索质量高于测试集的辨别能力"。换一个更难的测试集,分数可能立即下降。

真正的质量验证来自 L1 指标(用户采纳率、任务完成率),RAGAS 是 L2 的中间层评测,不是终点。

误解 2:Answer Relevancy 低 = 答案质量差

Answer Relevancy 的计算方法是"从答案反向生成问题,与原问题计算相似度"。如果原始问题很具体而答案很简洁,这个相似度可能偏低------不是因为答案质量差,而是因为简洁答案的覆盖面比较窄。

本实验的 Answer Relevancy(0.732)偏低,部分原因就是测试问题很具体,生成的答案也非常简洁,反向生成的问题与原问题在措辞上差异较大。

误解 3:四个指标越高越好

Context Precision 高但 Context Recall 低:检索到的内容都有用,但遗漏了重要信息。整体来说不是好的检索。

Context Recall 高但 Context Precision 低:检索到了所有需要的内容,但同时引入了大量噪音。答案质量受影响。

应该同时追踪四个指标,不能只看平均分。


在代码里运行 RAGAS

python 复制代码
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision, context_recall
from ragas.llms import LangchainLLMWrapper
from ragas.embeddings import LangchainEmbeddingsWrapper
from datasets import Dataset

# 准备评测数据
data = Dataset.from_dict({
    "question": [...],
    "answer": [...],          # RAG 系统的输出
    "contexts": [[...]],      # 每个问题检索到的 chunk 列表
    "ground_truth": [...],    # 标准答案
})

# 配置评测用的 LLM 和 Embedding
ragas_llm = LangchainLLMWrapper(your_llm)
ragas_embeddings = LangchainEmbeddingsWrapper(your_embedder)

result = evaluate(
    data,
    metrics=[faithfulness, answer_relevancy, context_precision, context_recall],
    llm=ragas_llm,
    embeddings=ragas_embeddings,
)

print(result)
# {'faithfulness': 0.95, 'answer_relevancy': 0.82, ...}

注:最新版 RAGAS(v0.2+)推荐用 from ragas.metrics.collections import ... 导入指标,旧版 import 方式会触发 DeprecationWarning。


测试集设计要点

RAGAS 的评测质量高度依赖测试集设计。一个好的测试集需要:

vbnet 复制代码
1. 覆盖三类难度:
   简单(答案在单文档单段落)    → 验证基础功能
   中等(答案需要整合同文档多段) → 验证 Chunking 策略
   复杂(答案需要跨文档推理)     → 暴露真实瓶颈

2. ground_truth 要细粒度:
   不好:'使用 pytest 写测试'
   好:'测试函数命名格式为 test_<功能>_<预期行为>,
        Fixture 用 yield 分隔 setup/teardown'

3. 边界测试(知识库中没有答案的问题):
   验证 RAG 系统的拒答能力,避免幻觉

4. 样本数:至少 50 个,才能使指标稳定
   本实验只有 8 个,是演示用的最小集合

总结

  1. RAGAS 四指标分别测量不同环节:Context Precision/Recall 测检索质量,Faithfulness 测幻觉风险,Answer Relevancy 测答案针对性;要同时看四个,不要只看均值
  2. 满分不等于完美:Context Precision = 1.0 反映的是"LLM 认为有用",不是"客观无噪音";小知识库、简单问题会导致指标虚高,需要更大规模测试集才能区分差异
  3. RAGAS 的价值在持续监控:单次比较不一定能区分版本差异,但持续跟踪质量变化(每周一次抽样评测),可以及时发现质量漂移

参考资料


欢迎访问 PrimeSkills ------ 一个精心策划的 AI Agent 与技能市场,所有内容均经过真实企业级工作流验证。没有噱头,只有真正有效的东西。

更多实用知识和有趣产品,欢迎访问我的个人主页

相关推荐
三声三视1 小时前
uni-app 鸿蒙端传参变成 [object Object]?顺着源码追到 ArkTS router 底层才搞明白
人工智能·ai·uni-app·aigc·ai编程·harmonyos
fthux2 小时前
“装闭”,让装修套路“装”不下去
人工智能·ai·开源·github·open source
andxe2 小时前
安科士 AndXe 技术博客:400G QSFP112 SR4 光模块|AI 算力与超算短距互联最优方案
网络·人工智能·光模块·光通信
Darling噜啦啦2 小时前
GPT-5.6 意味着什么?从 Benchmark 跑分到模型分层,读懂 AI 行业的三个真相
llm
玉鸯2 小时前
Agent Hook:在概率推理之上,为 Agent 叠加确定性控制
python·langchain·agent
计算机魔术师3 小时前
Karpathy:用语音与LLM长谈可提升理解效率
人工智能·ai编程
甲维斯3 小时前
我要开始吹牛逼了!Kimi K3 “宇宙无敌”!
前端·人工智能
周末程序猿3 小时前
图解 120 个大语言模型(LLM)核心概念(61-90)
人工智能
犀利豆3 小时前
多轮对话生成架构图 Agent 设计实践
agent