Ragas (Retrieval Augmented Generation Assessment) 是一个开源的 Python 框架,专门用于评估检索增强生成(RAG)管道的性能。

在大模型应用开发中,构建 RAG 系统很容易,但要科学地评估它到底好不好(检索是否准确、生成是否幻觉、是否回答了问题)却非常困难。Ragas 就是为了解决这一痛点而生的。

以下是对 Ragas 的详细介绍,包括它的核心功能、评估指标、工作原理以及如何使用。


1. 为什么需要 Ragas?

传统的 LLM 评估通常依赖于人工打慢或简单的字符串匹配,但这在 RAG 场景下不仅昂贵,而且不准确。

Ragas 的核心价值在于:

  • 无需人工标注的真实答案(Ground Truth): 它使用 LLM(如 GPT-4)作为“裁判”,通过合成数据生成测试集,并自动评估结果。
  • 组件化评估: 它不把 RAG 当作黑盒,而是分开评估“检索器”和“生成器”的表现。
  • 专注于 RAG 特有的问题: 比如检索到的上下文是否有噪声,回答是否产生幻觉等。

2. 核心评估指标

Ragas 提供了一套多维度的指标,主要分为三大类:检索质量生成质量端到端质量

A. 检索质量
  • Context Precision (上下文精确度): 检索到的文档是否都是相关的?有没有掺杂噪声?
  • Context Recall (上下文召回率): 检索到的文档是否包含了回答问题所需的所有信息?(注:通常需要 Ground Truth)。
  • Context Entity Recall (上下文实体召回率): 检索到的上下文中是否包含了问题中的关键实体(如人名、地名、专有名词)。
B. 生成质量
  • Faithfulness (忠实度): 这一点非常重要。它衡量生成的答案是否严格基于检索到的上下文。如果答案包含了上下文中没有的信息(即“幻觉”),则 Faithfulness 分数会很低。
  • Answer Relevance (答案相关性): 生成的答案是否真正解决了用户的问题?(有时候答案很通顺,但答非所问,这个指标会很低)。
C. 端到端 / 传统指标
  • Semantic Similarity (语义相似度): 生成的答案与标准答案在语义上的相似程度(使用 Embedding 计算)。

3. Ragas 的工作流程

Ragas 的评估流程通常包含以下步骤:

  1. 准备数据:
    你需要准备一组测试数据。理想情况下,你需要包含:Question(用户问题)、Context(检索到的上下文)、Answer(模型生成的答案)、Ground Truth(标准答案,部分指标需要)。

    • 特色功能:Ragas 可以利用你的文档库,利用 Evolution 策略自动生成高质量的测试问题,从而省去人工编写 Ground Truth 的时间。
  2. 选择指标与运行:
    你选择想要评估的指标(例如:faithfulness, answer_relevance),然后运行评估脚本。

  3. LLM 作为裁判:
    Ragas 会将问题和答案发送给一个更强大的 LLM(如 GPT-3.5/4),通过精心设计的 Prompt 让 LLM 给出分数(0到1之间)。

  4. 输出报告:
    Ragas 会生成一个详细的报告(DataFrame 格式或 HTML),展示每个指标的平均分,以及每个具体问题的得分情况。


4. 简单的代码示例

假设你已经有了 RAG 系统产生的数据,以下是使用 Ragas 进行评估的简单示例:

from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevance
from datasets import Dataset 

# 1. 准备你的评估数据
data_samples = {
    'question': [
        '法国的首都是哪里?', 
        '谁是 Alan Turing?'
    ],
    'answer': [
        '法国的首都是巴黎。', 
        'Alan Turing 是一位英国数学家...'
    ],
    'contexts' : [
        ['巴黎是法国的首都和最大城市...'], 
        ['Alan Turing 是一位英国数学家、计算机科学家...']
    ],
    # 注意:faithfulness 和 answer_relevance 不需要 ground_truth
    # 但 context_recall 需要
}

# 转换为 HuggingFace Dataset 格式
dataset = Dataset.from_dict(data_samples)

# 2. 定义评估指标
result = evaluate(
    dataset, 
    metrics=[
        faithfulness,      # 忠实度(检查幻觉)
        answer_relevance   # 答案相关性
    ]
)

# 3. 查看结果
print(result)
# 结果通常包含每一项的分数,以及平均值
result.to_pandas()

5. Ragas 的独特优势

  1. Synthetic Data Generation (合成数据生成):
    这是 Ragas 最强大的功能之一。你只需要提供原始文档,Ragas 可以利用 LLM 模拟用户提问,并生成对应的标准答案。这使得在没有任何人工标注数据的情况下,也能建立大规模的评估集。

  2. LLM-as-a-Judge:
    它利用 LLM 来理解上下文的细微差别,比传统的基于关键词匹配或简单向量相似度的评估方法更智能、更接近人类判断。

  3. 生态集成:
    Ragas 可以轻松集成到现有的 RAG 框架中,如 LangChainLlamaIndex,也支持将结果集成到 CI/CD 流程中(例如通过 GitHub Actions),确保代码更新不会降低 RAG 系统的质量。

总结

如果你正在开发 RAG 应用(例如企业知识库问答),并且希望系统性地改进你的系统,Ragas 是目前最主流、最成熟的评估工具之一。它能帮你定位问题到底出在“检索没找到文档”还是“模型瞎编乱造”,从而让你有的放矢地进行优化。


(END)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐