RAG 评估的特殊性 RAG 系统由检索和生成两个阶段组成。传统评估只看最终回答质量,但 RAG 的问题可能出在检索阶段——检索到的文档是错的,再好的生成模型也无法给出正确回答。因此 RAG 评估必须是全链路的。
评估维度 用户问题 → [检索器] → 检索文档 → [生成器] → 最终回答 ↑ ↑ 检索质量评估 生成质量评估 检索质量指标 指标 含义 Context Precision 检索文档中相关部分的比例 Context Recall 答案所需信息被检索到的比例 Hit Rate 至少检索到一个相关文档的比例 MRR 相关文档的排名倒数均值 生成质量指标 指标 含义 Faithfulness 回答是否忠于检索文档(无幻觉) Answer Relevance 回答与问题的相关程度 Answer Correctness 回答与标准答案的匹配度 Hallucination Rate 无法从文档推导的陈述比例 RAGAS 框架 RAGAS 是最流行的 RAG 评估框架,支持无参考评估(不需要标准答案)。
from ragas import evaluate from ragas.metrics import ( faithfulness, answer_relevancy, context_precision, context_recall, ) from datasets import Dataset eval_data = Dataset.from_dict({ "question": ["什么是量子计算?", "如何防止SQL注入?"], "answer": [ "量子计算利用量子力学原理进行计算,使用量子比特...", "防止SQL注入的方法包括参数化查询、输入验证...", ], "contexts": [ ["量子计算利用量子力学原理...", "量子比特可同时处于0和1的叠加态..."], ["SQL注入通过嵌入恶意SQL语句实现...", "参数化查询是最有效方法..."], ], "ground_truth": [ "量子计算利用量子叠加和纠缠原理进行并行计算。", "使用参数化查询、输入验证、ORM来防止SQL注入。", ], }) results = evaluate(eval_data, metrics=[ faithfulness, answer_relevancy, context_precision, context_recall, ]) # {'faithfulness': 0.85, 'answer_relevancy': 0.92, # 'context_precision': 0.78, 'context_recall': 0.88} Faithfulness 详解 衡量回答中每个陈述是否能从检索文档推导:
...