Ragas 评测使用教程:用 Python 给 RAG 应用打分
Ragas 是一个用 Python 编写的 RAG 评测框架,它通过一组内置指标给检索增强生成(RAG)应用的回答质量打分。
如果你已经有一个 RAG 应用,想知道答案是否忠实于检索内容、是否回答了用户问题,可以按下面的步骤用 Ragas 跑一次评测。
先确认运行环境和依赖
Ragas 的评测过程需要调用大语言模型和嵌入模型。
本文以 Python 3.10 及以上版本、OpenAI 兼容接口为例,其他模型服务需要替换对应的封装类。
安装核心依赖:
pip install ragas datasets langchain-openai
设置模型服务的 API Key 和 Base URL:
export OPENAI_API_KEY="你的密钥"
export OPENAI_BASE_URL="https://api.openai.com/v1"
如果使用兼容 OpenAI 协议的第三方服务,把 OPENAI_BASE_URL 换成服务商提供的地址即可。
评测前先确保模型接口能正常返回结果,否则 Ragas 会在调用阶段报连接错误。
准备评测数据
Ragas 要求每条评测样本至少包含四个字段:question(用户问题)、answer(RAG 系统生成的回答)、contexts(检索返回的文本片段列表)、ground_truth(参考答案)。
其中 contexts 必须是列表,不能是单个字符串。
下面是一个最小可用的数据集示例:
from datasets import Dataset
data = {
"question": ["Ragas 的主要用途是什么?"],
"answer": ["Ragas 用于评测 RAG 应用的检索和生成质量。"],
"contexts": [["Ragas 是一个 RAG 评测框架,提供 faithfulness、answer_relevancy 等指标。"]],
"ground_truth": ["Ragas 是一个用于评测 RAG 应用的 Python 框架。"]
}
dataset = Dataset.from_dict(data)
如果样本量较大,建议从 CSV 或 JSON 文件读取后转换成 Dataset。
注意 ground_truth 只在使用需要参考答案的指标时才必要,但建议保留,方便后续对比。
选择指标并执行评测
Ragas 内置了多个指标,新手可以先从以下三个开始:
- faithfulness:回答是否忠实于检索到的上下文,适合检查模型是否编造信息。
- answer_relevancy:回答与问题的相关程度。
- context_precision:检索到的上下文中有多少是真正有用的。
用 evaluate 函数执行评测:
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision
result = evaluate(
dataset=dataset,
metrics=[faithfulness, answer_relevancy, context_precision]
)
print(result)
执行后会在终端输出每个指标的分数,分数范围通常是 0 到 1,越高越好。
如果某个指标返回 nan,通常是因为该条样本的字段缺失或模型调用失败,需要检查数据格式和接口连通性。
常见报错与避坑
报错 KeyError: 'contexts':说明数据集缺少 contexts 字段,或者字段名拼写不一致。
Ragas 对字段名敏感,请按文档使用 question、answer、contexts、ground_truth。
评测速度很慢:每个样本都要多次调用模型,样本量大时耗时明显。
可以先用 10 到 20 条样本跑通流程,再逐步增加。
指标分数全部为 0 或异常低:先检查 answer 字段是否为空,再确认模型服务是否正常返回。
部分兼容接口对并发请求有限制,可以降低并发数或分批执行。
不要用评测结果直接替代人工检查:Ragas 的指标依赖模型判断,适合做趋势对比和批量筛查,关键业务场景仍建议抽样人工复核。
验证评测是否生效
跑完评测后,建议做两件事确认结果可信:
- 打印
result的完整内容,确认每个指标都有数值,而不是全部为nan。 - 手动挑选一两条低分样本,对照
answer和contexts检查是否真的存在答非所问或编造内容。
如果低分样本确实有问题,说明评测流程工作正常;
如果低分样本人工检查后认为回答合理,则需要调整指标选择或检查模型判断是否稳定。
评测不是一次性的工作,建议在每次修改检索策略或提示词后重新跑一次,观察分数变化。
常见疑问
Ragas 必须用 OpenAI 吗? 不是。
Ragas 支持通过 LangChain 封装接入其他模型服务,只要替换对应的 LLM 和 embeddings 对象即可。
没有 ground_truth 能评测吗? 可以。
faithfulness 和 answer_relevancy 不强制要求参考答案,但 context_precision 等指标可能需要。
建议根据指标文档确认字段要求。
评测结果和人工判断不一致怎么办? 先检查数据格式和模型接口是否稳定,再考虑调整指标组合。
Ragas 的分数是参考值,不是绝对标准。