Loading...

文章背景图

explodinggradients/ragas:RAG流水线自动化评估框架

2026-10-10
0
- 字
- 分钟
|

一、官方信息

项目名称Ragas
仓库地址https://github.com/explodinggradients/ragas
官方网站https://docs.ragas.io/
最新更新2026 年活跃迭代
项目定位面向 RAG 流水线的自动化评估框架
开源协议Apache-2.0

二、项目背景

搭一个 RAG 原型很容易:切片、向量化、检索、拼 Prompt、调 LLM,半天就能跑起来。但"跑得通"和"答得好"之间隔着巨大鸿沟——检索回来的片段对不对?回答有没有基于这些片段?有没有胡编乱造?答案完整吗?这些问题在没有量化指标之前,全靠主观感觉,根本没法迭代优化。

Ragas(Retrieval Augmented Generation Assessment)就是为解决这个问题而生。它把 RAG 系统拆成两个阶段——检索(Retrieval)和生成(Generation),分别给出可量化的指标:

  • 检索质量:Context Precision(上下文精确度)、Context Recall(上下文召回率)。
  • 生成质量:Faithfulness(忠实度,是否基于给定上下文不编造)、Answer Relevancy(答案相关性)。

这些指标大多用"另一个 LLM 当裁判"自动打分,你只需要准备一批 (问题, 标准答案, 你的 RAG 实际回答, 检索到的上下文) 数据,Ragas 就能批量跑完给出分数,让你换 embedding、换切片策略、换 Prompt 时知道到底有没有变好。Ragas 已成为 RAG 领域事实上的标准评测工具,也被 LangChain、LlamaIndex 原生集成。

三、核心特性

  • 四大核心指标:Faithfulness、Answer Relevancy、Context Precision、Context Recall。
  • LLM-as-Judge:用强模型自动打分,无需人工标注大量数据。
  • 与 RAG 框架解耦:任意 RAG 系统都能接入,只要喂入字段。
  • 多指标可扩展:支持自定义 metric、领域专用评估。
  • 数据集合成:能从原始文档自动生成评测问题集。
  • Pandas 友好:结果输出为 DataFrame,方便分析与可视化。
  • LangChain / LlamaIndex 集成:一行接入现有链路。

四、环境要求

  • Python 3.9 ~ 3.12。
  • 一个可调用的 LLM(作为裁判,建议用较强模型)与 embedding 模型。
  • 内存:2GB 以上即可。
  • 操作系统:Linux / macOS / Windows。

五、详细部署步骤

方式一:pip 安装

python -m venv venv
source venv/bin/activate
pip install -U ragas

如需配合 LangChain / 数据集合成,安装额外依赖:

pip install "ragas[langchain,debug]"

方式二:准备评测数据并跑指标

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

# 每条样本需要 4 个字段
data = {
    "question": ["如何重置密码?"],
    "answer": ["在设置页点击修改密码即可。"],
    "contexts": [["用户可在个人设置-账号安全中修改登录密码。"]],
    "ground_truth": ["进入设置-账号安全,点击修改密码。"],
}
dataset = Dataset.from_dict(data)

# 指定裁判 LLM 与 embedding(这里用 OpenAI 兼容接口)
import os
os.environ["OPENAI_API_KEY"] = "sk-xxx"

result = evaluate(
    dataset=dataset,
    metrics=[
        faithfulness,
        answer_relevancy,
        context_precision,
        context_recall,
    ],
)
print(result)
# 转成 DataFrame 查看每条明细
df = result.to_pandas()
print(df)

接入 DeepSeek / 本地模型作为裁判

from ragas.llms import LangchainLLMWrapper
from ragas.embeddings import LangchainEmbeddingsWrapper
from langchain_openai import ChatOpenAI, OpenAIEmbeddings

judge_llm = LangchainLLMWrapper(ChatOpenAI(
    model="deepseek-chat",
    base_url="https://api.deepseek.com/v1",
    api_key="sk-xxx",
))
judge_emb = LangchainEmbeddingsWrapper(OpenAIEmbeddings(
    model="text-embedding-3-small",
    base_url="https://api.deepseek.com/v1",
    api_key="sk-xxx",
))

result = evaluate(
    dataset=dataset,
    metrics=[faithfulness, answer_relevancy],
    llm=judge_llm,
    embeddings=judge_emb,
)

自动合成评测问题集

from ragas.testset import TestsetGenerator

generator = TestsetGenerator.from_langchain(
    llm=judge_llm,
    embeddings=judge_emb,
)
# 从你的原始文档切分里自动生成带标准答案的问题集
testset = generator.generate_with_langchain_docs(
    documents=your_docs, testset_size=20
)
df = testset.to_pandas()

验证部署

python -c "import ragas; print(ragas.__version__)"

六、使用方法

  1. pip 安装后,准备好 question / answer / contexts / ground_truth 四列数据。
  2. 选择裁判 LLM(建议用比被测模型更强的模型),调用 evaluate()。
  3. 看总分与每条明细,Faithfulness 低说明模型在编造,Context Precision 低说明检索不准。
  4. 无账号密码;Key 通过环境变量或 LangChain LLM 对象传入。

七、常见问题 FAQ

Q1:Faithfulness 分数一直很低?
A:说明回答里有上下文没有的内容(幻觉),先检查 Prompt 是否要求"仅基于上下文回答",并优化检索质量。

Q2:一定要 ground_truth 吗?
A:Faithfulness 和 Answer Relevancy 不需要标准答案也能评;Context Recall 需要 ground_truth。没有标准答案时可先跑前两个。

Q3:裁判模型用哪个?
A:建议用 GPT-4o / DeepSeek-V3 这类较强模型当 judge;用小模型当裁判打分不可靠。

Q4:成本会不会很高?
A:每条样本要调用裁判 LLM 多次打分,样本量大时成本可观;建议先用小批量验证,再扩量。

Q5:结果怎么沉淀?
A:result.to_pandas() 导出 DataFrame,可存 CSV 或对接 Langfuse 做长期追踪。

八、跳转链接

评论交流

文章目录