RAG评估指标体系
RAG系统的评估分为两个层面:检索质量和生成质量。不评估就不知道哪里出了问题。
检索层指标
| 指标 | 含义 | 计算方式 |
|---|---|---|
| Recall@K | 正确文档在Top-K中的命中率 | 命中次数 / 总问题数 |
| MRR(平均倒数排名) | 正确文档排名的平均倒数 | Σ(1/rank) / 总问题数 |
| NDCG@K | 考虑排名的归一化折现累积增益 | 标准化的排名加权指标 |
| Context Precision | 检索到的上下文中有多少是真正相关的 | 相关片段数 / 总检索片段数 |
生成层指标
| 指标 | 含义 | 评估方式 |
|---|---|---|
| 答案相关性(Answer Relevancy) | 回答是否切题,没有跑题或废话 | LLM-as-judge或人工评估 |
| 忠实度(Faithfulness) | 回答是否完全基于检索到的上下文,没有幻觉 | 对每个声明验证是否能在上下文中找到依据 |
| 上下文召回率(Context Recall) | 参考答案中的关键信息是否被检索到 | 与标准答案对比 |
| BLEU/ROUGE | 生成答案与参考答案的词语重叠度 | 自动计算,适合有标准答案的场景 |
RAGAS框架
RAGAS(RAG Assessment)是目前最流行的RAG自动评估框架,它用LLM来评估LLM生成的答案,实现无参考答案的自动化评估。
pip install ragas
from ragas import evaluate
from ragas.metrics import (
answer_relevancy,
faithfulness,
context_recall,
context_precision,
)
from datasets import Dataset
# 构造评估数据集
data = {
"question": ["什么是RAG技术?", "BGE-M3最大支持多少token?"],
"answer": [
"RAG是检索增强生成技术,通过检索外部知识来提升LLM回答质量。",
"BGE-M3最大支持8192个token的输入。"
],
"contexts": [
["RAG(Retrieval-Augmented Generation)通过检索相关文档来增强生成质量。"],
["BGE-M3是BAAI开发的多功能Embedding模型,最大输入长度为8192 tokens。"]
],
"ground_truth": [
"RAG是一种结合检索和生成的AI技术。",
"BGE-M3支持最多8192个token。"
]
}
dataset = Dataset.from_dict(data)
result = evaluate(
dataset,
metrics=[
answer_relevancy,
faithfulness,
context_recall,
context_precision,
],
)
print(result)
# 输出: {'answer_relevancy': 0.92, 'faithfulness': 0.95, ...}
什么时候不需要RAG?
RAG不是万能的,以下场景不适合或不需要RAG:
- 知识已经在模型里:如果你的问题是通用常识、历史事实、编程语法——GPT-4直接回答比RAG更快更准,引入检索只会增加延迟和复杂度。
- 实时数据需求:需要今天股价、实时天气、最新新闻,RAG无法解决实时性问题,应该用Tool/Function Calling直接调用API。
- 结构化数据查询:用户想查"2024年Q3销售额",这种明确的结构化查询用SQL(Text-to-SQL)更合适,不需要语义搜索。
- 知识库极小(<20个文档):直接全部放进System Prompt即可,没必要建索引。
- 多步推理/复杂规划:需要跨多个知识片段进行复杂推理,标准RAG效果差,考虑Agent + Tool或GraphRAG。
RAG的常见失败模式
| 失败模式 | 症状 | 调优方向 |
|---|---|---|
| 检索未命中 | 召回的文档与问题无关,答非所问 | 优化chunk策略;换更好的Embedding模型;引入混合检索 |
| 上下文被忽略 | 检索到了相关内容,但LLM没有使用 | 优化Prompt;减少上下文长度;Rerank后只保留Top-3 |
| chunk边界截断 | 关键信息跨越两个chunk边界,单个chunk不完整 | 增加overlap;调整chunk大小;用语义切分 |
| 幻觉仍然存在 | LLM在检索内容之外添加了没有依据的信息 | 在Prompt中明确要求"只基于参考内容回答";开启引用追踪 |
| 多跳推理失败 | 需要综合多个来源才能回答,但答案片面 | 增加检索片段数量;使用Agent多轮检索 |
RAG调优路线图
1. 基线建立:最简单的实现,评估Recall@5和Faithfulness基线
│
2. 检索优化:调整chunk大小 → 换Embedding模型 → 引入混合检索
│
3. 精排优化:加入Rerank → 评估Context Precision
│
4. 生成优化:改进Prompt → 添加引用来源 → 评估Answer Relevancy
│
5. 持续监控:收集用户反馈 → 扩充测试集 → 迭代改进
第六章小结
RAG是当前最实用的"让AI使用私有知识"方案。一个高质量的RAG系统需要在每个环节认真打磨:
- 好的切分策略决定检索的上限
- 合适的Embedding模型保证语义理解质量
- 合理的向量数据库选型支撑系统规模
- 混合检索弥补纯向量检索的关键词盲点
- Rerank在召回和精排之间取得平衡
- 持续评估是发现和修复问题的唯一途径