RAG 自动化评测
RAG 的效果不能只看某一个问题的最终答案。评测需要区分“检索是否找对”和“模型是否用对”,并通过一批带有 Ground Truth 的问题进行回归测试。
评测维度
| 维度 | 要回答的问题 |
|---|---|
| Context Recall | 相关信息是否被召回,是否遗漏了正确片段? |
| Context Precision | 召回结果中相关片段的比例是否足够高? |
| Faithfulness | 答案是否忠实于召回上下文,有没有幻觉? |
| Answer Relevance | 答案是否真正回应了用户问题? |
| Answer Correctness | 答案与标准答案相比是否正确? |
一次典型的 RAG 评测样本至少包含:
{
"question": "用户的问题",
"answer": "RAG 生成的答案",
"contexts": ["检索到的片段 1", "检索到的片段 2"],
"ground_truth": "领域专家确认的正确答案",
}
使用 Ragas
Ragas 可以让大模型作为评审者,结合 Embedding 模型计算多种指标。示例:
from datasets import Dataset
from ragas import evaluate
from ragas.metrics import (
answer_correctness,
context_precision,
context_recall,
)
samples = {
"question": ["张伟是哪个部门的?"],
"answer": ["张伟是教研部的。"],
"contexts": [[
"张伟,教研部,负责课程研发。",
"李明,IT 部,负责系统维护。",
]],
"ground_truth": ["张伟是教研部的。"],
}
score = evaluate(
Dataset.from_dict(samples),
metrics=[
answer_correctness,
context_recall,
context_precision,
],
llm=evaluation_llm,
embeddings=evaluation_embeddings,
)
result = score.to_pandas()
evaluation_llm 和 evaluation_embeddings 应使用项目中实际可用的模型适配器。示例中的变量不包含任何凭据,密钥应从环境变量或安全配置中读取。
如何定位问题
可以按下面的顺序分析评测结果:
- Context Recall 低:正确内容没有被召回。检查文档是否覆盖问题、切片是否破坏语义、查询是否过于简略。
- Context Precision 低:召回内容噪声过多。检查
top_k、相似度阈值、元数据过滤和重排序。 - 召回指标正常但 Answer Correctness 低:模型看到了正确内容但没有正确使用。检查提示词、上下文长度、答案格式和模型能力。
- Faithfulness 低:模型使用了上下文之外的知识。应加强“仅根据参考信息回答”的约束,并对无答案场景定义明确的拒答策略。
自动化回归
评测集应包含真实用户问题、边界问题、歧义问题和无答案问题。每次调整切片、Embedding、检索策略或提示词后,都应重新运行整套评测,比较整体指标而不是只关注一个样例。
自动化评测不能完全替代领域专家。专家应参与问题集构建、Ground Truth 审核和业务指标设计;Ragas 等框架的价值在于把专家标准转化为可重复的批量测试。