从零学RAG0x0e:什么是 RAG 评估 ?

0 阅读6分钟

前言

前面系列学习了 RAG 的基础知识,无论是 NaiveRAG 还是 AdvancedRAG。那么在企业级生成环境中,怎么保障一个 RAG 应用的质量? 这就需要 RAG 评估了。

RAG 评估

RAG评估的核心逻辑是分解与量化。它将一个端到端的问答过程,拆解为“检索”和“生成”两个关键环节,并分别设立评估指标。

  • 检索:关注“找得对不对、全不全”。

    • 上下文相关性(Context Relevancy):检索出的文档块与问题有多相关?避免引入噪声。

    • 上下文精度(Context Precision):检索到的上下文(context)中 相关信息的比例

      • Context Precision = 上下文中与问题相关的信息数量 / 上下文总信息数量
    • 上下文召回率(Context Recall):检索结果是否包含了回答所需的所有关键信息?避免信息遗漏。

      • Context Recall = 上下文中包含的关键信息数量 / 参考答案中关键信息数量
  • 生成:关注“用得准不准、好不好”。

    • 答案忠实度:生成的答案是否严格基于检索到的上下文?这是**对抗“幻觉”**的生命线。
    • 答案相关性:生成的答案是否直接、有效地回答了原始问题?避免答非所问。

F1 指标

同时对于context_recall和context_precision这两个指标,如果各有高低,比较难判断的时候,我们还会引入 F1 分数进行综合评估,F1 分数用来平衡精确度和召回率,目标是找到适合特定应用需求的最佳平衡,是精确度和召回率的调和平均值

image.png

🌰:现有两组指标:

  • A组:context_recall = 0.6667, context_precision = 0.4511
  • B组:context_recall = 1.0000, context_precision = 0.3869
  • F1_A = 0.4511 * 0.6667 / (0.4511 + 0.6667) = 0.5380
  • F1_B = 1.0000 * 0.3869 / (1.0000 + 0.3869) = 0.5579

综上,B组 的 RAG 质量更好一点。

评估方式

RAG 应用的评估方法主要有:

  • 人工评估:通过邀请专家或人工评估员对RAG生成的结果进行质量评估。
  • 自动化评估:当前RAG评估的主流和发展方向。通过利用大型语言模型和相关算法,自动化评估工具能够实现对RAG生成文本的质量评分,从而快速评估模型性能。

RAGAs

RAGAs(Retrieval-Augmented Generation Assessment)就是常见的自动化评估工具之一。他是一个基于 “LLM-as-a-Judge” ​ 模式的开源Python库,支持Langchain 和 Llama-Index。

  • 核心目标:提供一套综合性的评测指标和方法,以量化地评测RAG管道(RAG Pipeline)在不同组件层面上的性能。
  • 核心:
    • 检索质量:评估检索到的上下文与问题的相关性。

    • 生成质量:评估生成的答案是否忠实于上下文,以及是否直接回答了问题。

    • 整体质量:综合前两者,给出整体评分。

RAGAs 评估主要从检索阶段和生成阶段统计以下几项指标得分来评估 RAG 系统质量。

image.png

这四个指标之间是有协同关系的,RAG 的性能是检索器和生成器协同工作的结果,指标之间存在紧密的关联:

  • 检索器是生成器的基础: Context Recall 和 Context Precision 直接决定了输入给生成器的上下文质量。
  • 理想状态: 高召回率 + 高精确率。检索器能找到所有相关信息,且只找到相关信息。
  • 现实权衡: 在大规模数据集中,召回率和精确率往往难以兼得。提高召回率(找全)可能牺牲精确率(引入噪声干扰),反之亦然。

更多相关原理详见 RAGAS论文

更多使用方式 RAGAs官方文档

实战

明白上述概念之后,我们通过一个简单的实战 Demo 来加深对 RAGAs 评估的理解。

数据准本

RAG 评估实际就像我们传统开发的 QA(环节),我们需要准备评估数据。数据准备一般要求:

  • 数据规模:最小样本数据。200-500 / 500-1000
  • 类型分布:
    • 问题类型:事实性问题30-40%,解释性问题20-30%
    • 操作性,边界问题
  • 难度级别:
    • 简单 40%
    • 中等 40%
    • 复杂 20%
  • 注意事项:完整,格式统一规范,样本正确性

ragas 指标

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

ragas 角色说明

  • questions:示例问题
  • ground_truth:标准答案
  • contexts:RAG 搜索到的上下文
  • answers:LLM 根据 contexts 给出的答案
data = {
    "question": questions,  # 问题
    "answer": answers,  # 回复结果
    "contexts": contexts,  # 生成回答的原文档
    "ground_truth": ground_truth  # 期望的回答
}

整体的基本流程是:

image.png

评估执行

# 模型需要用Ragas包装
vllm = LangchainLLMWrapper(llms)
vllm_e = LangchainEmbeddingsWrapper(embeddings)

dataset = Dataset.from_dict(data)

result = evaluate(
    dataset = dataset,
    llm = vllm,
    embeddings = vllm_e,
    # metircs修改对应的评估数据
    metrics=[
        context_precision,
        context_recall,
        faithfulness,
        answer_relevancy,
    ],
    raise_exceptions=False
)

# csv保存
df = result.to_pandas()
print(df)
df.to_csv('outputs/ragas_reval_medical.csv', index=True)

分析

image.png

精确率和召回率很高,这里就不看了。我们先挑一个忠诚度低的看看是为什么?

很明显 LLM 回答相较标准答案更丰富、更发散,虽然可能 LLM 回答的不一定错,但是一定是脱离了检索结果。

image.png

接下来,在看一个答案相关性较低的看看是为什么?问的是:刺五加浸膏150g是不是刺五加片的处方?核心:是不是。但是 LLM 回答可能回答得有点啰嗦导致评分下降。

image.png

指标问题总结

下表将您提供的核心诊断逻辑转换为了Markdown格式,便于在文档、笔记或代码注释中使用。

指标可能的问题场景核心问题指向
context_recall 低检索器未覆盖关键文档(如知识库缺失)、嵌入模型语义匹配能力不足等检索器
context_precision 低检索器返回大量无关文档、向量数据库索引策略有误、相关文档排名低等检索器
faithfulness 低生成模型未严格遵循上下文(如提示词未明确要求“基于提供的信息回答”)、上下文过长导致信息稀释等生成器
answer_relevancy 低生成模型未准确理解问题意图(如问题复杂时未使用链式提示分解)、上下文与问题关联性弱等生成器
四个指标均低系统性问题,很可能是检索质量极差(Recall和Precision都低),导致生成器输入混乱,进而影响 Faithfulness和 Relevancy。也可能是问题本身超出系统能力范围。检索器优先

源码

github