跳到主要内容

RAG 评估与优化

问题

如何评估 RAG 系统的质量?有哪些评估指标和优化方向?

答案

RAG 评估需要分别评估检索质量和生成质量,然后进行端到端评估。

一、评估维度

二、检索评估指标

指标公式/含义说明
Recall@K正确文档被检索到的比例最重要——检索不到就无法回答
Precision@KTop-K 中相关文档的比例太多无关文档会干扰生成
MRR第一个正确结果排名的倒数关注最相关文档的排名
NDCG归一化折损累积增益综合考虑排名和相关度
MRR=1Qi=1Q1ranki\text{MRR} = \frac{1}{|Q|} \sum_{i=1}^{|Q|} \frac{1}{\text{rank}_i}

三、生成评估指标(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、添加验证步骤

六、持续优化流程

  1. 建立评测集:50-200 个 QA 对,覆盖核心场景
  2. 设定基线:用当前配置跑出各指标数值
  3. 单变量调优:一次只改一个变量(分块大小/Embedding 模型/K 值等)
  4. 对比评估:每次修改后用评测集验证是否提升
  5. 上线验证:A/B 测试验证线上效果

常见面试问题

Q1: RAG 评估中最重要的指标是什么?

答案

  • 检索阶段:Recall@K 最重要——如果正确文档没被检索到,后续无法挽救
  • 生成阶段:Faithfulness 最重要——幻觉是 RAG 的核心风险
  • 实践中通常追求 Recall@10 ≥ 90%,Faithfulness ≥ 85%

Q2: 没有标准答案时如何评估 RAG?

答案

  1. LLM-as-Judge:用 GPT-4 等强模型作为评估器,打分 1-5
  2. Faithfulness 评估:不需要标准答案,只需检查答案是否忠于上下文
  3. 用户反馈:收集用户的满意/不满意点击
  4. 人工抽检:定期抽样 50-100 条人工评估

相关链接