上一篇:速通 AI(八):Agent 开发与生产部署 — PEFT 微调、量化、MCP、LangGraph、多智能体。
目标:掌握 RAG 和 Agent 系统的评估方法论——RAGAS 框架、Agent 评估五维度、幻觉检测。
前置要求:第七篇(RAG 流程、检索指标)、第八篇(Agent 概念、工具调用)
本阶段知识依赖图
flowchart TD
A["RAG 系统(第七篇)"] --> B["RAGAS 评估框架"]
A --> C["检索指标回顾"]
D["Agent 系统(第八篇)"] --> E["Agent 评估五维度"]
D --> F["幻觉检测"]
B --> G["评估体系落地"]
E --> G
F --> G
1. 为什么评估是面试必问
面试官问"你怎么评估你的 RAG 系统效果",其实是在考察三个维度:
- 有没有真正上过线——上线的系统都需要评估,“让同事试了几个问题感觉还行"是最大减分项
- 能不能识别系统的薄弱环节——知道哪里好、哪里不好,才能有针对性地优化
- 有没有数据驱动的优化思维——用数据说话,而非凭感觉
评估不是"锦上添花”,而是"地基"。没有评估的 RAG 系统就像没有仪表盘的飞机——你不知道它在往哪飞。
2. RAGAS 评估框架
RAGAS 是目前最主流的 RAG 评估框架,由 Es et al.(2023)提出。
2.1 四大核心指标
指标 1:Faithfulness(忠实度)——模型的回答是否忠实于检索到的上下文?有没有"编"上下文中不存在的信息?
计算方式:LLM 将回答拆分为若干独立声明(claims)→逐一验证每个声明是否能在上下文中找到依据→Faithfulness = 有依据的声明数 / 总声明数。
数值示例:
上下文:“LLaMA 3 于 2024 年 4 月发布”
回答:“LLaMA 3 于 2024 年 4 月发布,参数量为 700 亿”
- 声明 1:“LLaMA 3 于 2024 年 4 月发布”→上下文中有依据
- 声明 2:“参数量为 700 亿”→上下文中找不到依据
- Faithfulness = 1/2 = 0.5
指标 2:Answer Relevancy(回答相关性)——回答是否切题?是否直接回答了用户的问题?
计算方式:用 LLM 从回答中反推可能的问题→计算反推问题与原始问题的相似度→相似度越高,说明回答越切题。
指标 3:Context Precision(上下文精确度)——检索到的上下文中,相关内容是否排在前面?衡量检索的精确度。
指标 4:Context Recall(上下文召回率)——回答所需的所有信息是否都被检索到了?衡量检索的召回率。
| 指标 | 衡量对象 | 核心问题 | 取值范围 |
|---|---|---|---|
| Faithfulness | 生成质量 | 回答有没有编造? | [0, 1],越高越好 |
| Answer Relevancy | 生成质量 | 回答切不切题? | [0, 1],越高越好 |
| Context Precision | 检索质量 | 相关文档排在前面吗? | [0, 1],越高越好 |
| Context Recall | 检索质量 | 所有信息都检索到了吗? | [0, 1],越高越好 |
2.2 RAGAS 代码示例
from ragas import evaluate
from ragas.metrics import (
faithfulness, answer_relevancy,
context_precision, context_recall
)
from datasets import Dataset
eval_data = {
"question": ["什么是 LoRA?"],
"answer": ["LoRA 是一种低秩适应方法,通过添加低秩矩阵来微调大模型。"],
"contexts": [[
"LoRA(Low-Rank Adaptation)通过在冻结的预训练权重旁边注入低秩分解矩阵来实现高效微调..."
]],
"ground_truth": [
"LoRA 是参数高效微调方法,使用低秩矩阵分解在不修改原始权重的情况下适应下游任务。"
]
}
dataset = Dataset.from_dict(eval_data)
# RAGAS 需要配置 LLM 用于指标计算(如拆分声明、验证依据)
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
result = evaluate(
dataset,
metrics=[faithfulness, answer_relevancy, context_precision, context_recall],
llm=llm,
)
print(result)
# {'faithfulness': 1.0, 'answer_relevancy': 0.92,
# 'context_precision': 0.95, 'context_recall': 0.88}
RAGAS 的局限性:RAGAS 的指标计算依赖 LLM(如拆分声明、验证依据),因此评估结果本身也有噪声——LLM 可能漏拆声明或误判依据。此外,RAGAS 主要评估单轮问答,对多轮对话和 Agent 场景覆盖不足。实际使用时建议结合人工抽检验证评估结果的合理性。
2.3 检索评估指标回顾
第七篇介绍了检索评估的基础指标,这里做一个快速回顾:
| 指标 | 公式 | 含义 |
|---|---|---|
| Recall@k | $\frac{\text{检索到的相关文档数}}{\text{全部相关文档数}}$ | 召回率——找到了多少 |
| Precision@k | $\frac{\text{检索结果中相关的数}}{k}$ | 精确率——找的准不准 |
| MRR | $\frac{1}{\|Q\|}\sum\frac{1}{\text{rank}_i}$ | 第一个相关文档排多高 |
| NDCG | $\frac{\text{DCG}}{\text{IDCG}}$ | 排名位置的加权得分 |
3. Agent 评估
Agent 评估比 RAG 更复杂,因为 Agent 会做决策、使用工具、多步执行。
3.1 Agent 评估的五个维度
| 维度 | 衡量什么 | 评估方式 |
|---|---|---|
| 任务完成率 | Agent 最终是否完成了用户的目标? | 最直观但最粗粒度的指标 |
| 工具调用准确率 | 选对了工具吗?参数传对了吗? | 对比"正确工具调用序列" |
| 规划质量 | 拆解任务的步骤是否合理? | 有没有多余或遗漏的步骤 |
| 推理正确性 | 即使最终结果正确,推理过程是否合理? | 正确的结果可能来自错误的推理(运气好) |
| 资源效率 | 花了多少 token / API 调用 / 时间? | 两个都能完成任务的 Agent,效率差 10 倍 |
3.2 评估方法
方法 1:Golden Test Cases(黄金测试集)
人工构造 50-100 个典型任务,每个任务有明确的"正确答案"和"正确步骤",自动运行 Agent 并对比。
方法 2:LLM-as-Judge
用 GPT-4 评估 Agent 的推理过程和最终结果。设计评估 prompt:“请评估以下 Agent 的执行过程,从 1-5 打分,评估维度包括:任务理解、工具选择、推理逻辑、最终结果。”
方法 3:A/B 测试
线上两个版本同时跑,对比用户满意度、任务完成率、平均交互轮数。
3.3 面试答题框架
面试官问"你怎么评估 Agent"时的参考回答:
“Agent 评估从五个维度入手:任务完成率、工具调用准确率、规划质量、推理正确性、资源效率。实操上,我们先构建黄金测试集(50-100 个典型任务),自动运行后对比正确答案。对于无法穷举正确答案的任务,用 LLM-as-Judge 做自动评估。线上用 A/B 测试对比用户满意度。”
4. 幻觉检测
幻觉是 LLM 应用最致命的问题——用户信任你的系统,但系统在"编"。
4.1 幻觉的三种类型
| 类型 | 定义 | 示例 |
|---|---|---|
| 事实性幻觉 | 生成了不符合事实的信息 | “爱因斯坦获得了 1922 年诺贝尔物理学奖”(实际是 1921 年) |
| 忠实性幻觉 | 回答与检索到的上下文不一致 | 上下文说"A 公司营收 100 亿",模型回答"A 公司营收 200 亿" |
| 推理性幻觉 | 推理过程中引入了不存在的逻辑 | “因为 A > B,B > C,所以 A < C” |
4.2 检测方法
方法 1:RAGAS Faithfulness
检测忠实性幻觉——将回答拆分为声明,逐个验证是否能在上下文中找到依据。这是最直接的检测方式,已经在 §2.1 中详细介绍。
方法 2:SelfCheckGPT
让模型多次回答同一问题,对比一致性。如果模型对自己的回答都不一致,说明大概率在"编"。
原理:对同一个问题,用不同的 Temperature 或不同的随机种子生成 $N$ 次回答→对比这 $N$ 次回答中每个声明的一致性→一致性低的声明很可能是幻觉。
方法 3:事实核查 API
与知识库或搜索引擎交叉验证。适合事实性幻觉的检测——把模型回答中的关键事实提取出来,用搜索引擎验证。
| 方法 | 检测类型 | 优点 | 缺点 |
|---|---|---|---|
| RAGAS Faithfulness | 忠实性幻觉 | 精确,有上下文依据 | 只能检测与上下文不一致的部分 |
| SelfCheckGPT | 事实性+推理性 | 不需要参考答案 | 需要多次生成,成本高 |
| 事实核查 API | 事实性幻觉 | 覆盖面广 | 依赖外部服务 |
5. 评估体系落地实践
5.1 建立评估 Pipeline
评估不是一次性的事,而是一个持续的流程:
flowchart LR
A["构建评估数据集<br/>(50-100 个典型问题)"] --> B["自动运行<br/>RAG/Agent"]
B --> C["计算指标<br/>RAGAS + 自定义指标"]
C --> D["结果可视化<br/>仪表盘 + 趋势图"]
D --> E["识别薄弱环节<br/>哪个指标最差?"]
E --> F["针对性优化<br/>Chunk/Embedding/Prompt"]
F --> B
5.2 持续监控与迭代
线上评估 vs 离线评估:
| 维度 | 离线评估 | 线上评估 |
|---|---|---|
| 数据 | 人工构建的测试集 | 真实用户请求 |
| 指标 | RAGAS、精确率、召回率 | 用户满意度、任务完成率 |
| 频率 | 每次模型/Prompt 更新后 | 持续监控 |
| 成本 | 低(自动运行) | 高(需要标注) |
评估驱动的优化循环:发现问题→定位原因→优化→重新评估→确认改善。每次只改一个变量,用评估数据验证效果。
幻觉的根本原因
| 原因 | 描述 | 缓解方法 |
|---|---|---|
| 训练数据噪声 | 训练数据中包含错误或过时信息 | 数据清洗、知识截止日期标注 |
| 解码策略 | 采样(Temperature>0)会引入随机性,可能选到低概率但错误的 token | 降低 Temperature、使用 Top-P 过滤 |
| 知识边界模糊 | 模型对不确定的知识不会主动说"不知道" | Prompt 中要求"不确定时说不知道"、置信度校准 |
| 长上下文信息丢失 | 相关信息在上下文中间被忽略(Lost in the Middle) | Rerank、减少上下文长度 |
| 训练目标偏差 | 训练目标是"生成流畅文本"而非"生成正确文本" | RLHF/DPO 对齐训练 |
大模型能力评测指标
| 基准 | 测试内容 | 评估方式 |
|---|---|---|
| MMLU | 57 个学科的知识问答 | 多选题准确率 |
| HumanEval | 代码生成能力 | 生成代码的通过率 |
| GSM8K | 小学数学推理 | 解题准确率 |
| TruthfulQA | 生成真实回答的能力 | 人类评估 |
| MT-Bench | 多轮对话质量 | GPT-4 评分 |
| Chatbot Arena | 综合对话能力 | ELO 排名(人类盲评) |
推荐补充资源
| 知识点 | 推荐资源 | 说明 |
|---|---|---|
| RAGAS | RAGAS 论文 | 评估框架原始论文 |
| RAGAS 文档 | RAGAS 官方文档 | API 参考 |
| RAGAS GitHub | RAGAS GitHub | 开源实现 |
| SelfCheckGPT | SelfCheckGPT 论文 | 幻觉检测方法 |
| ARES | ARES 论文 | RAG 自动评估 |
| AgentBench | AgentBench 论文 | Agent 评估基准 |
| LLM-as-Judge | JudgeLM 论文 | LLM 评估 LLM |
模块小结:RAG 与 Agent 评估体系
| 你学到了什么 | 为什么重要 |
|---|---|
| RAGAS 四大指标 | 量化 RAG 系统的检索和生成质量 |
| Agent 评估五维度 | 从多个角度评估 Agent 表现 |
| 幻觉检测三种方法 | 识别和防范 LLM 最致命的问题 |
| 评估体系落地 | 建立持续优化的闭环 |
下一篇预告:本文建立了评估方法论。在 速通 AI(十):生产环境工程化 中,你将学习如何把 RAG 和 Agent 从 Notebook 阶段推向生产——Langfuse 可观测性、安全防护、错误处理、成本优化。