RAG评估指标体系

RAG评估指标体系:如何科学衡量检索增强生成质量

引言 “我的RAG系统效果怎么样?“这是每个RAG开发者都会问的问题。但回答这个问题并不简单——RAG系统包含检索和生成两个环节,每个环节都有多个质量维度。 2026年,RAG评估已经形成了一套比较完整的指标体系。从检索的准确率和召回率,到生成的忠实度和相关性,再到端到端的用户满意度。本文将系统介绍这些指标。 一、RAG评估框架 1.1 评估维度 RAG系统 ├── 检索质量 │ ├── 准确率(Precision) │ ├── 召回率(Recall) │ ├── 排序质量(NDCG/MRR) │ └── 多样性(Diversity) ├── 生成质量 │ ├── 忠实度(Faithfulness) │ ├── 答案相关性(Answer Relevance) │ ├── 完整性(Completeness) │ └── 正确性(Correctness) └── 端到端质量 ├── 用户满意度 ├── 响应延迟 └── 成本效率 1.2 评估方法 人工评估:最准确但成本高 自动评估:使用LLM或规则自动评估 基准测试:在标准数据集上测试 A/B测试:线上对比不同版本 二、检索质量指标 2.1 准确率与召回率 class RetrievalMetrics: def precision_at_k(self, retrieved, relevant, k): """Top-K准确率""" retrieved_k = retrieved[:k] relevant_set = set(relevant) retrieved_set = set(retrieved_k) return len(relevant_set & relevant_set) / k def recall_at_k(self, retrieved, relevant, k): """Top-K召回率""" retrieved_k = retrieved[:k] relevant_set = set(relevant) retrieved_set = set(retrieved_k) return len(retrieved_set & relevant_set) / len(relevant_set) def average_precision(self, retrieved, relevant): """平均准确率""" relevant_set = set(relevant) precisions = [] num_relevant = 0 for i, doc in enumerate(retrieved): if doc in relevant_set: num_relevant += 1 precisions.append(num_relevant / (i + 1)) if not precisions: return 0.0 return np.mean(precisions) def mean_average_precision(self, queries_results): """MAP""" return np.mean([self.average_precision(r["retrieved"], r["relevant"]) for r in queries_results]) 2.2 排序质量 def ndcg_at_k(self, retrieved, relevance_scores, k): """NDCG@K""" # DCG dcg = sum( (2 ** relevance_scores.get(doc, 0) - 1) / np.log2(i + 2) for i, doc in enumerate(retrieved[:k]) ) # IDCG(理想排序的DCG) ideal_order = sorted(relevance_scores.values(), reverse=True)[:k] idcg = sum( (2 ** score - 1) / np.log2(i + 2) for i, score in enumerate(ideal_order) ) return dcg / idcg if idcg > 0 else 0 def mrr(self, queries_results): """平均倒数排名""" reciprocal_ranks = [] for result in queries_results: for i, doc in enumerate(result["retrieved"]): if doc in result["relevant"]: reciprocal_ranks.append(1 / (i + 1)) break else: reciprocal_ranks.append(0) return np.mean(reciprocal_ranks) 2.3 上下文相关性 class ContextRelevanceMetric: async def measure(self, question, retrieved_context): """评估检索到的上下文与问题的相关性""" prompt = f""" 问题: {question} 检索到的上下文: {self.format_context(retrieved_context)} 请评估上下文与问题的相关性: 1. 有多少段落直接相关? 2. 有多少段落间接相关? 3. 有多少段落完全不相关? 4. 相关性评分(0-1) """ result = await self.llm.call(prompt) return result["relevance_score"] 三、生成质量指标 3.1 忠实度(Faithfulness) 答案是否忠实于检索到的上下文,不产生幻觉: ...

2026-07-02 · 4 min · 811 words · 硅基 AGI 探索者
RAG评估框架:RAGAS指标体系与自定义评估

RAG评估框架:RAGAS指标体系与自定义评估

RAG评估的困境 大多数RAG系统在上线时面临一个尴尬的问题:你知道它在工作,但你不知道它工作得有多好。 没有系统化的评估框架,调参就像蒙眼开车——你不知道改chunk_size从512到1024到底是好了还是坏了。 RAGAS(Retrieval Augmented Generation Assessment)是目前最流行的RAG评估框架,它提供了一套无需人工标注的自动化评估指标。 RAGAS核心指标体系 指标全景图 RAGAS 指标体系 │ ┌──────────────┼──────────────┐ ▼ ▼ ▼ 检索指标 生成指标 端到端指标 │ │ │ ┌─────┼─────┐ ┌────┼────┐ ┌────┼────┐ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ 上下文 上下文 ─ 忠实 答 答 语义 答案 精确率 召回率 度 案 案 相似 相关 相 完 关 整 性 性 四大核心指标详解 指标 评估什么 范围 理想值 Faithfulness(忠实度) 答案是否忠于检索到的上下文 0-1 >0.95 Answer Relevancy(答案相关性) 答案是否回答了用户问题 0-1 >0.85 Context Precision(上下文精确率) 检索到的上下文有多少是相关的 0-1 >0.80 Context Recall(上下文召回率) 回答问题所需的信息是否都检索到了 0-1 >0.85 指标计算原理 Faithfulness(忠实度) 衡量答案中的每个claim是否能从检索上下文中找到支撑。 ...

2026-06-30 · 4 min · 719 words · 硅基 AGI 探索者
RAG评估框架:RAGAS指标体系与自定义评估

RAG评估框架:RAGAS指标体系与自定义评估

为什么RAG评估如此重要? 2026年,RAG系统已在企业中大规模部署,但一个尴尬的现实是:超过60%的团队没有系统化的评估体系。他们靠"人工看看效果还行"来判断系统质量,这在生产环境中是远远不够的。 RAGAS(Retrieval Augmented Generation Assessment)是目前最流行的RAG评估框架,它提供了一套不依赖人工标注的自动化评估指标。 RAGAS核心指标体系 RAGAS将RAG系统评估拆分为三个环节:检索、生成、端到端。 指标全景图 环节 指标 含义 取值范围 检索 Context Precision 检索结果中相关内容的比例 0-1 检索 Context Recall 相关内容被检索到的比例 0-1 检索 Context Relevance 检索内容与查询的相关性 0-1 生成 Faithfulness 回答是否忠于检索到的上下文 0-1 生成 Answer Relevance 回答与查询的相关性 0-1 端到端 Answer Correctness 回答与标准答案的一致性 0-1 各指标详解与实现 1. Context Precision(上下文精确率) 评估检索结果中有多大比例是真正相关的: from ragas.metrics import context_precision from ragas.dataset_schema import SingleTurnSample sample = SingleTurnSample( user_input="什么是Transformer架构?", retrieved_contexts=[ "Transformer是一种基于自注意力机制的神经网络架构...", "BERT是基于Transformer的预训练模型...", "今天的天气不错。" # 不相关 ], reference="Transformer是一种基于自注意力机制的序列到序列模型..." ) score = await context_precision.single_turn_ascore(sample) # 输出: 0.67 (2/3相关) 2. Context Recall(上下文召回率) 评估标准答案中的信息是否都被检索到: ...

2026-06-30 · 2 min · 396 words · 硅基 AGI 探索者
rag evaluation framework 2026 ragas custom metrics

RAG 评估体系 2026:从 RAGAS 到自定义指标

为什么 RAG 评估如此困难 RAG 系统的评估比单纯的 LLM 评估复杂得多,因为它涉及多个环节:检索质量、上下文相关性、生成质量、引用准确性。一个环节的优化可能影响另一个环节。2026 年的 RAG 评估已经形成了系统化的方法论。 RAG 评估的三层框架 ┌──────────────────────────────────────────────┐ │ 端到端评估(L3) │ │ 用户满意度 / 任务完成率 / 答案正确性 │ ├──────────────────────────────────────────────┤ │ 生成评估(L2) │ │ 答案相关性 / 忠实度 / 完整性 / 引用准确性 │ ├──────────────────────────────────────────────┤ │ 检索评估(L1) │ │ 召回率 / 精确率 / MRR / 上下文相关性 │ └──────────────────────────────────────────────┘ L1:检索层评估 基础指标 class RetrievalMetrics: @staticmethod def recall_at_k(retrieved_ids: list, relevant_ids: list, k: int = 5): """Top-K 召回率:相关文档是否出现在 Top-K 中""" retrieved_top_k = retrieved_ids[:k] hits = len(set(retrieved_top_k) & set(relevant_ids)) return hits / len(relevant_ids) if relevant_ids else 0.0 @staticmethod def precision_at_k(retrieved_ids: list, relevant_ids: list, k: int = 5): """Top-K 精确率""" retrieved_top_k = retrieved_ids[:k] hits = len(set(retrieved_top_k) & set(relevant_ids)) return hits / k @staticmethod def mrr(retrieved_ids: list, relevant_ids: list): """Mean Reciprocal Rank:第一个相关文档的排名倒数""" for i, doc_id in enumerate(retrieved_ids): if doc_id in relevant_ids: return 1.0 / (i + 1) return 0.0 @staticmethod def ndcg_at_k(retrieved_ids: list, relevance_scores: dict, k: int = 5): """Normalized Discounted Cumulative Gain""" dcg = sum( relevance_scores.get(doc_id, 0) / np.log2(i + 2) for i, doc_id in enumerate(retrieved_ids[:k]) ) ideal_scores = sorted(relevance_scores.values(), reverse=True)[:k] idcg = sum(s / np.log2(i + 2) for i, s in enumerate(ideal_scores)) return dcg / idcg if idcg > 0 else 0.0 上下文相关性评估 def context_relevance(question: str, contexts: list, llm) -> float: """评估检索到的上下文与问题的相关程度""" prompt = f""" 请评估以下检索上下文与问题的相关性。 问题:{question} 上下文: {chr(10).join([f'[{i+1}] {c[:200]}' for i, c in enumerate(contexts)])} 对每条上下文打分(0-3): - 0: 完全无关 - 1: 部分相关,缺少关键信息 - 2: 相关,包含部分答案 - 3: 高度相关,直接回答问题 输出 JSON:{{"scores": [0-3, ...], "overall": 0.0-1.0}} """ result = llm.generate(prompt, response_format="json") return result["overall"] L2:生成层评估 RAGAS 框架 RAGAS(Retrieval Augmented Generation Assessment)是 2026 年最主流的 RAG 评估框架,核心指标包括: ...

2026-06-28 · 4 min · 775 words · 硅基 AGI 探索者
rag evaluation guide

RAG 系统评估指南:从检索到生成的全链路评测

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 详解 衡量回答中每个陈述是否能从检索文档推导: ...

2026-06-24 · 2 min · 301 words · 硅基 AGI 探索者
鲁ICP备2026018361号