RAG 评估与优化
问题
如何评估 RAG 系统的质量?有哪些评估指标和优化方向?
答案
RAG 评估需要分别评估检索质量和生成质量,然后进行端到端评估。
一、评估维度
二、检索评估指标
| 指标 | 公式/含义 | 说明 |
|---|---|---|
| Recall@K | 正确文档被检索到的比例 | 最重要——检索不到就无法回答 |
| Precision@K | Top-K 中相关文档的比例 | 太多无关文档会干扰生成 |
| MRR | 第一个正确结果排名的倒数 | 关注最相关文档的排名 |
| NDCG | 归一化折损累积增益 | 综合考虑排名和相关度 |
三、生成评估指标(RAGAS 框架)
RAGAS 是最流行的 RAG 评估框架,定义了三个核心指标:
| 指标 | 含义 | 评估方法 |
|---|---|---|
| Faithfulness | 答案是否忠于检索到的上下文 | LLM 判断每个论述是否有上下文支持 |
| Answer Relevancy | 答案是否回答了用户的问题 | LLM 判断答案与问题的相关性 |
| Context Precision | 检索到的上下文中有多少是有用的 | LLM 判断每个文档块是否对回答有贡献 |
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision
# 准备评测数据集
eval_dataset = [
{
"question": "什么是 MVCC?",
"answer": "MVCC 是多版本并发控制...", # RAG 生成的答案
"contexts": ["MVCC 通过版本链..."], # 检索到的文档
"ground_truth": "MVCC(多版本并发控制)..." # 标准答案
}
]
# 运行评估
results = evaluate(
dataset=eval_dataset,
metrics=[faithfulness, answer_relevancy, context_precision]
)
print(results)
# {'faithfulness': 0.92, 'answer_relevancy': 0.88, 'context_precision': 0.85}
四、构建评测数据集
人工标注
{
"question": "退款需要几个工作日?",
"ground_truth": "退款到账需要3-5个工作日",
"relevant_doc_ids": ["doc_123", "doc_456"]
}
LLM 自动生成
def generate_qa_pairs(documents: list, llm, num_pairs: int = 50):
"""从文档中自动生成 QA 对"""
qa_pairs = []
for doc in documents[:num_pairs]:
response = llm.invoke(
f"基于以下文档内容,生成一个问题和答案对。\n"
f"文档:{doc.page_content}\n"
f"输出格式:\n问题:...\n答案:..."
)
# 解析 response 得到 question 和 answer
qa_pairs.append(parse_qa(response.content, doc))
return qa_pairs
五、常见问题与优化方向
| 问题表现 | 诊断维度 | 优化方向 |
|---|---|---|
| 回答不准确 | Faithfulness 低 | 降温度、强制引用、优化 Prompt |
| 回答不相关 | Relevancy 低 | Query 改写、优化 Prompt |
| 关键信息缺失 | Recall@K 低 | 增大 K、混合检索、优化分块 |
| 检索到无关文档 | Precision@K 低 | 添加 Reranker、元数据过滤 |
| 回答有幻觉 | Faithfulness 低 | temperature=0、添加验证步骤 |
六、持续优化流程
- 建立评测集:50-200 个 QA 对,覆盖核心场景
- 设定基线:用当前配置跑出各指标数值
- 单变量调优:一次只改一个变量(分块大小/Embedding 模型/K 值等)
- 对比评估:每次修改后用评测集验证是否提升
- 上线验证:A/B 测试验证线上效果
常见面试问题
Q1: RAG 评估中最重要的指标是什么?
答案:
- 检索阶段:Recall@K 最重要——如果正确文档没被检索到,后续无法挽救
- 生成阶段:Faithfulness 最重要——幻觉是 RAG 的核心风险
- 实践中通常追求 Recall@10 ≥ 90%,Faithfulness ≥ 85%
Q2: 没有标准答案时如何评估 RAG?
答案:
- LLM-as-Judge:用 GPT-4 等强模型作为评估器,打分 1-5
- Faithfulness 评估:不需要标准答案,只需检查答案是否忠于上下文
- 用户反馈:收集用户的满意/不满意点击
- 人工抽检:定期抽样 50-100 条人工评估