LLM / RAG / Agent Evaluation · 质量评估全景¶
一句话理解
LLM 应用没有评估就是盲飞 · 有评估才能迭代。本页覆盖三类评估:RAG 质量(Groundedness / Context / Answer)· 通用 LLM 任务(分类 / 摘要 / 代码 / 翻译)· Agent(Task Success / Tool Accuracy / Step Efficiency)。和 LLM Observability 分工:Obs 讲"发生了什么"· Eval 讲"质量怎么样"。
TL;DR
- RAG 质量 = Retrieval 质量 + Generation 质量 两层相乘
- 三个必测指标:Groundedness(有无幻觉)/ Context Relevance(召回准度)/ Answer Relevance(是否答到点)
- RAGAS / TruLens / Promptfoo 是主流开源评估框架
- 评估集要覆盖真实 query 分布,不是凭感觉选
- LLM-as-Judge 靠谱度可接受(85%+),值得作为自动化基线
RAG 质量的五维度¶
| 维度 | 含义 | 如何衡量 |
|---|---|---|
| Groundedness(扎实性) | 回答是否基于召回的材料,有没有幻觉 | LLM-as-Judge 逐句比对 |
| Context Relevance(上下文相关性) | 召回的材料对这个 query 是否相关 | 检索指标 + LLM 判 |
| Answer Relevance(答案相关性) | 回答是否真的回答了问题 | LLM 判 |
| Completeness(完整性) | 答案是否覆盖所有相关要点 | 人工或 LLM 判 |
| Citation Accuracy(引用准确性) | 引用的出处是否真的支持该主张 | 规则 + LLM 判 |
五个维度至少前三个必测。
主流工具¶
RAGAS¶
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_precision
dataset = Dataset.from_pandas(df) # 含 question/contexts/answer/ground_truth
result = evaluate(
dataset,
metrics=[faithfulness, answer_relevancy, context_precision],
)
print(result)
开源、Python 原生、主流。内置 LLM-as-Judge 实现。
TruLens¶
类似 RAGAS 但更强的 trace / 观测能力。每次 RAG 调用都有完整 span(检索 / rerank / generation),可以事后分析。
Langfuse¶
偏 LLM 可观测性产品,评估是其中一块。和 Prompt 管理一起用。
Promptfoo¶
配置文件驱动的评估,适合 CI 跑:
prompts: [file://prompts/rag.yaml]
providers: [openai:gpt-4]
tests:
- vars:
query: "如何取消订单?"
assert:
- type: llm-rubric
value: "answer should mention 订单管理中心"
- type: contains
value: "[source]"
评估集(Golden Set)设计¶
最关键。没有好评估集,工具再多也是玩具。
分布对齐真实流量¶
- 抓线上 200-500 条真实 query
- 标注正确答案 + 应被引用的 chunk
- 保证覆盖:问题类型(事实 / 比较 / 总结)× 难度(简单 / 中等 / 困难)× 语种
难度分层¶
Tier 1: 直接事实查询("产品 A 的价格")
Tier 2: 需要多 chunk 合成("对比 A 和 B")
Tier 3: 需要推理 / 多轮("根据历史数据推测…")
Tier 4: 反例 / 越界("怎么黑进系统?" → 应拒答)
Tier 1 你得 > 95%;Tier 3 > 70% 就很好;Tier 4 则应 100% 安全拒答。
维护¶
- 每季度抽样新 query 加入
- 发现生产 bad case → 加入评估集
- 旧 sample 退役要记录
LLM-as-Judge¶
用强 LLM(GPT-4 / Claude)当裁判打分:
judge_prompt = """
判断下面答案是否忠实于材料(Groundedness)。
材料:{contexts}
答案:{answer}
规则:
- 所有主张必须能在材料中找到支持 → 5 分
- 大部分能找到,小部分无法验证 → 3-4 分
- 关键主张找不到支持 → 1-2 分
只输出数字 1-5。
"""
一致性:LLM judge 和人工标注在多数任务上有 85%+ 一致率。足够自动化。
成本控制: - 小评估集跑 GPT-4 judge - 大规模跑 mini 模型 judge
CI 集成¶
# GitHub Actions
on: [pull_request]
jobs:
rag-eval:
steps:
- uses: actions/checkout@v4
- run: pip install ragas
- run: python evals/rag_eval.py --dataset golden.jsonl
- run: python evals/check_regression.py --threshold 0.85
CI 卡"任何一个指标掉 5% 以上" → 阻断合并。
常见陷阱¶
- 只看 metrics 不看 bad case —— 指标没动但新类别 query 崩了
- 评估集太小(< 30) —— 统计不显著
- 评估集和训练数据重合 —— 乐观高估
- 忽略成本维度 —— 质量涨 2% 但延迟 / 价格涨 5 倍
- LLM judge 用和 generator 同一个模型 —— 自己打自己有偏
评估报表示例¶
上线候选 vs 生产:
Metric Prod (baseline) Candidate Δ
Groundedness 0.89 0.92 +0.03 ✅
Context Relevance 0.76 0.82 +0.06 ✅
Answer Relevance 0.88 0.87 -0.01 ≈
Citation Accuracy 0.91 0.94 +0.03 ✅
Latency p95 (ms) 1200 1350 +12% ⚠️
Cost per query ($) 0.012 0.015 +25% ⚠️
必须把所有维度摆一起,而不是只看单一 metric。
通用 LLM 任务评估 · 非 RAG 场景¶
除了 RAG · 大量 LLM 应用是"通用任务"(分类 / 摘要 / 翻译 / 代码 / Chat)· 评估框架不同:
任务类型 × 评估维度¶
| 任务 | 主指标 | 典型工具 / Benchmark |
|---|---|---|
| 分类 | Accuracy · F1 · 混淆矩阵 | 自建 golden set · scikit-learn metrics |
| 摘要 | ROUGE · BLEU · BERTScore · LLM-as-Judge | ROUGE · Anthropic 摘要质量评分 |
| 翻译 | BLEU · COMET · METEOR · 人工 | sacreBLEU · COMET |
| 代码生成 | Pass@k · HumanEval · MBPP | EvalPlus · LiveCodeBench |
| Chat / 通用对话 | LLM-as-Judge · Arena ELO · 用户满意度 | Chatbot Arena · MT-Bench |
| Long-context | Needle-in-Haystack · RULER | RULER · Needle Test |
| 推理 | GSM8K · MATH · MMLU-Pro · Math-Verify | 公开 benchmark |
| Safety | ToxiGen · BOLD · 自建红队集 | Llama Guard 分类 |
| Instruction following | IFEval · LLM-as-Judge | IFEval |
关键原则¶
- 离线 benchmark + 在线 A/B 双轨:离线挡回归 · 在线看真实
- LLM-as-Judge 广泛适用但非万能:主观类任务效果好 · 客观类任务用硬指标
- 评估模型最好不是被评估模型:自己评自己有偏(详见 §陷阱)
- 任务不同指标不同 · 不要一刀切"answer relevance"
主流通用 Eval 工具¶
| 工具 | 定位 | 开源 |
|---|---|---|
| OpenAI Evals | OpenAI 官方 eval harness · 可扩展 | ✅ |
| DeepEval(Confident AI) | Pytest 风格 LLM eval · CI 友好 | ✅ |
| Promptfoo | Config 驱动 · CI 最顺 | ✅ |
| Braintrust | 商业 · Eval + Obs 一体 | ❌ |
| Langfuse Evaluations | 商业 / 自托管 · 内置 eval runner | ✅ MIT |
| lm-evaluation-harness(EleutherAI) | 学术 benchmark 统一 runner | ✅ |
Agent 评估 · 比 RAG 更难¶
详见 Agent Patterns § 7 Agent 评估 的 benchmark 部分。本节扩展生产维度:
生产 Agent 评估 5 维¶
| 维度 | 测法 | 数据源 |
|---|---|---|
| Task Success Rate | 最终结果是否正确 · LLM judge 或人工 | 生产抽样 + golden set |
| Tool Call Accuracy | 每步调用 tool 是否合理 · 参数是否对 | trace 数据(见 LLM Observability) |
| Step Efficiency | 平均完成步数 · 比理想多几步 | trace |
| Cost per Task | Token + tool 执行总成本 | 计费 / obs |
| Replan Rate | 中途 replan 比例高 = planner 差 | trace |
Agent Benchmark(再引用 · 加生产视角)¶
| Benchmark | 生产使用价值 | 注意 |
|---|---|---|
| SWE-bench(代码修复) | 高 · 接真实 GitHub issue | 自建变种更准 |
| τ-bench(客服) | 高 · 对齐真实业务流 | 适合客服 agent |
| WebArena(网页操作) | 中 · 测通用网页能力 | 具体业务仍需自建 |
| AgentBench | 中 · 通用 sanity check | 不代表自家任务 |
| GAIA | 低(SOTA < 40%)· 主要用于研究对标 | 生产用过高估模型 |
Agent 离线 Eval 模板¶
# pytest-style · DeepEval
from deepeval import evaluate
from deepeval.test_case import LLMTestCase
from deepeval.metrics import TaskCompletionMetric, ToolCorrectnessMetric
test_cases = [
LLMTestCase(
input="帮我分析过去一周销售异常",
expected_tools=["query_sales", "identify_anomaly", "vector_search"],
expected_output_contains=["异常商品", "原因分析"],
),
# ...
]
evaluate(
test_cases,
metrics=[TaskCompletionMetric(threshold=0.8), ToolCorrectnessMetric()],
)
生产 Agent 在线 Eval¶
- 用户反馈(👍/👎)作为 ground truth
- 采样人工复核 · 5-10% trace
- 灰度 eval:新 agent 版本小流量 · 对比旧版 metrics
- 关键任务每次运行后 LLM judge 一下 · 立即发现退化
Eval 和 Observability 的分工(重要)¶
Agent 评审 #2 点出过,两事混起来是常见误区:
| Observability(llm-observability) | Evaluation(本页) | |
|---|---|---|
| 回答什么 | 发生了什么 · 请求怎么走的 · 哪步慢 · 哪步贵 | 质量怎么样 · 答对没 · 有没有幻觉 |
| 数据 | Trace / Metrics / Logs · 实时生成 | Test cases / Golden set · 预先标注 |
| 用法 | 事故排查 · 监控告警 | 回归测试 · 质量闭环 · A/B |
| 频率 | 持续(每个请求) | 定期(PR / 版本 / 季度) |
| 工具 | Langfuse / Phoenix / OTel | RAGAS / DeepEval / Promptfoo / 自建 |
| 告警 | 技术指标(latency / error / cost) | 质量指标(groundedness / task success) |
| 联动 | Trace 数据可作为 Eval 输入 · Eval 可反哺 Obs 告警 |
组合才是完整: - Obs 发现 "latency 涨了" → 查 trace 定位 - Eval 发现 "groundedness 退化了" → 找到哪个 prompt 版本 + 回滚 - Obs trace → 抽样 → 人工标注 → 加入 Golden set → 下次 Eval 覆盖
相关¶
- RAG · Agent Patterns · Prompt 管理 · LLM Observability · Guardrails
- 检索评估(更基础,偏检索层)
- Rerank
延伸阅读¶
- RAGAS · TruLens · Promptfoo · DeepEval
- OpenAI Evals · lm-evaluation-harness (EleutherAI)
- SWE-bench · τ-bench · WebArena · GAIA · IFEval
- Chatbot Arena / MT-Bench
- RULER · Long-context benchmark · Needle-in-a-Haystack
- Evaluating RAG: A Practitioner's Guide(Pinecone / LlamaIndex 博客系列)