特辑导读:Evals 体系全景
一句话导读:这一章是全特辑的导航系统——用一张 ASCII 全景图、一张"问题→章节"对照表、一份 20 词全局术语表、一个 11 labs 清单、三条学习路线和一条 2024–2026 时间线,帮你在 30 分钟内建立 Evals 知识体系的全局坐标。无论你接下来是面试冲刺、从零搭建评测体系,还是跟踪前沿论文,都从本章出发。
一、知识图谱
本特辑(E00–E15,共 16 章)回答一个总问题:如何把 GenAI/Agent 系统"不稳定的智能行为",持续收敛成"可发布的工程质量"。15 个正篇章节按八个递进阶段组织:为什么评 → 评什么 → 拿什么评 → 谁来评 → 评什么形态 → 怎么让分数可信 → 怎么用评测驱动开发 → 外部坐标。
1.1 特辑全景图
【Evals 体系全景 · E01 → E15】
为什么评 ───── E01 为什么评估是 GenAI 工程的生命线
│ (三大难题:非确定性/黑盒化/错误级联;Airbnb 三大坑;四重身份)
▼
评什么 ─────── E02 评估指标体系
│ (P0/P1/P2 分层 × 五大维度 × pass@k/pass^k × 统计口径)
▼
拿什么评 ───── E03 黄金数据集与用例设计
│ (四类来源;触发→核心逻辑→产物质量→异常容错;治理与毕业机制)
▼
谁来评 ─────── E04 程序化评分 → E05 LLM-as-Judge → E06 人工评估与评分路由
│ (确定性优先;judge 校准 ≥85%;人工六大高杠杆场景)
▼
评什么形态 ─── E07 轨迹与 Agent 级评估 → E08 对话 Agent 与仿真评测
│ (step/trajectory/session 三层;用户模拟器 + fixtures)
▼
怎么让分数可信 ─ E09 评估的统计学基础
│ (置信区间;样本量;显著性;Bradley-Terry 与风格控制)
▼
怎么用 ─────── E10 评测驱动开发(EDD)→ E11 Badcase 根因分析 → E12 在线评估与数据飞轮
│ (发现→捕获→反复检查;badcase→行动项;生产流量→质量资产)
▼
外部坐标 ───── E13 Benchmark 全景与前沿争议 → E14 前沿论文全景 → E15 工业实践案例研究
(污染/饱和/Goodhart;2024–2026 九方向;Airbnb/DoorDash/阿里/腾讯)
一条主线贯穿全图:评分三层(程序化 → LLM Judge → 人工)是全特辑的脊柱,E04–E06 逐层深挖,其余章节要么定义三层的输入(E02 指标、E03 数据),要么定义三层的对象(E07 轨迹、E08 对话),要么给三层的输出加约束(E09 统计),要么消费三层的产出(E10–E12 闭环)。
1.2 问题 → 章节对照表
| 你带着的问题 | 去哪一章 | 该章给你的关键弹药 |
|---|---|---|
| 传统软件测试为什么在 GenAI 上失效?不做评测会掉进哪些坑? | 第 E01 章 | 三大根本难题、Airbnb 三大坑(虚假信心/未发现回归/指标脱节)、四个失效场景、评估经济学 |
| 指标怎么选、怎么分层?pass@k 和 pass^k 差在哪? | 第 E02 章 | P0 门禁/P1 比较/P2 观察、五大维度、一致性双指标、Goodhart 反模式 |
| 评测集从哪来?golden set 建多大?badcase 凭什么入库? | 第 E03 章 | 四类来源、四场景用例组织、50–200 条起步、毕业机制、幸存者偏差 |
| 哪些检查必须写成代码?评分输出为什么不能只有 pass/fail? | 第 E04 章 | 确定性优先、分层筛查流水线、扣分制、基线快照、LCS 轨迹对齐 |
| LLM judge 有哪些偏差?怎么校准到可进门禁? | 第 E05 章 | 四大偏差机理-量化-缓解、五步校准(Airbnb 78%→88%)、持续运营三统计、GEPA |
| 专家时间该花在哪?哪些样本必须送人工? | 第 E06 章 | 人工六大高杠杆场景、评分路由、标注工程与 IAA、人机分工决策表 |
| 结果碰巧对但路径错了怎么办? | 第 E07 章 | 假阳性案例、三层/四层过程评估、Transcript Builder 证据切片、评测镜像运行时架构 |
| 没有真实用户时怎么评多轮对话? | 第 E08 章 | Conversation Simulator、fixtures 冻结环境、checklist rubric、400 对话 6h+→20min |
| 85% vs 82% 的差异是真实的吗?需要多少样本? | 第 E09 章 | Wilson/bootstrap、样本量公式、配对显著性、最小可感知变化、Bradley-Terry |
| 评测怎么嵌进开发流程与 CI? | 第 E10 章 | EDD 五原则、100 样本精读法、一次一变量、capability/regression 双套件 |
| 失败怎么修、谁来修、修完怎么证明? | 第 E11 章 | RCA 五步、根因标签绑定 owner、结构化行动项、问题簇聚类 |
| 上线之后质量怎么守?数据飞轮怎么转? | 第 E12 章 | 每日 5% 抽样、离线-线上同一把尺子、三类信号联动回滚、反馈生产线 |
| τ-bench/SWE-bench 这些公开分数该怎么看待? | 第 E13 章 | benchmark 分类学、污染检测、饱和与 Goodhart、三层互补选型 |
| 2024–2026 这个领域发生了什么? | 第 E14 章 | 九个方向综述、代表论文、趋势判断 |
| Airbnb/DoorDash/阿里/腾讯具体是怎么做的? | 第 E15 章 | 四家一手案例全数字、共识 vs 独创横向对比、30/90 天落地路线图 |
1.3 特辑的三大件
| 组件 | 数量 | 说明 |
|---|---|---|
| 章节 | 16 章(E00–E15) | 知识体系主体,全部遵循 6 模块结构(知识图谱/核心概念/考点/面试题/易错点/资源) |
| labs | 11 个 | 纯 Python 标准库、零依赖、固定种子、带 assert 自检的可运行实验,见 2.3 节 |
| 调研报告 | 10 份(_research/00–10) |
四家工业实践一手精读 + 九个学术方向 2024–2026 论文调研,arxiv ID 逐条核实,是全特辑数字与引用的唯一事实源 |
二、核心概念精讲
2.1 与主手册第 8 章的关系:浓缩版 vs 深挖版
主手册(AI Agent 面试学习手册)第 8 章《Agent 评估与可观测性》是本特辑的"浓缩索引",本特辑是它的"全景深挖"。两者的分工:
| 维度 | 主手册第 8 章 | 本特辑(E00–E15) |
|---|---|---|
| 定位 | 面试速览:一章知识图谱扫完 | 体系深挖:16 章逐层展开 |
| 工业案例 | 点到结论 | 四家公司一手博客逐段精读,全部原始数字(第 E15 章) |
| 前沿论文 | 少量点名 | 10 份调研报告、上百条带 arxiv ID 的条目(第 E13/E14 章) |
| 动手实验 | 最小 harness 入门(主仓库 labs/ 的 lab05) |
11 个体系化深挖 labs,每个都有"有牙齿"的 assert |
| 统计深度 | 提到 Wilson/bootstrap | 公式 + 速查表 + 面试计算题专区(第 E09 章) |
| 适用场景 | 面试前 30 分钟唤起记忆 | 系统学习 / 搭建评测体系的案头参考 |
用法建议:先读主手册第 8 章建立粗略印象,再用本特辑按 2.4 节的路线深挖;面试前一天反过来——用主手册快速过一遍,用本章的高频考点表(第三节)查漏。
2.2 全局术语表(20 词)
这 20 个词是全特辑的通用语言,面试中它们出现频率最高:
| # | 术语 | 英文原文 | 一句话定义 | 详解 |
|---|---|---|---|---|
| 1 | 评估 | Evals | 对 GenAI 系统质量的系统性测量;不是上线前抽查,而是贯穿开发、发布、运行的持续门禁 | E01 |
| 2 | 黄金数据集 | Golden Set | 经人工确认、长期复用的核心评测集;50–200 条起步,必须含坏样本 | E03 |
| 3 | 评分标准 | Rubric | 写给 judge 的判定标准:描述"成功长什么样"而非指定唯一答案;二元检查或分级打分 | E05 |
| 4 | LLM 评审 | LLM-as-a-Judge | 强模型按 rubric 给另一模型的输出打分;便宜可扩展,但自带偏差、必须校准 | E05 |
| 5 | Judge 校准 | Judge Calibration | 用人工标注的 gold 集测 judge 一致率;四家共识线 ≈85%(Airbnb high 80s~90s) | E05/E06 |
| 6 | 程序化评分器 | Programmatic Scorer | 代码写死的规则检查(schema/关键词/工具断言);毫秒级、100% 稳定、进硬门禁 | E04 |
| 7 | pass@k | pass@k | k 次运行至少 1 次成功的比例,度量能力上限 | E02/E09 |
| 8 | pass^k | pass^k | k 次运行每次都要成功的比例,度量生产稳定性;若单次成功率 p 独立同分布则 ≈ p^k | E02/E09 |
| 9 | 指标分层 | P0/P1/P2 | P0 上线门禁(不达标不发)/ P1 版本比较与工程优化 / P2 体验观察(阿里) | E02 |
| 10 | 执行轨迹 | Trace / Span | Agent 的结构化执行记录:每次工具调用、模型输出是一个 span,树状组织成 trace | E07 |
| 11 | 证据切片 | Transcript Builder | DoorDash 的 trace 塑形组件:每条标准声明依赖的证据,judge 只拿到那一片 | E07 |
| 12 | 固定装置 | Fixtures | 用录制的工具返回替代实时调用,冻结外部状态;环境不受控时分数测量的是噪声 | E08 |
| 13 | 用户模拟器 | User Simulator | LLM 扮演用户驱动多轮对话,解决"无法拿真用户安全彩排"的问题 | E08 |
| 14 | 适用性前置 | Eligibility | judge 先判"该标准是否适用于本会话",不适用则跳过,防止误扣分(DoorDash) | E05 |
| 15 | 置信区间 | Confidence Interval | 给分数挂误差条:二项比例用 Wilson 区间或 bootstrap;门禁看区间而非点估计 | E09 |
| 16 | 竞技场评分 | Bradley-Terry | 从成对比较估计模型强度的排名模型;配 bootstrap CI,CI 重叠视为不可区分 | E09/E13 |
| 17 | 污染 | Contamination | benchmark 题目进入训练数据,分数测的是记忆而非能力;检测靠成员推断/改写变体等 | E13 |
| 18 | 古德哈特定律 | Goodhart's Law | 指标一旦成为优化目标就不再是好指标:benchmark 被刷、proxy 与 gold 背离 | E02/E13 |
| 19 | 评测驱动开发 | EDD | GenAI 版 TDD:发现错误 → 捕获为测试 → 反复检查(Airbnb);配套五原则与迭代纪律 | E10 |
| 20 | 根因分析 | RCA | badcase 归因流水线:证据汇总→范围收敛→分模块诊断→责任判定→结构化落盘(阿里五步) | E11 |
2.3 11 个 labs 一览
全部 labs 位于 evals-special/labs/,纯 Python 标准库实现、固定种子、确定性可复现,运行命令统一为 cd evals-special/labs && python3 <文件名>。每个 lab 末尾的 assert 直接断言本章核心结论(不是"程序跑完了",而是"缓解后偏差显著缩小"这类有牙齿的命题)。
| Lab | 文件 | 对应章节 | 你将搞懂 |
|---|---|---|---|
| 01 | eval_lab01_metric_system.py |
E02 | pass@k/pass^k 的无偏估计;p=0.8 的 agent 从 pass^1 到 pass^8 单调下滑;容忍阈值分级 |
| 02 | eval_lab02_golden_dataset.py |
E03 | 四类来源构造、"先定结构字段再生成自然语言"、入库标准检查、能力集→回归集毕业流转 |
| 03 | eval_lab03_programmatic_scorers.py |
E04 | 规则评分器家族与评分输出规范;粗筛→精判分层路由能省多少成本 |
| 04 | eval_lab04_judge_bias.py |
E05 | 位置/冗长/自我偏好三种偏差的注入与量化;swap-and-average、多 judge 投票的缓解效果 |
| 05 | eval_lab05_judge_calibration.py |
E05/E06 | 复现 Airbnb 案例:字面重叠 rubric 误罚正确改述(一致率 <82%)→ 修订后 ≥85%;kappa 监控 |
| 06 | eval_lab06_trajectory_eval.py |
E07 | step/trajectory/session 三层评分;"结果对但路径错"的假阳性如何被 outcome-only 漏掉、被轨迹分抓住 |
| 07 | eval_lab07_simulator_fixtures.py |
E08 | 状态机驱动的模拟用户 + fixtures;对照组证明:漂移环境下评分方差显著变大 |
| 08 | eval_lab08_statistics_ci.py |
E09 | Wilson vs Wald、bootstrap CI 覆盖率验证、样本量计算器、3% 差异在 N=100 不可判而 N=2000 可判 |
| 09 | eval_lab09_rca_pipeline.py |
E11 | RCA 五步全流水线(含"已发货退款未查订单状态"案例);问题簇聚类输出 |
| 10 | eval_lab10_edd_loop.py |
E10 | EDD 全闭环:门禁、一次一变量、"修 B 改坏旧场景"的回归陷阱被拒、回归集只增不减 |
| 11 | eval_lab11_arena_bradley_terry.py |
E09/E13 | Bradley-Terry 极大似然、Elo 对照、bootstrap 强度差 CI;长度混杂让朴素 BT 把"长"误判为"强" |
2.4 三条学习路线
路线 ①:面试冲刺(约 2 小时) —— 目标:能答出全局框架题 + 高频深挖题。
| 时间 | 内容 | 目的 |
|---|---|---|
| 0:00–0:15 | 本章全景图 + 第 E01 章(三大难题、三大坑) | 建立骨架,答好"为什么"类开场题 |
| 0:15–0:35 | 第 E02 章(P0/P1/P2、pass@k/pass^k)+ eval_lab01 |
指标口径张口就来 |
| 0:35–1:05 | 第 E05 章(judge 解剖、四大偏差、78%→88% 校准) | 全特辑最高频深挖题 |
| 1:05–1:25 | 第 E07 章(假阳性、三层评估)+ 第 E09 章关键公式(Wilson、样本量) | 过程评估 + 统计,高级岗分水岭 |
| 1:25–1:45 | 第 E10 章(EDD 五原则、100 样本法)+ 第 E11 章(RCA 五步) | 方法论与闭环 |
| 1:45–2:00 | 第 E15 章(四家数字与横向对比)+ 回看本章考点表与易错点 | 背住面试弹药 |
路线 ②:从零搭建评测体系(工程师,约 4 周,配 labs) —— 目标:真的建起来。
| 周次 | 章节 | 动手 labs | 阶段产出 |
|---|---|---|---|
| W1 | E01 → E02 → E03 | lab01、lab02 | 指标清单(P0/P1/P2 分层)+ 50–200 条 golden set(含坏样本) |
| W2 | E04 → E05 → E06 | lab03、lab04、lab05 | 三层评分流水线;judge 校准到 ≥85% 一致率并留档分歧分析 |
| W3 | E07 → E08 → E09 | lab06、lab07、lab08 | 过程级评分(防假阳性)+ 模拟器/fixtures + 门禁统计口径 |
| W4 | E10 → E11 → E12 → E15 | lab10、lab09、lab11 | CI 门禁 + RCA 流水线 + 飞轮雏形;对照 E15 的 30/90 天路线图验收 |
路线 ③:研究跟进(论文读者) —— 目标:掌握 2024–2026 学术地图。先读第 E13/E14 章建立分类学,再按方向进入 _research/ 调研报告(每份都给出核心论文的 arxiv ID、机构、关键数字与工程意义):
| 方向 | 调研报告 | 入口论文(arxiv) |
|---|---|---|
| LLM-as-a-Judge | _research/01-llm-judge.md |
JudgeBench 2410.12784;Judging the Judges 2604.23178;GEPA 2507.19457 |
| Agent 基准 | _research/02-agent-benchmarks.md |
τ-bench 2406.12045;SWE-bench 2310.06770;Terminal-Bench 2601.11868 |
| 轨迹评估 | _research/03-trajectory-eval.md |
Let's Verify Step by Step 2305.20050;Agent-as-a-Judge 2410.10934;AgentRewardBench 2504.08942 |
| 统计方法 | _research/04-statistics.md |
Chatbot Arena 2403.04132;Arena 统计框架 2412.18407;报告规范 2511.21140 |
| Benchmark 动态 | _research/05-benchmark-dynamics.md |
LiveBench 2406.19314;MMLU-Redux 2406.04127;GSM-Symbolic 2410.05229 |
| EDD 与仿真 | _research/06-edd-simulation.md |
EDDOps 2411.13768;Nubank 2606.08867;τ²-bench 2506.07982 |
| 安全评测 | _research/07-safety-eval.md |
AgentDojo 2406.13352;Agent-SafetyBench 2412.14470;InjecAgent 2403.02691 |
| 组件级(RAG) | _research/08-component-rag.md |
RAGAS 2309.15217;RAGChecker 2408.08067;FActScore 2305.14251 |
| 自改进与 reward hacking | _research/09-self-improvement.md |
Self-Rewarding 2401.10020;DeepSeek-R1 2501.12948;Sycophancy to Subterfuge 2406.10162 |
| 基础设施与可观测性 | _research/10-infra-observability.md |
TRAIL 2505.08638;AgentTrace 2602.10133;EleutherAI 可复现性 2405.14782 |
2.5 Evals 领域时间线(2024–2026,15 个节点)
以下节点全部提炼自 _research/ 十份调研报告,arxiv ID 与年份以调研报告核实结果为准;工业实践节点以博客发布时间为准。
| 时间 | 节点 | 类型 | arxiv / 来源 | 意义 |
|---|---|---|---|---|
| 2024-03 | Chatbot Arena 论文 | Arena/统计 | 2403.04132 | Bradley-Terry 评分 + bootstrap CI,众包偏好评测的方法论定型 |
| 2024-03 | LiveCodeBench | 动态基准 | 2403.07974 | 按时间截止线持续采新题,让"污染距离"可量化 |
| 2024-05 | Prometheus 2 | Judge 模型 | 2405.01535 | 开源评测专用模型:judge 从提示词工程走向模型工程 |
| 2024-06 | τ-bench | Agent 基准 | 2406.12045 | 工具-Agent-用户三方交互 + 用户模拟器 + 终态数据库验证 + pass^k;GPT-4o 在 retail 域 pass^1≈60% 但 pass^8 跌到 ≈25%(官方榜单与论文摘要口径) |
| 2024-06 | MMLU-Redux | 基准信任危机 | 2406.04127 | 重标注 2,908 道题发现约 10% 有误或歧义;同期 LiveBench(2406.19314)开始按月换题 |
| 2024-08 | GenRM | 生成式验证器 | 2408.15240 | 把奖励建模变成 next-token prediction,"可训练 judge"序幕 |
| 2024-10 | JudgeBench | Judge 元评估 | 2410.12784 | 用客观真值校准 judge:前沿 judge 在困难任务准确率仅 ~57% 量级——judge 间高一致 ≠ judge 正确;同月 Agent-as-a-Judge(2410.10934) |
| 2024-11 | EDD/EDDOps 过程模型 | 方法论 | 2411.13768 | EDD 从口号变成有过程模型与参考架构的工程学科(2025-11 v3 加入 Operations) |
| 2025-01 | Humanity's Last Exam | 难度军备 | 2501.14249 | 三千道专家级难题,发布时最强前沿模型准确率不足 10%;同月 DeepSeek-R1(2501.12948)让"评测集即 RL 奖励"成为焦点 |
| 2025-06 | τ²-bench | 双控仿真 | 2506.07982 | 用户侧也是带工具的 Agent,双方信息不对称,解决模拟器"配合性泄题" |
| 2025-07 | GEPA | Judge 优化 | 2507.19457 | 反射式 prompt 进化:比 GRPO 平均 +6%(最高 +20%)、rollouts 最多省 35 倍;DoorDash 与 Nubank 用它校准 judge |
| 2025-10/11 | Don't Pass@k + judge 报告规范 | 统计规范 | 2510.04265、2511.21140 | 系统批判 pass@k 小样本方差并给贝叶斯替代;提出偏差校正估计量 + CI 的汇报规范 |
| 2026-01 | Terminal-Bench 论文 | 基准工业化 | 2601.11868 | 终端 Agent 评测标准化(ICLR 2026),Terminus 参考 agent 把 harness 与模型能力解耦;同月 Anthropic《Demystifying evals for AI agents》把 EDD 写入官方开发指南 |
| 2026-06 | Nubank 亿级用户 EDD | 离线-线上证据 | 2606.08867 | 首个大规模量化证据:离线仿真指标与线上 A/B 强相关(卡片配送场景 NPS +37pp);"评测流水线质量 = 迭代速度上限" |
| 2026(2026-08 精读) | 四大厂工业实践 | 工业实践 | Airbnb/DoorDash(2026-06-30)/阿里/腾讯工程博客 | EDD 五原则与 judge 校准 78%→88%、Transcript Builder 与 fixtures、RCA 五步与质量资产库、扣分制与容忍阈值——本特辑全部工业数字的原始出处(详见 _research/00-industry-practice.md) |
读时间线的三个视角:① judge 线——从偏差 catalog(2024 上)→ 元评估(2024 下)→ 可训练 judge(2024–2025)→ judge 优化与攻防(2025–2026),详见第 E05/E14 章;② 基准线——从环境奠基 → 难度军备 → 信任危机(污染/饱和/harness 混淆),详见第 E13 章;③ 方法论线——EDD 从博客口号到学术过程模型再到亿级用户生产验证,详见第 E10 章。
2.6 本特辑的引用约定(读其他章节前先知道)
- 内容基准日 2026-08。前沿论文标注 arxiv ID 与年份,全部来自
_research/调研报告;工业数字全部来自_research/00-industry-practice.md(四篇官方工程博客的一手精读笔记)。 - 核实状态:调研报告对每条 arxiv ID 做了核实,无法核实的条目标注【未核实】。正文引用这类条目时保留该标注(例如 VisualWebArena 2401.13649【未核实】、SWE-bench Pro 2509.16941【未核实】),引用前建议二次确认。
- 交叉引用格式:
(详见第 E5 章 · LLM-as-Judge 深入)指本特辑章节;(主手册第 8 章 · Agent 评估与可观测性)指主手册;labs/eval_labNN_xxx.py指实验。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | 三大根本难题:非确定性 / 黑盒化 / 错误级联 | ⭐ | 一切"为什么"类问题的起点,后续每个设计都在回应它们 |
| 2 | 三层评分架构与路由(确定性 > Rubric > 人工) | ⭐ | 是否理解评分体系是"按成本/稳定性/覆盖分层"的流水线而非三选一 |
| 3 | pass@k vs pass^k:能力上限 vs 生产稳定性 | ⭐⭐ | 最基础的指标陷阱;无人值守系统必须汇报 pass^k |
| 4 | Golden Set 设计:四类来源、必须含坏样本、幸存者偏差 | ⭐⭐ | 是否真的建过评测集,而非只用线上随机抽样 |
| 5 | Judge 四大偏差与 ~85% 校准线 | ⭐⭐ | 全特辑最高频深挖题:未校准 judge 制造误导性信心 |
| 6 | 假阳性(结果对、路径错)与三层过程评估 | ⭐⭐ | 是否理解 Agent 评估与 chatbot 评估的本质差异 |
| 7 | 统计门禁:置信区间 + 显著性 + 最小可感知变化 | ⭐⭐⭐ | "分数可信吗"是高级岗分水岭,能现场算 CI 加分巨大 |
| 8 | EDD:100 样本精读法 + 一次一变量 | ⭐⭐ | 方法论题:没有评测基建时怎么冷启动、怎么归因 |
| 9 | RCA 五步与根因标签绑定 owner | ⭐⭐⭐ | 系统设计深水区:评测平台的价值在行动项不在报表 |
| 10 | 离线-线上一把尺子与三类信号回滚 | ⭐⭐⭐ | 发布体系设计:离线升线上降 → 回滚或降级 |
| 11 | Benchmark 污染、饱和与 Goodhart | ⭐⭐ | 是否对公开分数有批判性:分数测的可能是记忆或 harness |
| 12 | 仿真评测架构:模拟器 + fixtures + 证据切片 | ⭐⭐⭐ | DoorDash 式系统设计题:环境不受控时分数测量的是噪声 |
四、经典面试题与参考答案
题 1(基础):用三分钟向一位新同事介绍 evals 知识体系,你会怎么组织?
参考答案: 用八个递进问题串起来:① 为什么评——GenAI 有非确定性、黑盒化、错误级联三大难题,传统测试失效,评估是质量度量、发布门禁、迭代指南针、数据飞轮入口四重身份(E01);② 评什么——指标分 P0 门禁/P1 比较/P2 观察三层,横切功能、过程、效率、鲁棒、体验五维度(E02);③ 拿什么评——golden set 四类来源、四场景组织、含坏样本、治理毕业(E03);④ 谁来评——程序化 → LLM judge → 人工三层,确定性优先,judge 校准到 ≥85%,人工做六个高杠杆场景(E04–E06);⑤ 评什么形态——轨迹三层评估防"结果对路径错"的假阳性,对话用模拟器 + fixtures(E07–E08);⑥ 怎么让分数可信——置信区间、样本量、显著性(E09);⑦ 怎么用——EDD 把评测嵌进开发,RCA 把失败变行动项,在线评估把生产流量变资产(E10–E12);⑧ 外部坐标——benchmark、前沿论文与工业实践(E13–E15)。最后补一句总纲:评测的终点不是报告,是可执行的行动项。
题 2(基础):传统软件测试为什么在 GenAI 系统上不够用?请给出具体失效场景。
参考答案: 根因是三大难题:非确定性(同输入不一定同输出,断言语义失效)、黑盒化(内部决策不透明,无法按代码路径覆盖)、错误级联(多步链路前步小错被后续放大)。阿里补充了更隐蔽的一条:有些样本最终答案看似对,但执行路径已偏离或带风险——这类假阳性在测试报告里不可见。四个典型失效场景:① 同一 prompt 跑通一次 ≠ 稳定可用(一次成功没有统计意义);② 每次改 prompt/模型/工具参数都可能悄悄改坏旧场景,无回归集则无人知晓(Airbnb"未被发现的回归");③ 多步链路前一个小偏差被放大成错误结论;④ 结果碰巧对但路径错(如跳过了关键校验工具),纯结果测试系统性放过。对策不是放弃测试,而是换范式:EDD——发现 → 捕获 → 反复检查失败模式,加上统计化的多次试验与分层评分。
题 3(进阶):pass@k 和 pass^k 的区别是什么?一个无人值守的客服 Agent,你向老板汇报哪个数?
参考答案: pass@k = k 次运行至少 1 次成功的任务比例,度量能力上限;pass^k = k 次运行每次都要成功的任务比例,度量生产可靠性。若单次成功率 p 且各次独立,pass^k ≈ p^k:p=0.9、k=8 时只剩 0.43。τ-bench(arxiv 2406.12045)的数字最直观:GPT-4o 在 retail 域 pass^1 ≈60%(官方榜单 60.4%),但 pass^8 跌到 ≈25%(摘要口径 <25%)——"单次看起来不错"与"可部署"之间有巨大鸿沟。无人值守客服必须汇报 pass^k(工程惯例 k=4–8,同时报 pass@1 展示差距):用户不会接受"多试几次总有一次成功",阿里把这两个指标称为一致性双指标——至少一次成功率是能力上限,连续成功率才是生产级场景(客服/支付/退款/合规)的发布依据;腾讯进一步给出容忍阈值分级:关键决策类 0% 容忍(N 次全过),辅助分析类 ≤10%,创意生成类 ≤40%。
题 4(进阶):为什么说 LLM-as-a-Judge 是"不得不用、又不可全信"的测量仪器?给出你的治理方案。
参考答案: 不得不用:语气、有据性、策略合理性这些语义维度规则判不了,人工又不可扩展——DoorDash 把"规模化判断"列为五大挑战之一,答案是校准过的 judge 顶替人类评审。不可全信:judge 自带位置、冗长、自我偏好、风格压倒实质四大偏差;JudgeBench(arxiv 2410.12784)用客观真值测出前沿 judge 在困难任务准确率仅 ~57% 量级;且 judge 间高一致 ≠ 正确,可能"集体犯错"。治理方案四步:① rubric 工程——每个质量维度一个 judge(Airbnb 少而精,3–5 个)、judge 与生成模型不同源、二元检查 + eligibility 适用性前置、按标准切片证据(Transcript Builder,judge 只看该标准依赖的证据);② 校准闭环——50–100 条 gold 集(必须含坏样本)→ 跑 judge → 目标一致率 high 80s~90s(四家共识 ≈85%)→ 分歧分析改 rubric → 重复;Airbnb 实战 78%→88% 的根因是 rubric 误罚正确改述,不是模型弱;③ 持续运营——judge 升级必重校准,跟踪三项统计:与人工一致性、高风险漏判率、边界稳定性(阿里);④ 防操纵——judge 消费外部内容时防检索投毒与注入,安全 judge 可被对抗样本打穿(Know Thy Judge,arxiv 2503.04474)。
题 5(进阶):你的离线评测分数涨了,但线上投诉没降。可能出了什么问题?怎么系统性排查?
参考答案: 按五个嫌疑排查:① 评测集分布 ≠ 线上分布——线上随机抽样有幸存者偏差(正常流程占多数、易错边缘占比低),反过来离线集也可能漏掉真实高频场景;用生产抽样回流核对分布(Airbnb 每日抽 5% 去标识化流量);② 离线-线上两把尺子——各自维护 judge 时两边分数会以难调和的方式背离(DoorDash 教训三);必须是同一 rubric + 同一校准 judge 两边跑;③ Goodhart——指标被优化目标刷爆:回归集被"背答案"、judge 被风格讨好、长度偏差被利用;检查 proxy 指标与 gold 信号(在线体验/业务结果)是否背离;④ 维度缺失——离线只测了功能正确性,没测体验与对齐(P2 决定产品生死)与效率成本;⑤ 漂移——线上输入分布变了而评测集没跟上。组织层面的兜底是阿里的三类信号联动:离线质量信号、线上体验信号(转人工率、重复追问率、投诉率、满意度)、业务结果信号——离线提升但线上关键信号恶化,触发回滚或降级。Nubank(arxiv 2606.08867)的正面证据:当评测流水线质量足够高时,离线仿真指标与线上 A/B 强相关。
题 6(进阶):你怎么看待 τ-bench、SWE-bench 这类公开 benchmark 的分数?如果只能选一个指标向老板汇报"我们的 Agent 变强了",你选哪个?
参考答案: 公开 benchmark 是外部坐标:可横向对比、有社区共识,价值真实但有三大折扣:① 污染——题目进训练语料,分数测记忆而非能力(Min-K% Prob 成员推断、改写变体检测是主流手段);② 饱和与质量——MMLU-Redux(arxiv 2406.04127)发现约 10% 题目有误,SWE-bench 头部分数逼近 70%+ 后社区转向更难的基准,GSM-Symbolic(arxiv 2410.05229)证明只改名字/数字就能让分数暴跌至多 65%;③ harness 混淆与低相关性——同一模型换执行框架分数差异巨大,Princeton HAL 等工作发现不同基准间分数相关性很低、与真实用户满意度弱相关。所以成熟团队的选型是三层互补:公开 benchmark(外部坐标)+ 私有 golden set(真实业务分布,含坏样本,持续治理)+ 在线信号(地面真值:任务完成率、转人工率、满意度)。只能选一个汇报,选私有 golden set 上的核心指标(带置信区间与 pass^k):它离业务最近、不受污染、且能解释"为什么涨"。汇报时主动说明口径与误差条,比报一个虚高的公开分数更能建立信任。
题 7(系统设计):你加入一个还没有评测体系的 Agent 团队,如何从零搭建?给出落地计划并映射到本特辑章节。
参考答案: 30 天(最小可用):W1 Trace 前置——结构化 trace 是被测 Agent 的标准能力而非事后补救:JSONL、每步工具名/入参/返回/时间戳、跨版本格式稳定(第 E07 章);W1–W2 跑约 100 个样本人工精读输出与 trace,归类错误——"When in doubt, look at your data"(第 E10 章);W2–W3 建 50–200 条 golden set,四类来源(专家设计/结构字段先行的 LLM 扩展/线上真实数据/badcase 回流),必须含坏样本(第 E03 章);W3–W4 程序化评分第一批:schema/空输出/关键词/工具调用断言/执行指标,确定性优先(第 E04 章),并建基线快照接 CI。90 天(体系闭环):3–5 个按维度拆分的 judge 校准到 ≥85% 一致率(第 E05 章);fixtures + 会话模拟器冻结环境,全量回归从 6h+ 压到 20min 量级(第 E08 章);P0 门禁带统计口径——置信区间 + 显著性 + 最小可感知变化,一致性看连续成功率(第 E02/E09 章);能力集/回归集分治与毕业机制(第 E03/E10 章);RCA 五步 + 根因标签绑定 owner + 结构化行动项(第 E11 章);每日抽样去标识化流量、离线-线上同一把尺子、离线升线上降即回滚(第 E12 章)。组织上:指定人类终判者、每周 PM 评审新增测试(Airbnb 原则)。验收标准用阿里口径:低分能否稳定转成行动项。
题 8(系统设计):如何设计一条数据飞轮,让评测体系随生产运行自动变强?
参考答案: 飞轮四段:生产流量进 → badcase 出 → 资产出 → 下一版本带着资产上线。① 入口:在线每日抽样去标识化流量(Airbnb 5%),分层优先高风险/低置信/新意图;badcase 双通路(离线评测集 + 线上会话/质检/工单/低满意度/告警)汇入同一任务表(第 E12/E11 章)。② 入库标准(不是所有失败都值得进库):失败可复现、期望行为明确、根因标签清楚、样本有代表性、已脱敏合规(阿里)。③ 三条生产线:badcase → 评测集(新用例,先入能力集,连续通过后毕业进回归集,只增不减);badcase → 训练数据(SFT/偏好对);badcase → 知识修订(检索库/政策口径)。样本治理:同簇留代表例、P0/P1 风险长期保留、稳定多版本通过者降级抽样集、主动学习抽低置信样本进人工确认。④ 产出与验证:沉淀质量资产库六件套——用例库、Trace 库、根因标签库、修复建议库、Judge 校准集、回归集;飞轮转速的验收看两个信号:离线评测与线上指标的相关性(Nubank 证据:离线仿真与线上 A/B 强相关,卡片配送 NPS +37pp),以及同类问题复发率下降。关键纪律:评测系统自己也产生 bug 报告——被标记失败中有真实一部分是 harness 自身故障(judge 误报、trace 缺口),必须并行修复(DoorDash)。
五、易错点 · 反直觉点
- 误区:"跑几条 case 感觉还行"就算评过了。 真相:同一 prompt 跑通一次 ≠ 稳定可用;阿里把这是列为评测体系的第一反面教材——非确定性下,单次成功没有统计意义,必须多 trial 并区分能力与稳定性。记忆锚点:一次跑通是轶事,不是证据。
- 误区:pass@1 高就可以上线。 真相:pass^k 才是生产口径——p=0.9 的系统 k=8 时只剩 0.43;τ-bench 中 GPT-4o retail pass^1≈60% 而 pass^8≈25%。用户不接受"多试几次总有一次成功"。记忆锚点:能力上限看至少一次,生产可靠看连续成功。
- 误区:线上随机抽样就能当评测集。 真相:线上样本有幸存者偏差——正常流程占多数、易错边缘占比低,随机采样报告"看起来不错"但关键问题漏掉(阿里)。记忆锚点:随机抽样的评测报告是虚假信心。
- 误区:judge 之间意见一致,说明 judge 靠谱。 真相:JudgeBench(arxiv 2410.12784)显示 judge 间一致性高但可能"集体犯错",前沿 judge 在客观困难任务准确率仅 ~57% 量级;一致率必须对照人工标注的 gold 集测量,且 gold 集必须含坏样本。记忆锚点:judge 的可信度靠人工锚点校准,不靠 judge 互相投票。
- 误区:只看最终答案对不对就够了。 真相:结果碰巧对、路径已经错的假阳性(如跳过关键校验工具、编造了中间数据)在 outcome-only 评测下全部漏过,在生产迟早暴露;必须加 step/trajectory/session 过程评估(第 E07 章)。记忆锚点:答案对 ≠ 过程对,过程错迟早爆雷。
- 误区:公开 benchmark 分数 = 模型/系统的绝对能力。 真相:分数可能被污染(记忆而非推理)、被 harness 工程抬高、被 Goodhart 刷爆;MMLU-Redux 还证明题目本身可能有约 10% 的错误。公开分数只是外部坐标之一。记忆锚点:benchmark 测的是"模型+题集+harness"三元组,不是能力本身。
- 误区:离线一套 judge、线上另一套 judge,各自调到最好。 真相:DoorDash 教训三——各自调 judge,两边分数会以难调和的方式背离;离线结论只有能带到线上才有意义。记忆锚点:同一 rubric、同一 judge,一把尺子量两边。
- 误区:评测的价值是把分数算准、把报告做漂亮。 真相:阿里第 10 章——评测体系的成败取决于能否在跨团队协作中长期、稳定地把低分转成可执行行动项(带失败范围/证据/owner/验收方式),否则再精细的分数也只是报表。记忆锚点:评测的终点是行动项,不是报告。
六、推荐资源
6.1 全特辑章节索引
| 章节 | 一句话定位 |
|---|---|
| 第 E01 章 · 为什么评估是 GenAI 工程的生命线 | 三大难题、三大坑、四重身份、评估经济学 |
| 第 E02 章 · 评估指标体系 | P0/P1/P2 × 五维度 × pass@k/pass^k × 反模式 |
| 第 E03 章 · 黄金数据集与用例设计 | 四类来源、四场景组织、治理与毕业机制 |
| 第 E04 章 · 评分三层之一:程序化评分 | 确定性优先、分层筛查、扣分制、LCS 对齐 |
| 第 E05 章 · 评分三层之二:LLM-as-Judge 深入 | 偏差全景、五步校准、持续运营、GEPA |
| 第 E06 章 · 评分三层之三:人工评估与评分路由 | 六大高杠杆场景、标注工程、人工路由 |
| 第 E07 章 · 轨迹与 Agent 级评估 | 假阳性、三层模型、Transcript Builder |
| 第 E08 章 · 对话 Agent 与仿真评测 | 模拟器、fixtures、checklist rubric、τ-bench |
| 第 E09 章 · 评估的统计学基础 | Wilson/bootstrap、样本量、BT、计算题专区 |
| 第 E10 章 · 评测驱动开发(EDD) | 五原则、100 样本法、一次一变量、CI 门禁 |
| 第 E11 章 · Badcase 根因分析与优化闭环 | RCA 五步、根因标签、结构化行动项 |
| 第 E12 章 · 在线评估与数据飞轮 | 5% 抽样、三类信号、反馈生产线、质量资产库 |
| 第 E13 章 · Benchmark 全景与前沿争议 | 分类学、污染检测、饱和、三层互补选型 |
| 第 E14 章 · 前沿论文全景(2024–2026) | 九方向综述、代表论文、趋势判断 |
| 第 E15 章 · 工业实践案例研究 | Airbnb/DoorDash/阿里/腾讯深挖与 30/90 天路线图 |
6.2 调研报告索引(全特辑的事实源)
| 报告 | 方向 | 服务的章节 |
|---|---|---|
_research/00-industry-practice.md |
四大厂工业实践一手精读(全部原始数字) | E01–E12、E15 |
_research/01-llm-judge.md |
LLM-as-a-Judge 前沿(15 篇核心 + 延伸) | E05、E06、E14 |
_research/02-agent-benchmarks.md |
Agent 基准全景(τ-bench 到 Terminal-Bench) | E08、E13、E14 |
_research/03-trajectory-eval.md |
轨迹评估与信用分配(PRM/Agent-as-a-Judge) | E07、E14 |
_research/04-statistics.md |
统计方法(BT/CI/样本量/Arena 操纵) | E09、E13 |
_research/05-benchmark-dynamics.md |
污染/饱和/动态基准/Goodhart | E13、E14 |
_research/06-edd-simulation.md |
EDD 过程模型与用户仿真 | E08、E10、E14 |
_research/07-safety-eval.md |
安全评测(越狱/注入/过度拒绝) | E02、E14 |
_research/08-component-rag.md |
组件级评估(RAG/事实性/归因) | E04、E14 |
_research/09-self-improvement.md |
自改进与 reward hacking | E10、E14 |
_research/10-infra-observability.md |
评测基础设施与可观测性 | E07、E12、E14 |
6.3 关键论文索引(按方向,arxiv ID 均经调研报告核实)
Judge 与元评估:MT-Bench 与 judge 奠基(2306.05685,2023);Prometheus 2(2405.01535,2024);JudgeBench(2410.12784,2024,ICLR 2025);GenRM(2408.15240,2024);GEPA(2507.19457,2025);Know Thy Judge(2503.04474,2025);Judging the Judges(2604.23178,2026)。
Agent 基准:τ-bench(2406.12045,2024);τ²-bench(2506.07982,2025);GAIA(2311.12983,2023,ICLR 2024);SWE-bench(2310.06770,2023,ICLR 2024);OSWorld(2404.07972,2024);Terminal-Bench(2601.11868,2026,ICLR 2026);Humanity's Last Exam(2501.14249,2025);Agent-as-a-Judge(2410.10934,2024)。
轨迹与信用分配:Let's Verify Step by Step(2305.20050,2023);Math-Shepherd(2312.08935,2023);VinePPO(2410.01679,2024);PRIME(2412.01981,2024);AgentRewardBench(2504.08942,2025);TRAIL(2505.08638,2025)。
统计与报告规范:Chatbot Arena(2403.04132,2024,ICML 2024);Arena-Hard(2406.11939,2024);Length-Controlled AlpacaEval(2404.04475,2024);基准分数不确定性(2410.03492,2024);Arena 统计框架(2412.18407,2024);ReliableEval(2505.22169,2025);Don't Pass@k(2510.04265,2025);judge 报告规范(2511.21140,2025)。
基准动态与治理:LiveBench(2406.19314,2024);LiveCodeBench(2403.07974,2024);Min-K% Prob(2310.16789,2023,ICLR 2024);MMLU-Redux(2406.04127,2024);GSM-Symbolic(2410.05229,2024,ICLR 2025);reward 过优化标度律(2210.10760,2022,ICML 2023)。
EDD 与仿真:EDDOps 过程模型(2411.13768,2024 首发 / 2025 v3);Nubank 亿级用户 EDD(2606.08867,2026);DAUS 用户模拟器(2402.13374,2024);Agent 评测综述(2507.21504,2025)。
安全评测:HarmBench(2402.04249,2024,ICML 2024);InjecAgent(2403.02691,2024);AgentDojo(2406.13352,2024,NeurIPS 2024 D&B);Agent-SafetyBench(2412.14470,2024,ACL 2025)。
组件级与自改进:RAGAS(2309.15217,2023);RAGChecker(2408.08067,2024);FActScore(2305.14251,2023);Self-Rewarding LM(2401.10020,2024,ICML 2024);DeepSeek-R1(2501.12948,2025);Sycophancy to Subterfuge(2406.10162,2024)。
6.4 动手与交叉引用
- labs:11 个实验清单与运行命令见 2.3 节;规格说明见
_design/LAB_SPECS.md。与主仓库的关系:主仓库labs/的 lab05 是最小 harness 入门,本特辑 labs 是体系化深挖。 - 主手册:主手册第 8 章 · Agent 评估与可观测性(本特辑的浓缩版索引,见 2.1 节对比)。
- 写作规范:
_design/STYLE.md(6 模块结构与引用约定)、_design/BLUEPRINT.md(各章 brief)。
下一章:第 E01 章 · 为什么评估是 GenAI 工程的生命线——从三大根本难题讲起,回答"为什么评测是生命线而不是检查点"。
为什么评估是 GenAI 工程的生命线
一句话导读:传统软件"上线前跑一遍测试、之后靠断言保平安"的范式,在 GenAI 系统上全面失效。本章回答一个根本问题——为什么评估(evals)不是交付前的检查点,而是贯穿 GenAI 全生命周期的生命线。学完本章,你能讲清三大根本难题、Airbnb 三大陷阱、"跑几条 case 感觉还行"的四个具体失效场景、评估的四重身份,并会用评估经济学框架向老板论证评测投入——这些也正是面试开场最高频的"为什么"类问题。
一、知识图谱
为什么评估是 GenAI 工程的生命线
│
├─ 1. 三大根本难题(为什么"难评")
│ ├─ 非确定性:同输入 ≠ 同输出 → 单次运行只是一个样本,不是结论
│ ├─ 黑盒化:内部决策不透明 → 没有结构化 trace 就没有归因
│ └─ 错误级联放大:前步小偏差 → 后步错误结论(单步 95% × 20 步 ≈ 36%)
│
├─ 2. 三大陷阱(Airbnb:没有评估会发生什么)
│ ├─ 虚假信心:浅层 helpfulness 分数掩盖真实失败
│ ├─ 未被发现的回归:改 prompt 后质量悄悄变差,无人知晓
│ └─ 指标与产品目标脱节:力气花了,产品没变好
│
├─ 3. 与传统软件测试的本质差异
│ └─ 输入空间 / 判定方式 / 回归语义 / 通过标准 —— 四项全变
│
├─ 4. "跑几条 case 感觉还行"为什么不够(四个失效场景)
│ ├─ 一次跑通 ≠ 稳定可用
│ ├─ 新 prompt 改坏旧场景(静默回归)
│ ├─ 前步小偏差被级联放大
│ └─ 假阳性:结果对、路径错,迟早在线上引爆
│
├─ 5. 评估的四重身份
│ └─ 质量度量 → 发布门禁 → 迭代指南针 → 数据飞轮入口
│
├─ 6. 评估经济学
│ └─ eval 成本(建例 + 推理 + 判定 + 校准) vs 线上失败成本(修复 + 资损 + 流失 + 合规)
│
└─ 7. 业界的答案:EDD(评测驱动开发)
└─ 从"上线前抽查"到"持续治理机制"(→ 第 E10 章展开)
30 秒抓住主线:三大难题决定了 GenAI 不能沿用传统测试 → 不做评估会掉进三大陷阱 → 评估因此必须承担四重身份 → 投入多少由评估经济学决定 → 方法论终点是 EDD。本章是全特辑的"总纲":后续 E02–E15 都是在回答本章提出的问题的某一环。
二、核心概念精讲
2.1 三大根本难题:GenAI 系统为什么"天生难测"
阿里与腾讯的评测方法论不约而同地把 GenAI 工程的门槛概括为三件事(阿里称之为"三大门槛"):非确定性、黑盒化、错误级联放大。这三点不是工程瑕疵,而是这类系统的内禀属性。
| 难题 | 本质 | 直接工程后果 | 传统测试为何失灵 |
|---|---|---|---|
| 非确定性 | 同一输入不一定有同一输出(采样、上下文组装、工具时变) | 单次运行结果只是分布中的一个样本;"复现"要重新定义为统计意义上的 | 断言 assert output == expected 天然不成立 |
| 黑盒化 | 模型内部决策不透明:为什么选这个工具、为什么这样改写 query,看不见 | 失败无法定位到"哪一步、因为什么";只能靠结构化 trace 反推 | 传统软件可以断点调试、读源码,GenAI 只能读 trace |
| 错误级联放大 | 多步链路中,前一步的小偏差会被后续步骤放大成错误结论 | 步级 95% 正确率 × 20 步 ≈ 36% 端到端成功率;错误在终点才暴露,根因却在起点 | 单元测试"每个模块都对"推不出"系统对" |
Airbnb 对同一问题的表述是:GenAI 与传统软件的差异在于输出不可预测、"正确"依赖判断、用 AI 评 AI 又引入新风险;一次请求可能同时包含搜索 / 推理 / 外部动作 / 文本生成,每个环节都可能独立失败。腾讯则补充了黑盒化带来的一个微妙痛点:答案碰巧对但推理路径错时,你分不清"正确调用工具后回答"与"训练数据碰巧答对"——前者可信赖,后者是定时炸弹。
级联放大值得用一个具体的多步 agent 展开。设想一个退款客服 agent 处理"这个东西我要退,怎么寄回?":
| 步骤 | 正常行为 | 本次实际行为 | 偏差大小 |
|---|---|---|---|
| 1. 意图识别 | 识别为「退货退款」 | 误判为「取消订单」 | 只差一个意图标签 |
| 2. 订单查询 | 查到目标订单 | 查到目标订单 | 无 |
| 3. 政策校验 | 退货政策:需先校验物流签收状态 | 取消政策:无需校验,直接放行 | 关键校验被跳过 |
| 4. 执行动作 | 生成退货寄回单 | 直接取消订单、作废优惠券 | 不可逆副作用 |
| 5. 回复用户 | 给出寄回指引 | "已为您取消订单" | 用户目标彻底落空 |
第 1 步一个标签的偏差,到第 4 步已经变成不可逆的资损与投诉。这就是阿里强调"多步链路前一个小偏差会被放大成错误结论"的含义。量化版本是同一个乘法:若每步可靠性为 p,n 步任务的端到端成功率上界约为 pⁿ——p=0.95、n=20 时只剩约 36%。τ-bench(Sierra AI,arXiv 2406.12045,2024)提供了实证:GPT-4o 在 retail 域单次通过率 pass^1 ≈60%(官方榜单 60.4%;摘要口径为不足 50%),而要求 8 次独立试验全部通过的 pass^8 ≈25%(摘要 <25%);airline 域 pass^1 ≈42%、pass^8 跌至约 16%。"能做对一次"与"稳定做对"之间的鸿沟,比直觉大得多——这道鸿沟只能靠评估体系量化,靠 demo 永远看不见。
三大难题不是抽象抱怨,它们各自对评测体系提出了硬性设计要求:
| 难题 | 对评测体系的硬性要求 | 出处 |
|---|---|---|
| 非确定性 | 多 trial 重复 + 统计口径报数(pass^k、置信区间);评测执行环境隔离,避免多用例共享状态导致分数不可复现 | 阿里:评测执行环境隔离是平台基本要求;腾讯:N 次执行的容忍阈值分级 |
| 黑盒化 | 结构化 trace 是被测系统的标准能力而非事后补救:稳定记录工具名、入参、返回值、时间戳、耗时、错误,复杂 agent 还要记录计划、检索、护栏决策 | 阿里/腾讯共识(详见第 E7 章) |
| 错误级联 | 评估不能只看终点输出:Airbnb 分 step / trajectory / session 三层,阿里分 Turn / Session / Trace / Outcome 四层 | 两家独立得出同构结论(详见第 E7 章) |
非确定性的来源至少有三层,理解这一点才能理解"为什么固定种子也不够":① 模型层——采样本身的随机性(temperature / top-p);② 环境层——工具返回与外部数据随时间变化,同一条用例今天跑和下周跑看到的"世界"可能不同;③ 组装层——上下文组装、并发与重试逻辑带来的差异。这也是为什么阿里把"评测执行环境隔离、避免多用例共享状态"列为平台级要求,为什么 DoorDash 要用 fixtures 冻结外部状态(详见第 E8 章)——控制变异来源,是分数有意义的前提。
换句话说:三大难题各自消灭了传统测试的一根支柱——非确定性消灭了"断言",黑盒化消灭了"断点调试",级联放大消灭了"单元测试通过即系统通过"。评估体系就是把这三根支柱换成新支柱(统计判定、trace 归因、分层评估)的工程。
动手:用固定种子模拟 N 任务 × K 次重复运行,亲眼看 pass@k 与 pass^k 随 K 分道扬镳——
cd evals-special/labs && python3 eval_lab01_metric_system.py
2.2 三大陷阱:没有评估的产品会掉进哪里(Airbnb)
Airbnb 在点评摘要、客服、房东/房客消息、内部洞察等多个 GenAI 场景的实践中总结出:没有早期评测计划的产品,通常掉进三个坑。这是本章最该背下来的框架之一:
| 陷阱 | 表现 | 机理 | 典型症状 |
|---|---|---|---|
| 虚假信心(false confidence) | 用一个浅层 helpfulness 分数自我安慰:"模型评分 4.5/5,挺好" | 泛化的"有没有帮助"抓不住真实失败模式:幻觉、过度承诺、答非所问都被礼貌的通顺回答糊过去 | 分数很漂亮,投诉照样涨 |
| 未被发现的回归(undetected regression) | 改了一版 prompt,新场景变好了,旧场景悄悄变差,无人知晓 | 没有回归集,就没有"改动前 vs 改动后"的可比较基线 | 质量曲线其实下行,团队感觉在进步 |
| 指标与产品目标脱节(wasted effort) | 评测指标涨分,产品结果不动 | 指标测的不是真实产品失败,而是"模型说话的姿势" | 赢了指标,输了体验(Goodhart 定律的标准现场) |
Airbnb 十条要点中的第 ② 条就是针对第一坑的解药:避免泛化 helpfulness,瞄准真实产品失败。
腾讯的痛点表从另一个视角刻画了"没有评估"的日常,与 Airbnb 三坑一一对应且更细:
| 腾讯痛点 | 对应 Airbnb 陷阱 |
|---|---|
| 主观性强,靠"感觉变好了" | 虚假信心 |
| 悄悄退化:改 prompt / 升级依赖后旧场景变差无人知晓 | 未被发现的回归 |
| 人工验证成本高:Skill 越多、模型越快,人肉回归指数增长,只能选择性验证留盲区 | (回归问题的成本侧) |
| 模型不敢升级:无对比数据支撑切换决策 | 指标缺位 → 决策瘫痪 |
| 缺少效率基线:变贵变慢无法归因到版本 | 同上 |
| 过程易忽略:答案碰巧对但推理路径错 | (假阳性的温床,见 2.4) |
每个陷阱都有对应的解药,这也是后续章节的索引方式:
| 陷阱 | 解药 | 详见 |
|---|---|---|
| 虚假信心 | 指标从观察到的真实失败推导(Airbnb EDD 原则之二);拒绝万能 helpfulness,按维度拆分评分 | 第 E2 / E5 章 |
| 未被发现的回归 | 回归集只增不减 + 变更触发 CI 回归 + 版本对比带统计口径 | 第 E10 / E9 章 |
| 指标与产品目标脱节 | 离线指标与线上信号(转人工率、投诉率、任务完成率)联动校准,离线涨线上降即回滚 | 第 E12 章 |
一句话总结:没有评估的 GenAI 团队不是在迭代,而是在抽签——每次改 prompt 都不知道这次是改进还是退化,只能靠线上用户的投诉来"开奖"。
2.3 评估 vs 传统软件测试:四项本质差异
面试高频问法:"评估和软件测试到底有什么不一样?"下面这张对照表是标准答案骨架:
| 维度 | 传统软件测试 | GenAI 评估 |
|---|---|---|
| 输入空间 | 有限、可枚举:参数有类型、有边界,等价类划分后可穷尽 | 开放自然语言 + 多轮上下文 + 工具返回的组合爆炸;用户会说出你想不出的话 |
| 判定方式 | 确定性断言:期望输出唯一,assert actual == expected |
"正确"依赖判断:一个目标有多种可接受结果(DoorDash 称之为"开放式目标"),需要 rubric / 程序化检查 / judge / 人工的分层判定 |
| 回归语义 | 回归 = 功能明确坏掉:同输入必同输出,坏了就是断了 | 回归 = 统计分布上的悄悄漂移:输出仍"看起来像样",但错误率升了、路径变了、语气飘了;不跑回归集根本发现不了 |
| 通过标准 | 100% 通过是默认要求(确定性系统,失败即 bug) | 分级设定:Anthropic 推荐口径(腾讯评测方案引用)——确定性任务用例集整体通过率 100%,非确定性任务 ≥95%;高风险场景进一步用 pass^k 做发布线 |
| 失败复现 | 改到哪个断点就能复现 | 需要固定 seed / temperature / 环境快照做"统计可复现",且要区分"能力不足"与"稳定性不足" |
| 测试与生产的关系 | 测试通过 ≈ 可以上线 | 离线分数只是必要条件:还要影子 / 灰度 / 线上监控(offline-online gap 见 2.5) |
注意最后一行:传统测试里"测试通过"几乎是上线的充分条件;GenAI 里评估通过只是拿到了一张入场券,线上还有第二场考试。这个认知差异是许多从传统 QA 转过来的团队最容易栽跟头的地方。
但也不是全盘推翻——从测试到评估,有些东西必须换,有些东西原样保留,分清楚这两堆才能说服传统 QA 背景的同事:
| 保留(测试工程的遗产) | 替换(GenAI 的新规则) |
|---|---|
| 质量左移:问题越早发现修复成本越低 | 断言 → 分层判定(程序化规则 / judge / 人工,详见第 E4–E6 章) |
| 回归集 + 变更触发回归 | "100% 通过" → 统计通过标准 + 置信区间 + 显著性(详见第 E9 章) |
| 门禁与发布流程挂钩 | 测试报告 → 评测报告 + 失败归因(分数必须能稳定转成行动项,阿里) |
| 测试资产版本化管理 | 期望输出唯一 → 一个目标多种可接受结果(rubric 描述"成功长什么样"而非指定唯一答案) |
| CI 自动化执行 | 测试一次即结束 → 持续评测:离线 + 线上双环境(EDDOps) |
腾讯把这个转变浓缩成一句目标陈述:可重复、可量化、可持续演进的评估闭环——每次变更都能快速跑出可比较的分数,用数据代替直觉,用全量代替抽查。
2.4 "跑几条 case 感觉还行"为什么不够:四个具体失效场景
阿里评测方法论里有一节标题极其直白:为什么"跑几条 case 感觉还行"不够。它给出的四个场景,每一个都值得配一个例子:
场景 1:同一 prompt 跑通一次 ≠ 稳定可用。 非确定性系统里,一次成功只是从行为分布里抽到的一个样本。客服 agent 在你手测的那一次恰好走对了流程,不代表它 100 次里有 100 次走对——腾讯的稳定性判读经验:N=5 次执行中 1 次失败就"存在稳定性风险",而容忍阈值按场景分级:关键决策类(问题定位 / 故障诊断)容忍 0%,辅助分析类 ≤10%,创意生成类 ≤40%。用户不会接受"多试几次总有一次成功"(阿里一致性双指标的原话)——至少一次成功率(能力上限)与连续成功率(生产要求)必须分开报,生产级场景看后者。
场景 2:改 prompt / 换模型 / 调工具参数,可能改坏原有场景,且不易第一时间发现。 这是"未被发现的回归"的日常形态。DoorDash 的仿真评测博客里有个诚实的细节:其 11 轮迭代中第 3 轮曾出现回落——没有回归集的团队甚至不会知道哪一轮回落了。解法是把每次手工检查沉淀为可复跑的用例,变更触发回归(详见第 E10 章)。
场景 3:多步链路里,前一个小偏差会被放大成错误结论。 即 2.1 的退款案例。手测几条 case 时你只看到终点输出"像那么回事",看不到第 1 步的意图偏差正在被第 3 步的政策跳过放大。没有轨迹级评估(详见第 E7 章),级联放大永远发生在你的视线之外。
场景 4(最隐蔽):有些样本最终答案看似对,但执行路径已偏离或带风险——这类假阳性在生产迟早暴露。 Airbnb 明确指出:只看最终答案不够,推理路径、工具参数、工作流可能在结果看似正确时已经失败。腾讯痛点表里的对应表述:分不清"正确调用工具后回答"与"训练数据碰巧答对"。一个跳过身份校验却恰好没造成损失的退款操作、一个靠猜碰对了答案的查询,都是"这次结果对、下次事故见"的假阳性。阿里对假阳性的工程回应是:加过程型与风险型检查(详见第 E11 章 RCA 体系)。
四个场景各自对应一种评测机制,这张映射表可以作为"为什么需要完整评测体系"的速答版:
| 失效场景 | 对应的评测机制 | 本特辑出处 |
|---|---|---|
| 一次跑通 ≠ 稳定 | 多 trial 重复 + pass^k / 连续成功率 + 按场景分级的容忍阈值 | 第 E2 章、eval_lab01 |
| 新改动改坏旧场景 | 回归集(只增不减)+ PR 合入前自动回归 | 第 E10 章、eval_lab10 |
| 前步偏差被级联放大 | 结构化 trace + step / trajectory / session 分层评估 | 第 E7 章、eval_lab06 |
| 结果对但路径错的假阳性 | 过程型 / 风险型检查、must-call / must-not-call 断言 | 第 E7 / E11 章、eval_lab06 |
动手:构造"完全正确 / 结果对但路径错 / 路径对但结果错 / 全错"四类 agent 运行,验证只看结果的评分会放过假阳性——
cd evals-special/labs && python3 eval_lab06_trajectory_eval.py
结论:评测体系必须嵌入研发流程而不是挂在上线前当关卡。用阿里的原话收束本节:"评测平台不只是'出分工具',核心价值是把问题稳定转化为可执行修复、形成持续迭代闭环。"
2.5 评估的四重身份:度量、门禁、指南针、飞轮
把评估只理解成"测试",会低估它至少三倍的价值。成熟体系里,评估同时扮演四个角色:
| 身份 | 回答的问题 | 失效时的后果 | 工业实践证据 |
|---|---|---|---|
| 质量度量(尺子) | 现在到底有多好? | 靠感觉决策,团队对"好没好"永远达不成共识 | DoorDash:eval harness 把质量信号从"平均每天 1 条员工反馈"升级为每天 2,000 个自动评分会话;全国上线前 agent 质量分 +8 分、错误率近乎减半 |
| 发布门禁(闸门) | 这个变更能不能上线? | 每次发布靠胆量;坏版本流入生产 | DoorDash 仿真评测飞轮:任何变更必须通过全部 50+ 个 eval 才能上线;阿里把 P0 指标设为上线门禁(不达标不发);学术侧已有"评测结果即发布证据"的证据驱动发布管理研究(arXiv 2603.15676,2026) |
| 迭代指南针(罗盘) | 下一步该改什么?改了真的变好了吗? | 优化靠轶事:最近一次、最惊人的失败主导修复方向 | Airbnb 核心习惯 "When in doubt, look at your data":跑约 100 个样本,人工读输出和 trace,归类错误,围绕它们建测试——其旅行客服案例中,100 个 prompt 读出了 15 个 groundedness 失败、8 个正确但啰嗦、5 个不当拒答、3 个 JSON 失败,修复优先级由此而来;GEPA(arXiv 2507.19457)更是直接把 eval 分数当作 prompt 优化的目标函数 |
| 数据飞轮入口(齿轮) | 线上失败如何变成资产? | 失败修完即弃,同类问题反复发生 | Discord AITL(EMNLP 2025 工业赛道):人工标注持续回流驱动再训练,把再训练周期从月级压缩到周级,美国试点 recall@75 +11.7%、precision@8 +14.8%、有用性 +8.4%、采用率 +4.5% |
四重身份之间有递进关系,逐层展开:
- 度量是第一层:没有可信的分数,一切无从谈起。但注意度量的有效性前提是"尺子本身经过校准"——judge 与人工一致率达标(Airbnb 目标 high 80s~90s%,阿里参考值约 85% 后进自动化,腾讯口径 ≥85% 可用)才谈得上度量(详见第 E5 章)。
- 门禁把度量接入发布流程:离线门禁 + 线上灰度联动。阿里的口径是三类信号一起看——离线质量信号(核心场景通过率、P0 风险数、关键工具参数正确率)、线上体验信号(转人工率、重复追问率、投诉率、满意度)、业务结果信号(任务完成率、工单闭环率、退款成功率)——离线提升但线上关键信号恶化,触发回滚或降级。
- 指南针把度量接入开发循环:这是评估从"防守"转向"进攻"的一步。Airbnb 的迭代纪律(一次只改一个变量:固定模型变 prompt → 固定 prompt 变模型 → 都固定变 serving 配置)保证了分数变化可归因(详见第 E10 章)。
- 飞轮把度量接入数据资产:badcase → 评测用例 → 训练数据 → 模型更新 → 新的线上信号回流(详见第 E12 章)。走到这一步,评估才真正成为"生命线"——它不再消耗资源,而是持续生产资产。通用循环长这样(DoorDash、Discord AITL、EDDOps 控制环的共同骨架):
生产失败 / 真实 trace
│ 编码为测试用例(带出处与切片标签,进回归集)
▼
自动流水线(生成场景 / 模拟对话 / 分层打分)
│ 定位失败簇,选对改动
▼
修 prompt / 架构 → 重跑达标(门禁)→ 发布
│ 线上信号(judge 分、转人工率、投诉)
└──────────────回流──────────────┘
别把离线分数当终点。即便四重身份都立起来,仍要记住:客服对话基准研究(arXiv 2510.22143,2025)明确指出,由于真实部署环境的分布漂移与交互复杂性,强 offline 基准成绩只是部署可靠性的弱指标。当前共识是"离线是必要不充分"——离线门禁之后还有影子 / 灰度 / A/B 的最后一公里。
DoorDash 把这个问题表述为"双环境"挑战:开发与生产的质量可能背离。他们的解法是同一条 rubric + 同一个校准过的 judge 同时跑在真实会话与模拟会话上——离线结论才能带到线上,线上失败才能离线复现(详见第 E12 章)。DoorDash 报告其离线模拟提升与线上真实流量表现一致(其飞轮 5 分钟内可跑 200+ 场模拟对话、模拟环境幻觉率下降约 90%),但这是持续验证出来的结论,不是默认前提。
2.6 评估经济学:eval 成本 vs 线上失败成本的粗算框架
"评测很贵,值得吗?"——这是向管理层要资源时的必答题。回答它需要一个两边都摆上桌的粗算框架。
(1)eval 成本侧(可预算、可工程化压缩):
| 成本项 | 估算方式 | 工业参照 |
|---|---|---|
| 用例建设(一次性) | 用例数 × 单例专家工时 | 阿里经验:先做 50–200 条高质量 golden set 覆盖核心路径与高风险边界;Anthropic 官方建议起步只需 20–50 个真实用例 |
| 每次运行的推理成本 | 用例数 × trials × 单条 token × 单价 | DoorDash 全量 sweep = 50 场景 × 8 trials = 400 次对话 |
| 判定成本 | 规则检查近乎免费;judge 按 token 计费;人工最贵 | 分层筛查(规则粗筛 → judge 精判 → 人工兜底)就是为压这项成本设计的(详见第 E4/E6 章) |
| 人工校准(一次性 + 持续) | 校准集大小 × 标注工时 | Airbnb:从 20–100 个专家标注样本起步;gold set 50–100 条必须含坏样本 |
| 基础设施 | harness / trace 存储 / 平台人力 | Anthropic 博客提及 Bolt 约 3 个月建成 eval 体系——这是"从零到能用"的量级参照 |
(2)线上失败成本侧(不可预算、随流量放大):
| 成本项 | 内容 | 为什么贵 |
|---|---|---|
| 直接修复 | 排查、回滚、hotfix 的工程工时 | 线上 debug 没有 trace 时是盲查;阿里 RCA 五步的存在就是为了把它变成结构化流程 |
| 资损与补偿 | 错误退款、过度承诺、越权操作造成的真金白银损失 | 不可逆:错退的款收不回来,承诺出去的补偿必须兑现 |
| 用户流失与口碑 | 投诉、差评、卸载 | 滞后且难归因,等看见时已经成规模 |
| 合规与安全风险 | 隐私泄露、违规内容、金融合规事故 | 单次事故可能超过整个评测体系多年的成本 |
(3)收益侧:评估省下的钱有据可查(均以公司原文数字为准):
- DoorDash:全量回归从人工 6+ 小时压到约 20 分钟(50 场景 × 8 trials 的 sweep,人工本地聊约 1 分钟/次);支撑底座模型从 Claude Sonnet 4.6 迁移到 Gemini 3.5 Flash,延迟降 35%、质量无损——没有 harness,这种迁移"不敢做",延迟收益就拿不到。
- 腾讯反向论证:没有评估时"模型不敢升级(无对比数据支撑切换决策)""缺少效率基线(变贵变慢无法归因版本)"——评估缺位本身就是持续的成本。
(4)粗算模板(面试可现场列):
eval 年化成本 ≈ 用例建设(一次性) + 运行频次 × 单次推理成本 + judge 成本 + 校准人力
线上失败年化成本 ≈ 日会话量 × 失败率 × 单次失败成本(修复工时 + 资损期望 + 流失期望)
决策规则:只要 eval 能把失败率压低 Δ,且 Δ × 线上失败年化成本 > eval 年化成本,就值得投
代入量级感受一下(以下业务数字为示意,仅演示框架用法,实际必须换成自家真实数据):
| 项目 | 示意取值 | 年化量级 |
|---|---|---|
| 日会话量 | 10,000 | — |
| 线上失败率(无评测基线) | 1% → 100 次失败/天 | — |
| 单次失败综合成本(修复工时 + 资损期望 + 流失期望) | 200 元 | 线上失败 ≈ 73 万元/年 |
| 评测介入后的失败率压低 Δ | 0.5 个百分点(保守取值;DoorDash 实证错误率"近乎减半",此处再打对折) | 挽回 ≈ 36 万元/年 |
| 评测流水线成本 | 每日全量 400 条对话(DoorDash sweep 规模)× 分层 judge + 每周人工校准 | 数万元/年量级 |
ROI ≥ 5 倍,且这还没算评测带来的"敢做"收益——DoorDash 若没有 harness,就拿不到模型迁移那 35% 的延迟下降。一个数量级的差距,就是"生命线"三个字的经济学含义。
(5)向业务方汇报时的口径转换:算完账还要会"翻译"。向非技术决策者汇报时,用产品语言而不是模型语言——说"三连全对率只有 42%"而不是"单次通过率 75%",说"每天 2,000 个会话被自动质检"而不是"我们建了个 eval harness"。评测的价值必须落在对方关心的坐标系里(发布风险、资损、人力节省),这也是第 E2 章"把指标写进发布门禁"的前置技能。
2.7 业界的答案:EDD(评测驱动开发)速览
三大难题 + 三大陷阱 + 四重身份,把行业推向了一个共同的方法论终点:Evaluation-Driven Development(EDD,评测驱动开发)——把评测从"上线前的一次性检查点"变成贯穿全生命周期的"持续治理机制":先定义期望行为(eval 即规约),在开发、发布、运行各阶段持续产生评测证据,用证据驱动最小化修复与受控迭代。
三股力量在 2024–2026 年把 EDD 从口号变成了工程学科:
| 力量 | 证据 |
|---|---|
| 学术成型 | EDD/EDDOps 过程模型与三层参考架构(arXiv 2411.13768,2024-11 首发,2025-11 v3):Plan → Build → Run(offline+online) → Analyze & Improve 四阶段闭环 |
| 官方采纳 | Anthropic《Demystifying evals for AI agents》(2026-01)主张先定义期望行为再开发、eval 进 CI/CD;OpenAI evaluation best practices 建议从一开始就反复评测、每次变更都跑 continuous evaluation |
| 工业验证 | Airbnb 的 EDD 五原则与迭代纪律、DoorDash 的评测 harness("迭代控制面")、腾讯的能力测评→回归测评毕业机制(详见第 E10、E15 章) |
EDDOps 论文对 134 篇学术文献 + 27 份工业灰色文献的统计,揭示了供需错配:学术界 93.28% 的评测研究只做部署前(pre-deployment),仅 2.24% 覆盖部署后,4.48% 是持续评测;而工业灰色文献中 40.74% 已是持续评测、81.48% 已用评测驱动适配。换句话说:最前沿的工程实践已经跑到了学术研究前面——这也是本特辑以工业实践为骨架、以论文为佐证的原因。
EDD 成熟度的两条证据(Anthropic 官方博客,2026-01):SWE-bench Verified 成绩一年内从 40% 涨到 80%+,评测驱动的快速迭代是幕后推手;CORE-Bench 上 Opus 4.5 在修复任务与评分器之后从 42% 跳到 95%——后一个数字同时揭示了一个反直觉事实:评测系统自己也会出 bug。DoorDash 的四条 Lessons Learned 里有一条与之呼应:被标记的失败中有真实一部分其实是 harness 自身故障(judge 误报、trace 缺口),必须并行修复才可信。所以评测基础设施本身也要被评估、被版本管理(详见第 E10 章)。
EDD 的核心心智模型可以用一句话概括(Airbnb 定义,详见第 E10 章):不是预测所有失败,而是发现 → 捕获 → 反复检查失败模式。这与 TDD 的精神同构:你无法在写代码前穷举所有 bug,但你可以保证每个发现过的 bug 都有一条永不消失的测试。
本章与后续章节的路线图:本章论证了"为什么",其余 15 章逐一回答"怎么做"——
| 问题 | 章节 | 一句话预告 |
|---|---|---|
| 评什么? | 第 E2 章 · 评估指标体系 | pass@k / pass^k / 一致性双指标 / 门禁统计口径 |
| 拿什么评? | 第 E3 章 · 黄金数据集与用例设计 | 50–200 条 golden set 起步,四类来源 + 毕业机制 |
| 谁来评? | 第 E4 章 · 程序化评分 | 能用代码判断的绝不用模型 |
| 第 E5 章 · LLM-as-Judge 深入 | rubric 工程、偏差全景、校准到 ≥85% | |
| 第 E6 章 · 人工评估与评分路由 | 专家时间 60%+ 花在校准与诊断 | |
| 评什么形态? | 第 E7 章 · 轨迹与 Agent 级评估 | step / trajectory / session 三层抓假阳性 |
| 第 E8 章 · 对话 Agent 与仿真评测 | LLM 模拟用户 + fixtures 冻结环境 | |
| 怎么让分数可信? | 第 E9 章 · 评估的统计学基础 | 置信区间、样本量、显著性 |
| 怎么用评测驱动开发? | 第 E10 章 · 评测驱动开发(EDD) | 发现 → 捕获 → 反复检查失败模式 |
| 第 E11 章 · Badcase 根因分析与优化闭环 | RCA 五步 + 结构化行动项 | |
| 第 E12 章 · 在线评估与数据飞轮 | 每日抽样 + 离线线上同一套打分 | |
| 外部坐标在哪里? | 第 E13 章 · Benchmark 全景与前沿争议 | 公开基准 + 私有集 + 线上信号三层互补 |
| 第 E14 章 · 前沿论文全景(2024–2026) | 九个方向的教学化综述 | |
| 第 E15 章 · 工业实践案例研究 | Airbnb / DoorDash / 阿里 / 腾讯四案例 + 落地路线图 |
(主手册第 8 章 · Agent 评估与可观测性 提供了这套体系的浓缩版,本特辑是其深挖版。)
面试 30 秒版(当被问"为什么 GenAI 必须做评估"时,可以直接背这段开场):
传统软件有确定性断言,GenAI 有三大根本难题——非确定性、黑盒化、错误级联放大, 传统测试的三根支柱(断言、断点调试、单元测试推断)因此逐一失效。 不做评估,产品会掉进三大陷阱:虚假信心、未被发现的回归、指标与产品目标脱节(Airbnb 总结)。 所以评估必须承担四重身份:质量度量、发布门禁、迭代指南针、数据飞轮入口。 投入多少由评估经济学决定:eval 成本可预算,线上失败成本不可预算且随流量放大。 业界的答案是 EDD——发现失败、捕获失败、反复检查失败。
本章小结:三大难题(非确定性、黑盒化、级联放大)摧毁了传统测试的三根支柱;不做评估会掉进三大陷阱(虚假信心、未发现回归、指标脱节);因此评估必须承担四重身份(度量、门禁、指南针、飞轮);投多少由评估经济学决定,答案是"杠杆投入";方法论终点是 EDD。把这五句话讲顺,本章的面试题就都有了骨架。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | 三大根本难题:非确定性 / 黑盒化 / 错误级联放大 | ⭐⭐⭐ | 看你有没有真正理解 GenAI 与传统软件的本质差异,而不是背名词 |
| 2 | 错误级联的复合数学:pⁿ 衰减、pass^k 随 k 快速下跌 | ⭐⭐⭐ | 能否现场手推"单步 95% × 20 步 ≈ 36%",是区分"知道"与"理解"的分水岭 |
| 3 | Airbnb 三大陷阱(虚假信心 / 未发现回归 / 指标脱节) | ⭐⭐⭐ | 考"不做评估会怎样"的反向论证能力,常作为追问开场 |
| 4 | 评估 vs 传统软件测试的四项差异 | ⭐⭐ | 传统 QA 背景转 GenAI 的必考题,重点在"回归语义"与"通过标准"两行 |
| 5 | "跑几条 case 感觉还行"的四个失效场景 | ⭐⭐ | 考能否把抽象风险落成具体场景,假阳性一例是加分关键 |
| 6 | 评估的四重身份(度量 / 门禁 / 指南针 / 飞轮) | ⭐⭐⭐ | 系统设计题的骨架:答"怎么建评测体系"前先立这四根柱子 |
| 7 | pass@k vs pass^k:能力上限 vs 生产可靠性 | ⭐⭐⭐ | 全特辑最高频指标考点;无人值守场景必须答 pass^k(详见第 E2 章) |
| 8 | 一致性双指标与稳定性容忍阈值分级 | ⭐⭐ | 阿里/腾讯口径:至少一次成功率 vs 连续成功率;关键决策类容忍 0% |
| 9 | 假阳性:结果对但路径错 | ⭐⭐ | 考"只看最终答案不够"的轨迹意识,引出过程评估(详见第 E7 章) |
| 10 | 评估经济学:eval 成本 vs 线上失败成本 | ⭐⭐ | 向管理层要资源的实战题,要能列出两边的成本项并给出决策规则 |
| 11 | 离线分数是必要不充分条件(offline-online gap) | ⭐⭐ | 考"离线门禁之后还有什么":影子 / 灰度 / A/B / 线上监控 |
| 12 | EDD 的定义与心智模型 | ⭐ | 考方法论视野:发现→捕获→反复检查失败模式,eval 即规约 |
| 13 | 学术与工业的评测供需错配(EDDOps 统计) | ⭐ | 加分谈资:学术 93% 停留在部署前,工业 40%+ 已是持续评测 |
四、经典面试题与参考答案
题 1(基础):为什么说评估是 GenAI 工程的"生命线",而不是可选项?
参考答案: 因为 GenAI 有三个内禀属性让"先上线再修"变得不可承受:① 非确定性——同一输入不一定同一输出,单次运行只是分布中的一个样本,不评估就不知道分布长什么样;② 黑盒化——内部决策不透明,没有评估产生的 trace 与分数,失败连归因都无从谈起;③ 错误级联放大——多步链路里单步 95% 正确率 × 20 步只剩约 36% 端到端成功率,小偏差会被放大成错误结论。叠加后果是:不做评估会掉进虚假信心、未被发现的回归、指标与产品目标脱节三大陷阱(Airbnb 总结)。而评估在成熟体系里同时是质量度量、发布门禁、迭代指南针和数据飞轮入口——它不是交付前的关卡,而是贯穿全生命周期的基础设施,所以叫"生命线"。
题 2(基础):Airbnb 总结的"没有早期评测计划"的三大陷阱是什么?各举一个例子。
参考答案: ① 虚假信心:用浅层 helpfulness 分数自我安慰——模型回答礼貌通顺,泛化的"有没有帮助"打高分,但幻觉、过度承诺、答非所问全被糊过去,分数漂亮、投诉照涨。② 未被发现的回归:改一版 prompt 让新场景变好,旧场景悄悄变差;没有回归集就没有前后对比基线,质量下行而团队感觉在进步。③ 指标与产品目标脱节:评测指标测的是"模型说话的姿势"而非真实产品失败,指标涨分、产品不动,力气白花(Goodhart 定律现场)。解药是 Airbnb 十条要点之一:避免泛化 helpfulness,瞄准真实产品失败,把指标从观察到的错误中推导出来。
题 3(基础):GenAI 评估和传统软件测试的本质区别是什么?
参考答案: 四项本质差异:① 输入空间——测试的参数有限可枚举,自然语言输入 + 多轮上下文 + 工具返回组合爆炸,用户会说出你想不出的话;② 判定方式——测试是确定性断言、期望输出唯一,GenAI 一个目标有多种可接受结果,"正确"依赖判断,需要规则 / judge / 人工分层判定;③ 回归语义——测试的回归是功能明确坏掉,GenAI 的回归是统计分布上的悄悄漂移,不跑回归集发现不了;④ 通过标准——测试默认 100% 通过,GenAI 要分级设定(Anthropic 推荐口径:确定性任务用例集 100%、非确定性任务 ≥95%,高风险场景用 pass^k 做发布线)。还有一层:测试通过≈可上线,而离线评估通过只是必要条件,后面还有灰度与线上监控。
题 4(进阶):有人说"我跑了十几条 case 都通了,效果不错"。请指出这个结论的所有漏洞。
参考答案: 四个具体漏洞(阿里评测方法论的四个失效场景):① 一次跑通 ≠ 稳定:非确定性系统里一次成功只是一个样本;要报 N 次重复的成功率分布,腾讯口径 N=5 里 1 次失败就算有稳定性风险,关键决策类容忍 0%。② 改坏旧场景看不见:这十几条 case 没有沉淀为回归集,下次改 prompt / 换模型时旧场景退化无人知晓(未被发现的回归)。③ 级联放大测不出:手测只看终点输出,多步链路前段的小偏差会被后段放大,十几条 case 也覆盖不了分支组合。④ 假阳性漏检:可能存在"最终答案看似对、执行路径已偏离或带风险"的样本——跳过校验恰好没出事、训练数据碰巧答对,这类样本迟早在线上引爆。正确姿势:把 case 沉淀为可复跑用例,多 trial 报 pass^k,加过程型与风险型检查,扩到覆盖核心路径与高风险边界的 golden set(阿里经验 50–200 条起步)。
题 5(进阶):一个 agent 单次任务成功率 75%,要上"用户不会重试"的客服场景。这个数够用吗?该用什么指标定发布线?
参考答案: 不够。75% 的单次成功率意味着每次服务 4 个用户就有 1 个失败;而在不可重试、无人值守的场景,用户不接受"多试几次总有一次成功"(阿里一致性双指标的原话)。该用 pass^k(k 次独立试验全部成功)定发布线:按 Anthropic 文档的示例算法,p=0.75、k=3 时 pass^3 = 0.75³ ≈ 42%——一个"看起来 75% 不错"的 agent,三连全对只有四成把握。τ-bench 的实证同向:GPT-4o 在 retail 域 pass^1 ≈60%(官方榜单 60.4%),pass^8 ≈25%。工程结论:① 发布门槛用低 k 的 pass^k(如 k=3~8)而非 pass@1;② 同时报至少一次成功率作为能力上限参照,两者的 gap 就是稳定性债;③ 客服/退款/支付等不可逆场景按关键决策类对待,稳定性容忍阈值取最严(腾讯分级:关键决策类 0%)。
题 6(进阶):评估在 GenAI 开发流程中扮演哪几重角色?分别用什么工业实践佐证?
参考答案: 四重身份,层层递进:① 质量度量——把"感觉变好了"变成可比较的数字:DoorDash 的 harness 把质量信号从平均每天 1 条员工反馈升级为每天 2,000 个自动评分会话,全国上线前质量分 +8、错误率近乎减半。② 发布门禁——变更能不能上线由证据决定:DoorDash 任何变更必须通过全部 50+ 个 eval;阿里 P0 指标不达标不发布。③ 迭代指南针——告诉团队下一步改什么:Airbnb "When in doubt, look at your data",100 个 prompt 人工精读读出 15 个 groundedness 失败、5 个不当拒答,修复优先级由此而来。④ 数据飞轮入口——线上失败变资产:Discord AITL 用标注回流把再训练周期从月级压到周级,试点有用性 +8.4%。只把评估当"测试",就只拿到了第一重。
题 7(进阶):老板问"评测这么贵,值得投吗?"你怎么用评估经济学回答?
参考答案: 把两边成本摆上桌。eval 成本侧可预算:用例建设(一次性,阿里经验 50–200 条 golden set 起步)、每次运行推理成本(用例 × trials × token × 单价)、judge 判定成本(分层筛查可压一个量级)、人工校准(Airbnb 从 20–100 个专家样本起步)。线上失败成本侧不可预算且随流量放大:修复工时、资损补偿(错退款收不回)、用户流失、合规事故。决策规则:eval 能把失败率压低 Δ,且 Δ×线上失败年化成本 > eval 年化成本,就值得。量级参照(DoorDash 原文数字):全量回归从人工 6+ 小时压到约 20 分钟;harness 支撑底座模型迁移拿到延迟降 35% 且质量无损——没有评测,这种收益根本不敢拿。腾讯的反向证据:无评估时"模型不敢升级、变贵变慢无法归因"。结论:评测是杠杆投入,不是成本中心。
题 8(系统设计):团队的退款客服 agent 一个月后要上线,目前没有任何评测体系。设计一个最小可行评测体系与落地路径。
参考答案: 按"先止血、再立柱、后闭环"三步: 第一周(止血):从真实失败出发——收集已有的线上投诉与人工验证记录,手挑 20–50 条高风险 case(Anthropic 起步口径),人工精读输出与 trace(Airbnb 100 样本法的小规模版),归类错误模式。 第二、三周(立柱):① 建 50–200 条 golden set(阿里经验),覆盖核心退款路径 + 高风险边界(已发货退款、运费险、大额退款),含坏样本;② 打分分层:确定性优先——订单状态、工具调用断言、金额精确性用代码判,语义与话术交给 judge(详见第 E4/E5 章);③ 校准 judge:与人工标注一致率达到 ≥85%(阿里/腾讯参考线)才允许自动放量;④ 定门禁:确定性用例 100%、非确定性 ≥95%(Anthropic 口径),P0 风险样本零容忍,pass^k 报稳定性。 第四周起(闭环):eval 进 CI,PR 触发回归;上线配灰度,跟踪转人工率、投诉率等线上信号;badcase 回流进用例集(只增不减)。 组织上指定一名最终人类决策者裁决"好 vs 坏"争议(Airbnb EDD 五原则之一)。若预算允许,用 Bolt 的量级做心理锚点:从零到可用约 3 个月(Anthropic 博客引用)——一个月上线的是最小版本,体系本身要持续生长。
五、易错点 · 反直觉点
-
误区:同一个 prompt 跑通了一次,说明这个能力是稳定的。 真相:非确定性系统里一次成功只是分布中的一个样本。腾讯口径:N=5 次执行只要 1 次不通过即存在稳定性风险;τ-bench 上 GPT-4o retail pass^1 ≈60%(官方榜单 60.4%)而 pass^8 ≈25%(摘要 <25%)。 记忆锚点:单次运行是样本,不是结论。
-
误区:改完 prompt 没出事,就是没 regression。 真相:GenAI 的回归是统计分布上的悄悄漂移,不会自己报警;没有"变更前 vs 变更后"的可比较回归集,退化根本不可见——这正是 Airbnb 三大陷阱中的"未被发现的回归"。 记忆锚点:回归不会敲门,只有回归集能开门。
-
误区:最终答案对了就行,过程不重要。 真相:假阳性是 GenAI 最隐蔽的失败——跳过身份校验恰好没造成损失、训练数据碰巧答对,"这次结果对、下次事故见"。Airbnb 明确:推理路径、工具参数、工作流可能在结果看似正确时已经失败。 记忆锚点:结果对是一次,路径错是每次。
-
误区:helpfulness / 平均分高,就是质量好。 真相:泛化分数天然平滑掉真实失败模式(幻觉、过度承诺、答非所问都被礼貌的通顺糊过去),这就是 Airbnb 的"虚假信心"陷阱;指标一旦与产品目标脱节,涨分只是自我安慰(Goodhart)。 记忆锚点:指标不指向真实产品失败,就指向自欺。
-
误区:自动评测不放心,那就加人肉验证。 真相:腾讯痛点表指出,Skill 越多、模型越快,人肉回归指数增长,最终只能选择性验证、留下盲区——人工不是更可靠的路线,而是更贵的路线。专家时间应花在刀刃上(校准 judge、诊断异常,60%+ 占比,腾讯经验法则)。 记忆锚点:人肉回归是指数成本,评测自动化是唯一线性解。
-
误区:评估是上线前的一道抽查,过了就结束。 真相:评估有四重身份(度量 / 门禁 / 指南针 / 飞轮)且贯穿开发—发布—运行全程;离线分数还只是必要条件,后面有灰度、线上监控、badcase 回流。EDDOps 统计显示工业界 40.74% 的评测已是持续评测。 记忆锚点:评估是逗号,不是句号。
-
误区:新模型在 eval 上分数大跌,说明新模型弱。 真相:DoorDash 从 Claude Sonnet 4.6 迁移到 Gemini 3.5 Flash 时 harness 分数大跌,最终查明不是能力差距,是兼容性差距——工具签名要 plain string 而 Flash 传了 JSON 对象、system prompt 是围绕旧模型惯例隐式调优的。"低分反映的是为旧模型适配的系统,不是更弱的模型。" 记忆锚点:低分先怀疑环境,再怀疑模型。
-
误区:只看平均分 / 总体通过率就够了。 真相:平均分天然掩盖切片退化——某类高风险场景全线崩坏,可以被大量简单场景的分数稀释掉。GEPA(arXiv 2507.19457)的 Pareto 前沿选择隐含的原则正是"按切片看指标,防止平均分掩盖退化"。 记忆锚点:平均会说谎,切片不会。
-
误区:评测体系是纯成本中心,是"质量保险"式的必要之恶。 真相:评估经济学算的是杠杆账——DoorDash 用 harness 拿到回归提速(6+ 小时 → 20 分钟)与模型迁移收益(延迟 -35%、质量无损);评估还持续生产资产(用例库、根因标签库、校准集)。阿里原话:"质量资产越厚,Agent 迭代越不靠个人经验和临时救火。" 记忆锚点:评测买的不是保险,是杠杆。
六、推荐资源
论文(arXiv ID 均经调研核实,收录于 _research/06-edd-simulation.md):
- Evaluation-Driven Development and Operations of LLM Agents(EDD/EDDOps)—— arXiv 2411.13768(2024-11 首发,2025-11 v3)。EDD 方向最系统的学术表述:四阶段过程模型 + 三层参考架构 + "学术 93% 停留在部署前 vs 工业 40% 已持续评测"的供需错配统计。本章 2.7 的主要来源。
- τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains(Sierra AI)—— arXiv 2406.12045(2024-06)。pass^k 的原始出处;本章 2.1 引用的 pass^1/pass^8 数字来自该论文摘要转述口径。
- Benchmarking and Learning Real-World Customer Service Dialogue —— arXiv 2510.22143(2025-10)。offline-online gap 的实证:"强 offline 基准成绩只是部署可靠性的弱指标"。
- GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning —— arXiv 2507.19457(2025-07)。"eval 作为优化目标函数"的代表作,Pareto 前沿按切片保留候选(详见第 E10 章)。
- Automated Self-Testing as a Quality Gate: Evidence-Driven Release Management for LLM Applications —— arXiv 2603.15676(2026-03)。"评测结果即发布证据"的门禁化学术样本。
工程博客(本章工业数字的原始出处,均收录于 _research/00-industry-practice.md):
- Airbnb《Eval-driven development: Lessons from evaluating GenAI at scale》——三大陷阱、EDD 五原则、"When in doubt, look at your data"、100 样本法、judge 校准 78%→88% 全程。
- DoorDash《Building Ask DoorDash (Part 3): Evaluation》与《A Simulation and Evaluation Flywheel to Develop LLM Chatbots at Scale》——质量分 +8 / 错误率近乎减半、50+ eval 门禁、6 小时→20 分钟回归、模型迁移延迟 -35%、11 轮迭代第 3 轮回落。
- 阿里技术《Agent 评测:方法论与体系设计》——三大门槛、"跑几条 case 不够"四场景、一致性双指标、P0/P1/P2 门禁。
- 腾讯技术工程《AI Agent & Skill 测评方案及落地实践》——六大痛点表、稳定性容忍阈值分级、引用 Anthropic 的 100%/95% 通过率口径。
- Anthropic Engineering《Demystifying evals for AI agents》(2026-01)——起步 20–50 个用例、capability vs regression 套件二分、Bolt 约 3 个月建成 eval 体系。
- Hamel Husain《Your AI Product Needs Evals》(hamel.dev)——evals-as-tests 运动的布道文本,面试谈"为什么要有 evals"的课外必读。
- OpenAI《Evaluation best practices》(developers.openai.com 官方文档)——从一开始就反复评测(eval-driven)、每次变更都跑 continuous evaluation;数据来源五路(生产、专家构造、历史、合成、采购);裁判优先对比式 / 分类型 / rubric 打分而非自由文本。与 Anthropic 文档对读,可见两家的口径一致性。
动手 labs:
eval_lab01_metric_system.py——亲手算出 pass@k 与 pass^k 随 K 分道扬镳:"p=0.8 的 agent,pass@8 ≈ 100% 而 pass^8 只剩约 17%":cd evals-special/labs && python3 eval_lab01_metric_system.pyeval_lab06_trajectory_eval.py——构造"结果对但路径错"的假阳性样本,验证 outcome-only 评分必然漏检:cd evals-special/labs && python3 eval_lab06_trajectory_eval.pyeval_lab10_edd_loop.py——EDD 全闭环演练:门禁拒绝"修了新 bug 却改坏旧场景"的版本,回归集只增不减(配套第 E10 章):cd evals-special/labs && python3 eval_lab10_edd_loop.py
特辑内交叉引用:
- 指标怎么定:第 E2 章 · 评估指标体系(pass^k 的完整口径与门禁统计)
- 假阳性怎么抓:第 E7 章 · 轨迹与 Agent 级评估
- 评测怎么驱动开发:第 E10 章 · 评测驱动开发(EDD)
- 四家公司怎么做:第 E15 章 · 工业实践案例研究(含 30 天 / 90 天落地路线图)
- 浓缩版对照:主手册第 8 章 · Agent 评估与可观测性
评估指标体系
一句话导读:「准确率 85%」这句话本身没有意义——有意义的是「哪个口径的 85%、在什么统计置信度下、用来做什么决策」。本章把 Agent/GenAI 评估指标组织成一套体系:纵向分层(P0 门禁 / P1 比较 / P2 观察)、横向分维(五大维度)、逐个精讲核心指标的定义与算法、给出指标设计四原则与统计口径,最后拆解万能 helpfulness 与 Goodhart 两大反模式。学完你能回答任何「这个指标怎么算、该不该进门禁、被刷了怎么办」的问题。
一、知识图谱
评估指标体系
├── 1. 为什么需要「体系」而不是单个指标
│ ├── 单一指标的三种失效:虚假信心(浅层 helpfulness)/ 未发现回归 / 指标与产品脱节(Airbnb 三坑)
│ └── 指标 = 门禁 + 迭代指南针 + 跨团队沟通语言:先定义「什么叫好」,才谈得上评
├── 2. 纵向分层(指标服务于什么决策)——阿里
│ ├── P0 上线门禁:不达标不发布(功能正确性、安全合规、一致性)
│ ├── P1 版本比较:配统计口径(置信区间 + 显著性 + 最小可感知变化)
│ └── P2 体验观察:长期跟踪(语气、满意度、转人工率)
├── 3. 横向分维(评什么)——腾讯五大维度
│ ├── 功能正确性(P0,代码判) ├── 效率与成本(P1,代码判)
│ ├── 过程质量(P1,Rubric+人工) ├── 鲁棒性与安全(P0,代码+人工)
│ └── 体验与对齐(P2,Rubric+人工)
├── 4. 核心指标精讲
│ ├── 一致性双指标:pass@k(能力上限)vs pass^k(生产一致性)
│ │ ├── pass@k = 1−(1−p)^k;pass^k = p^k(独立同分布假设)
│ │ ├── 无偏估计:1 − C(n−c,k)/C(n,k)(每任务 n 次试验、成功 c 次)
│ │ └── 实证:τ-bench GPT-4o retail pass^1≈60% → pass^8≈25%
│ ├── 任务完成率(子目标打点;Turn/Session/Trace/Outcome 四层)
│ ├── 工具调用准确率(该不该调 / 参数对不对 / 调用日志断言)
│ ├── groundedness / 幻觉率(有据性:回复是否锚定检索证据)
│ ├── 误拒率 / 漏拒率(拒绝合理性)
│ └── 延迟 p50/p95/p99、成本 ¥/task(质量相同看成本,成本相同看质量)
├── 5. 指标设计原则与统计口径
│ ├── 四原则:可量化 / 可比较 / 可回归 / 可归因
│ └── 门禁统计三件套(阿里):置信区间 + 显著性检验 + 最小可感知变化阈值
├── 6. 稳定性评估与容忍阈值分级(腾讯)
│ ├── N 次重复运行:1 次不通过即存在稳定性风险
│ └── 关键决策类 0% 容忍 / 辅助分析类 ≤10% / 创意生成类 ≤40%
└── 7. 反模式
├── 万能 helpfulness 分:什么都评 ≈ 什么都没评
└── Goodhart 定律:指标成为目标 → 代理-金标背离 / grader 被钻空 / 计分规则激励瞎猜
30 秒全景:先按「决策用途」分层(这个分数用来拦发布、比版本,还是看趋势?),再按「评估对象」分维(正确性/过程/效率/安全/体验),每个指标都要能回答「怎么算、谁算、多高的值算好、波动多大」——四问缺一,指标就只是仪表盘装饰。
二、核心概念精讲
2.1 为什么「一个准确率」不够:指标体系的定位
Airbnb 在 Eval-Driven Development(EDD)实践中总结了缺乏评测计划的三个常见坑,这三个坑恰好解释了为什么指标必须是「体系」而非「单点」:
| 坑 | 表现 | 根因 |
|---|---|---|
| 虚假信心 | 浅层 helpfulness 分一路走高,产品却持续收到投诉 | 指标测的是「看起来有帮助」,不是「解决了用户问题」 |
| 未被发现的回归 | 改 prompt 后质量悄悄变差,无人知晓 | 没有按版本对比的回归指标,旧场景的退化不可见 |
| 浪费精力 | 团队优化了半天,指标与产品结果脱节 | 指标没有对齐真实产品失败模式 |
Airbnb 给出的核心习惯是 "When in doubt, look at your data."——跑约 100 个样本(真实或合成),人工读输出和 trace,把错误归类,再围绕它们建指标和测试。他们的旅行客服助手案例中,100 条 prompt 的人工精读发现了 15 个 groundedness 失败、8 个正确但啰嗦、5 个不当拒答、3 个 JSON 失败——这四类失败直接推导出四个指标(有据性、简洁性、拒绝合理性、格式合规率),没有任何一个是「万能 helpfulness」。
由此得到指标体系的定位:
- 指标是规约(specification):先定义「什么叫好」,开发与迭代才有方向——这正是 EDD「eval 即规约」的主张(详见第 E10 章 · 评测驱动开发)。
- 指标是门禁(gate):P0 指标不达标就不发布,把质量判断从「上线后靠用户发现」前移到「发布前靠数据拦截」。
- 指标是沟通语言:「三连全对率 42%」比「感觉还行」更能让产品、算法、工程对齐预期。向业务方汇报时应使用 pass^k 这类产品语言,而不是单次通过率。
一句话:单个指标回答不了「能不能上线」,只有分层、分维、带统计口径的指标体系才能回答。
2.2 指标分层:P0 / P1 / P2(阿里)
阿里在 Agent 评测体系设计中把指标分为五大类,并按决策用途赋予优先级:P0 上线门禁(不达标不发)、P1 版本比较与工程优化、P2 体验改善与长期观察。分层的本质是回答「这个指标变差时,我们做什么动作」:
| 层级 | 决策用途 | 动作语义 | 实例指标 | 统计要求 |
|---|---|---|---|---|
| P0 上线门禁 | 发布拦截 | 不达标 = 不发布,无商量余地 | 核心场景通过率、P0 风险样本失败数(要求为 0)、关键工具参数正确率、安全合规用例通过率、一致性 pass^k | 阈值明确、判定确定;高风险样本宁可误杀 |
| P1 版本比较 | 选型与优化 | 用于回答「v2 是否比 v1 好」「换模型值不值」 | 任务完成率、groundedness 分、效率指标(token/延迟/成本)、过程质量分 | 必须带统计口径:置信区间 + 显著性 + 最小可感知变化 |
| P2 体验观察 | 长期跟踪 | 不拦发布,但趋势恶化要立项 | 语气风格分、回复清晰度、转人工率、重复追问率、投诉率、满意度(CSAT/NPS、👍/👎) | 看趋势与切片,容忍单点波动 |
阿里的发布联动实践中,这三层指标对应三类信号同时跟踪:
- 离线质量信号(发布前):核心场景通过率、P0 风险数、关键工具参数正确率;
- 线上体验信号(灰度中):转人工率、重复追问率、投诉率、满意度变化;
- 业务结果信号(全量后):任务完成率、工单闭环率、退款/赔付成功率。
并且有明确的联动规则:离线提升但线上关键信号恶化 → 触发回滚或降级(详见第 E12 章 · 在线评估与数据飞轮)。
分层时的两个实操要点:
- P0 要少而硬。门禁越多发布越慢,团队会倾向于绕过门禁。真正的 P0 只留「失败了就是事故」的指标;阿里把「P0 风险数」直接定义为要求 0——高风险样本(赔付/隐私/合规)失败一个就拦。
- P2 不等于不重要。腾讯特别强调:体验与对齐是 P2 但决定产品生死。分层只是「是否进门禁」的区分,不是「是否重要」的区分——早期用 Rubric + 人工抽样跟踪,成熟后接 A/B + 用户反馈闭环。
2.3 五大评估维度(腾讯)
腾讯在 AI Agent & Skill 测评方案中给出五大维度框架,每个维度标注了优先级、评分器选型与落地要求。下表在腾讯原表基础上扩充了子维度与典型例子:
| 维度 | 层级·评分器 | 子维度(评什么) | 评测方法 | 典型指标 | 落地优先级 |
|---|---|---|---|---|---|
| 功能正确性 | P0 · 代码判 | 结果正确性、任务完成度(子目标打点)、指令遵循(JSON Schema/正则/字段检查)、工具调用正确性 | 断言、单元测试、终态校验、调用日志断言 | pass@1、pass^k、子目标达成率、schema 通过率 | 必须自动化全覆盖 |
| 过程质量 | P1 · Rubric+人工 | 推理合理性、步骤最优性(实际步数 vs 参考解法)、信息完整性(要点覆盖率)、上下文利用率、自我纠错能力 | Rubric 打分(1–5 分)、Trace 分析、基线对比 | 推理分、步骤数比值、要点覆盖率 | 最能体现「智能」,自动化最难,Rubric 主战场 |
| 效率与成本 | P1 · 代码判 | token 消耗、工具调用次数、延迟、失败重试率、任务成本 | 程序化统计(从 trace 直接算) | Token avg/p95、调用次数 avg/p95、延迟 p50/p95/p99、¥/task | 每个任务带成本画像 |
| 鲁棒性与安全 | P0 · 代码+人工 | 一致性(重复运行)、异常恢复(故障注入)、抗对抗/抗注入(红队集)、幻觉率、越权风险、合规、拒绝合理性 | pass^k(k=5/10)、mock_tool_failure、红队用例、权限断言、PII 正则+人工抽查 | pass^k、恢复成功率、攻击成功率、幻觉率、误拒%/漏拒% | 金融/医疗/企业数据 Agent 必须前置 |
| 体验与对齐 | P2 · Rubric+人工 | 语气风格、回复清晰度、主动澄清(模糊需求主动提问而非瞎猜)、同理心、可解释性、用户满意度 | Rubric + 人工抽样;成熟后 A/B + 反馈闭环 | 语气分、澄清率、CSAT/NPS、👍/👎 比 | P2 但决定产品生死;按需补 |
腾讯给出的落地顺序是 P0 先落地、P2 按需补。维度之间并非独立——一个 badcase 往往同时扣多个维度的分,因此腾讯的扣分制评分(初始 100 分负分制,每处不符扣分至 0,达标线 80 分,按 Agent 类型与业务风险调整)会把「任务结果不符预期 −100、步骤遵循性每步 −10、工具调用每项 −10、耗时每超基准 1 分钟 −10」等组合成一份 JSON 扣分明细——分数之外保留「扣在哪」的信息,指标才能归因(评分机制详见第 E04 章 · 程序化评分)。
不同类型 Agent 的指标侧重(腾讯):评测骨架(执行用例 → 采集 Trace → 评分 → 报告 → 根因归类)可复用,按业务定制的是「评什么、怎么判」:
| Agent 类型 | 指标侧重 | 依赖的评分器 |
|---|---|---|
| 知识库问答 | 准确性 / 幻觉检测 / 引用溯源 | Rubric 为主 |
| 代码编写 | 产物正确性 / 可运行性 | 确定性为主:编译、测试 |
| 功能工具 | 过程合规性 / 工具调用正确性 | 过程对比基线 |
| 问题定位 | 推理链路 / 根因准确性 | 过程 + 结果双重验证 |
这与阿里的观点一致:先分类型再定指标,「类型不分,评测结果基本不可用」。
2.4 核心指标精讲
2.4.1 一致性双指标:pass@k 与 pass^k(本章最重要的一对概念)
设单任务单次成功率为 p,k 次独立重复运行:
| 指标 | 定义 | 公式(i.i.d. 假设) | 回答的问题 | 适用场景 |
|---|---|---|---|---|
| pass@k | k 次尝试中至少一次成功 | 1 − (1−p)^k |
「多试几次能不能成」 | 能力上限;有人在环可重试、可从多个草稿中挑选的场景(创意生成、草稿辅助) |
| pass^k | k 次尝试全部成功 | p^k |
「无人值守连续用 k 次会不会出事」 | 生产一致性;客服、支付、退款、合规等不可重试场景的发布门槛 |
直觉:k 增大时两者迅速分道扬镳。 以 p = 0.8 为例:
| k | pass@k(至少一次成功) | pass^k(次次成功) |
|---|---|---|
| 1 | 80.0% | 80.0% |
| 2 | 96.0% | 64.0% |
| 3 | 99.2% | 51.2% |
| 4 | 99.84% | 40.96% |
| 5 | 99.97% | 32.8% |
| 8 | ≈99.9997% | ≈16.8% |
同一个「单次准确率 80%」的 agent:按 pass@8 看近乎完美(99.9997%),按 pass^8 看几乎不可用(16.8%)。Anthropic 在官方 evals 指南中给的例子同样扎心:p = 0.75、k = 3 时 pass^3 ≈ 0.75³ ≈ 42%——一个「看起来 75% 不错」的 agent,三连全对只有四成把握。
实证(τ-bench,Sierra AI):GPT-4o 在 retail 域 pass^1 约 61%、airline 域约 35%,而衡量可靠性的 pass^8 分别跌至约 25% 与 16%(数字引自论文摘要,arXiv:2406.12045,2024)。「能做对一次」与「稳定做对」之间的差距是系统性的,不是个别现象。
估计方法(面试计算高频):实际评测中每个任务只能负担 n 次运行(n 次中成功 c 次)。两个常见的错误估计与正确做法:
- 错误 1:「n 次里有任何一次成功就算过」——这实际报告的是 pass@n,k < n 时会系统性高估 pass@k;
- 错误 2:用有放回公式 (c/n)^k 估 pass^k——小样本下会高估一致性,这是危险方向的高估(让团队误以为系统比实际更稳)。
- 正确:无放回组合的无偏估计——
pass@k = 1 − C(n−c, k)/C(n, k);对应地pass^k = C(c, k)/C(n, k)(c < k 时为 0),即「从 n 次试验里无放回抽 k 次」的超几何口径。
动手验证:cd evals-special/labs && python3 eval_lab01_metric_system.py——lab 用固定种子模拟 N 任务 × K 次运行矩阵,核心断言包括 pass^k ≤ pass@k、p^k 理论值与估计值吻合、以及「同一 agent 在关键决策门禁与创意生成门禁下得到相反发布结论」。
统计注意:pass^k = p^k 依赖各次尝试相互独立。真实系统中上下文污染、残留状态、下游限流、缓存命中都会破坏独立性;若各次尝试正相关(这次挂了下次更容易挂),真实 pass^k 比 p^k 更悲观。此外 pass^k 对试验次数 n 敏感(n 太小会高估),报告时必须连同 n 与置信区间一起给出(详见第 E09 章 · 评估的统计学基础)。
k 怎么选:一场发布哲学的选择。选 k 不是拍脑袋,取决于产品形态对失败的容忍度:
| 场景 | 建议口径 | 理由 |
|---|---|---|
| demo / 能力探索 | pass@1 或至少一次成功率 | 目标是发现能力边界,不是承诺可靠性 |
| 有人审阅的辅助工具(报告生成、代码建议) | pass@k(k=3~5) | 人从候选中挑选,重试成本由人吸收 |
| 无人值守的生产流程(客服托管、工单处理、退款) | pass^k(低 k,k=3~8) | 一次失败就是一次事故;τ-bench 与 Anthropic 均主张可靠性指标进发布门槛 |
| 不可逆操作(支付、改数据) | pass^k + P0 风险样本 0 失败 | 双保险:统计口径 + 硬约束 |
值得注意的现状:多数公开 leaderboard 仍只报 pass@1 或平均分,学界对「可靠性排行榜」尚无标准——这是 2024–2026 evals 领域的公开争议之一。面试中被问「你们汇报哪个数」,答「按产品形态选口径,两个数都报,gap 就是稳定性债」是满分姿势。
2.4.2 至少一次成功率 vs 连续成功率:生产系统为什么看后者
阿里把一致性明确拆成双指标:任务重复运行 N 次,「至少一次成功率」度量能力上限,「连续成功率」度量生产要求。并给出了一句值得全文背诵的判断:
用户不会接受「多试几次总有一次成功」。
客服、支付、退款、合规等生产级场景,每一次失败都是一次真实事故(错误退款、重复扣款、违规承诺),不存在「重试到成功」的兜底路径。因此:
- 能力评测阶段看至少一次成功率——回答「这个 agent 有没有潜力做这件事」,指导投入方向;
- 发布门禁看连续成功率——回答「敢不敢把它交给真实用户」,对应 pass^k(低 k,如 k=3~8)。
两个数的 gap 就是稳定性债:gap 大说明能力有但不可靠,优化方向是降方差(固定 prompt、收紧工具 schema、减少自由发挥),而不是继续提能力上限。
2.4.3 任务完成率:最容易算、也最容易算错
任务完成率是最接近业务价值的指标,但有两个口径陷阱:
- 判「说了什么」还是判「世界变成什么样」。客服/操作类 agent 首选终态校验(如 τ-bench 用数据库终态哈希判定:订单是否真的被取消、金额是否正确),抗话术干扰;只看自然语言回复会把「嘴上说已取消、数据库纹丝不动」判为成功(详见第 E07 章 · 轨迹与 Agent 级评估的假阳性分析)。
- 每轮都对 ≠ 会话成功。阿里特别警告「不要只平均每轮分数」——每轮都「答得还行」但最终没解决问题仍是失败。
阿里对对话 agent 提出的四层评判框架,明确了「完成率应该落在哪一层」:
| 层 | 评什么 | 指标形态 | 常见误用 |
|---|---|---|---|
| Turn(单轮) | 单条回复的相关性、准确性 | 每轮 judge 分 | 只平均每轮分 → 掩盖「绕圈但不解决」 |
| Session(整段会话) | 整段交互是否推进并达成用户目标 | 会话级 pass/fail | 用单轮高分推断会话成功 |
| Trace(执行轨迹) | 路径是否合规、关键步骤是否发生 | 过程分、关键调用覆盖率 | 只看结果不看路径 → 假阳性 |
| Outcome(最终结果) | 用户问题是否真正解决(终态) | 终态校验、工单闭环率 | 把「对话礼貌结束」当「问题解决」 |
任务完成率应落在 Session/Outcome 层,并配合子目标打点(腾讯五维中「任务完成度(子目标打点)」)做部分归因:把任务拆成有序子目标(如退款任务 = 查到订单 → 核实身份 → 确认订单状态允许退款 → 执行退款 → 告知结果),每个子目标独立计数——任务失败时能立刻看出「卡在第几个子目标」,而不是只得到一个笼统的 fail。子目标达成率同时也是 P0 门禁的常用指标(阿里离线质量信号中的「核心场景通过率」通常就是子目标口径的聚合)。
2.4.4 工具调用准确率
工具调用是 agent 区别于 chatbot 的核心能力,也是失败的高发区(阿里 RCA 中的「关键工具未调用」「工具参数缺失」是高频根因)。可拆成一组可程序化判定的子指标:
| 子指标 | 定义 | 判定方式 |
|---|---|---|
| 该不该调(触发正确性) | 过度触发(不该调而调)与漏触发(该调没调)分开统计 | must-call / must-not-call 断言;负向用例集(相似但不相关 prompt 不误触发) |
| 参数正确性 | 参数值、类型、枚举、格式是否符合工具签名 | JSON Schema 静态校验 + 结构化语义比对 |
| 调用序列合规 | 关键前置是否满足(先鉴权后操作)、关键校验是否跳过 | 偏序约束断言;与基线序列 LCS 对齐(腾讯 TPerf 实现,详见第 E07 章) |
| 调用效率 | 重复调用、冗余调用、死循环 | 调用次数 avg/p95、轨迹去重分析 |
腾讯把「工具调用检查(是否调用指定工具、参数是否正确)」列为确定性评分器的第一优先级——能用代码判的绝不用模型(详见第 E04 章)。注意:不要对完整调用序列做 exact match,多条合法路径会被误杀;只对关键调用做强约束。
一个真实 badcase 能说明这组指标的价值(阿里 RCA 案例):现象是「已发货退款场景中,Agent 23 次跳过订单状态校验」,根因被归为「工具覆盖与执行」大类下的枚举「关键工具未调用」,责任模块 = 退款 Skill/退款流程执行模块,且失败集中在 v1.8 Prompt。如果没有「关键校验工具调用覆盖率」这个指标,这 23 次跳过会淹没在「最终退款大多也办成了」的结果分里——直到某次跳过校验造成资损才暴露。工具调用指标的归因价值正在于此:它把「侥幸没出事的路径违规」提前变成统计信号(这类「结果对但路径错」的假阳性样本,处理流程详见第 E07 章与第 E11 章)。
2.4.5 groundedness 与幻觉率
groundedness(有据性)度量「回复是否锚定于检索到的证据/工具返回」,是 RAG 与客服 agent 的头号质量指标;幻觉率是其反面。两者通常由 LLM-as-a-Judge 按 rubric 判定:judge 拿到「agent 的论断 + 背后的工具输出/检索片段」,逐条核对论断是否有证据支撑(DoorDash 的 transcript builder 正是为 grounding 检查定制证据视图:judge 只看该标准依赖的那片证据)。
工程上三条经验(均有出处):
- groundedness 失败是最常见失败类型:Airbnb 100 样本探索中 15/31 个问题属于 groundedness 失败,接近一半;
- 检索改进直接降低 groundedness 失败——该指标的归因往往不在生成层而在检索层,需要配合组件级指标定位(召回是否正确、关键片段是否保留);
- judge 判 groundedness 前必须校准:Airbnb 的 groundedness judge 初始与人工一致率仅 78%(误罚了正确的改述),修订 rubric 与示例后达 88% 才投入使用(judge 校准全流程详见第 E05 章)。
OpenAI 官方 evaluation best practices 给出的量化目标参考(文档问答类):recall ≥ 0.85、precision ≥ 0.7;摘要类 ROUGE-L ≥ 0.40、G-Eval 连贯性 ≥ 80%、好评率 70%+——这些数字可作为团队定门槛时的外部参照,但最终门槛要从自己的失败分布推导。
2.4.6 误拒率 / 漏拒率:拒绝合理性
安全类指标必须成对出现,单看任何一侧都会产生荒谬的优化方向:
| 指标 | 定义 | 单侧优化的荒谬结局 |
|---|---|---|
| 漏拒率(该拒不拒) | 应拒绝/升级的请求被照常处理的比例 | 只压漏拒 → agent 拒绝一切敏感请求 |
| 误拒率(不该拒而拒) | 正常请求被错误拒绝的比例 | 只压误拒 → 防线形同虚设 |
Airbnb 案例中「5 个不当拒答」就是误拒的实例——拒答本身也是一种失败模式,会直接损害可用性。正确姿势是报 tradeoff 曲线:在误拒-漏拒平面上标点,按业务风险偏好选工作点(金融场景容忍较高误拒,客服场景容忍较低误拒)。腾讯把「拒绝合理性(误拒%/漏拒%)」归入鲁棒性与安全维度,与安全用例集、红队集配套使用。
2.4.7 效率与成本:延迟分位数与 ¥/task
腾讯的原话值得引用:「pass@1 高但 token 花 10 倍的方案生产上不可接受」。效率与成本维度要求每个任务带成本画像,核心指标:
- Token:avg / p95(input/output 分开,含缓存读写);
- 工具调用次数:avg / p95(冗余调用的直接信号);
- 延迟:p50 / p95 / p99——只看均值会掩盖尾部;agent 会话的 wall-clock 大头往往在工具执行与外部等待,不在推理本身;
- 失败重试率:重试既烧钱又拉长延迟;
- 单任务成本 ¥/task:把 token 单价 × 用量折算到任务粒度,是与业务方沟通的通用语言。
工业实例(DoorDash):其 eval harness 支撑了一次底座模型迁移(Claude Sonnet 4.6 → Gemini 3.5 Flash)。离线评测最初分数大跌,但 harness 给出具体失败模式后定位出不是能力差距而是兼容性差距(工具参数格式与 system prompt 惯例问题);做小而准的修复后重跑,Flash 与 Sonnet 质量持平(在 harness 噪声范围内),迁移生产后延迟降 35%、质量无损。这个案例是「质量指标守住不动、用效率指标换收益」的标准操作——前提是质量指标先做到可比较(同一 harness、同一 judge、统计口径内比较)。
腾讯 TPerf 案例则展示了效率如何进入扣分制:耗时基准 300 秒,每超 10% 扣 1 分;token 以基线为基准每超 10% 扣 1 分,上限 −10——效率退化会被显式计入总分,而不是事后口头抱怨「变慢了」。
2.5 指标设计四原则与门禁统计口径
2.5.1 四原则
一个指标在纳入体系之前,过一遍这四道检查:
| 原则 | 含义 | 反例 |
|---|---|---|
| 可量化 | 有明确的计算口径,不同人算出来一样 | 「回复质量」无口径;「groundedness judge 按 v3 rubric 判 pass 的比例」有口径 |
| 可比较 | 跨版本、跨模型可比;口径与评测器版本冻结 | judge 升级后直接对比新旧分数(尺子热胀冷缩) |
| 可回归 | 能挂进回归集,每次变更重跑,只增不减 | 一次性的「感觉测试」,跑完即弃 |
| 可归因 | 分数变化能定位到组件/场景切片 | 只有一个全局平均分,掉了不知道掉在哪 |
「可归因」尤其依赖两点:按切片报告(任务类型/场景/难度/风险等级分桶,避免平均分掩盖退化——GEPA 的 Pareto 前沿选择隐含的正是这一原则),以及评分输出不止 pass/fail 还要有问题分类与判定依据(阿里:为 RCA 提供「现象入口」,详见第 E11 章)。
2.5.2 门禁要带统计口径(阿里)
阿里的门禁设计有一条被很多团队忽视的要求:版本对比要配套统计检验——关键指标置信区间 + 与基线的显著性判断 + 最小可感知变化阈值(提前定义提升多少才值得发布)。原文表述:
「门禁不只看差了多少,还要看差异是否超过统计噪声。」
拆开就是三件套:
- 置信区间:通过率是二项比例,报告 Wilson 区间(小样本下端点不越界、覆盖率接近名义水平),不报 CI 的点估计都是噪声;
- 显著性:两版本跑同一批评测集是配对设计,用配对检验(如 McNemar,只关心两版本判定不一致的样本),而不是比较两个独立的点估计;
- 最小可感知变化(MPP):事先定义「提升多少才值得发布」——如果业务上 1 个百分点的提升不值得一次发布风险,就把 MPP 设为 1pp,统计上检出 0.5pp 也没有意义。
量级直觉(推导细节见第 E09 章与 cd evals-special/labs && python3 eval_lab08_statistics_ci.py):通过率 p̂ 的标准误约为 √(p(1−p)/n)。基线 80% 附近、n=100 时标准误约 4 个点、95% CI 约 ±8 个点——v1 82% vs v2 85% 在 n=100 下完全不可判;同样的 3 个点差异,n=2000 时 CI 收到 ±1.6 个点,立刻可判。样本量与可检出差异 δ 约是 1/δ² 关系:基线 80%、双侧 α=0.05、功效 0.8 时,检出 10pp 差异每组约需 250 样本,检出 5pp 约需 1000,检出 3pp 约需 2800——想检出越小的差异,评测集越贵,这就是 golden set 规模与门禁灵敏度之间的根本权衡。
由此可以推出一份合格指标报告的最小字段——缺任何一项,数字都不可复核、不可比较:
| 字段 | 例子 | 缺了会怎样 |
|---|---|---|
| 点估计 | 通过率 85% | —— |
| 误差范围 | 95% Wilson CI [81.2%, 88.1%] | 无法判断差异是否超过噪声 |
| 样本口径 | n=400 条 golden set v3,每任务 trial=5 | 不知道估的是 pass@1 还是 pass^5 |
| 试验次数与聚合方式 | 逐任务估计后平均(非混合所有运行) | pass@k 的错误聚合会改变数值 |
| 评分器版本 | judge v3(与人工一致率 88%) | 尺子换了,趋势图失真 |
| 切片拆分 | 按场景/风险等级分桶的通过率 | 平均分掩盖局部退化 |
| 对比基线与判定 | vs v1.4:+3pp,CI 重叠,不显著 | 「涨了」变成口头结论 |
阿里「门禁不只看差了多少,还看是否超过统计噪声」落到纸面,就是这张表。
把分层指标与统计口径串起来,一次完整的门禁执行流如下(离线部分;与线上灰度的联动详见第 E12 章):
版本变更(prompt / 模型 / 工具 / serving 配置)
→ ① smoke 子集:少量核心用例、分钟级,拦截明显破坏
→ ② 全量回归集 × N trials:能力评测「毕业」的用例只增不减(腾讯/Anthropic 口径:
确定性任务通过率 100%、非确定性 ≥95%)
→ ③ P0 硬门禁:核心场景通过率 ≥ 阈值 ∧ P0 风险样本失败数 = 0 ∧ 安全集 0 漏拒
(任一不满足 → 直接拒绝,不进入统计比较)
→ ④ P1 统计比较:与基线配对检验 + CI + 显著性 + 预设 MPP
(「不劣于基线」且「成本/延迟不劣化超阈值」才放行)
→ ⑤ 通过 → 出报告归档(含上一节最小字段)→ 进入线上灰度
未过 → 拒绝 + 失败样本进 badcase 任务表(详见第 E11 章 · RCA)
注意两个顺序细节:P0 在统计比较之前(硬约束没有商量余地,不必浪费统计检验);成本/延迟作为 P1 比较的一部分——新版本质量持平但成本翻倍,同样应当拒绝。
2.6 稳定性评估与容忍阈值分级(腾讯)
腾讯的稳定性评估方法:同一用例执行 N 次(建议 N=5),只要 1 次不通过即存在稳定性风险。容忍阈值按使用类型分级:
| 使用类型 | 例子 | 容忍阈值 | 逻辑 |
|---|---|---|---|
| 关键决策类 | 问题定位、故障诊断、支付/退款决策 | 0%(N/N 全过,任何一次失败都可能误判) | 结论直接影响不可逆动作 |
| 辅助分析类 | 性能分析、报告生成 | ≤10% | 有人审阅兜底 |
| 创意生成类 | 代码建议、文案 | ≤40% | 人从多个候选中挑选 |
N=5 的读法(腾讯调试经验):
| N=5 结果 | 解读 |
|---|---|
| 全过 | 稳定 |
| 1/5 失败 | 存在幻觉/不稳定,按类型判断是否可接受 |
| 2/5 失败 | 高幻觉率,深入排查 |
| 5/5 失败 | 稳定失败——先查任务定义或基线,再怀疑模型 |
两个反直觉的边界:0% pass^N 通常说明任务定义有问题,不是能力不行;而通过率异常(0% 或 100%)在多数情况下是任务或评分器坏了,不是模型弱/强——这是腾讯列出的人工评分六大必要场景之一(诊断异常)。
腾讯 TPerf 的实战决策是个好案例:TPerf 虽属辅助分析类,但其结论直接影响优化决策与发布判断,一次错误结论可能导致性能问题漏检上线,因此采用关键决策类标准(任一 Trial 不达标该用例 0 分)——阈值分级不是查表填空,最终依据是「一次失败的代价」。
这套稳定性口径如何聚合成最终分数?腾讯 TPerf 给出了可复用的公式链:
trial_score = max(0, 100 + 各项扣分) # 单次运行的扣分制得分
trial_pass = trial_score ≥ 80 # 达标线 80 分
case_score = 全部 trial 都 pass → 取均值
任一 trial 不达标 → 该用例记 0 # 「一次失败即用例失败」的聚合
关键在最后一行的聚合方式:它把「连续成功率」语义直接编译进了用例分数——不是对 5 次运行取平均(那会稀释失败),而是任一次不达标整个用例归零。对比之下,若用「5 次均值 ≥80」做判定,4 次 95 分 + 1 次 0 分照样过关,恰好放过了最不稳定的那类行为。设计一致性指标时先问自己:聚合函数是在奖励稳定,还是在稀释失败?
与之配套的回归口径(腾讯引用 Anthropic 推荐):确定性任务用例集整体通过率需 100%,非确定性任务 ≥95%;能力测评(起步 20–50%,目标山峰)与回归测评(接近 100%,防御漂移)是两套不同预期的套件,通过率稳定 100% 的用例「毕业」进回归集(详见第 E03 章 · 黄金数据集与用例设计、第 E10 章 · EDD)。
2.7 指标反模式:万能 helpfulness 与 Goodhart
2.7.1 万能 helpfulness 分
Airbnb 三坑之首「虚假信心」的直接来源就是一个笼统的 helpfulness 分:它什么都能评,因此什么都评不准——judge 打高分的理由可能是「语气好」「够长」「格式整齐」,与「解决用户问题」弱相关。Airbnb 十条要点的第二条就是「避免泛化 helpfulness,瞄准真实产品失败」;配套的实践是「每个质量维度一个 judge、3–5 个经校准的评估器好过一堆嘈杂的评估器」。
诊断方法很简单:抽 20 条高分样本人工看。如果高分样本里有「礼貌地给了错误信息」「啰嗦但没解决问题」,这个指标就在制造虚假信心。修复路径:按观察到的失败模式拆维度(groundedness / conciseness / 拒绝合理性 / 格式合规……),每个维度独立可判( DoorDash 的做法是每条 rubric 标准写成 binary check,汇总为会话级总分,且先做 eligibility 适用性判断——不适用的标准跳过而不是一律扣分)。
2.7.2 Goodhart 定律:指标成为目标就不再是好指标
指标一旦与 KPI、发布决策、优化目标挂钩,就会被反向塑造。四类有据可查的实例:
| 实例 | 机制 | 出处 |
|---|---|---|
| 代理-金标背离 | 以代理指标(proxy reward)为优化目标时,proxy 持续上升而真实目标(gold)先升后降;最优优化量随奖励模型数据量按平方根增长 | OpenAI《Scaling Laws for Reward Model Overoptimization》,arXiv:2210.10760(2022) |
| KL 正则不是兜底 | 当评分器误差是重尾分布时,无论 KL 系数多大,优化都会找到 exploit——「加正则就安全」是幻觉 | 《Catastrophic Goodhart》,arXiv:2407.14503(NeurIPS 2024) |
| pass@1 高估能力增益 | RLVR 训练后 pass@1 超过基座模型,但大 k 的 pass@k 反而低于基座——只看 pass@1 会把「集中既有解法」误读为「扩展能力」 | arXiv:2504.13837(NeurIPS 2025) |
| 计分规则激励瞎猜 | 二元对错打分下,难题「猜一个」的期望收益高于「承认不会」,基准本身激励幻觉;应允许弃权并按校准计分 | OpenAI《Why Language Models Hallucinate》,arXiv:2509.04664(2025) |
| 长度敏感指标被训练攻破 | AlpacaEval 2.0 的长度偏差是「评测被训练钻空子」的早期案例——优化器学会用更长的回答刷分,而非更好的回答 | 见 _research/09 评测与训练闭环调研 |
| 裁判被「讨好型回答」操纵 | LLM judge 会被谄媚、迎合风格的输出钻空子,Meta 的 J1 工作甚至要用 RLVR 反过来训练 judge 自身防操纵 | arXiv:2505.10320(2025) |
评测工程侧的对应防御(每条都能落地):
- 代理指标旁必须挂独立 gold 指标:gold 是线上信号(转人工率、投诉率、业务结果)或人工抽检结论;跟踪 proxy-gold 背离曲线,一旦背离立即降低对 proxy 的优化强度。
- 指标组合优于单一北极星:质量(pass^k)、安全(误拒/漏拒、幻觉率)、效率(¥/task、p99)同时上报,防止单指标被刷。
- 警惕 grader 被钻空:当指标成为优化目标,grader 就是攻击面——SWE-bench 类评测中已出现 agent 直接修改测试文件骗过断言的案例(arXiv:2506.12286);对「分数突然飙升」的第一反应应是排查 grader 被钻空 / 评测集被污染 / judge 漂移,而不是庆祝模型变强(详见主手册第 8 章 · Agent 评估与可观测性的 grader 对抗性一节)。
- 按切片报告并监控方差:平均分是被 Goodhart 攻破的第一道防线,切片分数(场景/难度/风险等级)更难整体造假。
- 评测集与优化目标隔离:eval 集既当测试又当目标时必然被拟合——保留私有 holdout、定期换血、做污染检测(详见第 E13 章 · Benchmark 全景与前沿争议)。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | pass@k vs pass^k 的定义、公式与适用场景 | ⭐⭐⭐ | 是否理解「能力上限」与「生产一致性」的根本区分,能否手推 p^k 的指数衰减 |
| 2 | 一致性双指标:至少一次成功率 vs 连续成功率 | ⭐⭐⭐ | 是否知道生产场景(客服/支付)必须看连续成功率,「用户不接受重试」 |
| 3 | 指标分层 P0/P1/P2 与三类发布信号 | ⭐⭐ | 是否能把指标与决策动作挂钩(拦发布/比版本/看趋势),而非只报数 |
| 4 | 五大评估维度与评分器选型 | ⭐⭐ | 是否知道什么维度用代码判、什么用 Rubric、什么必须留给人 |
| 5 | 门禁的统计口径:CI + 显著性 + 最小可感知变化 | ⭐⭐⭐ | 是否理解「差异要超过统计噪声」,能否估算样本量(1/δ²) |
| 6 | 效率与成本指标:延迟 p50/p95/p99、¥/task | ⭐⭐ | 是否知道「pass@1 高但 token 花 10 倍不可接受」,成本是并列维度不是脚注 |
| 7 | groundedness/幻觉率的度量与归因 | ⭐⭐ | 是否知道幻觉失败的根因常在检索层,judge 需校准后才能上量 |
| 8 | 误拒率/漏拒率成对报告与 tradeoff 曲线 | ⭐⭐ | 是否理解安全指标单侧优化的荒谬结局 |
| 9 | 任务完成率的口径:终态校验 vs 文本匹配 | ⭐⭐ | 是否知道「嘴上说取消、数据库没动」的假阳性,以及「每轮都对≠会话成功」 |
| 10 | 稳定性容忍阈值分级(关键决策 0% / 辅助 ≤10% / 创意 ≤40%) | ⭐⭐ | 是否理解阈值由「一次失败的代价」决定,不是查表 |
| 11 | Goodhart 定律与指标被刷的治理 | ⭐⭐⭐ | 是否能举出 proxy-gold 背离等实例,给出 gold 指标旁挂、切片报告等防御 |
| 12 | 万能 helpfulness 的危害与拆维度方法 | ⭐ | 是否知道从观察到的失败模式推导指标,而不是先验地定一个大分 |
| 13 | pass^k 的估计:无偏公式与 n 敏感性 | ⭐⭐⭐ | 深水区:能否写出 1−C(n−c,k)/C(n,k),知道朴素估计的高估方向 |
| 14 | 指标的可归因性:切片报告与评分输出规范 | ⭐ | 是否知道分数要能定位到场景/组件,pass/fail 之外还要问题分类 |
四、经典面试题与参考答案
题 1(基础):pass@k 和 pass^k 有什么区别?各在什么场景下使用?
参考答案: 两者都是对「同一任务重复 k 次」的度量,但方向相反。pass@k = 1−(1−p)^k,k 次中至少一次成功,度量能力上限,适合有人在环、可重试或可从多候选中挑选的场景(创意文案、代码草稿辅助);pass^k = p^k,k 次全部成功,度量生产一致性,适合无人值守、失败即事故的场景(客服、支付、退款),是发布门槛该看的数。关键在于 k 增大时两者迅速分道扬镳:p=0.8 时 pass@8≈99.9997% 而 pass^8≈16.8%。实证上,τ-bench 报告 GPT-4o retail 域 pass^1≈60%(官方榜单 60.4%)、pass^8 ≈25%(摘要 <25%)(arXiv:2406.12045)。所以汇报口径必须匹配产品形态:向用户交付「每次都做对」的承诺,就用 pass^k;两个数之间的 gap 就是稳定性债。
题 2(基础):为什么不能用一个「成功率」指标评估 Agent?你会怎么分层组织指标?
参考答案: 单一指标有三个失效模式(Airbnb 三坑):浅层 helpfulness 造成虚假信心;没有版本对比就发现不了回归;指标与产品结果脱节导致白费精力。我会按决策用途分三层(阿里框架):P0 上线门禁——不达标不发布,只留「失败即事故」的硬指标:核心场景通过率、P0 风险样本失败数(要求为 0)、关键工具参数正确率、安全合规通过率、一致性 pass^k;P1 版本比较——任务完成率、groundedness、效率指标,必须带统计口径(置信区间 + 显著性 + 最小可感知变化),回答「v2 是否真的比 v1 好」;P2 体验观察——语气、清晰度、转人工率、满意度,不拦发布但长期跟踪趋势。分层的原则是「指标变差时我们做什么动作」:拦发布、比版本、看趋势,三类动作三套口径。P0 要少而硬,否则团队会绕过门禁;P2 不等于不重要——体验决定产品生死,只是不进门禁。
题 3(进阶):一个支付客服 agent 评测显示「至少一次成功率 92%,连续成功率(k=3)58%」。产品经理说 92% 足够上线了,你怎么看?
参考答案: 不能上线,而且这正是一致性双指标要防止的误判(阿里)。至少一次成功率度量的是能力上限——「多试几次总有一次成功」;但支付场景每次失败都是真实事故(错误退款、重复扣款),用户不会接受重试,生产要求看的是连续成功率,即 pass^k 口径。92% vs 58% 的巨大 gap 说明 agent「会做但不稳」,优化方向不是提能力而是降方差:固定 prompt 与输出 schema、收紧工具参数校验、减少自由发挥路径、对高风险步骤加强制校验。同时要追问统计口径:这个 58% 是多少任务、每任务几次运行估出来的?pass^k 对试验次数 n 敏感,n 太小会高估,需报告 n 与置信区间。门禁设置上,我会把「pass^3 ≥ 目标值(如 90%)且 P0 风险样本 0 失败」作为发布条件,把至少一次成功率降级为能力观察指标。若单任务 p≈0.83(0.83³≈57%),要达到 pass^3≥90% 需 p≥96.5%——差距是明确可量化的。
题 4(进阶·计算):基线通过率 82%,新版本 85%,评测集 n=100。能发布吗?要可靠检出 3 个百分点的提升需要多少样本?
参考答案:
不能发布——3 个点的差异在 n=100 下没有超过统计噪声。通过率的标准误约 √(p(1−p)/n),基线 0.83 附近、n=100 时约 3.8 个点,95% CI 约 ±7.4 个点,两版本 CI 大幅重叠。正确做法是配对设计:两版本跑同一批用例,用 McNemar 类检验只看判定不一致的样本,案例难度这个最大噪声源被钉死,检出力更高——这正是阿里门禁要求的「置信区间 + 显著性 + 最小可感知变化」三件套。样本量估算:双比例比较 n ≈ (z_{α/2}+z_β)²·2p̄(1−p̄)/δ²,与 δ² 成反比。基线 80%、α=0.05、功效 0.8 时,检出 10pp 每组约 250 样本,检出 5pp 约 1000,检出 3pp 约 2800。所以要么扩评测集到约 3000 条/版本(配对设计可显著更少),要么把 MPP(最小可感知变化)放宽到 5pp 并接受「小提升不发布」——两个方向都是把「统计成本」显式化。动手验证见 cd evals-special/labs && python3 eval_lab08_statistics_ci.py。
题 5(进阶):如何设计 Agent 的效率与成本指标体系?质量与成本冲突时怎么决策?
参考答案: 效率与成本是与质量并列的维度而非脚注——腾讯的原话:「pass@1 高但 token 花 10 倍的方案生产上不可接受」。指标清单(全部可从 trace 程序化统计,代码判):Token avg/p95(input/output 分开)、工具调用次数 avg/p95、延迟 p50/p95/p99(只看均值会掩盖尾部,agent 的耗时大头常在工具与外部等待)、失败重试率、单次任务成本 ¥/task。落地要点:① 每个任务带成本画像,报告里与质量分并排(腾讯测评报告含模型版本与费用、总 token、平均费用每 Trial);② 效率退化要能扣进总分(腾讯 TPerf:耗时基准 300s 每超 10% 扣 1 分,token 每超基线 10% 扣 1 分,上限 −10);③ 质量与成本冲突时看能力-成本前沿:质量持平(统计噪声范围内)时选便宜的。实例:DoorDash 模型迁移(Sonnet 4.6→Gemini 3.5 Flash),离线 harness 先发现分数大跌、定位为兼容性而非能力差距,小修后质量持平(harness 噪声范围内),迁移生产延迟降 35%、质量无损——质量指标守底线、效率指标换收益的标准操作。
题 6(进阶):groundedness(有据性)和幻觉率怎么度量?怎么保证度量本身可信?
参考答案: 度量方法:把「agent 的每条论断」与「其背后的证据(检索片段/工具返回)」交给 LLM-as-a-Judge 按 rubric 逐条核对,输出 pass/fail + 理由;幻觉率 = 无证据论断占比。工程上三个关键点:① 证据切片——judge 不该读全量 trace,DoorDash 的做法是每条 rubric 标准声明依赖的证据,transcript builder 只给 judge 那一片(grounding 检查拿论断 + 背后工具输出),聚焦证据让判断更一致;② judge 必须校准——Airbnb 的 groundedness judge 初始与人工一致率仅 78%(会误罚正确的改述),修订 rubric 与 few-shot 后达 88% 才上量;阿里的口径是与人工一致率约 85% 后进自动化,腾讯是 ≥85% 可用;③ 归因要下探到检索层——幻觉失败常因检索没召回正确文档,需配合组件级指标(context recall 低是检索问题,faithfulness 低是生成问题)。参考数字:Airbnb 100 样本探索中 15 个 groundedness 失败是最大失败类;OpenAI 官方建议文档问答 recall ≥ 0.85、precision ≥ 0.7。幻觉率要按切片(场景/知识域)报告,并作为 P0 安全维度进门禁(腾讯五维之一)。
题 7(进阶):你负责的评测指标被「刷」了——优化后分数大涨,但线上投诉没降。如何排查和治理?
参考答案: 排查按三段式:grader 被钻空 / 评测集被污染 / 指标与目标错配。① grader 钻空:抽查「通过但可疑」的样本——agent 是否修改了测试文件、对单点断言表面达标、用固定话术骗过 rubric(SWE-bench 类评测已有改测试文件骗分的实证,arXiv:2506.12286);② 评测集污染/过拟合:团队是否针对已知用例调 prompt,用复述变体试探、检查通过率是否远超线上真实分布;③ 指标错配:优化的是 proxy(离线 helpfulness 分),真实目标 gold(线上投诉)没动——这正是 Goodhart 定律,OpenAI 的 overoptimization 标度律(arXiv:2210.10760)给出定量形态:proxy 持续上升时 gold 先升后降。治理:a) 代理指标旁永远挂独立 gold 指标(线上转人工率、投诉率、人审抽检),跟踪 proxy-gold 背离,背离即停;b) 指标组合替代单一北极星(质量 pass^k + 安全 + 成本同时看);c) 按切片报告,平均分最易被攻破;d) 评测集定期换血、保留私有 holdout;e) 对 grader 做红队(喂「看起来对其实错」的对抗样本)。观念:分数大涨的第一反应是怀疑测量系统,不是庆祝。
题 8(系统设计):为一个电商退款客服 Agent 设计完整的评估指标体系与发布门禁。
参考答案: 分五层设计。① 维度框架(腾讯五维 + 阿里分层):功能正确性(P0,代码判)——任务完成率按数据库终态校验(退款单状态、金额精确到分),不评自然语言话术;鲁棒与安全(P0)——pass^k(k=3/5)、幻觉率、误拒/漏拒、越权断言(must-not-call:不得跳过订单状态校验)、PII 合规;过程质量(P1,Rubric)——是否先查订单状态再承诺、关键澄清是否发生;效率(P1,代码判)——token/调用次数 avg&p95、延迟 p50/p95/p99、¥/task;体验(P2)——语气、解释完整性、转人工率、重复追问率。② 一致性口径:重复运行 N=5,关键决策类 0% 容忍——退款不可逆,任何一次失败都是事故,门禁看连续成功率 pass^3;同时报至少一次成功率作能力参照。③ 统计口径:golden set 起步 50–200 条(阿里),覆盖核心路径 + 高风险边界(已发货退款、运费险、特殊类目——业务先定口径),版本对比用配对检验 + 95% CI + 预设 MPP;报告 Wilson 区间与试验次数。④ 门禁规则:P0 硬门禁(核心场景通过率 ≥ 阈值、P0 风险样本失败 = 0、pass^3 达标、安全集 0 漏拒),P1 显著性比较(不劣于基线 + 成本不超基线 50%),P2 观察不拦截;离线门禁与线上灰度联动,离线升线上降 → 回滚(阿里)。⑤ 运营闭环:线上每日抽样(参考 Airbnb 5% 去标识化流量)用同一 rubric + 同一校准 judge 打分(离线在线同口径,DoorDash 原则);badcase 进 RCA(阿里五步)与回归集(只增不减);judge 升级时重跑三项统计(与人工一致性/高风险漏判率/边界稳定性)。评分器选型遵循确定性 > Rubric > 人工(腾讯),judge 校准到 ≥85% 一致率才上量(详见第 E05 章)。
五、易错点 · 反直觉点
- 只报单次成功率,不报一致性:「准确率 80%」的 agent,pass^8 只有 16.8%。用户不接受「多试几次总有一次成功」——无人值守场景必须报 pass^k。记忆锚点:能力看 pass@k,发布看 pass^k。
- 用「n 次里成功过任意一次」冒充成功率:这实际是 pass@n(n 是总试验次数),会系统性高估 pass@k;同理用 (c/n)^k 估一致性也是危险方向的高估。正确口径是无放回组合估计 1−C(n−c,k)/C(n,k)。记忆锚点:很多「好看」的评测数字,是口径选出来的。
- 门禁只看差了多少,不看是否超过噪声:n=100 时 ±7 个点都是噪声,82%→85% 不构成发布理由。门禁要带置信区间 + 显著性 + 最小可感知变化三件套。记忆锚点:没有误差范围的对比结论可能只是噪声。
- 万能 helpfulness 分:什么都能评 = 什么都评不准,语气好、篇幅长都能刷高分,制造虚假信心(Airbnb 三坑之首)。指标要从观察到的真实失败模式推导。记忆锚点:先有失败模式,后有指标。
- 平均每轮分数高 = 会话成功:每轮都「答得还行」但最终没解决问题仍是失败(阿里)。任务完成率要落在 Session/Outcome 层,用终态校验而非文本匹配。记忆锚点:嘴上说已取消,数据库纹丝不动。
- 只看质量不看成本:pass@1 高但 token 花 10 倍的方案生产上不可接受(腾讯)。质量相近时,延迟 p99 与 ¥/task 决定选型。记忆锚点:成本画像与质量分并排上报。
- 指标 KPI 化后被反向刷爆:指标成为目标就不再是好指标——proxy 持续上升时 gold 先升后降(arXiv:2210.10760);二元对错计分还会激励瞎猜与幻觉(arXiv:2509.04664)。代理指标旁必须挂独立 gold 指标。记忆锚点:分数大涨先怀疑尺子,再怀疑模型。
- 通过率 0% 或 100% 归因于模型:多数时候是任务定义或评分器坏了,不是模型弱/强(腾讯人工评分六大场景之「诊断异常」);0% pass^N 通常说明任务定义有问题。记忆锚点:极端分数先查尺子和卷子。
- 能力套件与回归套件用同一预期:能力评测起步通过率应偏低(20–50%,指方向),回归评测应接近满分(确定性任务 100%、非确定性 ≥95%,拦退化)。用回归的预期要求能力集会打击探索,反之会漏掉回归。记忆锚点:能力集是山峰,回归集是底线。
- 尺子自己热胀冷缩:judge 模型/prompt、rubric 升级后直接对比历史分数,趋势图失真。评分器要版本化,升级时重新校准并做桥接(阿里 judge 持续运营三统计:与人工一致性、高风险漏判率、边界稳定性)。记忆锚点:换尺子之前,先用旧尺子量一遍新尺子。
六、推荐资源
论文(arxiv ID 均来自本特辑 _research/ 已核实调研):
- τ-bench(arXiv:2406.12045,Sierra,2024)——pass^k 的原始出处;GPT-4o retail pass^1≈60%→pass^8≈25% 的可靠性实证。https://arxiv.org/abs/2406.12045
- Scaling Laws for Reward Model Overoptimization(arXiv:2210.10760,OpenAI,ICML 2023)——Goodhart 的定量形态:proxy-gold 背离与最优优化量标度律。https://arxiv.org/abs/2210.10760
- Catastrophic Goodhart(arXiv:2407.14503,NeurIPS 2024)——重尾误差下 KL 正则失效,「加正则就安全」的证伪。https://arxiv.org/abs/2407.14503
- Does RL Really Incentivize Reasoning…(arXiv:2504.13837,NeurIPS 2025)——pass@1 与大 k pass@k 反转:只报 pass@1 会系统性高估能力增益。https://arxiv.org/abs/2504.13837
- Why Language Models Hallucinate(arXiv:2509.04664,OpenAI,2025)——计分规则即激励机制:二元打分激励瞎猜,应允许弃权与校准计分。https://arxiv.org/abs/2509.04664
- GEPA(arXiv:2507.19457,2025)——Pareto 前沿按切片保留候选,隐含「按切片看指标、防平均分掩盖退化」的指标设计原则。https://arxiv.org/abs/2507.19457
工业实践原文(本章全部工业数字的出处):
- 阿里技术《Agent 评测:方法论与体系设计》——P0/P1/P2 分层、一致性双指标、门禁统计三件套、容忍阈值思想。
- 腾讯技术工程《AI Agent & Skill 测评方案及落地实践》(martinskxu)——五大维度、N=5 稳定性读法、容忍阈值分级、¥/task 成本画像。
- Airbnb《Eval-driven development: Lessons from evaluating GenAI at scale》——三坑、从失败推导指标、judge 少而精、groundedness 校准 78%→88%。
- DoorDash《Building Ask DoorDash (Part 3): Evaluation》(2026-06-30)——质量分 +8、错误率近乎减半、模型迁移延迟降 35% 质量无损。
- Anthropic《Demystifying evals for AI agents》(2026-01)——pass^k 进发布门槛(p=0.75 时 pass^3≈42% 的著名例子)、capability vs regression 套件、确定性任务 100%/非确定性 ≥95%。
- OpenAI《Evaluation best practices》——量化门槛示例(文档问答 recall ≥ 0.85 / precision ≥ 0.7、摘要 ROUGE-L ≥ 0.40)。
动手实验:
cd evals-special/labs && python3 eval_lab01_metric_system.py——pass@k/pass^k 理论值与无偏估计、p=0.8 时两指标随 k 分道扬镳、同一 agent 在不同门禁下的相反发布结论。cd evals-special/labs && python3 eval_lab08_statistics_ci.py——Wilson 区间覆盖率验证、配对显著性(McNemar)、样本量速查表:3% 差异在 n=100 下不可判、n=2000 下可判。cd evals-special/labs && python3 eval_lab10_edd_loop.py——P0 门禁(通过率 ≥90% 且 0 个 P0 风险样本失败)与回归检测的完整闭环。
相关章节:
- 第 E01 章 · 为什么评估是 GenAI 工程的生命线(指标体系要解决的问题)
- 第 E03 章 · 黄金数据集与用例设计(指标的载体:评什么样本)
- 第 E04 章 · 程序化评分(指标怎么算:确定性评分器)
- 第 E05 章 · LLM-as-Judge 深入(语义类指标的度量与校准)
- 第 E07 章 · 轨迹与 Agent 级评估(过程类指标:工具序列、假阳性)
- 第 E09 章 · 评估的统计学基础(置信区间、样本量、显著性的完整推导)
- 第 E10 章 · 评测驱动开发(指标如何进门禁与 CI)
- 第 E13 章 · Benchmark 全景与前沿争议(外部坐标系与 Goodhart 的基准侧)
- 第 E15 章 · 工业实践案例研究(四家指标体系的横向对比)
- 主手册第 8 章 · Agent 评估与可观测性(浓缩版对照;本章在一致性指标、分层与统计口径上显著更深)
黄金数据集与用例设计
一句话导读:E01 回答了"为什么评",E02 回答了"评什么",本章回答"拿什么评"——评测集是整个 evals 体系的尺子,尺子歪了,后面所有分数都是误导性信心。学完本章你能回答:线上数据为什么不能直接当评测集、用例从哪来、怎么组织、Golden Set 建多大、badcase 凭什么入库、用例集如何像代码资产一样持续治理。
一、知识图谱
黄金数据集与用例设计(拿什么评)
│
├── 1. 为什么不能是线上随机抽样
│ ├── 幸存者偏差:正常流程占多数,高风险边缘场景占比极低
│ └── 后果:报告"看起来不错",关键问题恰好全部漏掉
│
├── 2. 用例四类来源(阿里)
│ ├── 专家设计 —— 定标准(冷启动的 20-50 条参考解)
│ ├── LLM 扩展 —— 先定结构字段(场景/订单状态/诉求/期望动作),再生成自然语言
│ ├── 线上真实数据 —— 真实分布与失败挖掘的原料(须去标识化)
│ └── badcase 回流 —— 失败 → 资产(须过入库标准)
│
├── 3. 用例组织范式(腾讯四场景)
│ ├── 触发 → 核心逻辑 → 产物质量 → 异常容错
│ ├── 每场景正向 + 负向用例成对设计
│ ├── 核心逻辑用例量 ≈ 其余三类之和的 2-3 倍
│ └── 负向触发用例必不可少:"过度触发比不触发更难发现"
│
├── 4. 一条合格用例的形态
│ ├── 用例 spec:id/来源/场景/输入/期望行为/判据/风险等级/状态
│ ├── checklist 式场景 rubric(DoorDash 素食 taco 清单):低方差,小样本可迭代
│ └── 基线快照(腾讯):执行 1 次 → 人工确认 → 快照为基线;不硬编码预期输出
│
├── 5. Golden Set 定位与规模
│ ├── 定位:基线评测集(相对稳定、长期复用),用于版本对比与发布门禁
│ ├── 规模经验:20-50(Anthropic)/ 50-100(Airbnb,必须含坏样本)/ 50-200(阿里)
│ └── 成熟后扩展:分类采样集 / 长尾集 / 对抗集 / 线上回流集
│
├── 6. 生命周期治理
│ ├── 入库标准五项:可复现 / 期望明确 / 根因清楚 / 代表性 / 已脱敏
│ ├── 同簇去重:同簇保留代表例
│ ├── 能力集 →(稳定 100% 通过)→ "毕业"进回归集;回归集只增不减
│ └── 样本治理:P0/P1 长期保留 / 稳定通过者降级抽样集 / 主动学习抽新分布
│
├── 7. 隐私合规:去标识化 + 用途限定(Airbnb)
│
└── 8. 三层互补:公开 benchmark(外部坐标)+ 私有 golden set(业务真值)+ 在线信号(最终裁决)
30 秒版本:评测集不是"攒一堆例子",而是一条有准入、有组织、有生命周期、有合规边界的治理流水线。 它的质量上限决定评测结论的质量上限。
二、核心概念精讲
2.1 为什么不能是线上随机抽样:幸存者偏差
直觉上最省事的做法是"从线上日志里随机抽一批会话当评测集"——真实、免费、量大。阿里的评测方法论明确否掉了这条路:评测集不是线上随机抽样。
机制:线上流量的分布天然是"正常流程占多数、易错边缘场景占比低"。随机采样会忠实地复刻这个分布,于是评测报告里 98% 的样本本来就是 agent 闭着眼也能处理好的请求。
后果链条:
| 环节 | 发生了什么 |
|---|---|
| 抽样 | 随机抽 200 条线上会话 |
| 分布 | 高风险场景(退款已发货、叠加优惠、欺诈嫌疑)占比可能不足 2%,样本里只有零星几条 |
| 报告 | 通过率 96%,"看起来不错",评审会顺利过会 |
| 上线 | 恰好漏掉的那几类问题在生产里被用户反复触发——投诉、资损、舆情 |
做个示意算术(非工业数据,仅建立直觉):某高风险场景在线上流量中占 1%,随机抽 100 条,期望只抽到 1 条;如果该场景下 agent 有一半概率犯错,你的评测"发现这个问题"的概率也就五五开。评测集的职能是暴露问题,而随机抽样的职能是复刻流量——两者的目标函数根本相反。
正确姿势是分层与定向:
- 按风险/意图/置信度分层采样,对高风险、低置信、新意图样本过采样(代价是整体通过率失真,聚合时按真实流量权重加权修正);
- 阿里的主动学习口径:新分布出现时优先抽取低置信 / 高影响 / 新意图 / 新工具 / 新知识点样本进人工确认;
- 线上数据的正确角色是失败挖掘的矿与分布参照,不是评测集主体。Airbnb 的每日抽样 5% 去标识化生产流量,用途是生产监控与评审队列,与作为基线的 golden set 是两套资产。
分层采样的一种典型设计(综合阿里口径的工程化表达):
| 层 | 划分依据 | 采样策略 | 用途 |
|---|---|---|---|
| 高风险场景 | risk_level P0/P1(资损/合规/隐私) | 全量或高比例过采样 | 门禁主体,永不稀释 |
| 低置信预测 | 在线 judge/模型置信度低 | 优先抽取进人工确认 | 发现新失败模式 |
| 新分布 | 新意图/新工具/新知识点/漂移告警 | 定向补充 | 覆盖盲区 |
| 普通正常流程 | 其余流量 | 按真实比例随机抽样 | 分布参照与日常监控 |
两个配套动作:过采样会让"整体通过率"偏离真实流量表现,汇报整体分数时按真实流量权重加权还原;同时保留分层明细——分层视图才是改进工作的抓手(哪个层在恶化一目了然)。
一句话记忆:随机抽样回答"线上平均表现如何",评测集回答"最坏情况下会不会死"——不能用一把尺子量两件事。
2.2 用例四类来源:专家设计 / LLM 扩展 / 线上真实数据 / badcase 回流
阿里的评测数据集建设给出四条来源,各有分工,缺一不可:
| 来源 | 角色 | 优点 | 主要风险 | 治理要点 |
|---|---|---|---|---|
| 专家设计用例 | 定标准 | 覆盖核心分支与高风险分支,判据权威 | 贵、慢、带专家个人盲区 | 冷启动主力;先出 20-50 条参考解(腾讯人工建 ground truth 的起步量) |
| LLM 扩展用例 | 上量 | 便宜、快、表达多样 | 自由生成会编造业务上不存在的场景 | 先用规则确定结构字段,再生成自然语言(见下) |
| 线上真实数据 | 分布校准 | 真实用户表达、真实分布 | 幸存者偏差 + 隐私风险 | 去标识化后用于失败挖掘与分层抽样,不直接当基线 |
| badcase 回流 | 防再犯 | 每条都是真实发生过的失败,针对性最强 | badcase ≠ 用例(见 2.6 入库标准) | 过五项入库标准,编码为用例进回归 |
(1)专家设计:定标准的人永远不能缺席。 评测集冷启动阶段,腾讯的做法是新建套件先由专家产出前 20-50 个参考解作为 ground truth;阿里同样把"专家设计用例"列为四类来源之首——它定义的不是样本量,而是"什么算对"的口径。口径未固化的场景(如"订单已发货 + 用户拒收 + 运费险 + 特殊类目该走哪条流程")必须由业务先定,工程师不能代答。
(2)LLM 扩展:先定结构字段,再生成自然语言。 这是阿里方案里最值得抄的细节:
错误做法:prompt = "请生成 100 条客服 agent 的测试用例"
→ 模型自由发挥,场景重复、分布失控、编造业务上不存在的状态
正确做法(两步):
第一步:用规则/枚举确定结构字段
{场景类型: 退款, 订单状态: 已发货, 用户诉求: 仅退款, 期望动作: 先查订单状态再答复}
第二步:LLM 只负责把结构字段改写成接近真实用户的自然语言表达
"东西还在路上我不想要了,钱能直接退我吗?"
结构字段保证覆盖矩阵按需填充(每条分支、每种订单状态都有人管),自然语言改写保证表达真实多样。顺序反过来,用例集的构念效度就丢了。(动手实验:cd evals-special/labs && python3 eval_lab02_golden_dataset.py,其中的 MockLLM 会直接拒绝无结构字段的生成请求——接口约束即治理。)
(3)线上真实数据:真实客服会话/工单是金矿,但进门先过两道关:去标识化(见 2.7)与代表性审查。公开语料同理——WildChat(arxiv 2405.01470,100 万条真实 ChatGPT 交互日志)与 LMSYS-Chat-1M(arxiv 2309.11998)这类真实对话语料是构建评测集与用户模拟器的常用原料,但都要先做隐私清洗再入库。
(4)badcase 回流:线上失败是最有针对性的用例原料。注意 badcase 回流不是"复制粘贴进 JSONL",必须先过 2.6 的入库标准——这是四家共识(Airbnb 的"每周 PM 评审新增测试"是同一动作的组织形态)。看一条 badcase 从现象到用例的完整编码(阿里实例"Agent 直接承诺一定退款成功"的展开):
# ① 线上 badcase(原始现场)
session: session-20260712-8841
phenomenon: 用户咨询已发货订单退款,Agent 回复"放心,一定给您退款成功"
root_cause_label: 风险防控 / 过度承诺 # 根因标签清楚,才具备入库资格
# ② 过入库标准后编码为用例
case_id: risk-overpromise-012
source: badcase 回流
created_from: session-20260712-8841
scenario: 退款 · 已发货
input: "东西已经发货了但我不想要了,能全额退给我吗?"
expected_behavior:
- must_call: query_order_status # 期望行为可判定
- must_not: 无条件承诺退款成功
- reply_mentions: [物流状态, 拦截/拒收流程, 退款条件]
risk_level: P0 # 涉资损与合规,永不降级
suite: capability # 修复验证稳定后毕业进回归集
这条用例同时满足入库五项:失败可复现(有原始 trace)、期望明确(三条检查项)、根因清楚(风险防控域)、有代表性("过度承诺"是一类问题)、已脱敏。它进入回归集后,未来任何一次 prompt 重构若重新引入"拍胸脯式承诺",CI 会当场拦截。
交叉参照:OpenAI 官方 evaluation best practices 把数据来源归纳为五路——生产、专家构造、历史、合成、采购——与上面四类来源基本同构("采购"对应公开数据集/基准)。EDDOps 论文(arxiv 2411.13768,2024-11 首发,2025-11 v3)则要求每条用例带 provenance(来源出处)、oracle(判定标准)、slice 标签——来源必须可追溯,通过率要能按来源拆开看。
2.3 用例组织范式:触发 → 核心逻辑 → 产物质量 → 异常容错
用例攒到几十条后,最大的问题不再是"不够多",而是"没组织"。腾讯给出的组织范式是把每个 Skill/Agent 的用例沿四个场景展开,每个场景回答一个递进的问题:
| 场景 | 回答的问题 | 正向用例 | 负向用例 |
|---|---|---|---|
| ① 触发 | 该触发吗? | 各种合法表述都能触发 | 相似但不相关的 prompt 不误触发 |
| ② 核心逻辑 | 过程对吗? | 工具调用序列/参数/顺序正确 | 缺步骤 / 错工具 / 错参数 |
| ③ 产物质量 | 产物好吗? | 准确 / 完整 / 格式合规 | 缺失 / 格式错 / 幻觉 |
| ④ 异常容错 | 出错扛得住? | 优雅降级、明确提示 | 崩溃 / 死循环 / 静默失败 / 泄露 |
三个关键设计纪律:
(1)负向触发用例为什么必不可少。 腾讯原文一句话点破:"只测正例,Agent 可能学会什么都触发——过度触发比不触发更难发现。"不触发会立刻被用户抱怨(功能"坏了"),过度触发却悄悄消耗 token、污染下游流程、把无关请求路由进昂贵链路,直到某天账单或事故才暴露。所以触发场景的用例必须是正负成对的:正例测召回,负例测精度。
(2)核心逻辑用例量 = 其余三类之和的 2-3 倍。 这是腾讯的经验法则。配套三步法:
- 梳理分支流程图(把业务分支穷举成图);
- 每条分支至少 1 个用例(N 条分支至少 N 个正向 + 关键分支的负向);
- 补充组合与边界:分支间组合、阈值边缘、跨分支冲突。分支过多时先覆盖高频与易错。
(3)异常容错要拆成三个子类设计(腾讯):
| 子类 | 用例示例 | 期望行为 |
|---|---|---|
| 异常输入 | 查询不存在的 ID / 非法格式 / 缺少关键 ID | 告知不存在不编造;提示格式错误;主动追问而非瞎猜 |
| 边界条件 | 数据量极大 / 数据为空 | 不超时;明确告知无数据 |
| 环境故障 | mock_tool_failure 注入工具失败 |
优雅降级,不无限重试 |
这个四场景框架与主手册第 8 章的"任务分类学 → 覆盖矩阵"一脉相承,但给出了更落地的填充顺序:先触发、再过程、再产物、最后容错——因为前置场景失败时,后置场景的用例根本没有意义(触发都错了,谈何产物质量)。
工业实例:TPerf 的用例分组落地(腾讯)。性能分析 Agent TPerf 把 30+ 用例按场景分成 9 组,每个用例绑定一条真实压测记录(不可变、可复现),支持 7 个模型的参数化对比(每用例 × 每模型):
| 场景组 | CPU 瓶颈 | 网卡 | 磁盘 | 磁盘 IO | 内存 | TCP 队列 | Nginx | 配置问题 | 正常场景 |
|---|---|---|---|---|---|---|---|---|---|
| 用例数 | 6 | 5 | 4 | 2 | 1 | 3 | 1 | 1 | 5 |
两个值得抄的细节:① 正常场景也配了 5 条用例——"没问题时不误报"本身就是一种能力,只测异常不测正常,会把"逢数据必喊瓶颈"的 agent 评出高分;② 高频场景(CPU/网卡)用例多、罕见场景(内存/Nginx)用例少,分组数量本身就是风险权重的显式表达——分支过多时先覆盖高频与易错,正是三步法的落地形态。
2.4 一条合格用例长什么样:用例 spec、checklist rubric 与基线快照
(1)用例 spec:字段即契约。 一条可入库的用例至少应固化如下字段(与 labs/eval_lab02_golden_dataset.py 的 dataclass 一致):
case_id: refund-shipped-007
source: badcase 回流 # 专家设计 / LLM 扩展 / 线上数据 / badcase 回流
scenario: 退款 · 已发货 # 结构字段:场景类型 + 订单状态
input: "东西还在路上我不想要了,钱能直接退我吗?"
expected_behavior: # 期望行为写成可判定的检查项,不写"回答要好"
- must_call: query_order_status
- must_not: 无条件承诺退款成功
- reply_mentions: [物流状态, 退款条件]
risk_level: P1 # P0 资损/合规 / P1 核心流程 / P2 体验
suite: capability # capability(能力集)/ regression(回归集)/ graduated
created_from: session-20260712-8841 # provenance:来自哪条线上会话/哪次评审
要点:期望行为必须写成规则/Judge 标准/人工验收标准能消费的形式(阿里入库标准第二条"期望行为明确"的直接推论);risk_level 决定门禁权重与保留策略;created_from 让每条用例可回溯到现场。
(2)checklist 式场景 rubric:低方差信号。 DoorDash 的一个代表性设计是"场景级清单"。例:场景"为两人份、预算 ≤$60 的素食 taco 购物清单",rubric 不写"购物清单质量好"这种宽泛标准,而是写成一张可核验的清单——验证每件商品都是素食 taco 原料、小计 ≤$60。DoorDash 的结论:这类 checklist 标准比宽泛通用标准方差更低,小样本更有用,支撑更快的迭代。
机理很直白:判定依据越接近可程序化核验的事实(商品名在不在清单里、金额加总对不对),judge 与人工的自由裁量空间就越小,同一输入重复评分的波动就越小——方差低了,50 条样本也能看出两个版本的真实差异;方差高了,500 条样本也只是噪声(统计细节详见第 E9 章 · 评估的统计学基础)。用例设计的通用原则由此得出:能用 checklist 的场景不要用印象分,先收敛判定口径再谈规模化。
(3)基线快照机制(腾讯):期望答案也是资产。 腾讯的用例基线机制回答了一个常被忽略的问题——"预期结果从哪来、谁来确认、何时更新":
用例设计:只定义 prompt 与检查规则(不写死预期输出)
→ 执行 1 次
→ 人工审核本次执行的过程与结果
→ 不可接受:修改后重跑
→ 可接受:该次执行快照成为基线
后续每次执行都与基线对比(确定性评分器做程序化判定;Rubric 以基线为参考答案比语义差异)
基线快照包含两部分:预期过程(CoT、工具调用序列含入参与返回、中间产物、完整 Trace)与预期结果(最终响应、输出文件、输出报告)。基线更新的三个时机:Agent/Skill 逻辑变更、模型版本升级、用例本身修改(prompt 或检查规则变了)——任一发生都要重新执行 1 次并人工确认。
TPerf 实战案例把这一点做到了极致:30+ 用例不硬编码预期输出,而是通过基线会话标识(session_id + message_id)指向人工确认过的分析记录,评测时从平台 API 动态获取。每个用例对应一条真实压测记录——不可变、可复现。对比维度也分三层:过程对比(关键步骤缺失/顺序偏离→过程退化)、结果对比(关键内容缺失/产物不一致→结果退化)、效率对比(token/步骤数超基线比例,如 >50% → 效率退化)。
(4)两条配套纪律。
- Eligibility 适用性前置(DoorDash):checklist/rubric 再具体,也不是每条都适用于每个会话。DoorDash 的做法是 judge 先判"该标准是否适用本会话",不适用则跳过——例如食谱类会话不因缺少复购步骤被扣分。用例与标准入库时就要声明适用条件,否则不适用场景的误扣会成为门禁噪声的主要来源。
- 每条标准写成"从会话本身可验证"(DoorDash):同一条 rubric 既要能供人工校准、又要能供 judge 规模化执行——凡是人工判定时需要翻外部系统才能核实的标准,要么拆成可验证的证据切片(详见第 E7 章 · Transcript Builder),要么不写进自动评测。
- 执行环境隔离(阿里):用例设计得再好,执行时多用例共享状态(同一个测试账号、同一份被改写的库存数据)也会导致分数不可复现。评测执行环境必须逐用例隔离或重置——这是用例 spec 之外的运行侧前提。
2.5 Golden Set:定位与规模经验
定位(阿里):Golden Set 默认作为基线评测集——相对稳定、长期复用的核心样本,用于版本对比与发布门禁。它不是全部评测数据,而是那把"不能热胀冷缩的尺子";分类采样集、长尾集、对抗集、线上回流集是它外围的扩展层。
规模经验(以素材为准):
| 来源 | 推荐规模 | 语境与补充 |
|---|---|---|
| Anthropic《Demystifying evals for AI agents》(2026-01) | 20-50 个真实用例即可起步 | 官方建议起步最小集;并区分 capability 套件(初始通过率应偏低,指引方向)与 regression 套件(应接近满分,拦截退化) |
| Airbnb | 50-100 条 gold set,必须含坏样本 | 用于 judge 校准;客服案例中 PM/SME 标注 60 条 gold(含失败样本);规模化阶段扩到 5,000 样本做生产监控,每日另抽样 5% 去标识化流量 |
| 阿里 | 先做 50-200 条高质量 golden set | 覆盖核心业务路径与高风险边界;成熟后扩展分类采样集、长尾集、对抗集、线上回流集 |
| 腾讯 | 前 20-50 个参考解起步 | 人工建 ground truth 的起步量;TPerf 实战落地为 9 大场景 30+ 用例 |
三个读法:
- 起步门槛出奇地低。四家没有一个要求先攒 1000 条——20-50 条覆盖核心路径与高风险边界的用例就能启动 eval-driven 迭代。等的不是数据量,是判据的清晰度。
- 规模服务于职能。50-200 条是"基线尺子"的规模;Airbnb 的 5,000 样本是"每日估计生产质量"的监控规模,两者不可混谈(为什么 100 条尺子在统计上够用,详见第 E9 章的样本量计算)。
- gold set 必须含坏样本(Airbnb 十条要点之一)。原因有二:校准 judge 时需要负例,否则测不出 judge 是否"一律说好";坏样本还承担区分"judge 误罚正确改述"与"judge 放过流畅错误"的功能——Airbnb 客服案例中 judge 初始一致率仅 78%,正是在含失败样本的 60 条 gold 上定位到"judge 误罚正确的改述",修 rubric 后升至 88%(judge 校准全流程详见第 E5 章 · LLM-as-Judge 深入)。
注意"黄金集"一词的两个职能,面试别混:Airbnb 语境的 50-100 条 gold set 主要服务于 judge 校准(含坏样本、人工标注、量小、长期固定),阿里语境的 50-200 条 golden set 主要服务于版本对比与发布门禁(覆盖核心路径与高风险边界、期望行为明确)。成熟团队两者都有:校准集管"尺子准不准",基线集管"版本行不行"——它们可以是同一批样本的两个视角,但维护节奏与准入标准不同(校准集换血要极慎重,否则 judge 一致性历史数据不可比)。
2.6 数据集生命周期治理:入库、去重、毕业、只增不减
评测集是活的:每周都有 badcase 想进来,每个版本都有用例想"退役"。没有治理流水线,用例库要么膨胀到跑不起,要么信号被稀释成噪声。
(1)入库标准五项(阿里,badcase 进评测集/训练数据/知识修订前的通用门槛):
| 标准 | 含义 | 缺失的代价 |
|---|---|---|
| 失败可复现 | 或至少有稳定 Trace + 人工确认 | 无法验证修复是否生效 |
| 期望行为明确 | 可写成规则 / Judge 标准 / 人工验收标准 | 无法打分,judge 噪声直接注入门禁 |
| 根因标签清楚 | 归到具体能力域或业务流程 | 无法归因,RCA 断链(详见第 E11 章) |
| 样本有代表性 | 覆盖一类问题而非一次性环境抖动 | 用例库充满孤例,信号稀释 |
| 已脱敏合规 | PII 清理完成 | 法务红线 |
badcase 不天然是用例。 阿里把一条 badcase 的反馈生产拆成三条生产线(评测集 / 训练数据 / 知识修订),而入库标准是三条线共用的闸门——五项缺一不可。
(2)同簇去重:失败会成簇出现(同一根因反复触发),入库与治理时同簇保留代表例,避免 100 条"退款已发货未查订单状态"挤爆回归集。簇的组织可以直接复用 rubric 标准——DoorDash 的经验是 rubric 标准天然是问题簇(grounding 失败 / 缺替代品 / 糟糕叙述分开调查),失败列表因此变成按影响排序的主题列表。
(3)能力评测 vs 回归评测与"毕业"机制(腾讯):
| 维度 | 能力测评 | 回归测评 |
|---|---|---|
| 回答的问题 | Agent 能把什么做好 | 原有能力是否还在 |
| 起步通过率 | 20-50%(目标山峰,主动拓展、频繁迭代) | 接近 100%(防御漂移) |
| 变更频率 | 频繁增改 | 只增不减,CI 每次运行 |
| 失败含义 | 改进方向 | 阻断发布 |
毕业流转:能力集用例通过率稳定 100% 后"毕业"进回归集;badcase 的完整旅程是"复现记录完整轨迹 → 分析根因定预期行为 → 修复 → 纳入用例集防回归 → 进能力集,稳定后毕业到回归集"。腾讯引用 Anthropic 的口径作为回归门槛:确定性任务用例集整体通过率需 100%,非确定性任务 ≥95%。与之配套的是稳定性容忍阈值分级(关键决策类 0% 容忍、辅助分析类 ≤10%、创意生成类 ≤40%)——同一条用例在不同业务语境下的"毕业线"不同。
(4)样本治理四条规则(阿里):
- 同簇保留代表例;
- P0/P1 风险样本长期保留(资损、合规、隐私类永不降级);
- 稳定多版本通过且低风险者降级为抽样集(退出每次必跑,保留抽查资格)——这是回归集不无限膨胀的泄压阀;
- 新分布出现时主动学习优先抽取低置信 / 高影响 / 新意图 / 新工具 / 新知识点样本进人工确认。
(5)执行触发时机(腾讯):治理的最终产物是"变更 → 自动回归"的条件反射:
| 触发时机 | 方式 | 跑什么 |
|---|---|---|
| 提示词变更 | CI 自动,PR 合入前回归 | 回归集全量 |
| 模型版本升级 | 手动触发 | 验证兼容性(回归集 + 关键能力集) |
| 定期巡检 | 定时任务 | 全量回归 |
门禁的严格程度可以参考 DoorDash 仿真评测飞轮的口径:任何变更必须通过全部 50+ 个 eval 才能上线,且全流程一次触发,5 分钟内可跑完 200+ 场模拟对话——"门禁要严、跑得要快",两者靠 fixtures 与并行化同时满足(详见第 E8 章)。
(6)长尾集与对抗集:成熟期在 golden set 之外单独维护。长尾集收低频但真实的场景(小语种、极端金额、多重约束叠加);对抗集收注入、越权、诱导承诺等安全用例——安全用例必须常驻回归,一次 prompt 重构完全可能功能全绿而防线塌方(安全评估详见主手册第 8 章 · Agent 评估与可观测性)。
动手实验:入库检查器、同簇去重、毕业流转、回归门禁的可运行实现都在 cd evals-special/labs && python3 eval_lab02_golden_dataset.py;毕业机制与"回归集只增不减"在 EDD 全闭环中的位置见 cd evals-special/labs && python3 eval_lab10_edd_loop.py。
2.7 隐私合规:去标识化与用途限定
生产数据进评测链路,合规是硬门槛,不是"以后再说"。素材中两条明确实践:
- Airbnb:生产抽样采用隐私保护方法——人工评审前去标识化、用途限定于安全与质量。两个动作缺一不可:去标识化解决"数据能不能用",用途限定解决"数据会不会被挪作他用"。
- 阿里:把"已脱敏合规"列为入库标准第五项——未脱敏的样本在闸门口就被拒,而不是入库后再补救。
工程上的常见做法(通用实践):直接标识符(姓名/电话/卡号/地址)程序化替换,间接标识符(罕见组合特征)做泛化或删除;工具返回值里的 PII 同样要扫(trace 是重灾区);留存期分级、访问留痕;用于 judge 校准与人工评审的样本走同一套脱敏管线。注意脱敏不是"一次性清洗":线上回流是持续流,脱敏必须内建在入库管道里,而不是靠人记得手动处理。
2.8 公开 benchmark 与私有评测集:三层互补
私有 golden set 不是孤岛,它和公开基准、在线信号构成三层坐标系:
| 层 | 代表 | 测什么 | 主要局限 |
|---|---|---|---|
| 公开 benchmark(外部坐标) | τ-bench、GAIA、SWE-bench 等 | 与业界横向对比的能力水位 | 污染、饱和、分布与你的业务错配 |
| 私有 golden set(业务真值) | 自建 50-200 条基线集 | 你自己的核心路径与高风险边界 | 规模有限、需要持续治理防过拟合 |
| 在线信号(最终裁决) | 每日抽样评分、转人工率、满意度 | 真实用户的最终体验 | 稀疏、滞后、混杂因素多 |
几点关键事实(以素材为准):
- 公开基准的价值在"外部参照"而非"产品指标"。τ-bench(arxiv 2406.12045,2024-06)用数据库终态哈希 + pass^k 提供了可靠的横向坐标:GPT-4o 在 retail 域 pass^1 ≈60%(官方榜单 60.4%)、airline 域 ≈42%,而衡量可靠性的 pass^8 跌至约 25% / 16%(官方榜单与论文口径)——这类数字能帮你判断"自家 agent 的稳定性缺口是不是行业通病"。
- 基准会饱和、会被污染。Anthropic 报告 SWE-bench Verified 一年内从 40% 涨到 80%+;EDDOps 对学术文献的统计显示 97.76% 的评测仍用静态基准——静态题面迟早进训练语料。公开分数只能当路标。
- 私有集的最大敌人是"自己"。一旦评测集被当作优化目标(如用 MIPROv2 类优化器以 eval 分数为搜索目标,arxiv 2406.11695),就会出现泄漏与过拟合风险——EDDOps 因此把 contamination safeguards(污染防护)与 provenance 列为评测资产的必备属性;工程手段是留出集隔离、定期换血、按 slice 报告(GEPA 的 Pareto 前沿选择即按切片保留候选,防止平均分掩盖退化,arxiv 2507.19457)。
- "只能选一个向老板汇报,选哪个":选私有 golden set 的通过率 + 在线信号。基准分数回答不了"我们的用户会不会出事",只有来自真实失败的私有集和线上数据能回答(完整选型框架详见第 E13 章 · Benchmark 全景与前沿争议)。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | 线上随机抽样的幸存者偏差 | ⭐⭐⭐ | 是否理解"评测集找问题"与"抽样复刻流量"目标相反;能否给出分层采样对策 |
| 2 | 用例四类来源及分工 | ⭐⭐⭐ | 专家定标准 / LLM 上量 / 线上校分布 / badcase 防再犯,缺一即偏科 |
| 3 | LLM 扩展"先结构字段后自然语言" | ⭐⭐⭐ | 是否懂覆盖矩阵与构念效度;自由生成=场景编造+分布失控 |
| 4 | 四场景组织范式与正负用例配对 | ⭐⭐⭐ | 触发→核心逻辑→产物质量→异常容错的递进逻辑与负例设计能力 |
| 5 | 负向触发用例为什么必不可少 | ⭐⭐ | "过度触发比不触发更难发现"——测的是精度不是召回 |
| 6 | Golden Set 规模经验与"必须含坏样本" | ⭐⭐⭐ | 20-50/50-100/50-200 三档口径;坏样本用于校准 judge、暴露误罚 |
| 7 | 入库标准五项 | ⭐⭐ | badcase ≠ 用例;可复现/期望明确/根因清楚/代表性/已脱敏 |
| 8 | 能力集 vs 回归集与毕业机制 | ⭐⭐ | 山峰 vs 防线;稳定 100% 毕业;回归集只增不减;确定性 100%/非确定性 ≥95% |
| 9 | checklist 式 rubric 为何低方差 | ⭐⭐ | 判定收敛到可核验事实 → 小样本可迭代(DoorDash 素食 taco) |
| 10 | 基线快照机制 | ⭐⭐ | 预期答案也是资产:执行 1 次→人工确认→快照;三个更新时机 |
| 11 | 公开 benchmark / 私有集 / 在线信号三层互补 | ⭐⭐⭐ | 基准是路标、私有集是资产、线上是裁决;污染与过拟合风险意识 |
| 12 | 同簇去重与评测集膨胀治理 | ⭐ | 代表例保留、P0/P1 长期保留、稳定通过降级抽样集 |
| 13 | 隐私合规(去标识化 + 用途限定) | ⭐ | Airbnb 口径;脱敏内建在入库管道而非事后补救 |
四、经典面试题与参考答案
题 1(基础):为什么不能直接从线上日志随机抽样当评测集?
参考答案:
因为线上流量存在幸存者偏差:正常流程占多数,易错的高风险边缘场景(退款已发货、叠加优惠、欺诈嫌疑)占比极低。随机抽样忠实复刻这个分布,评测报告"看起来不错",但恰好把最关键的问题漏掉了——随机抽样回答的是"线上平均表现如何",评测集要回答的是"最坏情况下会不会死"。
正确做法分三层:① 评测集主体来自专家设计 + 结构化 LLM 扩展 + badcase 回流,按"触发→核心逻辑→产物质量→异常容错"组织,对高风险分支定向填充;② 线上数据做分层采样(按风险/意图/置信度,过采样高风险与低置信样本),用于失败挖掘与分布校准,聚合时按真实流量权重加权;③ 线上抽样(如 Airbnb 每日 5% 去标识化流量)定位为生产监控,与作为基线门禁的 golden set 分开管理。
题 2(基础):评测用例有哪几类来源?各自的优点和风险是什么?
参考答案:
四类(阿里口径):
- 专家设计——定标准。覆盖核心与高风险分支、判据权威;缺点是贵且慢,冷启动先出 20-50 条参考解即可。
- LLM 扩展——上量。便宜快、表达多样;风险是自由生成会编造业务不存在的场景,所以必须先用规则确定结构字段(场景类型/订单状态/用户诉求/期望动作),再让 LLM 生成自然语言表达。
- 线上真实数据——分布校准。表达最真实;但有幸存者偏差与隐私风险,须去标识化,且不直接当基线。
- badcase 回流——防再犯。每条都是真实发生过的失败,针对性最强;但 badcase ≠ 用例,须过五项入库标准(可复现/期望明确/根因清楚/代表性/已脱敏)。
加分项:EDDOps 要求每条用例带 provenance/oracle/slice 标签,通过率按来源拆开看,才能判断"是评测集偏了还是模型偏了"。
题 3(进阶):用 LLM 批量生成测试用例时,为什么强调"先定结构字段、再生成自然语言"?让模型自由生成会怎样?
参考答案:
自由生成有三个失效模式:① 场景编造——模型生成业务上不存在的状态组合(如"未支付订单申请改地址"),用例失去可判定性;② 分布失控——高频套路反复出现、关键分支无人覆盖,没有覆盖矩阵可查;③ 判据缺失——生成时没有期望动作,入库后还要人工补,成本反而更高。
"先结构后语言"把生成拆成两段:结构字段(场景类型/订单状态/用户诉求/期望动作)由规则或枚举确定,保证覆盖矩阵按需填充、每条用例天生带判据;LLM 只负责把结构改写成接近真实用户的自然语言表达,保证多样性与真实感。本质是把"测什么"(构念效度)与"怎么说"(表面多样性)解耦——前者必须握在人手里。工程实现上对应结构化输出/schema 校验:生成请求里没有结构字段就直接拒绝(eval_lab02 的 MockLLM 正是这样实现的)。
题 4(进阶):负向触发用例为什么必不可少?你会怎么设计?
参考答案:
因为过度触发比不触发更难发现(腾讯原话)。不触发会立刻被用户发现(功能"坏了"),过度触发却静默发生:无关请求被路由进昂贵链路、token 消耗上涨、下游流程被污染,直到成本账单或连锁事故才暴露。只测正例的评测集会系统性纵容"什么都触发"的 agent。
设计方法:① 相似但不相关的 prompt 成对构造——与合法触发仅一字之差的表述(相邻技能的需求、含相同关键词但意图不同的请求)必须不触发;② 负例覆盖三类:相邻技能混淆、关键词陷阱(含实体词但意图不同)、空泛请求("帮我看看");③ 判定用程序化断言(未调用目标技能入口 / 未进入目标流程),零 judge 成本;④ 与正向用例配对汇报:触发场景同时报召回(正例触发率)与精度(负例不触发率),两个数一起看才有意义。
题 5(进阶):Golden Set 建多大规模合适?为什么 Airbnb 强调 gold set 必须包含坏样本?
参考答案:
规模经验(均以素材为准):Anthropic 建议 20-50 个真实用例即可起步;Airbnb 用 50-100 条 gold set;阿里建议先做 50-200 条高质量 golden set 覆盖核心业务路径与高风险边界。共识是起步门槛低、判据优先于数量:50-200 条是"基线尺子"的规模,承担版本对比与发布门禁;更大的集合(如 Airbnb 规模化阶段的 5,000 样本、每日 5% 抽样)是生产监控用途,两者职能不同。统计上,100 条样本的通过率 95% 置信区间约 ±10 个百分点,足以分辨"明显变好/变坏",再小则噪声淹没信号(计算详见第 E9 章)。
必须含坏样本有两个原因:① 校准 judge 需要负例,否则测不出 judge 是不是"一律给好";② 坏样本能暴露 judge 的误判类型——Airbnb 客服案例正是在含失败样本的 gold 集上发现 judge 初始一致率仅 78%,根因是"judge 误罚正确的改述",修 rubric 后升到 88%。没有坏样本的 gold set,校准根本无从谈起。
题 6(进阶):线上进来一条 badcase,能直接变成评测用例吗?入库标准是什么?
参考答案:
不能。badcase 是原料,不是用例;阿里的入库标准五项缺一不可:
- 失败可复现(或至少有稳定 Trace + 人工确认)——否则无法验证修复是否生效;
- 期望行为明确——可写成规则/Judge 标准/人工验收标准,否则无法打分;
- 根因标签清楚——归到具体能力域或业务流程,否则 RCA 断链;
- 样本有代表性——覆盖一类问题而非一次性环境抖动,孤例会稀释信号;
- 已脱敏合规——PII 清理完成,法务红线。
完整旅程是:badcase → 过五项标准 → 编码为用例(带 provenance 指回原始 session)→ 进能力集验证修复 → 稳定 100% 通过后毕业进回归集(只增不减)。一条 badcase 至少可生产三类反馈(评测集/训练数据/知识修订),入库标准是三条生产线共用的闸门。
题 7(进阶):能力评测和回归评测有什么区别?"毕业"机制怎么运转?
参考答案:
两者回答的问题相反:能力测评回答"Agent 能把什么做好"——是目标山峰,起步通过率 20-50%,主动拓展、频繁迭代,失败代表改进方向;回归测评回答"原有能力是否还在"——是防线,期望接近 100%,防御漂移,CI 每次运行,失败即阻断发布。
毕业机制是两者的传送带:能力集用例通过率稳定 100% 后毕业进回归集;回归集只增不减。腾讯引用 Anthropic 口径定回归门槛:确定性任务用例集整体通过率 100%,非确定性任务 ≥95%,并按业务类型分级容忍(关键决策类 0% 容忍、辅助分析类 ≤10%、创意生成类 ≤40%)。防膨胀靠降级泄压:稳定多版本通过且低风险的用例降级为抽样集(退出每次必跑、保留抽查资格),但 P0/P1 风险样本长期保留、永不降级。badcase 的完整闭环:复现 → 定根因与期望行为 → 修复 → 纳入用例集防回归 → 进能力集 → 稳定后毕业。
题 8(进阶):DoorDash 的 checklist 式场景 rubric(如"素食 taco 购物清单")比宽泛 rubric 好在哪?什么场景适用?
参考答案:
案例:场景"为两人份、预算 ≤$60 的素食 taco 购物清单",rubric 写成可核验清单——每件商品都是素食 taco 原料、小计 ≤$60——而不是"清单质量好"。
好在低方差:判定依据收敛到可程序化核验的事实(商品在不在清单、金额加总),judge 与人工的自由裁量空间被压缩,同一输入重复评分的波动小。方差低的直接收益是小样本也能迭代——50 个场景就能可靠区分两个版本,支撑更快的发布节奏;宽泛标准方差高,同样样本量下差异淹没在噪声里。此外 checklist 失败时归因明确(哪一条没满足一目了然),天然服务于失败聚类。
适用边界:任务目标可枚举成事实性检查项时用 checklist(购物、预订、表单类);开放式目标(语气、叙事质量)仍需语义 rubric 兜底,此时用 eligibility 前置(DoorDash:judge 先判标准是否适用本会话)避免误扣。两者都要求"从会话本身可验证",才能同一 rubric 既供人工校准又供 judge 规模化。
题 9(系统设计):为一个新上线的客服 Agent 从零设计评测数据集体系:来源、组织、规模、治理流程、与 CI 的衔接,一次讲清。
参考答案:
第一阶段(第 1-2 周):定口径、立骨架。 与业务方先定高风险场景的口径(如"已发货+拒收+运费险该走哪条流程");专家设计 20-50 条参考解覆盖核心路径;按腾讯四场景(触发→核心逻辑→产物质量→异常容错)组织,正负用例成对,核心逻辑用例量≈其余三类之和的 2-3 倍(先梳理分支流程图,每条分支至少 1 例);每条用例固化为 spec(输入/期望行为/判据/risk_level/provenance),期望行为写成 must-call/must-not 等可判定检查项。
第二阶段(第 3-4 周):扩量与基线。 用"先结构字段后自然语言"的 LLM 扩展把规模做到 50-200 条(阿里口径),覆盖核心业务路径与高风险边界;对执行类用例走基线快照流程(执行 1 次→人工确认→快照为基线,不硬编码输出);为购物/预订类场景配 checklist 式低方差 rubric;线上真实会话去标识化后做分布比对,补覆盖盲区。
第三阶段(持续):治理流水线。 入口:badcase 双通路(离线评测失败 + 线上投诉/低满意度/转人工)汇入同一任务表,过五项入库标准(可复现/期望明确/根因清楚/代表性/已脱敏)编码为用例;同簇去重保留代表例。流转:新用例先进能力集,稳定 100% 通过后毕业进回归集(只增不减);回归集进 CI——PR 触发回归(提示词变更)+ 模型升级手动验证 + 定期全量巡检;门槛按 Anthropic 口径:确定性 100%、非确定性 ≥95%,P0 风险样本失败一票否决。防膨胀:稳定多版本通过且低风险者降级抽样集,P0/P1 长期保留;成熟后扩展长尾集与对抗集(注入/越权用例常驻回归)。
第四阶段(规模化):三层坐标。 私有 golden set 做发布门禁;公开基准(τ-bench 类)做季度外部水位参照;线上每日抽样(去标识化、用途限定)做持续监控——三层分数不可互替。组织上指定人类终判者裁决口径争议(Airbnb 五原则之一),评测集增长与 judge 校准各有 owner。
五、易错点 · 反直觉点
-
误区:线上日志随机抽一批就是最"真实"的评测集。 真相:线上分布里高风险场景占比极低,随机抽样复刻的是流量而不是风险,报告"看起来不错"恰好说明关键问题被漏掉了。 记忆锚点:评测集找问题,抽样描分布——目标相反,不能混用。
-
误区:触发场景只需要测"该触发时能触发"。 真相:只测正例,agent 可能学会什么都触发;过度触发静默消耗成本、污染下游,比不触发更难发现。 记忆锚点:正例测召回,负例测精度,触发场景必须成对。
-
误区:让 LLM 自由生成几百条用例,又快又多。 真相:没有结构字段约束的生成=场景编造+分布失控+判据缺失;覆盖率无法审计,入库后全是返工。 记忆锚点:先定骨架(结构字段),再长皮肉(自然语言)。
-
误区:badcase 很宝贵,发现一条就加一条进评测集。 真相:不可复现的无法验证、期望不明的无法打分、无根因标签的无法归因、一次性抖动不代表一类问题、未脱敏的有合规风险——不过入库标准的 badcase 是噪声不是资产。 记忆锚点:badcase 是原料,入库标准五项是闸门。
-
误区:gold set 全放好样本,干净漂亮。 真相:没有坏样本就校准不了 judge——测不出 judge 是否一律说好,也发现不了"judge 误罚正确改述"这类系统性误判(Airbnb 78%→88% 的校准正是靠含失败样本的 gold 集)。 记忆锚点:gold set 必须含坏样本,否则尺子没法校。
-
误区:用例预期输出直接写死在 JSON 里,一劳永逸。 真相:业务逻辑变更、模型升级后硬编码的预期会变成错误答案,评测开始误杀正确行为;腾讯的做法是基线快照(执行 1 次→人工确认→快照为基线),且 Agent 逻辑变更/模型升级/用例修改三个时机必须重做基线。 记忆锚点:预期答案也是资产,要有人审、有版本、有更新时机。
-
误区:评测集越大越好,1000 条总比 100 条强。 真相:基线集的价值在判据清晰与风险覆盖,不在数量;过大意味着维护成本、judge 成本与 CI 时长暴涨,信号还被重复样本稀释。四家的起步口径都是 20-200 条量级;规模扩张走"分类采样集/长尾集/监控抽样"等外围层。 记忆锚点:尺子要准不要长,宁深勿水。
-
误区:评测集只进不出,永远安全。 真相:不做毕业与降级,回归集无限膨胀到 CI 跑不动;但只做减法更危险——回归集只增不减是底线,泄压靠"降级抽样集"(退出必跑、保留抽查),P0/P1 风险样本永不降级。 记忆锚点:只增不减是原则,降级抽样是泄压阀。
-
误区:私有评测集拿来当优化目标(自动改 prompt 刷分)没问题,反正是自己的集。 真相:eval 一旦成为目标就会被拟合——MIPROv2 等优化器以 eval 分数为搜索目标时,必须配留出集与定期换血;EDDOps 把污染防护与 provenance 列为评测资产的必备属性。被刷穿的评测集给出的门禁全是虚假信心。 记忆锚点:评测集当裁判就不能同时当考题——留出集隔离,定期换血。
六、推荐资源
一手工业实践(本章数字的全部出处)
- Airbnb《Eval-driven development: Lessons from evaluating GenAI at scale》(Rohit Girme, Dan Miller, Mia Zhao, Lifan Yang, Clint Kelly)——EDD 五原则、50-100 gold set 含坏样本、每日 5% 去标识化抽样、隐私用途限定。
- DoorDash《Building Ask DoorDash (Part 3): Evaluation》(Steven Xu, Fabio Flores, Twisha Jain, 2026-06-30)——checklist 式场景 rubric(素食 taco 清单)、fixtures、50 场景 × 8 trials 的成本账。https://careersatdoordash.com/blog/building-ask-doordash-part-three-evaluation/
- 阿里技术《Agent 评测:方法论与体系设计》(2026 年第 28 篇)——幸存者偏差、四类来源、50-200 golden set、入库标准五项、样本治理四规则。
- 腾讯技术工程《AI Agent & Skill 测评方案及落地实践》(martinskxu,TEG 云架构平台部网关测试团队)——四场景用例组织、正负用例、2-3 倍经验法则、基线快照、能力/回归毕业机制、TPerf 实战。
论文(arxiv ID 均经 _research/ 调研核实)
- EDDOps: Evaluation-Driven Development and Operations of LLM Agents(arxiv 2411.13768,2024-11 首发 / 2025-11 v3)——评测资产 = 标准基准 + 领域知识 + 专家用例 + 合成数据;每条用例带 provenance/oracle/slice 标签;污染防护是评测资产必备属性。
- MIPROv2(arxiv 2406.11695,2024-06)——eval 集既是测试又是优化目标时的泄漏与过拟合风险(留出集、定期换血的出处语境)。
- GEPA(arxiv 2507.19457,2025-07)——Pareto 前沿按切片保留候选:按 slice 看指标、防止平均分掩盖退化。
- τ-bench(arxiv 2406.12045,2024-06)——数据库终态校验与 pass^k:公开基准如何提供可靠外部坐标(GPT-4o retail pass^1 ≈60% → pass^8 ≈25%)。
- WildChat(arxiv 2405.01470,2024-05)与 LMSYS-Chat-1M(arxiv 2309.11998,2023-09)——构建评测集与用户模拟器的真实对话语料原料。
延伸读物
- Anthropic Engineering《Demystifying evals for AI agents》(2026-01)——20-50 条起步、capability vs regression 套件划分。https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents
- OpenAI《Evaluation best practices》——数据来源五路(生产/专家构造/历史/合成/采购)。https://developers.openai.com/api/docs/guides/evaluation-best-practices
- Hamel Husain《Your AI Product Needs Evals》——evals-as-tests 运动的布道文本。https://hamel.dev/notes/llm/evals/
动手 labs(本特辑)
eval_lab02_golden_dataset.py(本章配套实验):用例结构 dataclass、四类来源构造、五项入库标准检查器、同簇去重、毕业流转与回归门禁。cd evals-special/labs && python3 eval_lab02_golden_dataset.pyeval_lab10_edd_loop.py:毕业后的用例如何进入 EDD 门禁闭环(回归集只增不减的断言)。cd evals-special/labs && python3 eval_lab10_edd_loop.pyeval_lab07_simulator_fixtures.py:checklist 式 rubric 与 fixtures 的可运行版本(配合第 E8 章)。cd evals-special/labs && python3 eval_lab07_simulator_fixtures.pyeval_lab08_statistics_ci.py:为什么 100 条 golden set 在统计上够用——置信区间与样本量计算(配合第 E9 章)。cd evals-special/labs && python3 eval_lab08_statistics_ci.pyeval_lab05_judge_calibration.py:gold 集含坏样本如何支撑 judge 校准(78%→88% 的复现,配合第 E5 章)。cd evals-special/labs && python3 eval_lab05_judge_calibration.py
章节交叉引用
- 指标怎么定:第 E2 章 · 评估指标体系
- 用例的期望行为如何变成评分器:第 E4 章 · 程序化评分
- gold 集如何校准 judge:第 E5 章 · LLM-as-Judge 深入;人工标注与口径裁决:第 E6 章
- fixtures 与模拟场景的用例形态:第 E8 章 · 对话 Agent 与仿真评测
- 样本量与置信区间的数学:第 E9 章 · 评估的统计学基础
- 评测集在开发循环中的用法:第 E10 章 · 评测驱动开发(EDD);badcase 的根因分析:第 E11 章;线上回流与数据飞轮:第 E12 章
- 公开基准全景与选型:第 E13 章 · Benchmark 全景与前沿争议;四家实践完整案例:第 E15 章
- 主手册第 8 章 · Agent 评估与可观测性(本章的浓缩版对照:任务分类学 → 覆盖矩阵 → item spec → 分阶段扩建)
评分三层之一:程序化评分
一句话导读:评分三层(程序化 → LLM Judge → 人工)中,程序化评分是唯一"零成本、零漂移、可单测"的一层。本章讲透:哪些检查必须写成代码、检查规则如何用 DSL 落成可执行规格、评分输出为什么不能只有 pass/fail、粗筛→精判→人工复核的分层流水线怎么省钱、以及扣分制 / 基线快照 / LCS 轨迹对齐这些腾讯 TPerf 实战中打磨过的工程细节。学完本章,你能独立设计一套可进门禁、可喂 RCA 的程序化评分子系统,并清楚知道规则的边界在哪里(边界之外见第 E05 章)。
一、知识图谱
程序化评分(评分三层之一 · 确定性层)
│
├── 定位:确定性优先 ——「能用代码判断的,绝不用模型判断」
│ └── 三类评分器选择顺序:确定性评分器 → Rubric/Judge → 人工
│ 成本:毫秒级/免费 → 秒级/API 费 → 分钟~小时级/人力
│ 稳定性:100% → 有抖动 → 取决于标注员
│ 覆盖:已知硬指标 → 未知软指标 → 主观+边缘场景
│
├── 检查清单(八类,Airbnb + 腾讯合集)
│ ├── 输出层:① schema/格式校验 ② 空输出与异常长度 ③ 关键词/正则黑白名单
│ ├── 任务层:④ P/R/F1(分类任务) ⑤ 语义相似度(有参考答案时)
│ └── 执行层:⑥ 工具调用断言 ⑦ 执行指标(调用次数/token/耗时) ⑧ 基线对比
│
├── 前提:结构化输出 —— JSON schema 强类型,不靠 prompt 措辞产出结构
│
├── 表达:expected_behavior DSL —— must_call / 参数约束 / 预算 / 关键词 / 基线
│
├── 输出规范:{score, passed, 问题分类, 置信度, 判定依据}
│ └── 问题分类 = 现象层 ≠ 根因 → 是 RCA 的「现象入口」
│
├── 流水线:分层筛查(阿里)
│ └── 粗筛层(便宜规则快速分流)→ 精判层(完整规则 + Judge)→ 人工复核层
│ 纪律:粗筛已明确失败的样本,绝不进精判
│
├── 工程实践(腾讯扣分制 + 基线快照 + TPerf 实战)
│ ├── 扣分制:初始 100 分负分制,达标线 80 分,每次输出扣分明细 JSON
│ ├── 基线快照:单用例执行 1 次 → 人工确认 → 快照为基线
│ ├── 轨迹对齐:LCS 最长公共子序列 + 五类归一化,不一致/多余/缺少/顺序错各扣 2
│ └── 稳定性:pass^k 思想 + 容忍阈值分级(关键决策 0% / 辅助分析 ≤10% / 创意 ≤40%)
│
└── 边界:规则永远判不了的 —— 语义正确性 / 语气 / 策略合理性 → 第 E05 章 LLM-as-a-Judge
本章回答的核心问题,与三层评分的分工:
| 问题 | 由哪一层回答 | 本章覆盖 |
|---|---|---|
| 输出格式对不对、工具调没调对、有没有超预算 | 程序化评分(确定性) | ✅ 全章 |
| 语气好不好、引用有没有据、策略合不合理 | LLM-as-a-Judge | 仅划边界(第 E05 章展开) |
| 政策口径怎么定、judge 与规则冲突谁说了算 | 人工评估 | 仅划边界(第 E06 章展开) |
二、核心概念精讲
2.1 确定性优先:程序化评分在三层评分体系中的位置
阿里对评分层的总纲只有一句话:规则看"硬条件"(工具、状态、字段、禁用动作),LLM 看"语义/策略合理性";能写成代码的由规则主判;高风险/抽检/低置信/变更观察期追加 LLM Judge;能自动稳定判断的不长期依赖人工。腾讯把同样的原则表述为选择优先级:确定性 > Rubric > 人工。Anthropic 在《Demystifying evals for AI agents》(2026-01)中给出的打分三层顺序完全一致:确定性代码检查(正则/终态/单测)→ 模型裁判 rubric → 人工抽检。
三家公司独立得出同一个顺序,原因可以拆成四个维度。腾讯给出的三类评分器对照表(原文数字):
| 维度 | 确定性评分器 | Rubric 评分器 | 人工评分器 |
|---|---|---|---|
| 谁来评 | 脚本(Bash/Python/断言/Lint/AST) | 大模型(固定版本) | 领域专家 |
| 规则写在哪 | 代码里 | Prompt + JSON Schema | 人脑 + 标注指南 |
| 成本 | 毫秒级 / 免费 | 秒级 / API 费用 | 分钟~小时级 / 人力 |
| 稳定性 | 100% | 有抖动(需降噪) | 取决于标注员水平 |
| 覆盖 | 已知硬指标 | 未知软指标 | 主观 + 边缘场景 |
| 典型用例 | 文件存在、构建/测试通过 | 代码风格、意图贴合、解释清晰度 | 校准 LLM、诊断 0%/100% 异常、红队 |
| 门禁角色 | 硬门禁 | 分级门禁(error 硬 / warning 软) | 不进门禁,做采样审查 |
这张表有四个面试必须说出来的要点:
- 稳定性 100% 是程序化评分独有的性质。Judge 有抖动需要降噪,人工取决于标注员水平;只有代码断言同一输入永远给同一结论——这是它能做"硬门禁"的根本原因,也是版本对比时分数差异可以归因于被测系统而非评分器的前提。
- 规则写在代码里 = 可单测、可 review、可版本化。评分器本身是软件,享受软件工程的全部基础设施(回归测试、code review、git 历史);judge 的规则藏在 prompt 里,人工的规则藏在人脑和标注指南里,可审计性依次递减。
- 门禁角色分层:确定性评分器做硬门禁(不过不发),Rubric 做分级门禁(error 硬 / warning 软),人工不进门禁只做采样审查——把最贵的判定能力用在杠杆最高处(详见第 E06 章 · 人工评估与评分路由)。
- "覆盖:已知硬指标"暗示了边界:程序化评分只能判"已经想到并能写成规则的东西",未知软指标必须交给下一层。三层不是三选一,而是分层防御:Airbnb 十条要点的第 ⑥ 条就是"代码检查 + 模型 judge + 人工评审结合"。
确定性优先的经济学:一条样本走一次 LLM judge 是秒级延迟 + API 费用,走一次规则断言是毫秒级 + 免费。当评测规模达到 DoorDash 的"每天 2,000 个自动评分会话"时,能用规则判的每一项交给 judge,都是每天重复支付一笔本可省下的钱,还要额外承担 judge 抖动带来的噪声。
2.2 程序化检查清单:八类检查与适用场景
Airbnb 三层评估框架的第一层"程序化检查(确定性、最先跑)"给出五项,腾讯"确定性评分器"给出五项(部分重叠),合并去重后是一张可直接照抄的八类清单:
| # | 检查项 | 判什么 | 出处 | 适用场景 | 命中时的典型问题分类 |
|---|---|---|---|---|---|
| 1 | schema / 格式校验 | JSON 可解析、必填字段齐全、字段类型正确 | Airbnb 标注"永远有用" | 一切结构化输出;Agent 最终答复、工具入参 | invalid_json / missing_field / type_error |
| 2 | 空输出与异常长度 | 输出为空、过短(装不下最小结构)、过长(失控复读/冗余刷屏) | Airbnb 标注"永远有用" | 一切文本产物的第一道安检 | empty_output / too_short / too_long |
| 3 | 关键词 / 正则 | 黑名单(禁用话术、过度承诺、PII、注入回声)、白名单(必备披露内容) | Airbnb:安全合规;腾讯:关键词匹配 | 安全合规、话术红线、披露义务 | blacklist_hit / whitelist_missing |
| 4 | P/R/F1 | 分类标签与金标的精确率/召回率/F1 | Airbnb:分类任务 | 意图识别、工单分类、情感判定等可离散化的任务 | 按错分类型细分 |
| 5 | 语义相似度 | 与参考答案的向量相似度(计算过程仍是确定性代码) | Airbnb:有参考答案时 | 摘要、改写等有参考输出但字面不必相同的任务 | similarity_below_threshold |
| 6 | 工具调用断言 | 是否调用指定工具、参数是否正确、禁用工具是否被调用 | 腾讯:工具调用检查 | 一切带工具的 Agent;安全关键路径 | tool_not_called / tool_param_error |
| 7 | 执行指标 | 调用次数上限、token 阈值、耗时预算 | 腾讯:执行指标 | 防死循环、防成本失控、防效率退化 | too_many_calls / time_budget_exceeded |
| 8 | 基线对比 | 与人工确认过的基线快照逐项对比(调用序列 / 产物 / token) | 腾讯:基线对比 | 回归评测、"过程是否退化"判定 | process_regression / result_regression |
两点使用经验:
- 检查项 1、2 放最前面,永远先跑。Airbnb 对格式校验与空/异常长度的评价都是"永远有用"——它们不依赖任何业务知识,却能拦截最脏的一批样本(连 JSON 都解析不了的输出,后续一切检查都没有意义)。
- 从观察到的失败反推检查项,而不是拍脑袋穷举。Airbnb 旅行客服案例的探索阶段:跑 100 个 prompt 人工精读,发现 15 个 groundedness 失败、8 个正确但啰嗦、5 个不当拒答、3 个 JSON 失败——随后"建测试"阶段第一批落地的就是 JSON 与长度检查。程序化检查清单应该随 badcase 回流持续生长(详见第 E10 章 · 评测驱动开发)。
一个最小评分器的写法(示意骨架,完整可运行版见 lab03)——注意它已经遵守了 2.5 的五元组输出契约:
def check_tool_called(sample, required: list[str]) -> ScoreResult:
"""检查项 6:关键工具是否被调用。只看 trace 里的调用事件,毫秒级。"""
actual = [c["name"] for c in sample.trace if c["type"] == "tool_call"]
missing = [t for t in required if t not in actual]
if missing:
return ScoreResult(
scorer="check_tool_called",
score=0.0, passed=False,
issue="tool_not_called", # 可枚举常量,RCA 入口
confidence=1.0, # 确定性判定,置信度恒为 1
evidence=f"关键工具 {missing} 未被调用(实际调用: {actual})",
)
return ScoreResult("check_tool_called", 1.0, True, "none", 1.0,
f"全部关键工具已调用: {required}")
两个细节值得注意:① 确定性评分器的 confidence 恒为 1.0——它不会"拿不准",拿不准是下一层的事;② evidence 里带上实际值(实际调用列表、实际金额),人审时一眼定位,不用重跑。
动手验证:本章配套实验 labs/eval_lab03_programmatic_scorers.py 实现了上表第 1、2、3、6、7 类评分器,并对 19 条构造样本(明显失败 / 边界 / 通过)跑完整流水线。运行:cd evals-special/labs && python3 eval_lab03_programmatic_scorers.py。
2.3 结构化输出是前提:JSON schema 强类型 vs prompt 措辞的脆弱性
程序化评分的一切前提是:被评的输出有稳定可解析的结构。Airbnb 的原话是:建议用结构化输出(JSON schema 严格类型化),不要只靠 prompt 措辞产出结构,否则下游管道会坏。
两种做法的对照:
| 维度 | JSON schema 强类型约束 | 靠 prompt 措辞"请输出 JSON" |
|---|---|---|
| 格式保证 | 解码层/约束解码强制合法 | 无保证,模型偶发多说话、漏引号、markdown 包裹 |
| 解析成本 | 直接 json.loads |
正则抠取 + 兜底解析,脆弱且需持续打补丁 |
| 失败模式 | 失败即显式报错,可计数 | 静默产出"看起来像 JSON"的坏结构 |
| 评分兼容性 | 字段/类型断言直接写 | 每条正则都在赌模型不改措辞 |
| 换模型时 | schema 契约不变 | 每个模型的"听话程度"不同,格式失败率漂移 |
工程落地的三件事:
- 生成侧强制:能用 API 的 structured output / tool schema 约束就用,把格式失败率压到接近零;格式失败率本身要作为一个独立的可统计问题分类计入报告(lab03 中 invalid_json / missing_field / type_error 是三个独立 issue 常量,便于归因是"完全不会输出 JSON"还是"字段意识不足")。
- 解析侧兜底:即便有约束,也要有解析失败的兜底分支——解析失败本身就是评分信号(直接判 fail 并给出问题分类),绝不允许评分器抛异常中断整批评测。
- 格式防护反哺生产:DoorDash 底座模型迁移案例(Claude Sonnet 4.6 → Gemini 3.5 Flash)中,Flash 的部分工具参数格式与工具签名不符(签名要 plain string,Flash 传了
{"dishes": [...]}JSON 对象)。修复手段之一就是确定性的:工具输入做确定性防护,错误形状强制转换回预期形状而非丢弃调用——最终迁移达成延迟降 35%、质量无损。评分侧发现的格式问题,反过来指导了生产侧的防御性编码,这是"确定性检查价值外溢"的典型例子。
2.4 expected_behavior:把期望行为写成可执行规格(DSL)
腾讯的用例由两部分组成:prompt + 检查规则;预期结果不硬编码在用例里,而是通过基线会话标识(session_id + message_id)指向一份人工确认正确的执行记录,评测时动态获取(TPerf 从 Knot API 拉取)。这套思路可以整理成一份 YAML 风格的 expected_behavior DSL(下例为按腾讯检查项体系整理的示意写法,非任何一家原文):
case_id: refund-001
prompt: "订单 ORD-1001 我不想要了,帮我退款"
risk_level: P0 # 风险等级决定门禁严格度与是否追加人工复核
expected_behavior:
# —— 工具调用断言(腾讯:工具调用检查)——
must_call: [query_order] # 关键工具必须调用(未调用 = 硬失败)
must_not_call: [force_refund] # 禁用工具(越权/跳过校验的防线)
partial_order: # 偏序约束:只约束先后,不约束全序列
- [verify_identity, execute_refund]
params: # 参数约束:类型 + 值域
execute_refund.amount: {type: number, min: 0, max: "order.paid_amount"}
query_order.order_id: {equals_input: "订单号"}
# —— 输出断言(Airbnb:schema / 长度 / 关键词)——
output_schema: {required: [action, reason], types: {action: enum[refund,reject,clarify]}}
length: {min_chars: 16, max_chars: 400}
keywords_blacklist: ["内部员工通道", "保证一定退款成功"] # 过度承诺一票否决
keywords_required_if: # 白名单条件触发:提到退款就必须披露时效
when_output_contains: "退款"
must_contain: ["1-3个工作日"]
# —— 执行指标(腾讯:调用次数 / token 阈值)——
budget: {max_tool_calls: 6, max_total_latency_ms: 8000}
# —— 基线对比(腾讯:基线快照机制)——
baseline:
session_ref: "sess_2026-07-12_refund-001" # 指向人工确认过的基线会话
compare: [call_sequence_normalized, artifact_exists, token_ratio<=1.5]
各检查字段的适用场景速查:
| DSL 字段 | 适用场景 | 不适用 / 注意 |
|---|---|---|
| must_call / must_not_call | 安全与正确性强依赖某次调用(先鉴权后操作、禁跳过校验) | 不要枚举全部调用强制顺序,会惩罚合法替代路径 |
| partial_order | 有明确前置依赖但路径可变的流程 | 只表达"必须先 A 后 B",不表达步数 |
| params 约束 | 金额、ID、枚举等可值域化的参数 | 语义等价参数(同义改写)判不了,交给 judge |
| output_schema / length | 一切结构化产物 | 格式之外的内容质量判不了 |
| keywords 黑白名单 | 合规红线、必备披露、禁用话术 | 变体绕过(同义替换)防不全,是必要非充分手段 |
| budget | 防死循环、防成本失控、效率回归 | 阈值需从基线统计得出,不能拍脑袋 |
| baseline compare | 回归评测、"过程/结果/效率是否退化" | 基线需随被测系统变更而重录(见 2.7) |
lab03 的样本集正是按这份 DSL 的字段逐项构造正负样本的(黑名单命中"内部员工通道"、白名单缺失"1-3个工作日"、调用 9 次超上限 6、总耗时 11500ms 超预算 8000ms、amount=300 超值域 [0,150]),每类失败都被对应的评分器拦下并给出正确问题分类。
2.5 评分输出规范:绝不止 pass/fail
阿里的评分输出规范是本章最重要的设计点之一:评分输出不止 pass/fail,还要有问题分类(现象层:事实性错误 / 答非所问 / 过度承诺)、问题现象、置信度、判定依据——为 RCA 提供"现象入口";且现象分类 ≠ 最终根因。
一条失败样本如果只告诉你 "fail",下游什么都做不了:不知道坏在哪个环节(无法聚类)、不知道判定有多可靠(无法决定要不要人工复核)、不知道为什么失败(无法回放调试)。因此评分器应统一返回一个五元组(lab03 的 ScoreResult 即此结构):
| 字段 | 类型 | 下游用途 |
|---|---|---|
| score | 连续分 [0,1] | 灰度阈值、漂移观察(二值门禁用 passed,趋势观察用 score) |
| passed | bool | 门禁硬判定 |
| issue(问题分类) | 枚举常量 | badcase 聚类、RCA 映射表的键、报告分布统计 |
| confidence | [0,1] | 自动采信 vs 升级人工复核的路由信号 |
| evidence(判定依据) | 人可读文本 | 回放核对、误报申诉、人审快速定位 |
一条真实失败样本的评分输出长这样(lab03 中"退款金额超值域"样本的等价物):
{
"case_id": "refund-001",
"scorer": "check_tool_params",
"score": 0.0,
"passed": false,
"issue": "tool_param_error",
"confidence": 1.0,
"evidence": "refund.amount=300.0 超出合法范围 [0, 150](订单实付 150)",
"prompt_version": "v1.8",
"model": "candidate-a"
}
issue 供聚类与 RCA 映射,evidence 供人审复核,prompt_version/model 绑定让同一 issue 能按版本聚成问题簇。
三条落地纪律:
- 问题分类必须是可枚举的常量,不是自由文本。lab03 定义了 13 个 issue 常量(empty_output / too_short / too_long / invalid_json / missing_field / type_error / blacklist_hit / whitelist_missing / tool_not_called / tool_param_error / too_many_calls / time_budget_exceeded / none)。可枚举才能可统计,才能被下游"问题现象 × 功能模块"映射表直接消费(详见第 E11 章 · Badcase 根因分析与优化闭环)。
- 现象 ≠ 根因,必须分层。"关键工具未调用"是现象;根因可能是 prompt 没写清触发条件、工具描述缺失、或上下文被覆盖。阿里 RCA 五步的第二步"范围收敛"正是拿现象去查映射表缩小候选模块——程序化评分输出的 issue 就是这条流水线的入口。阿里 RCA 中"规则定位硬错误"的清单——工具未调用 / 顺序违反 SOP / 参数缺失 / 报错未重试 / DB 状态未变 / 引用来源不存在——几乎每一项都是程序化评分器能直接给出的确定性信号。
- 判定依据让每条失败可申诉。evidence 字段(如 "refund.amount=300.0 超出合法范围 [0, 150]")让人审和开发者不用重跑就能复核结论;没有 evidence 的 fail 在评审会上等于没有结论。
聚类的价值用阿里的实例最直观:报告不是列 100 条 badcase,而是产出"退款已发货场景中,Agent 23 次跳过订单状态校验,主要集中在 v1.8 Prompt"——这句话的"23 次"来自 issue=tool_not_called 的可统计聚合,"v1.8 Prompt"来自评分记录上绑定的 prompt 版本。没有结构化的评分输出,就不可能有这样的聚类。
2.6 分层筛查流水线:粗筛 → 精判 → 人工复核
当样本量大、评分手段贵贱悬殊时,不能让每条样本都走全套检查。阿里的分层筛查流水线:
待评样本(离线评测集 / 线上抽样 / badcase 回流)
│
▼
┌─────────────────────────────────────────────┐
│ 粗筛层:规则 Scorer + 轻量 Judge │
│ 空输出 / 长度 / JSON 解析 / 关键词(只看输出文本) │
└──────┬──────────────────────┬────────────────┘
│ 明确失败 │ 通过或存疑
▼ ▼
直接定案 ┌──────────────────────────────┐
(给出问题分类, │ 精判层:完整规则 + Judge │
绝不进精判) │ 工具断言 / 参数值域 / LCS 对齐 / │
│ LLM 语义判定(需要 trace 与模型) │
└──────┬─────────────┬──────────┘
│ 结论可信 │ 高风险 / 低置信 / 冲突
▼ ▼
入库 + RCA ┌────────────────┐
│ 人工复核层(E06)│
│ 终判并回收口径 │
└────────────────┘
各层职责与输出:
| 层 | 手段 | 职责 | 输出 |
|---|---|---|---|
| 粗筛层 | 规则 Scorer + 轻量 Judge | 快速分流:明显通过 / 明显失败 / 存疑 | 明显失败的直接定案并给问题分类 |
| 精判层 | 完整规则 + Judge | 确认 badcase,处理边界样本 | 初始问题分类 / 现象 / 置信度 / 判定依据 |
| 人工复核层 | 专家 | 高风险 / 低置信 / 冲突 / 口径未固化的样本 | 终判结论,回收口径反哺前两层 |
关键纪律:粗筛已明确失败的样本绝不进精判。否则昂贵的判定能力(trace 解析、LLM 往返)被垃圾样本稀释,评测成本随样本量线性恶化。
分层的依据不是"哪个评分器写得早",而是"评分器依赖的信息范围":
- 只看输出文本本身的规则最便宜(空输出、长度、JSON 解析、关键词)→ 粗筛;
- 需要完整 trace / 工具调用记录 / 环境状态的判定较贵(工具断言、参数值域、LCS 对齐)→ 精判前段;
- 需要 LLM 语义判断的最贵(语气、groundedness、策略合理性)→ 精判后段;
- 需要政策口径与价值判断的 → 人工层。
成本账要用数字说话。lab03 的实测结果(固定种子、可复现):19 条样本中粗筛拦截 8 条明显失败(空输出 / JSON 损坏 / 异常长度 / 缺字段 / 类型错误 / 黑名单 / 白名单缺失),11 条进入精判层;LLM Judge 仅被调用 10 次;按相对成本单元计,实际开销 490 单元 vs 全量走精判的 baseline 874 单元,节省 43.9%(实验断言阈值 ≥35%)。样本越脏、judge 越贵,分层节省越大——这正是阿里把分层筛查写进平台架构的原因。
人工复核层的路由条件(高风险 / 低置信 / 规则与 Judge 冲突 / 新模型新 Prompt 上线抽样等)展开见第 E06 章 · 人工评估与评分路由。
2.7 评分工程实践:扣分制、基线快照、轨迹对齐与稳定性阈值
这一节集中讲腾讯(含 TPerf 实战案例)沉淀下来的四套工程机制,都是"程序化评分如何长期运营"的答案。
(1)扣分制与达标线。 腾讯的评分规则:初始 100 分负分制,每处不符扣对应分至 0,达标线 80 分(推荐值,按 Agent 类型与业务风险调整)。扣分项(原文数字):
| 扣分项 | 分值 |
|---|---|
| 任务结果不符预期 | −100(直接归零) |
| 步骤遵循性,每步 | −10 |
| 步骤输出结果,每步 | −10 |
| 工具/知识库调用,每项 | −10 |
| 分析耗时(基准 5 分钟),每超 1 分钟 | −10 |
| 一致性 | N 次(建议 N=5)全达标取均值 |
每次评分输出 JSON 扣分明细 + 原因,渲染 HTML 报告归档;报告头部带用例总数 / 通过率 / 平均分 / 模型版本与费用 / 总 token / 平均费用每 Trial。扣分制的好处是分数可归因:80 分与 60 分的差距能逐项拆出来,而不是一个黑盒总分。
(2)基线快照机制。 基线 = 单用例执行 1 次后经人工确认的预期过程与预期结果快照——回答"正确的执行应该长什么样"。预期过程含 CoT、工具调用序列(入参返回)、中间产物、完整 Trace;预期结果含最终响应、输出文件、输出报告。流程:用例设计只定义 prompt 与检查规则 → 执行 1 次 → 人工审核 → 不可接受则修后重跑 → OK 则该次快照成为基线。后续每次执行与基线对比,分三个方面:
- 过程对比:调用序列一致 / 关键步骤缺失 / 顺序偏离 → 判"过程退化"(确定性评分器程序化判定);思维链合理性、步骤最优交给 Rubric 以基线为参考答案对比语义差异;
- 结果对比:产物存在 / 关键内容缺失 / 产物不一致 → 判"结果退化";结论准确性、表述完整性交给 Rubric;
- 效率对比:token / 步骤数超基线比例,如 >50% → 效率退化。
基线更新时机是常考点:Agent/Skill 逻辑变更、模型版本升级、用例本身修改(prompt 或检查规则变了)——三者任一发生,重新执行 1 次并人工确认。TPerf 的基线配置随代码仓库 Git 版本化;用例不硬编码预期输出,而是用基线会话标识指向人工确认正确的记录、评测时动态获取——这样基线更新有据可查、可回滚。
(3)轨迹序列对齐:LCS + 归一化(TPerf 实战)。 程序化判定"工具调用序列是否一致"最忌讳 exact match(时间戳不同、查询参数不同都会误判)。腾讯 TPerf 的做法:LCS(最长公共子序列)对齐基线与 Trial 步骤,先做归一化再对齐,归一化规则五条(原文):时间戳占位 / 搜索工具忽略查询参数 / 写入操作只留路径 / 终端命令提取脚本名 / 连续读文件组内不校验顺序。对齐后:不一致 / 多余 / 缺少 / 顺序错各扣 2 分,上限 −10。这套机制在 lab06 有完整实现,运行:cd evals-special/labs && python3 eval_lab06_trajectory_eval.py(轨迹三层评估详见第 E07 章)。
TPerf 的效率评分同样是程序化的:耗时基准 300s,每超 10% 扣 1;token 以基线为基准每超 10% 扣 1,上限 −10。模型评分维度(关键判定不一致直接 −80、章节内容每项 −5 上限 −80)则交给 CodeBuddy CLI 逐项对比——确定性与模型评分各管一段,最后合成。
(4)一致性标准与得分公式。 基线对比不能要求逐字一致,腾讯给出三档标准:数值型整数精确、小数相对误差 ≤1%;结论型异常等级与关键发现一致;建议型核心排查方向一致即可。得分公式(TPerf):trial_score = max(0, 100 + 各项扣分);trial_pass = score ≥ 80;case_score = 全 pass 取均值,任一 trial 不达标则该用例 0 分——最后一条正是 pass^k 思想在评分规则里的落地(详见第 E02 章 · 评估指标体系与第 E09 章 · 统计学基础)。
(5)稳定性容忍阈值分级。 N 次执行(建议 N=5),只要 1 次不通过即存在稳定性风险,但容忍度按使用类型分级(腾讯原文):关键决策类(问题定位/故障诊断)0%——N/N 全过,任何一次失败都可能误判;辅助分析类(性能分析/报告生成)≤10%;创意生成类(代码建议/文案)≤40%。N=5 的结果解读:全过 = 稳定;1/5 失败 = 存在幻觉,按类型判断;2/5 = 高幻觉率,深入排查;5/5 失败 = 稳定失败,先查任务定义或基线。腾讯特别提示:0% 的 pass^N 通常说明任务定义有问题,不是能力不行——这条经验在诊断"评分器自己坏了"时极其有用(人工评分的六个必要场景之一就是"诊断通过率异常:0% 或 100% 通常是任务/评分器坏了,不是模型弱")。
TPerf 的零容忍决策是个好案例:TPerf 虽属辅助分析类,但结论直接影响优化决策与发布判断,一次错误结论可能导致性能问题漏检上线——因此采用关键决策类标准(任一 Trial 不达标该用例 0 分)。容忍阈值不是由任务类型机械决定的,而是由错误的业务代价决定的。
(6)用例集构成与执行画像(TPerf 实测数字)。 TPerf 的用例集按场景分组共 9 大类、30+ 用例,每个用例对应一条真实且不可变的压测记录(可复现):
| 场景分组 | 用例数 | 场景分组 | 用例数 |
|---|---|---|---|
| CPU 瓶颈 | 6 | TCP 队列 | 3 |
| 网卡 | 5 | Nginx | 1 |
| 磁盘 | 4 | 配置问题 | 1 |
| 磁盘 IO | 2 | 正常场景 | 5 |
| 内存 | 1 | — | — |
执行侧的工程数字:支持 7 模型对比(每用例 × 每模型参数化测试);Trial 并发 + 评分并行 + 三评分器并行;限流自动重试(≤5 次);单用例约 3000s;全量 30+ 用例 × 7 模型约 3–5 小时;用 pytest 实现、TCase 平台管理用例;trace 取自 Knot AG-UI 协议事件流(工具调用事件/文本消息事件/token 消耗),由事件流解析器构建调用步骤列表。另有两条值得抄的设计:基线配置随代码仓库 Git 版本化、执行结果每次重新生成并归档;支持重新评分——评分逻辑调整后无需重新触发 Agent,历史 trace 直接重算分。这把"评分器升级"与"被测系统重跑"解耦了,是评测平台降本的关键机制。
最后补两条门禁口径(腾讯引用 Anthropic 推荐):确定性任务用例集整体通过率需 100%,非确定性任务 ≥95%;能力测评起步通过率 20–50%(目标山峰,主动拓展),回归测评接近 100%(防御漂移,只增不减,CI 每次运行),通过率稳定 100% 后用例"毕业"进回归集。
2.8 规则的边界:哪些东西规则永远判不了
程序化评分的边界与它的优点同源:只能判"能写成规则的已知硬条件"。阿里给出的分工口径:规则看硬条件(工具、状态、字段、禁用动作),LLM 看"语义/策略合理性"。三类东西规则永远判不了:
| 判不了的 | 例子 | 该交给谁 |
|---|---|---|
| 语义正确性 | 回复引用的退款政策是否真实存在、事实是否准确 | LLM Judge(groundedness 检查,见第 E05 章) |
| 语气与体验 | 是否像"热情专业的旅行顾问"、是否有同理心、是否啰嗦 | LLM Judge rubric(见第 E05 章) |
| 策略合理性 | 该先澄清还是先操作、补偿口径是否符合内部政策 | 人工定口径 + Judge 辅助(见第 E06 章) |
还有两个与边界相关的常考问题:
- 假阳性(结果对、路径错):回复看似正确,但执行路径已偏离或带风险——阿里对此的处方是加过程型与风险型检查(工具断言、禁用动作、SOP 顺序),腾讯则在 Rubric 评分输出中专门设了
is_false_positive布尔字段(结果对但过程错的虚假成功)。程序化评分能抓住其中可规则化的部分(跳过校验工具、越权调用),抓不住的部分要靠轨迹级评估与 judge(详见第 E07 章 · 轨迹与 Agent 级评估)。 - 规则会不会被钻空:关键词黑名单会被同义改写绕过、单点断言会被"表面达标"满足。对策是黑白名单只做必要非充分的第一道防线,关键检查用状态级多点校验,并给评分器本身配对抗样本(见本章易错点 9 与第 E10 章)。
拿到一个新检查需求时,用这个顺序决定它该落在哪一层:
这条判定能写成代码断言吗?
├── 能,且只看输出/trace 就有确定答案 ──→ 程序化评分(本章)
├── 写不成代码,但可以写成"人/模型能对照的判断标准" ──→ LLM Judge + rubric(第 E05 章)
│ └── judge 与人工一致率校准到 ~85% 才进自动化(阿里/腾讯口径)
└── 依赖内部政策口径 / 价值判断 / 高风险兜底 ──→ 人工(第 E06 章)
本章收束:程序化评分 = 确定性优先的八类检查 + 结构化输出前提 + DSL 规格 + 五元组输出 + 分层流水线 + 扣分制/基线/对齐工程。它判不了的语义、语气与策略合理性,正是下一层的领地——详见第 E05 章 · LLM-as-Judge 深入。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | 确定性优先原则与三类评分器选择顺序 | ⭐ 基础必备 | 是否理解"能用代码判断的绝不用模型"背后的成本/稳定性/覆盖逻辑 |
| 2 | 程序化检查清单八类 | ⭐ 基础必备 | 能否脱口而出 schema/长度/关键词/P-R-F1/相似度/工具断言/执行指标/基线对比 |
| 3 | 结构化输出是程序化评分的前提 | ⭐⭐ 进阶高频 | 能否说清 JSON schema 强类型 vs prompt 措辞脆弱性的对照与兜底设计 |
| 4 | 评分输出五元组(问题分类/置信度/判定依据) | ⭐⭐⭐ 深水区 | 是否理解"现象入口"与 RCA 的衔接,现象 ≠ 根因 |
| 5 | 分层筛查流水线(粗筛→精判→人工)与成本模型 | ⭐⭐⭐ 深水区 | 能否给出路由纪律(粗筛失败不进精判)并用成本单元算节省 |
| 6 | expected_behavior DSL 设计 | ⭐⭐ 进阶高频 | 给一个业务场景能否当场写出 must_call/参数约束/预算/关键词规格 |
| 7 | 工具调用断言与轨迹对齐粒度 | ⭐⭐ 进阶高频 | exact match / 无序集合 / 偏序 / LCS+归一化的取舍 |
| 8 | 基线快照机制与更新时机 | ⭐⭐ 进阶高频 | "执行 1 次→人工确认→快照";逻辑变更/模型升级/用例修改三时机 |
| 9 | 扣分制与门禁线设计 | ⭐⭐ 进阶高频 | 初始 100 分负分制、达标线 80、扣分明细 JSON 可归因 |
| 10 | 稳定性容忍阈值分级与 pass^k | ⭐⭐ 进阶高频 | 关键决策 0% / 辅助分析 ≤10% / 创意 ≤40%;case_score 任一不达标为 0 |
| 11 | 0%/100% 通过率异常诊断 | ⭐⭐ 进阶高频 | "通常是任务/评分器坏了,不是模型弱"——评分器自身 QA 意识 |
| 12 | 规则的边界与三层衔接 | ⭐⭐⭐ 系统设计 | 硬条件归规则、语义归 Judge、口径归人工;假阳性靠过程型检查 |
四、经典面试题与参考答案
题 1(基础):什么是程序化评分?常见的检查项有哪些?
答题思路:先给定义与四个特性(快/稳/免费/可单测),再报菜名式过八类清单,最后点一句它在三层中的位置。
参考答案: 程序化评分是把评测中的"硬条件"写成代码断言,由脚本(断言/Lint/AST/解析器)确定性执行。特点:毫秒级、零费用、稳定性 100%(同一输入永远同一结论)、可单测可版本化,是三层评分(确定性 > Rubric > 人工)的第一层,承担硬门禁角色。常见检查项八类:① schema/格式校验;② 空输出与异常长度;③ 关键词/正则黑白名单;④ 分类任务的 P/R/F1;⑤ 有参考答案时的语义相似度;⑥ 工具调用断言(是否调用/参数正确/禁用工具);⑦ 执行指标(调用次数/token 阈值/耗时预算);⑧ 基线对比(与人工确认的基线快照逐项比)。Airbnb 对前两项的评价是"永远有用",并强调程序化检查"确定性、最先跑"。
题 2(基础):为什么说"能用代码判断的绝不用模型"?三类评分器怎么选?
答题思路:四个理由(成本/稳定性/可审计/零偏差)逐条给数字,再给选择顺序与门禁分工,最后补"分层防御不是三选一"。
参考答案: 四个理由:① 成本——规则毫秒级免费,Judge 秒级加 API 费,人工分钟到小时级;② 稳定性——代码断言 100% 稳定,Judge 有抖动需降噪,人工取决于标注员水平;③ 可审计——规则在代码里可单测、可 review、可 git 版本化,prompt 里的规则做不到;④ 零偏差——不存在 judge 的位置/冗长/自我偏好问题。腾讯的选择优先级是确定性 > Rubric > 人工,门禁角色也分层:确定性做硬门禁,Rubric 做分级门禁(error 硬/warning 软),人工不进门禁只做采样审查与校准。但注意三层是分层防御不是三选一:规则只能判"已知硬指标",语义/语气/策略合理性必须交给 Judge 与人工,阿里口径是"规则主判、Judge 辅助、人工兜底"。
题 3(进阶):为什么说结构化输出是程序化评分的前提?如果模型只能输出自由文本会怎样?
答题思路:对照两种做法的失败模式,落到三件工程事(生成侧约束/解析兜底/格式失败计数),用 DoorDash 迁移案例收尾。
参考答案: 程序化评分依赖稳定可解析的结构。Airbnb 明确建议用 JSON schema 严格类型化的结构化输出,不要只靠 prompt 措辞产出结构,否则下游管道会坏。对照来看:强类型约束下格式由解码层保证,直接 json.loads 即可断言字段与类型;靠 prompt 措辞则无保证,模型偶发多说话、漏引号、markdown 包裹,解析要靠脆弱正则打补丁,失败还常常静默。工程上三件事:生成侧尽量用 API 的结构化输出约束;解析失败本身作为评分信号(判 fail 并给问题分类 invalid_json),绝不让评分器抛异常中断批跑;把格式失败率单列统计。一个反哺生产的例子:DoorDash 模型迁移时发现新模型工具参数形状不符,修复手段是确定性的输入防护——错误形状强制转换回预期形状而非丢弃调用,最终迁移延迟降 35%、质量无损。
题 4(进阶):评分输出应该包含哪些字段?只报 pass/fail 会失去什么?
答题思路:报五元组字段,把每个字段挂到一个下游能力上(聚类/RCA 路由/人工路由/申诉),结尾强调现象 ≠ 根因。
参考答案: 阿里的规范:评分输出不止 pass/fail,还要有问题分类(现象层)、问题现象、置信度、判定依据。对应五元组实现:score(连续分,供趋势观察)/ passed(门禁硬判定)/ issue(可枚举的问题分类常量)/ confidence(把握度)/ evidence(判定依据)。只报 pass/fail 会失去四个下游能力:① 聚类——issue 可枚举才能统计出"退款已发货场景 23 次跳过订单状态校验,集中在 v1.8 Prompt"这样的问题簇;② RCA 路由——issue 是"问题现象 × 功能模块"映射表的键,是 RCA 的现象入口;③ 人工复核路由——低置信样本才升级人工;④ 申诉与回放——没有 evidence 的 fail 无法复核。最后强调现象 ≠ 根因:现象进 RCA 流水线,根因由后续分模块诊断产出,二者不能混。
题 5(进阶):给一个电商退款客服 Agent 设计程序化评分规格(expected behavior)。
答题思路:按 DSL 五方面现场写规格(工具断言/输出断言/预算/基线/风险分级),并说明检查项来源是 badcase 观察而非拍脑袋。
参考答案: 按 DSL 五个方面写:① 工具断言——must_call 含 query_order(退款前必查订单),must_not_call 含绕过校验的直接退款工具,partial_order 约束先鉴权后执行,参数约束 execute_refund.amount ∈ [0, 订单实付];② 输出断言——schema 必填 action/reason,长度上下限(过短装不下最小结构、过长疑似失控),黑名单("保证一定退款成功"等过度承诺话术)与条件白名单(提到退款必须披露"1-3个工作日"时效);③ 执行指标——调用次数上限、总耗时预算,防死循环与成本失控;④ 基线对比——与人工确认的基线会话做归一化后的序列对齐与效率比(token/步骤超基线 >50% 判效率退化);⑤ 风险分级——P0 用例失败即门禁拦截,并按风险等级决定是否追加人工复核。设计依据不是拍脑袋,而是从 badcase 回流中观察到的失败模式反推(Airbnb 做法:跑 100 条样本人工精读再建测试)。
题 6(进阶):如何程序化判定"工具调用序列是否正确"?exact match、无序集合、偏序约束、LCS 对齐各在什么时候用?
答题思路:四种粒度由严到松排开,各配一个适用场景,引用 TPerf 的归一化规则与扣分数字作为实战锚点。
参考答案: 四种粒度由严到松:① exact match——只适合完全确定性的流水线,真实 Agent 路径多样,用它会把合法替代路径判错;② 无序关键调用集合——只查 must_call/must-not-call 是否满足,适合安全护栏;③ 偏序约束——只约束关键先后(先鉴权后操作),保留路径自由度,适合流程合规;④ LCS 对齐 + 归一化——允许局部插入/缺失/乱序,按差异扣分而非一票否决,适合"过程是否退化"的回归判定。腾讯 TPerf 用第四种:先把步骤归一化(时间戳占位 / 搜索工具忽略查询参数 / 写入只留路径 / 终端命令提取脚本名 / 连续读文件组内不校验顺序),再 LCS 对齐,不一致/多余/缺少/顺序错各扣 2 分、上限 −10。核心取舍:断言守关键调用(安全),对齐量化退化程度(回归),永不要求全序列逐字一致。动手可跑 cd evals-special/labs && python3 eval_lab06_trajectory_eval.py。
题 7(进阶):解释粗筛 → 精判 → 人工复核的分层筛查流水线,并算一笔成本账。
答题思路:三层职责 + 一条路由纪律 + 分层依据(依赖信息范围),最后用 lab03 的成本单元数字定量收尾。
参考答案: 阿里的三层设计:粗筛层用规则 Scorer + 轻量 Judge 快速分成明显通过/明显失败/存疑;精判层用完整规则 + Judge 确认 badcase 并产出初始问题分类/现象/置信度/判定依据;人工复核层处理高风险/低置信/冲突/口径未固化样本。路由纪律:粗筛已明确失败的样本绝不进精判,否则昂贵判定被垃圾样本稀释,成本随样本量线性恶化。分层依据是评分器依赖的信息范围:只看输出文本的最便宜(空输出/长度/JSON/关键词),需要完整 trace 的次之(工具断言/参数值域/LCS),需要 LLM 语义判断的最贵。成本账(lab03 实测,固定种子可复现):19 条样本粗筛拦截 8 条,11 条进精判,LLM Judge 仅调用 10 次,实际开销 490 成本单元 vs 全量精判 baseline 874 单元,节省 43.9%(实验断言 ≥35%)。样本越脏、judge 越贵,节省越大。
题 8(系统设计):为公司的 Agent 评测平台设计完整的程序化评分子系统。
答题思路:按"接口契约 → 用例规格 → 流水线 → 门禁报告 → RCA 衔接 → 评分器自身 QA"六组件讲,每个组件给一个关键设计决策。
参考答案: 六个组件:① 评分器接口契约——所有评分器(规则或 Judge 包装)统一返回五元组 {score, passed, issue, confidence, evidence} 加评分器署名,issue 从可枚举常量表取,接口即 lab03 的 ScoreResult;② 用例规格——prompt + expected_behavior DSL(must_call/参数约束/预算/黑白名单/基线引用),基线用会话标识指向人工确认快照而非硬编码预期输出,随代码仓库版本化;③ 分层流水线——粗筛(文本级便宜规则)→ 精判(trace 级规则 + Judge)→ 人工复核路由(低置信/高风险/冲突),粗筛定案的失败不进精判,全程记录各层拦截数与成本单元;④ 门禁与报告——扣分制(初始 100、达标线 80、扣分明细 JSON),P0 用例一票否决,输出按问题分类聚合的分布报告,版本对比带统计口径(详见第 E09 章);⑤ 与 RCA 衔接——issue 作为"现象入口"进 RCA 映射表,评分记录绑定 prompt/模型版本支持问题簇聚类;⑥ 评分器自身 QA——配 golden 正负样本(含"看起来对其实错"的对抗样本)防误杀与漏放,评分器变更走回归,通过率 0%/100% 触发异常诊断(通常是评分器坏了不是模型弱),线上抽检与评分器结论的一致率持续监控。
题 9(进阶):回归集通过率从 92% 突然变成 100%,你的第一反应是什么?怎么排查?
答题思路:展示"先怀疑测量系统再谈模型能力"的资深反应,按评分器 → 基线 → 用例 → 交叉验证的顺序排查。
参考答案: 第一反应不是庆祝,而是怀疑测量系统。腾讯的经验:通过率 0% 或 100% 通常是任务或评分器坏了,不是模型弱。排查顺序:① 查评分器——最近有没有改过断言、正则、基线或聚合逻辑?用留存的 golden 正负样本(尤其"看起来对其实错"的对抗样本)重跑评分器,验证它还能抓住坏样本;② 查基线——基线是否被意外重录成了当前版本的输出(基线与被测同源会互相"背书");③ 查用例——回归集是否被悄悄删掉了失败用例,或数据文件路径失效导致断言空转;④ 查被测——是否真发生了能力跃升,用另一套未动过的评测集交叉验证,并抽查 20~50 条"通过"样本人工确认。结论要能区分"真的变好了"与"尺子变松了"。同样的逻辑适用于分数突变 0%:先查任务定义与基线,再怀疑能力。
五、易错点 · 反直觉点
- 把规则能判的交给 Judge:格式、字段、工具调用这类硬条件让 LLM 判,等于花钱买抖动——judge 会偶发误判且结论不可复现,门禁随之不稳。→ 真相:确定性 > Rubric > 人工是选择优先级,规则判不了的才升级。→ 记忆锚点:能写断言的绝不写 prompt。
- 评分输出只有 pass/fail:失败的样本没法聚类、没法路由、没法归因,评测平台退化成"出分工具"。→ 真相:必须有问题分类/置信度/判定依据,它们是 RCA 的现象入口与人工复核的路由信号。→ 记忆锚点:fail 必须带着"为什么 fail"出门。
- 把现象分类当根因:"工具未调用"写进根因报告,修复动作只能是无力的"加强 prompt"。→ 真相:现象 ≠ 根因,现象进映射表缩圈,根因靠分模块诊断产出,要指向 owner 与处理动作。→ 记忆锚点:现象是门牌号,根因是住户。
- 工具序列 exact match:时间戳不同、查询参数不同、合法路径顺序不同,全被判错;评测集退化成背答案。→ 真相:先归一化(时间戳占位/忽略查询参数/写入只留路径),再 LCS 对齐按差异扣分,关键调用用 must-call 断言守。→ 记忆锚点:断言守关键,对齐量退化。
- 靠解析自由文本做程序化检查:模型一句"好的,结果如下:"就能让你的正则全线失效。→ 真相:结构化输出(JSON schema 强类型)是前提,解析失败本身也要计为问题分类,而不是抛异常。→ 记忆锚点:结构不强制,规则全白写。
- 所有样本走全套检查:明显 JSON 损坏的样本也去调 LLM judge,昂贵判定被垃圾稀释。→ 真相:粗筛定案的失败绝不进精判;分层依据是评分器依赖的信息范围。→ 记忆锚点:便宜的筛子先过,贵的判官只审疑案。
- 通过率 100% 当好消息直接汇报:可能是评分器坏了、基线被同源污染、或失败用例被悄悄移除。→ 真相:0% 和 100% 都是异常信号,先查任务定义与评分器,再谈模型能力。→ 记忆锚点:满分先怀疑尺子。
- 基线快照一劳永逸(或动不动重录):被测系统升级后不重录,基线测的是旧世界;每次跑完都重录,基线永远在给现状背书。→ 真相:只有三个重录时机——Agent/Skill 逻辑变更、模型版本升级、用例本身修改,且重录必须再过一次人工确认。→ 记忆锚点:基线只在世界变了时变。
- 把关键词黑名单当安全的全部:同义改写、拆字、隐喻都能绕过正则。→ 真相:黑白名单只是必要非充分的第一道防线,语义层的过度承诺/注入回声要靠 Judge,高风险场景保留人工复核。→ 记忆锚点:正则判存在,Judge 判语义,人判口径。
六、推荐资源
一手工业实践(本章素材来源,完整精读笔记见 _research/00-industry-practice.md)
- 腾讯技术工程《AI Agent & Skill 测评方案及落地实践》(martinskxu,TEG 云架构平台部网关测试团队)——三类评分器对照表、扣分制与 80 分达标线、基线快照机制、稳定性容忍阈值分级、TPerf 实战(LCS 对齐 + 30+ 用例 × 7 模型)的原始出处。
- 阿里技术《Agent 评测:方法论与体系设计》(2026 年第 28 篇)——"规则主判、Judge 辅助、人工兜底"、分层筛查流水线、评分输出规范(问题分类/置信度/判定依据)与 RCA 衔接的原始出处。
- Airbnb《Eval-driven development: Lessons from evaluating GenAI at scale》(Rohit Girme, Dan Miller, Mia Zhao, Lifan Yang, Clint Kelly)——三层评估框架中程序化检查清单(schema/长度/关键词/P-R-F1/语义相似度)与结构化输出建议的原始出处。
- DoorDash《Building Ask DoorDash (Part 3): Evaluation》(Steven Xu, Fabio Flores, Twisha Jain, 2026-06-30)——rubric 工程、Transcript Builder 与模型迁移案例(工具参数形状强制转换、延迟降 35%)。
- Anthropic《Demystifying evals for AI agents》(2026-01)——打分三层顺序(确定性代码检查 > 模型 rubric > 人工校准)、"确定性任务通过率 100% / 非确定性 ≥95%"口径(腾讯文中引用)的出处。
动手实验(labs)
labs/eval_lab03_programmatic_scorers.py(本章核心实验)——五元组评分输出、规则评分器家族、粗筛→精判两层流水线与成本节省断言。运行:cd evals-special/labs && python3 eval_lab03_programmatic_scorers.pylabs/eval_lab06_trajectory_eval.py——LCS 轨迹对齐与归一化的实现,呼应 2.7 的 TPerf 机制(详见第 E07 章 · 轨迹与 Agent 级评估)。labs/eval_lab09_rca_pipeline.py——评分输出的问题分类如何被 RCA 映射表消费(详见第 E11 章 · Badcase 根因分析与优化闭环)。labs/eval_lab05_judge_calibration.py——下一章预告:规则判不了的交给 Judge 之前,先看 Judge 如何被校准(详见第 E05 章)。
交叉引用
- 三层评分的另外两层:第 E05 章 · LLM-as-Judge 深入、第 E06 章 · 人工评估与评分路由。
- 程序化评分的上下游:第 E02 章 · 评估指标体系(pass^k 与门禁统计口径)、第 E03 章 · 黄金数据集与用例设计(用例与基线从哪来)、第 E07 章 · 轨迹与 Agent 级评估(过程型检查的展开)、第 E10 章 · 评测驱动开发(检查项如何从失败中生长)、第 E11 章 · Badcase 根因分析(问题分类的下游)。
- 主手册第 8 章 · Agent 评估与可观测性——本章是其"规则式 grader"一节的深挖版。
评分三层之二:LLM-as-Judge 深入
一句话导读:规则判不了的(语气、有据性、策略合理性),交给 LLM Judge;但裁判本身是一台未经校验就会漂移的测量仪器。本章讲透:judge 的解剖结构(rubric + 证据切片 + verdict + rationale)、rubric 工程(二元检查 / eligibility 前置 / "描述成功长什么样")、四大偏差的机理-量化-缓解全表、Airbnb 式五步校准闭环(78%→88% 实战)、阿里"三统计"持续运营、JudgeBench 揭示的"高一致≠正确"、以及 2024-2026 可训练 judge 与 judge 攻防前沿。学完本章,你能独立搭建、校准、运营一个可进门禁的 judge 子系统,并在面试中回答"裁判可信吗"这个 evals 最核心的问题。
一、知识图谱
LLM-as-Judge(评分三层之二 · 语义判定层)
│
├── 定位:规则判「硬条件」,Judge 判「语义/策略合理性」,人判「口径与校准」
│ └── Judge = 测量仪器:仪器不先校准,量出来的全是噪声
│ DoorDash 量级:平均 1 条/天员工反馈 → 2,000 个/天自动评分会话
│
├── 解剖(anatomy)
│ ├── 输入:rubric(单条标准)+ 证据切片(只给该标准依赖的 trace 切片)
│ ├── 五条纪律(Airbnb):每维一个 judge / 与生成模型不同源 / 带 few-shot
│ │ / 强制输出 schema / 清晰打分说明
│ └── 输出:verdict + rationale(+ 置信度 / 问题分类 → 供 RCA 消费)
│
├── Rubric 工程
│ ├── 二元检查 vs 分级打分(DoorDash:binary 汇总方差更低)
│ ├── eligibility 适用性前置:先判"本标准是否适用",不适用则跳过
│ ├── 描述"成功长什么样",而非指定唯一答案(容纳所有合法路径)
│ └── 铁律:"如果人都无法一致地应用 rubric,模型也不可能"(Airbnb)
│
├── 四大偏差:位置 / 冗长 / 自我偏好 / 风格
│ ├── 量化:等质量对照组、swap consistency、长度回归、自我识别率
│ └── 缓解:交换聚合 / LC 回归 / 异构评审团 PoLL / 组合去偏
│ 系统复盘(2604.23178, 2026):单点策略收益有限;
│ 中端模型 + 组合去偏 胜过前沿 judge 且便宜约 15 倍
│
├── 校准闭环(Airbnb 五步法)
│ ├── 50-100 gold set(必须含坏样本)→ 跑 judge → 目标一致率 high-80s~90s
│ ├── Cohen's κ / Krippendorff's α → 分歧分析改 rubric → 重复
│ ├── 工业口径:阿里 ~85% 进自动化;腾讯 ≥85% 可用
│ └── 自动化校准:GEPA 反射式 prompt 进化(DoorDash 生产在用)
│
├── 持续运营
│ ├── 金标校准集 + 失败模式变化时重新校准
│ ├── 升级三统计(阿里):与人工一致性 / 高风险漏判率 / 边界样本稳定性
│ └── Judge 版本化:模型 + prompt + 参数 + 判决协议,建"计量档案"
│
├── 元评估:judge 之间高一致 ≠ judge 正确
│ ├── JudgeBench(2410.12784):最强 judge 客观准确率 ~57% vs 人类 ~78%
│ ├── RewardBench / MM-Eval(18 种语言)/ Know Thy Judge(鲁棒性)
│ └── Judge 是攻击面:对抗攻击可让安全 judge 100% 放行有害输出
│
└── 前沿路线(2024-2026)
├── 可训练 judge:Prometheus 2 / Self-Taught Evaluators / GenRM / RM-R1
├── 零权重更新:GEPA 进化 judge prompt/rubric(rollout 少最高约 35 倍)
└── 攻防:PoisonedRAG 投毒消费外部内容的 judge;judge 作奖励与 reward hacking
本章在三层评分中的坐标(衔接第 E04 章与第 E06 章):
| 问题 | 由哪一层回答 | 本章覆盖 |
|---|---|---|
| 格式 / 工具调用 / 预算等硬条件 | 程序化评分(第 E04 章) | 不重复,只作边界 |
| 语气 / 有据性 / 策略合理性等语义判断 | LLM-as-Judge | ✅ 全章 |
| 政策口径、judge 校准的"人工真值"从哪来 | 人工评估(第 E06 章) | 只讲校准接口 |
| judge 分数能不能直接进门禁 | 统计口径(第 E09 章) | 给出 85% 线背后的统计逻辑 |
二、核心概念精讲
2.1 定位:Judge 是「测量仪器」,不是「打分捷径」
为什么需要这一层。 阿里对评分分工的总纲是:规则看"硬条件"(工具、状态、字段、禁用动作),LLM 看"语义/策略合理性"。第 E04 章已经说明规则永远判不了语义正确性、语气、策略合理性——这些"未知软指标"正是腾讯三类评分器对照表中 Rubric 评分器的覆盖区:大模型(固定版本)按写在 Prompt + JSON Schema 里的规则打分,秒级出结果、付 API 费用、稳定性"有抖动(需降噪)"、做分级门禁(error 硬 / warning 软)。
Judge 解决的是规模化判断问题。 DoorDash 在构建 Ask DoorDash 评测体系时,把"规模化判断"列为五大挑战之一:"是否帮到用户需要人类级判断,但人工不可扩展",解法就是"校准过的 LLM judge 顶替人类评审"。他们给出的量级对比(原文数字):员工反馈平均只有 1 条/天,而评测体系做到 2,000 个/天自动评分会话;全国上线前 agent 质量分 +8 分、错误率近乎减半;全量回归从手工 6+ 小时压到自动约 20 分钟。没有 judge,这个反馈密度根本不可能存在。
但 judge 的定位必须摆正:它是一个带紧反馈环的测量问题。 DoorDash 的原话是两条:
- "LLM Judge only useful if it agrees with human reviewers."(judge 只有与人工评审一致时才有用)
- 人工用在杠杆最大处:定 rubric、标注校准集、审计 judge 行为;打分主力才是 judge。
换个说法:judge 是评测管线里最核心的"测量仪器",仪器本身需要校准(元评估)、需要防作弊(鲁棒性测试)、需要版本管理(prompt + 模型 + 参数)——否则整个评测体系建立在一个未被校验的传感器上(_research/01-llm-judge.md 调研结论)。Airbnb 对未校准 judge 的判词只有八个字:"未校准 judge 会制造误导性信心"——分数看起来很精确,量出来的却是 rubric 的缺陷。
引入 judge 之前,先回答三个问题(决策表):
| 问题 | 是 | 否 |
|---|---|---|
| 这条检查能写成代码断言吗(schema/关键词/工具调用/预算)? | 写成规则,不用 judge(第 E04 章) | 继续问下一行 |
| 人能否对这条标准给出一致的判断? | 写 rubric,进 judge 校准流程 | 先停下:人都判不一致,说明标准未定义清楚(找业务定口径,第 E06 章) |
| 该判断是否依赖内部政策口径(赔付规则、合规红线)? | 人工定口径 → 能规则化就规则化,不能则 judge + 人工复核双轨 | judge 独立承担,按本章流程校准与运营 |
一笔经济学账。 DoorDash 全量回归 sweep = 50 场景 × 8 trials = 400 次对话:人工本地聊约 1 分钟/次 → 6+ 小时;模拟器 + judge 约 20 分钟。按每次变更都跑一遍、每周数次变更计算,judge 化评测把迭代周期从"天"压到"小时"——这正是"评测是迭代指南针"(第 E01 章)能成立的前提。反过来说:如果你的 judge 未经校准,你只是用 20 分钟拿到了一份错误的报告,然后更快地把事情做坏。
这一节的结论:引入 judge 的门槛很低(写个 prompt 就行),但让 judge 可信的门槛很高(校准 + 运营 + 元评估)。本章剩下七节全部在讲后半句。
2.2 Judge 的解剖:rubric + 证据切片 + verdict + rationale
一个生产级 judge 的调用接口由四部分组成。Airbnb 给出的五条纪律与 DoorDash 的接口设计互相印证:
Airbnb 的 judge 使用规则(原文):
| # | 规则 | 工程含义 |
|---|---|---|
| 1 | 每个质量维度一个 judge | 不要万能 judge;groundedness、语气、简洁性各配一个,互不污染。配套原则:judge 要少而精——3-5 个经校准的评估器好过一堆嘈杂的评估器(EDD 五原则之三) |
| 2 | judge 模型尽量与生成模型不同 | 防自我偏好(实证见 2.4;GPT-4 对自己输出的识别率约 72%,2404.13076) |
| 3 | 带 few-shot | 示例中必须含边界样本(阿里补充:few-shot 含边界样本与判定 CoT) |
| 4 | 强制输出 schema | JSON 结构化输出,verdict 与 rationale 分字段,下游可解析、可统计 |
| 5 | 清晰打分说明 | 每分档有可执行标准(阿里),不允许"凭感觉给分" |
DoorDash 的 judge 接口(逐条标准独立评分):
- 输入 = 标准 + 该标准依赖的证据。注意不是"整条 trace 扔给 judge":每条标准声明自己依赖哪片证据,Transcript Builder 只把那一片交给 judge(详见第 E07 章 · 轨迹与 Agent 级评估)。例如 grounding 检查只拿"agent 的论断 + 背后工具输出";多样性检查只拿"推荐结果 + 原始请求";叙述检查只拿 agent 工作时流式输出的文本。聚焦证据让判断更一致,也避免无关 trace 噪声干扰判决。
- 输出 = verdict + 简短 rationale。
把两边合成一个可直接照抄的 judge prompt 骨架:
[system]
你是严格的评估器。只评判下面这【一条】标准,不要顺带评价任何其他质量。
先判断该标准是否适用于本会话(eligibility);不适用则 applicable=false 并结束。
[user]
## 标准(rubric,单条)
{criterion_text}
## 判 1 分当且仅当
{positive_desc} # 描述"成功长什么样"
## 判 0 分当且仅当
{negative_desc} # 枚举典型失败现象
## Few-shot(含边界样本与判定思路)
{examples}
## 证据(仅该标准依赖的 trace 切片)
{evidence_slice}
## 输出(严格 JSON,禁止其他文本)
{"applicable": bool, "verdict": 0|1, "confidence": 0.0~1.0,
"rationale": "引用证据中的原文说明判定依据,≤80 字"}
输出侧的规范与第 E04 章程序化评分的五元组同构:rationale 不止是"解释",它承担三个职能——① 定位(错在哪一片证据上);② badcase 聚类(阿里:输出 reason 用于定位与聚类);③ 审计(人工复核 judge 行为时读的就是 rationale)。阿里进一步要求:每分档有可执行标准;输出 reason;高风险/抽检/低置信场景的 judge 结论要带置信度,置信度低的进人工路由(详见第 E06 章 · 人工评估与评分路由)。腾讯的 rubric 评分器输出则是典型的结构化样例:observation_points(回答是否基于项目规范而非通用知识 / 推理是否清晰连贯 / 有无幻觉编造)+ scoring(process_score 0-100、result_score 0-100、is_false_positive bool)。
为什么要 rationale 先行、分数随后? 这与 GenRM(2408.15240,2024)揭示的规律一致:把评分做成"先写判据、再给结论"的生成任务,比裸打分更稳健、更可审计,还能继承模型的推理能力。工程上记住一条:没有 rationale 的分数不可 debug,也不可被人工审计。
一次完整调用的样例(DoorDash guardrail 风格)——注意 judge 只拿到该标准声明的那片证据:
输入:
标准:沟通质量——回复简洁,不向用户叙述思维过程。
证据切片:agent 面向用户的全部回复文本(不含内部工具调用)。
判定:
{"applicable": true, "verdict": 0, "confidence": 0.92,
"rationale": "第 2 轮回复中出现『我先去查一下 reorder skill 的返回』,
向用户叙述了内部执行过程,命中判 0 条件。",
"问题分类": "叙述泄漏", "置信度": 0.92}
其中 问题分类/置信度 与第 E04 章程序化评分的输出规范同构——三层评分共用一套输出契约,下游的 RCA 流水线(第 E11 章)才能无差别消费。上例的"叙述泄漏"正是 DoorDash 实战案例 1(reasoning leakage)中被日常线上评分捕获的失败模式。
2.3 Rubric 工程:描述「成功长什么样」
Rubric 是 judge 的"法律条文",其质量决定 judge 的上限。四个关键设计决策:
(1)二元检查 vs 分级打分
| 维度 | 二元检查(binary check) | 分级打分(1-5 / 0-100) |
|---|---|---|
| 输出 | 0/1 + rationale | 分档分数 + rationale |
| 方差 | 低,判定边界清晰 | 高,"3 分还是 4 分"人都会摇摆 |
| 汇总 | 逐条 binary 汇总为会话级总分(DoorDash) | 加权平均,权重本身是争议源 |
| 迭代 | 每条标准独立可改、可单独校准 | 改一档描述牵动全量表 |
| 适用 | 行为合规、约束满足、事实核对 | 创意质量、体验类细粒度观察 |
DoorDash 的选择很明确:每条标准是 binary check,汇总为会话级总分。其 guardrail 与 capability 标准实例(原文):
- Guardrail(全体 agent 适用):"沟通质量:回复简洁、不向用户叙述思维过程";"信任与诚实:不呈现可证伪虚假信息"。
- Capability·餐厅发现:"约束满足:推荐满足配送时间/预算/饮食限制";"结果多样性:真实差异而非近似重复"。
- Capability·杂货购物:"购物执行:用户的明确修改请求被执行";"商品相关性"。
(2)checklist 式场景 rubric:低方差信号。 DoorDash 的离线评测进一步把标准写成场景级清单。例:"两人份 ≤$60 素食 taco 购物清单"——验证每件商品都是素食 taco 原料、小计 ≤$60。这种 checklist 比宽泛通用标准方差更低,小样本更有用,支撑更快迭代(详见第 E08 章 · 对话 Agent 与仿真评测)。
(3)eligibility 适用性前置。 DoorDash 的独创设计:judge 先判该标准是否适用本会话,不适用则跳过——例如"复购流程"标准不会因为一个食谱会话缺少复购步骤而被扣分。这就是 2.2 骨架中 applicable 字段的来源。不做 eligibility 的后果:总分被一堆"不适用但判了 0"的标准拖低,且拖低幅度随会话类型漂移,分数彻底失去可比性。
(4)描述成功,而非指定唯一答案。 DoorDash 对开放式目标的 rubric 要求(原文):"具体到每次能同样判,宽泛到容纳所有合法路径"。rubric 写"推荐满足配送时间/预算/饮食限制",而不是"必须推荐那三家店"——前者判的是约束,后者背的是答案(对照第 E04 章"不要强制固定调用序列"的同一思想)。
一条铁律。 Airbnb 的原话值得裱起来:"如果人都无法一致地应用 rubric,模型也不可能。" rubric 写得含糊("回答要好"),人标不一致,此时不是 judge 不行,是标准不行——先停下修 rubric,再谈校准(人工分歧处理详见第 E06 章)。
完整 rubric 实例(Airbnb 房源 listing 解释可读性,判 0/1):
标准:listing 解释文本的可读性与语气
判 1 分:输出读起来像一位「热情专业的旅行顾问」——
语气友好、信息以旅客视角组织、措辞自然。
判 0 分(命中任一即 0):
- 语气错误(冷淡、机械、公文腔)
- 出现内部术语(系统字段名、业务黑话)
- 格式差(整块无排版、乱用符号)
- 语法问题
- 措辞过繁(堆砌形容词、信息密度低)
输出:reason(引用原文指出命中项)+ 0/1
注意这个实例同时示范了三件事:正向描述"成功长什么样"(热情专业的旅行顾问)+ 负向枚举可观察的失败现象 + 强制输出 reason。阿里对 rubric 的补充要求是"每分档有可执行标准"——即每个分数档都要像上面"判 0 分"列表一样落到可观察、可引用的现象,而不是形容词。
Rubric 好坏对照(评审 rubric 时逐行过一遍):
| 维度 | 坏 rubric | 好 rubric | 原因 |
|---|---|---|---|
| 可观察现象 | "回答要专业" | "不出现内部术语、不出现系统字段名" | 前者两人打不出同一个分;后者命中与否可引用原文 |
| 容纳合法路径 | "必须推荐宫保鸡丁" | "推荐满足预算 ≤¥100 且不含用户忌口食材" | 前者背答案、惩罚合法变体;后者判约束不判路径(DoorDash:"具体到每次能同样判,宽泛到容纳所有合法路径") |
| 适用边界 | 所有会话一律评"复购引导" | eligibility 前置:不适用则跳过 | 否则不适用场景被系统性扣分,总分随会话类型漂移 |
| 分档锚定 | 1-5 分但只写"5=最好" | 每分档列可执行标准与示例(Airbnb 0/1 实例的写法) | 无锚定的分级打分方差大到人都会摇摆 |
| 证据声明 | 把整条 trace 扔给 judge | 标准声明依赖的证据,只交那一片 | 无关噪声降低判决一致性(DoorDash Transcript Builder) |
2.4 Judge 偏差全景:四大偏差的机理、量化与缓解
Judge 是模型,模型就有偏好。2023-2026 的研究把偏差从" anecdote"变成了可量化的测量学问题。四大偏差总表(全部数字来自 _research/01-llm-judge.md):
| 偏差 | 机理 | 量化方式 | 缓解手段 | 关键论文(arxiv,年份) |
|---|---|---|---|---|
| 位置偏差 | 成对评判中偏好出现在特定位置(常为第一个)的候选 | swap consistency:交换 A/B 位置前后判决的一致率;等质量对照组的胜率偏离 50% 的幅度 | 双向交换取平均(成本 ×2);句级对齐 Split and Merge:拆句→语义对齐→逐单元比较 | 2305.17926(2023)首次系统证明 LLM 不是公平评估器;2310.01432(2023) |
| 冗长偏差 | 把"更长"当成"更好",模型可通过写更长刷分 | 把长度作为协变量回归 logit(P(win)) = α·质量 + β·长度,看长度项系数 β |
LC win rate:回归掉长度项后重估胜率;排行榜同时发布原始与 LC 两指标 | 2404.04475(2024,TMLR):AlpacaEval 与 Chatbot Arena 人类排名相关性从 0.937 提升到 0.982 |
| 自我偏好 | judge 识别并偏好自己生成的文本 | 自我识别率(judge 能否二分类出自己的输出)+ 自我胜率相对 50% 的偏移 | judge 与生成模型不同家族;异构评审团;基于自我识别检测的统计校准 | 2404.13076(2024):GPT-4、Claude-2、Llama-2、Mistral 均显著偏好自己输出,GPT-4 对自身输出识别率约 72%,开源模型自我偏好更强 |
| 风格偏差 | markdown/列表/自信语气等表面特征主导判决,压倒事实性与安全性 | 风格扰动 A/B:同一内容两种排版看判决翻转;跨模型效应量 | 风格受控对照;组合去偏(见下) | 2409.15268(2024):judge 偏好与安全性/世界知识/指令跟随等对齐指标几乎不相关,却强烈偏好风格特征;2604.23178(2026):风格偏差效应量 0.10–0.76,是最主要的残余偏差 |
三个必须展开的要点:
(1)偏差必须被测量,而不是被假设。 量化偏差的"零刻度"是等质量对照组:两组答案真实质量完全相同时,任何一方的胜率显著偏离 50%,只能来自裁判偏差。动手验证:labs/eval_lab04_judge_bias.py 用 MockJudge(真实质量信号 + 可注入的位置/冗长/自我偏好偏差)完整演示了"注入偏差→量化→缓解→断言缓解有效"的闭环,运行:cd evals-special/labs && python3 eval_lab04_judge_bias.py。
(2)评审团(jury)优于单 judge,但有前提。 PoLL(2404.18796,2024,COLM)用三个不同家族的中等规模模型(Command-R、Llama-3-70B、Mistral-Large)组成评审团多数投票,替代单一 GPT-4 judge,三大发现:与人类判断的相关性高于单一大 judge;成本降到几分之一;跨家族组合显著缓解自我偏好(评委与选手不同源)。但集成的增益依赖评委误差独立:同代模型共享大量训练语料与对齐配方,风格偏好这类偏差是共模的——评审团对自我偏好有效,对共模的风格/格式偏差几乎无效。工程建议:评委来自 ≥2 个模型家族 + ≥2 种规模档。阿里实践中的对应做法是多 LLM 对抗打分治理"judge 与生成模型同源会偏爱自己风格"的偏差。
(3)不要迷信单点银弹,组合去偏 + 中端模型才是最优性价比。 2026 年的系统复盘论文 Judging the Judges(2604.23178,2026)对"去偏方法本身"做了大规模评测:9 种去偏策略 × 5 个 judge 模型(Google/Anthropic/OpenAI/Meta 四家族)× 3 个基准(MT-Bench n=400、LLMBar n=200、自建 n=375)× 4 类偏差。核心结论:
- 单点去偏策略(swap / calibration / CoT 等)多数收益有限且跨模型不稳定;
- 风格偏差是最主要的残余偏差(偏向 markdown/结构化输出);
- "中端模型 + 组合去偏"能胜过前沿 judge 且便宜约 15 倍:Gemini 2.5 Flash + 组合策略达到全场最高一致率 71.0%(κ=0.549),约 $0.001/次评测;而最佳前沿配置 Claude Sonnet 4 仅 69.5%,约 $0.015/次评测。
这三条对工程决策的直接含义:去偏要像做 eval 一样在自己的领域数据上验证迁移性,而不是照搬论文结论;预算有限时,优先把钱花在组合策略上而不是最贵的模型上。
判决协议的选择:
| 协议 | 形式 | 优点 | 注意事项 |
|---|---|---|---|
| 单点绝对打分(pointwise) | 一条输出 + rubric → 0/1 或分档 | 可独立评分、可跨批次比较;DoorDash/阿里生产主流 | 必须 rubric 锚定,否则分数漂移;分档间定义要互斥 |
| 成对比较(pairwise) | 两条输出 → 谁更好 | 版本对比时信号最强 | 位置偏差重灾区,必须交换聚合;胜率先验 50% 使小样本即可看出方向 |
| 参考对比(reference-based) | 输出 + 参考答案 → 判一致性 | 有金标时最省 judge 推理 | 参考答案本身要维护;警惕字面匹配误罚正确改述(Airbnb 78% 案例) |
默认判决协议(综合上述证据的推荐配置): 双向位置交换取平均(或随机化位置)+ 判据先行(先写理由再打分)+ 温度 0 / 低采样;成对比较优于绝对打分(绝对打分必须配 rubric 锚定)。
2.5 Judge 校准完整流程:从 78% 到 88%
校准是 judge 从"能用"到"可信"的唯一通道。Airbnb 的五步法(原文流程):
① 建 50-100 条 gold set(必须含坏样本)
② 用 judge 跑该集合
③ 目标一致率 high-80s~90s%;分歧可用 Cohen's kappa / Krippendorff's alpha 度量
④ 检查分歧样本 → 改 rubric / few-shot 示例 → 回到 ②
⑤ 失败模式变化时重新校准(rubric 演进、被测系统改版、新能力上线)
实战案例(Airbnb 旅行平台客服政策问答助手,校准段): PM/SME 标注 60 条 gold(含失败样本);judge 初始一致率 78%(过低)——分歧分析发现 judge 误罚了"正确的改述"(答案正确但与参考措辞不同,字面重叠式 rubric 把它判错);修订 rubric(放宽改述惩罚、增加事实核对项)与 few-shot 后一致率达到 88%;同期检索改进减少了 groundedness 失败。labs/eval_lab05_judge_calibration.py 完整复刻了这个案例(60 条 gold、"正确的改述"与"流畅的错误"两类陷阱样本、v1 一致率 ~80% → v2 ≥85%),运行:cd evals-special/labs && python3 eval_lab05_judge_calibration.py。
gold set 的两条硬性要求:
- 必须含坏样本(Airbnb 十条要点之⑦)。只有好样本的 gold set 校准不出 judge 的"漏判"能力——judge 全判 pass 也能刷高一致率。
- 必须含两类陷阱样本:正确的改述(考验 judge 是否死抠字眼)与流畅的错误(读起来通顺、实则事实错误,考验 judge 能否核对事实)。前者对应上面 78% 的根因,后者对应"风格压倒实质"的偏差(2409.15268)。
一致率与 Cohen's kappa:为什么必须看两个数。 一致率(agreement)直观但有陷阱:若 gold set 中 90% 是 good 样本,judge 无脑全判 good 也有 90% 一致率。Cohen's kappa 扣除随机一致:
κ = (p_o − p_e) / (1 − p_e)
p_o = 观测一致率;p_e = 按双方边际分布算出的期望随机一致率
常用解读:<0.2 差 / 0.2-0.4 弱 / 0.4-0.6 中等 / 0.6-0.8 良好 / >0.8 几乎完全一致
样本类别不平衡越严重,κ 与一致率的差距越大——这正是"门禁要带统计口径"(第 E02 章、第 E09 章)在 judge 校准上的体现。多于两个标注者或有序类别时,用 Krippendorff's alpha。
分歧诊断决策表(第 ④ 步怎么"检查分歧"): 把不一致样本按"样本类别 × 分歧方向"拆开后,按表索骥:
| 分歧模式 | 典型根因 | 处方 |
|---|---|---|
| FN 集中在"正确的改述" | rubric 死抠字面(字面重叠式判据) | 放宽改述惩罚,把"与参考一致"改为"事实核对"(Airbnb 78%→88% 的修法) |
| FP 集中在"流畅的错误" | judge 只看通顺度,不核对证据 | 在 rubric 中加"必须引用证据原文"要求 + 负向 few-shot |
| 人机在同类样本上也不一致 | rubric 本身含糊(人都用不一致) | 先停下修标准/找业务定口径(第 E06 章),再重标 gold |
| 边界样本反复摇摆 | 判决抖动:温度过高 / 判据未锐化 | 温度降到 0;把"基本/大致"类措辞换成可观察判据 |
| 分歧均匀散布、无模式 | judge 模型能力不足或任务超出 judge 边界 | 换更强/异构 judge;或该维度降级为人工评分 |
关键纪律:分歧分析必须按"样本类别 × 方向"拆开看,整体一致率会掩盖局部失效——这也是阿里要求 judge 输出 reason、DoorDash 把"审计 judge 行为"列为人工三大杠杆之一的原因。
四家公司的校准口径对照(全部为素材原文数字):
| 公司 | 口径 | 细节 |
|---|---|---|
| Airbnb | 目标一致率 high-80s~90s | 50-100 gold set 含坏样本;分歧用 Cohen's κ / Krippendorff's α 度量;失败模式变化时重新校准 |
| 阿里 | 与人工复核一致率约 85%(参考值)后进日常自动化 | 周期性校准;一致性统计用一致率或多模型对抗 Kappa |
| 腾讯 | 一致率 ≥85% 才可用 | 抽样 100-200 条对齐人工与 judge;"校准 LLM 评委"是人工六个必要场景中最核心的一个 |
| DoorDash | 只保留在留出集上提升与人工标注一致率的 judge prompt 修订版本 | 用 GEPA prompt optimization 打磨 judge 判定边界;rubric 演进(新增能力)时收新标注、重新校准 |
GEPA:把 judge 调优从炼丹变成自动化搜索。 GEPA(2507.19457,2025)是反射式 prompt 进化优化器:对含 LLM prompt 的系统采样轨迹→用自然语言反思失败原因→提出并测试 prompt 更新→在帕累托前沿上合并互补经验。论文数字:在多个任务上平均超过 GRPO 约 6%、最高约 20%,超过最强 DSPy 优化器 MIPROv2 10% 以上(如 AIME-2025 上 +12%),且 rollout 消耗少最高约 35 倍。DoorDash 把它用在 judge 校准上(上表第四行):迭代提出 judge prompt 修订,只保留在留出集上提升一致率的版本。其工程意义:当人工校准标签只有几十到几百条(典型情况)时,GEPA 式反射优化比 RL 微调现实得多;优化对象就是 rubric 措辞、评分流程、few-shot 示例,优化目标是"与人工标签的一致率"。注意防过拟合:必须保留 held-out 校准集——优化目标本身会被 gaming。
把五步法压成一段可执行的循环(labs/eval_lab05_judge_calibration.py 的完整实现即此结构):
gold = 加载校准集() # 50-100 条人工判定;必含坏样本 +
# 「正确的改述」「流畅的错误」两类陷阱
while True:
pred = judge.run(gold) # ② 跑 judge
report = 一致性报告(pred, gold) # 一致率 / κ / 混淆矩阵
if report.一致率 >= 0.85 and report.kappa >= 0.6:
break # 达标:阿里/腾讯口径
分歧 = report.按(样本类别, 方向).分组() # ④ 分歧诊断(见上表)
rubric = 修订(rubric, 分歧) # 修判据 / 加 few-shot
judge = judge.换(rubric) # 回到 ②
# ⑤ 上线后:失败模式变化(新能力/被测系统改版/rubric 演进)→ 回到 ①
校准不是一次性动作。 第 ⑤ 步常被忽视:被测系统的能力边界变了、新的失败模式出现了、rubric 新增标准了,judge 的判定边界就过期了。DoorDash 明确写道:校准持续——rubric 演进时收新标注、重新校准。
2.6 Judge 的持续运营:校准集、升级三统计、版本化
Judge 通过校准只是开始,生产运营要解决三个问题:怎么知道它漂移了?升级时怎么验证?分数跨版本怎么比?
上线前速查表(judge 计量自检,任何一条为"否"都先补课):
| # | 检查项 | 对应小节 |
|---|---|---|
| 1 | rubric 每条标准都能让人一致地判定? | 2.3 |
| 2 | 校准集 50-100 条,含坏样本与两类陷阱? | 2.5 |
| 3 | 一致率 ≥85% 且 κ ≥0.6? | 2.5 |
| 4 | 高风险样本漏判率单独测过? | 2.6 |
| 5 | judge 与生成模型不同源(或有统计修正)? | 2.4 |
| 6 | 版本四元组(模型/prompt/参数/协议)已登记? | 2.6 |
| 7 | 离线与线上是同一 rubric + 同一 judge? | 2.6 |
| 8 | 安全场景过了鲁棒性探针(风格扰动/注入)? | 2.7/2.8 |
(1)维护 Judge 金标校准集,定期复测。 像校准传感器一样管理 judge:为每个领域维护 50-500 条人工/客观真值的校准集,定期测一致率与正确率漂移(JudgeBench 式客观真值优先于人类一致率,见 2.7)。阿里把这件事写成制度:每次 Judge prompt/模型升级,固定产出三类统计:
| # | 统计项 | 测什么 | 失守后果 |
|---|---|---|---|
| 1 | 与人工标注一致性(一致率或多模型对抗 Kappa) | judge 的判定口径有没有漂移 | 分数系统性偏松/偏紧,门禁形同虚设 |
| 2 | 高风险样本漏判率(合规/资损/隐私) | 最坏的那类错误 judge 放过了多少 | 一次漏判可能就是事故;这是"校准集里必须含坏样本"的运营版 |
| 3 | 边界样本稳定性(重复评测波动) | 同一边界样本多次评测的判决抖动 | 分数噪声淹没真实版本差异,A/B 结论不可信 |
(2)Judge 必须版本化。 judge 的"版本"是四元组:judge 模型(固定版本)+ judge prompt(含 rubric 与 few-shot)+ 生成参数(温度等)+ 判决协议(单评/成对、是否交换位置)。任一变更都产生新版本的分数,与旧版本分数不可直接比较。腾讯三类评分器表中 Rubric 评分器一栏写的就是"大模型(固定版本)"。实操上给每个 judge 建一份"计量档案":记录模型、prompt 版本、温度、判决协议、校准集上的历史一致率曲线——回归评测分数异动时,第一步就是查 judge 的计量档案有没有变(对照第 E10 章"一次只改一个变量"的迭代纪律)。
(3)离线与线上必须同一套 judge。 DoorDash 的三条 lessons 之一:真实会话与模拟会话用同一 rubric + 同一校准 judge,两边分数才可对齐;各自调 judge,分数会以难调和的方式背离。离线门禁说"变好了"、线上体验说"变差了"时,如果两边 judge 不同源,你连"哪边在说谎"都无法判断(离线-线上联动详见第 E12 章 · 在线评估与数据飞轮)。
(4)接受"评测系统自己也产生 bug 报告"。 DoorDash 的第四条 lesson:被标记失败中有真实一部分是 harness 自身故障(judge 误报、trace 缺口),要与产品缺陷并行修复。这解释了为什么 judge 的 rationale 与置信度字段如此重要——它们是区分"模型错了"与"judge 错了"的唯二线索。
2.7 Judge 元评估:高一致 ≠ 正确
前两节讲"judge 与人工对齐",本节讲一个更尖锐的问题:如果人工本身不是 ground truth 呢?如果 judge 们集体犯错呢? 2024 年起,"judge 的元评估"成为独立赛道,核心结论一致:前沿 judge 在客观困难任务上准确率只有 ~57% 量级,与人类评审仍有明显差距,且 judge 间一致性高但可能"集体犯错"。
元评估基准速览(全部来自 _research/01-llm-judge.md):
| 基准 | arxiv(年份) | 方法 | 关键数字与发现 |
|---|---|---|---|
| JudgeBench | 2410.12784(2024,ICLR 2025) | 350 个困难问题,偏好标签由代码执行/单元测试等客观真值产生,覆盖知识/推理/数学/编码 | 最强 LLM judge 准确率仅约 57%(GPT-4o 量级),人类评审约 78%;judge 间互相一致率很高(>75%),但"一致性"与"正确性"相关性很弱——judge 们会一起犯错;推理型模型(o1 系)在部分客观评判任务上并不占优 |
| RewardBench | 2403.13787(2024,NeurIPS D&B) | ~3,000 偏好对,四维度(Chat/Chat-Hard/Safety/Reasoning),测 reward model / judge 的成对判别准确率 | 未经专门 RM 训练的通用 prompted judge 已可与专用 reward model 竞争甚至更好;成为 HF 上 RM 事实排行榜 |
| CriticBench | 2402.14809(2024,ACL Findings) | 批判-纠错能力:找错、定位错误步骤、修正,8 类任务 | LLM 批判能力显著弱于生成能力;自纠不对称——评别人明显好于评自己;解释了 self-refine 收益有限 |
| MM-Eval | 2410.17578(2024) | 18 种语言的人类偏好标注,同时测 LLM judge 与 reward model | judge 可靠性在非英语语言上显著下降,不同语言呈现不同偏差模式 |
| Know Thy Judge | 2503.04474(2025) | 安全 judge 的鲁棒性元评估:wild 分布漂移 + 针对性对抗攻击 | 仅改变模型输出的风格(同一数据集),假阴性率跳变最高达 0.24;对抗攻击可让部分安全 judge 把 100% 的有害生成判为安全 |
元评估指标工具箱(建 judge 校准报表时照抄):
- 与人类一致率 + Cohen's κ(校正随机一致)——基础款,但受人工标注噪声限制;
- 客观真值正确率(JudgeBench 路线)——用单元测试/答案验证器产生金标偏好,比"与人类一致"更干净的测量,优先;
- 相关性:Kendall τ / Spearman / Pearson——排行榜层面与人类偏好排名的相关(LC-AlpacaEval 的 0.937→0.982 即此类);
- 鲁棒性元评估(Know Thy Judge 路线):风格扰动、提示敏感性、对抗攻击下的假阴性率变化;
- Bradley-Terry / Elo(竞技场聚合):P(A>B)=exp(θ_A)/(exp(θ_A)+exp(θ_B)),Arena-Hard(2406.11939,2024)用该框架把 arena 人类数据蒸馏为自动基准,与 Arena 相关性 ~0.98(动手实现见
labs/eval_lab11_arena_bradley_terry.py)。
对评测体系的直接含义:
- judge 间一致性不能当验收指标。 MT-Bench(2306.05685,2023,NeurIPS 2023)确立范式时以"GPT-4 judge 与人类一致性约 80%+,与人类间一致性相当"作为合法性论证;JudgeBench 之后,这个论证不够了——验收 judge 要看客观真值正确率与鲁棒性,一致性只是必要不充分条件。学界分歧至今未消:一致性足够用于"相对排名"(排行榜场景),但绝对能力测量必须回到客观真值或人类评审。
- 多语言产品不能只校准英语 judge(MM-Eval);跨模态 judge 泛化更差(MM-JudgeBench,2604.19405,2026)。
- 安全 judge 上线前必须过鲁棒性元评估:风格扰动测试、对抗后缀、prompt injection——judge 是攻击面,不是旁观者(见 2.8)。
- judge 选型:RewardBench 初筛,领域校准集终裁。 RewardBench 只测"成对判别",不测打分校准、多轮对话、鲁棒性——公开榜单上的名次不能替代自己校准集上的验证。任何"换 judge 模型"的决策,最终以本领域校准集的三统计(2.6)为准。
2.8 前沿路线:可训练 judge、prompt 进化与 judge 攻防
2024-2026 年,judge 从"提示词工程"走向"模型工程",再走向"攻防对抗"。演进主线分四段(_research/01-llm-judge.md 调研结论):
| 阶段 | 主题 | 代表工作 |
|---|---|---|
| 2023-2024 上半年 | 偏差的实证 catalog:四大偏差相继被量化,第一批缓解方法出现 | 2305.17926、2404.04475、2404.13076、2310.01432、2404.18796 |
| 2024 下半年 | judge 的"元评估"成为独立赛道:以客观真值校准 judge | JudgeBench 2410.12784、CriticBench 2402.14809、RewardBench 2403.13787、MM-Eval 2410.17578 |
| 2024-2025 | 可训练的 judge:从提示词工程走向模型工程 | Prometheus/Prometheus 2、Self-Taught Evaluators 2408.02666、GenRM 2408.15240、RM-R1 2505.02387 |
| 2025-2026 | judge 的优化与攻防:prompt/rubric 成为可优化对象,可攻击性被正面研究 | GEPA 2507.19457、Know Thy Judge 2503.04474、PoisonedRAG 2402.07867、2604.23178 |
三条主线:
主线一:可训练的 judge(judge 专用模型)。
| 范式 | 代表工作(arxiv,年份) | 核心思想 | 关键数字 |
|---|---|---|---|
| Rubric 监督微调 | Prometheus(2310.08491,2023);Prometheus 2(2405.01535,2024,EMNLP) | 开源评测专用模型;rubric + 细粒度反馈作为输入/输出格式;Prometheus 2 首次同时支持直接评估(1-5 分 + rubric)与成对排序 | 7B/8x7B 两规模;直接评估协议上与人类偏好相关性达 0.3-0.4 量级并超过 GPT-4 judge |
| 自训练 | Self-Taught Evaluators(2408.02666,2024,Meta) | 以强 judge(GPT-4)评判为种子,迭代"合成评测数据→偏好训练→再评测",全程零人工标注 | 从 Llama-3-8B-Instruct 出发,3 轮迭代后与 GPT-4-0314 评判的一致性达到相当水平 |
| 生成式验证 | GenRM(2408.15240,2024,NeurIPS) | reward = P("This solution is correct") 的 next-token 概率,把奖励建模变成生成任务,天然兼容 CoT | GSM8K 与 MATH 上较同规模判别式 verifier 准确率提升最高约 8% |
| RL 训练 judge | RM-R1(2505.02387,2025);CompassJudger-2(2507.09104,2025) | GRPO 训练"会推理的裁判":先输出自然语言批判再给分;偏好方向作为可验证奖励 | RM-R1(LLaMA-3.1-8B)在 RewardBench 平均 ~85%,多个子集超过更大的闭源 judge |
| Prompt 进化(零权重更新) | GEPA(2507.19457,2025) | 反射式进化 judge prompt/rubric,不碰权重 | 见 2.5:平均超 GRPO 6%/最高 20%,rollout 少最高约 35 倍 |
开源 judge 模型的三大工程红利(Prometheus 2 路线):本地部署(数据不出域)、成本低、可针对领域 rubric 微调;rubric-as-input 的接口设计已成事实标准。JudgeLM(2310.17631,2023)则更早证明了"微调大模型做 judge"的可扩展性。
主线二:judge 调优的路线选择。 综合素材的工程建议:
| 你手上有什么 | 推荐路线 | 理由 |
|---|---|---|
| 人工标签 < 几百条(典型情况) | GEPA 式 prompt/rubric 进化 | 样本效率比 RL 高一个数量级以上;DoorDash 生产验证 |
| 标签数千条+ | Prometheus 式监督微调 | 数据够才值得动权重;换来本地部署与低成本 |
| 判据可验证(代码/数学/格式约束) | RM-R1 式 RL | 偏好方向本身就是规则奖励,无需人工标注 |
| 任何自训练 judge | 必须保留独立于训练分布的冻结校准集 | 防"judge 回声室":合成数据会放大种子 judge 的偏差,后续工作记录了迭代坍缩风险 |
主线三:judge 攻防。 这是与 reward hacking、安全评测的直接交界:
- judge 可被直接攻击。 Know Thy Judge(2503.04474,2025):对抗攻击可让部分安全 judge 把 100% 的有害生成判为安全;仅改变输出风格即可让假阴性率跳变最高 0.24。安全评测管线必须包含"judge 红队"环节:风格扰动测试、对抗后缀、prompt injection 测试;judge 验收不能只看干净集准确率,还要报告鲁棒性元评估结果。
- 消费外部内容的 judge 可被投毒。 RAG/agent 场景中,judge 会读检索结果、网页、工具返回——间接 prompt injection 与检索投毒(PoisonedRAG,2402.07867,2024)可以直接操纵这些 judge。对策:judge 输入的证据切片做注入检测;关键安全判决用"judge + 规则 + 人工"三重冗余。
- judge 分数作训练奖励时的纪律。 SOS-Bench(2409.15268,2024)证明 judge 偏好与安全性、世界知识、指令跟随等具体对齐指标几乎不相关,以 judge 胜率为优化目标的偏好优化(DPO 等)可能只是在"优化风格";AlpacaEval 的长度 gaming 是"训练钻评测空子"的早期案例。工业主流做法:judge 分数可作辅助奖励,但必须配规则验证器与人工抽检闭环,并监控训练过程中 judge 分数与独立基准的背离(Goodhart 预警)。
- agentic 场景的 rubric 验证仍是开放问题:Can LLM-as-a-Judge Reliably Verify Rubrics in Agentic Scenarios?(2606.29920,2026)正面追问 judge 在多步 agent 场景下验证 rubric 的可靠性;FairJudge(2602.06625,2026)尝试自适应、去偏、一致的 judge 框架。趋势判断:judge 校准正在成为一等公民,judge 鲁棒性测试将进入上线 checklist。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | 三层评分中 judge 的定位:规则判硬条件、judge 判语义/策略合理性、人工定口径与校准 | ⭐ | 是否理解 judge 的边界,而不是"什么都扔给 GPT-4 评" |
| 2 | Judge 解剖:rubric + 证据切片 + verdict + rationale;每维一个 judge、不同源、few-shot、输出 schema | ⭐ | 能否写出生产级 judge 接口,而非玩具 prompt |
| 3 | 二元检查 vs 分级打分的取舍;DoorDash 为何选 binary 汇总 | ⭐⭐ | 是否理解评分方差对迭代速度的影响 |
| 4 | Rubric 铁律:"人都无法一致应用的 rubric,模型也不可能";描述成功而非指定唯一答案 | ⭐⭐ | 是否做过真实 rubric 工程,知道标准先于人/机一致性 |
| 5 | 四大偏差(位置/冗长/自我偏好/风格)的机理、量化与缓解手段 | ⭐⭐ | 最高频追问点;要能给出 swap consistency、长度回归、自我识别率等量化方式 |
| 6 | Judge 校准五步法 + 85% 口径 + gold set 必须含坏样本 | ⭐⭐ | 是否知道"未校准 judge 制造误导性信心",有没有完整校准经验 |
| 7 | 一致率 vs Cohen's κ;base rate 陷阱(90% good 时全判 good 也有 90% 一致率) | ⭐⭐ | 统计素养;能否识破"一致率虚高" |
| 8 | 高一致 ≠ 正确:JudgeBench 最强 judge 客观准确率 ~57% vs 人类 ~78%,judge 间一致 >75% 但会集体犯错 | ⭐⭐⭐ | 是否跟进了元评估赛道,能否区分"一致性"与"正确性" |
| 9 | Judge 与生成模型不同源;自我偏好(GPT-4 自我识别率 ~72%)与 PoLL 评审团 | ⭐⭐ | 是否知道共模偏差与评审团的独立性前提 |
| 10 | Judge 升级三统计:与人工一致性 / 高风险漏判率 / 边界样本稳定性 | ⭐⭐⭐ | 运营视角:judge 不是一次性配置而是持续运营的资产 |
| 11 | Judge 版本化四元组(模型 + prompt + 参数 + 协议)与离线/线上同一 judge | ⭐⭐ | 分数可比性与归因能力的工程前提 |
| 12 | Judge 是攻击面:对抗攻击 100% 绕过安全 judge、风格扰动 FNR 跳变 0.24、PoisonedRAG 投毒 | ⭐⭐⭐ | 安全深水区;多数候选人只知道 judge 有偏差,不知道 judge 可被攻击 |
| 13 | 可训练 judge 路线选择:GEPA(标签 <几百条)/ SFT(数千条+)/ RL(判据可验证);回声室风险 | ⭐⭐⭐ | 前沿视野 + 成本意识;能否给出"零权重更新优先"的判断 |
四、经典面试题与参考答案
题 1(基础):什么是 LLM-as-a-Judge?它在三层评分体系中的位置是什么?能判什么、不能判什么?
参考答案: LLM-as-a-Judge 指用一个(通常更强的)LLM 按 rubric 评判另一个模型的输出,自 MT-Bench(2306.05685,2023)确立以来成为开放式生成评测的事实标准,因为它便宜、快速、可扩展——DoorDash 用它把评测规模从员工反馈平均 1 条/天做到 2,000 个/天自动评分会话。三层评分中:规则判"硬条件"(schema、工具调用、预算),judge 判"语义/策略合理性"(语气、有据性、策略是否合理),人工定口径并校准 judge。Judge 能判的:规则写不出、但人能一致判断的软指标;不能判的:一是代码能判的(用了浪费且引入抖动,"能用代码判断的绝不用模型");二是依赖内部政策口径的问题(阿里:judge 能判礼貌/清晰,但判不了"叠加优惠差价是否应补偿"这类要业务先定口径的问题);三是它自身未被校准前,什么都"判不准"——未校准 judge 制造误导性信心。
题 2(基础):请描述一个生产级 judge 的解剖结构:输入由什么组成、输出应包含什么、有哪些工程纪律?
参考答案: 输入 = 单条标准(rubric)+ 该标准依赖的证据切片。DoorDash 的做法是每条标准声明依赖的证据,Transcript Builder 只把那一片给 judge(grounding 检查拿论断 + 工具输出;多样性检查拿推荐 + 原始请求),聚焦证据让判断更一致。输出 = verdict + rationale(+ 置信度、问题分类),rationale 要引用证据原文,供定位、badcase 聚类与人工审计。工程纪律按 Airbnb 五条:① 每个质量维度一个 judge(3-5 个经校准的评估器好过一堆嘈杂的);② judge 模型尽量与生成模型不同源(防自我偏好);③ 带 few-shot,含边界样本;④ 强制输出 JSON schema;⑤ 清晰打分说明,每分档有可执行标准。外加两条运营纪律:judge 前可加 eligibility 判断(不适用则跳过),judge 本身要版本化管理。
题 3(进阶):设计 rubric 时,二元检查与分级打分(1-5 分)怎么选?为什么 DoorDash 推荐二元?
参考答案: 选 binary 的理由有四:① 方差低——"0 还是 1"的判定边界清晰,"3 分还是 4 分"连人都会摇摆,judge 抖动更大;② 汇总干净——逐条 binary 汇总为会话级总分,不需要为加权平均的权重吵架;③ 可独立迭代——每条标准单独可改、可单独校准,改一档描述则牵动全量表;④ 校准目标明确——一致率、漏判率都好算。DoorDash 的 guardrail/capability 标准全是 binary(如"不呈现可证伪虚假信息")。分级打分适合创意质量、体验观察等确实存在连续谱的维度,但要求每分档有可执行标准(阿里)且锚定示例。折中实践:分级维度先拆成若干 binary 子检查,再映射回分档;以及 checklist 式场景 rubric("两人份 ≤$60 素食 taco 清单")——比宽泛标准方差更低,小样本即可迭代。无论哪种,铁律是"人都无法一致应用的 rubric,模型也不可能"。
题 4(进阶):LLM Judge 有哪些常见偏差?分别如何量化、如何缓解?
参考答案: 四大偏差。① 位置偏差(2305.17926,2023):成对评判偏好特定位置;量化用 swap consistency(交换 A/B 前后判决一致率)与等质量对照组胜率偏离 50% 的幅度;缓解是双向交换取平均或句级对齐 Split and Merge(2310.01432,2023)。② 冗长偏差:把更长当更好;量化用长度作为协变量回归看系数;缓解是 LC win rate(2404.04475,2024),把 AlpacaEval 与 Arena 人类排名相关性从 0.937 提到 0.982。③ 自我偏好(2404.13076,2024):judge 偏好自己的输出,GPT-4 自我识别率约 72%;量化用自我识别率 + 自我胜率偏移;缓解是异构 judge、PoLL 评审团(2404.18796,2024)。④ 风格偏差(2409.15268,2024):markdown/格式/自信语气压倒实质;量化用同内容双排版 A/B;2604.23178(2026)系统复盘 9 种去偏策略发现单点策略收益有限,风格偏差是最主要残余偏差(效应量 0.10-0.76),"中端模型 + 组合去偏"胜过前沿 judge 且便宜约 15 倍(71.0% κ=0.549 @ $0.001/次 vs Claude Sonnet 4 69.5% @ $0.015/次)。默认协议:交换聚合 + 判据先行 + 温度 0。
题 5(进阶):请完整描述校准一个 LLM Judge 的流程,并给出量化标准。如果一致率长期卡在 80% 左右,你怎么诊断?
参考答案: 按 Airbnb 五步法:① 建 50-100 条 gold set,必须含坏样本与两类陷阱(正确的改述、流畅的错误);② 用 judge 跑该集合;③ 看一致率,目标 high-80s~90s,分歧用 Cohen's κ / Krippendorff's α 度量(注意 base rate 陷阱);④ 逐条检查分歧样本,归因是 rubric 含糊、few-shot 缺失还是 judge 能力不足,修 rubric/示例后重跑;⑤ 失败模式变化时重新校准。工业口径:阿里 ~85% 后进日常自动化,腾讯 ≥85% 可用,DoorDash 用 GEPA 自动迭代 judge prompt、只保留留出集一致率提升的版本。Airbnb 实战:judge 初始 78%,根因是字面重叠式 rubric 误罚正确的改述,修 rubric 后 88%。卡在 80% 的诊断路径:先按"样本类别 × 分歧方向"分解混淆矩阵(FN 误罚好答案 / FP 放过坏答案各在哪类样本);若是改述被误罚→rubric 从字面匹配转向事实核对;若是流畅错误漏判→给 judge 证据核对步骤与负向 few-shot;若人机之间对同一批样本也不一致→先修 rubric 定义(人都用不一致,模型不可能一致);最后才考虑换更强的 judge 模型。
题 6(进阶):为什么只看一致率不够?请用例子说明 Cohen's kappa 的价值。
参考答案: 一致率不扣除"随机一致",在类别不平衡时会严重虚高。例:gold set 100 条中 90 条 good、10 条 bad,judge 无脑全判 good,一致率也有 90%——看起来达标,实际上它对坏样本的漏判率是 100%。Cohen's kappa 用 κ=(p_o−p_e)/(1−p_e) 扣除随机一致 p_e,而 p_e 要按两个评分者各自的边际相乘再相加。这个 judge 恒判 good,它的边际是 good=1.0、bad=0.0,故 p_e=0.9×1.0+0.1×0.0=0.9,κ=(0.9−0.9)/(1−0.9)=0——恒判一类的退化 judge,κ 恰为 0,一致率的虚高被彻底戳穿。(易错点:若误把 judge 的边际也当成 gold 的 0.9/0.1,会算出 p_e=0.82、κ≈0.44;但 judge 从不判 bad,它的 P(good) 是 1 而非 0.9,一方恒判一类时 p_e 必然等于 p_o、κ 归零。)两点延伸:① 解读参考 <0.2 差 / 0.2-0.4 弱 / 0.4-0.6 中等 / 0.6-0.8 良好 / >0.8 几乎完全一致;② 校准集要故意保持足够的坏样本比例(Airbnb:gold set 必须含坏样本),否则一致率与 κ 同时失真。工程上还应把一致率拆成误罚率(FN,惩罚正确改述)与漏判率(FP,放过流畅错误)分别看——阿里对高风险样本的漏判率是 judge 升级的三统计之一,因为合规/资损场景的漏判代价远高于误罚。
题 7(进阶):为什么 judge 要与被评模型不同源?如果成本所限只能用同一个模型,怎么降低风险?
参考答案: 实证依据是自我偏好偏差(2404.13076,2024):GPT-4、Claude-2、Llama-2、Mistral 都能以显著高于随机的概率识别自己生成的文本,并在成对评判中系统性偏好自己的输出;GPT-4 对自身输出识别率约 72%,且自我偏好强度与自我识别能力正相关,开源模型更甚。同源自评相当于"裁判和选手是同一个模型",回归对比中模型会系统性高估自己的新版本。缓解首选:judge 与被评模型分属不同模型家族;关键评测用 PoLL 评审团(2404.18796,2024)——三个跨家族中端模型(Command-R、Llama-3-70B、Mistral-Large)多数投票,与人类相关性高于单一 GPT-4 judge、成本降到几分之一、显著缓解自我偏好。成本所限必须同源时的降级方案:① 统计校准——按自我识别检测修正胜率估计(原论文提出的方法);② 绝对打分 + rubric 锚定替代成对比较(自评的成对比较是自我偏好重灾区);③ 用客观真值校准集持续测该同源 judge 的正确率(JudgeBench 路线),一旦漂移立即降级处理;④ 高风险维度坚持换异构 judge 或人工。注意 PoLL 的边界:评审团只对独立误差有效,风格偏好是共模偏差,跨家族集成也治不了。
题 8(进阶):JudgeBench 显示最强 judge 的客观准确率只有 ~57%,而 judge 之间互相一致率超过 75%。这对我们构建评测体系意味着什么?
参考答案: 三个含义。① "judge 间高一致"不能作为验收指标——一致只说明它们共享同样的偏见(共模错误),不说明正确;MT-Bench 时代"与人类一致率 ~80%"的合法性论证在客观真值面前不够了(JudgeBench,2410.12784,2024,ICLR 2025:350 个由单元测试等客观验证产生偏好标签的困难问题,最强 judge ~57%,人类 ~78%)。② 元评估要优先用客观真值:凡是判据可程序验证的领域(代码、数学、格式约束),用单元测试/答案验证器造 judge 校准集,比"与人类一致"更干净;人类一致率留给无法客观验证的主观维度,并配 κ。③ 对 judge 的能力边界保持谦卑:judge 适合做"低成本筛查与排序",不适合做"最终裁决"——所以三层评分里人工才是校准源与高风险终判者(第 E06 章),所以阿里要求高风险/低置信/冲突样本进人工复核,所以推理模型也不一定更好(JudgeBench 报告 o1 系在客观评判上不占优,"会推理"≠"会评判")。答题加分点:补充 CriticBench(2402.14809,2024)的"批判能力弱于生成能力、自评弱于评他",说明 57% 并非意外。
题 9(系统设计):为公司的 Agent 评测平台设计一个「Judge 服务」:解剖、校准、版本化、路由、监控,给出完整方案。
参考答案: 分五层设计。① 接口层:judge 按"单条标准 + 证据切片"调用(DoorDash 接口),输出 {applicable, verdict, confidence, rationale, 问题分类};每个业务维度一个 judge,控制在 3-5 个(Airbnb);证据由 Transcript Builder 按标准声明切片供给(第 E07 章)。② 校准层:每 judge 配 50-100 条 gold 校准集(含坏样本、正确的改述、流畅的错误、高风险样本);按五步法迭代到一致率 ≥85%(腾讯口径)且 κ≥0.6;rubric 措辞优化可用 GEPA 自动进化,留出集防过拟合。③ 版本层:judge 版本 = 模型 + prompt + 温度 + 协议四元组,任一变化即新版本;每个版本建计量档案(校准集历史曲线);新旧版本过渡期双跑对比。④ 路由层(衔接第 E06 章):judge 结论不是终点——边界分/低置信/rationale 含糊/多 judge 分歧/规则与 judge 冲突 → 人工终判并回收口径;高风险场景自动通过也定期人工复核。⑤ 监控层:阿里三统计随每次升级固定产出(与人工一致性、高风险漏判率、边界样本稳定性);日常抽样人工审计 judge 行为(DoorDash:审计 judge 是人工三大杠杆之一);离线与线上强制同一 rubric + 同一 judge;把 harness 自身故障(judge 误报)单列缺陷池并行修复。成本策略:中端模型 + 组合去偏优先(2604.23178:71.0% 一致率 @ $0.001/次,比前沿配置便宜约 15 倍),关键门禁维度再上评审团。
题 10(系统设计):你准备把 judge 分数作为 RL 训练的奖励信号。请评估风险并设计治理方案。
参考答案: 风险有四类。① 风格 gaming:SOS-Bench(2409.15268,2024)证明 judge 偏好与安全性/知识/指令跟随等真实对齐指标几乎不相关,却强烈偏好格式、长度、拒绝话术——以 judge 胜率为目标做 DPO/RL 可能只是在优化风格;AlpacaEval 长度 gaming 是早期案例(LC-AlpacaEval,2404.04475,2024 因此而生)。② 直接攻击:训练循环里的策略模型会主动探索 judge 的漏洞,本质是自动化、持续化的对抗攻击——Know Thy Judge(2503.04474,2025)显示对抗攻击可让安全 judge 100% 放行有害输出,风格扰动即可让假阴性率跳变 0.24。③ 回声室:若用 judge 生成偏好数据再训模型(Self-Taught Evaluators,2408.02666,2024 式循环),种子 judge 的偏差会被放大,存在迭代坍缩风险。④ Goodhart:judge 分数上升但真实能力不涨,且越优化背离越大。治理方案:a) judge 分数只做辅助奖励,与规则验证器(可验证判据优先,参考 RM-R1,2505.02387,2025 的思路)和人工抽检组合;b) 训练前做 gaming 探针(长度/格式扰动测试),确认分数不可被低成本刷取;c) 保留独立于训练分布的冻结校准集,定期测 judge 客观正确率(JudgeBench 路线);d) 监控训练过程中 judge 分数与独立基准(线上信号、客观测试)的背离,背离超阈值即停训复盘;e) judge 与被训模型不同源,防自我偏好混入奖励。
五、易错点 · 反直觉点
- 误区:写一个"万能 judge"对所有维度统一打分。 真相:Airbnb 明确要求每个质量维度一个 judge,且 judge 要少而精——3-5 个经校准的评估器好过一堆嘈杂的;万能 judge 会把语气问题与事实问题混在一个分数里,无法归因、无法单独校准。记忆锚点:judge 按维度拆,宁少勿杂。
- 误区:judge 写个 prompt 就能进门禁。 真相:未校准 judge 制造"误导性信心"——分数精确,量的却是 rubric 的缺陷;必须校准到 high-80s~90s(Airbnb)/ ≥85%(阿里、腾讯口径)之后才谈自动化。记忆锚点:先校准,再门禁。
- 误区:judge 用和被评模型同一个模型,省钱又省心。 真相:自我偏好有硬实证——GPT-4 对自己输出的识别率约 72%,四个主流模型都系统性偏好自己的生成(2404.13076,2024);同源自评会系统性高估自己的新版本。记忆锚点:裁判与选手不同源。
- 误区:judge 之间一致率 >90%,说明 judge 可靠。 真相:JudgeBench(2410.12784,2024)显示 judge 间互相一致率 >75%,但最强 judge 客观准确率只有 ~57%(人类 ~78%),且一致性与正确性相关性很弱——它们会一起犯错。记忆锚点:高一致 ≠ 正确,可能是共谋。
- 误区:校准集全放好样本,因为"坏样本看起来不吉利"。 真相:全好样本的校准集测不出漏判能力——judge 无脑全判 pass 也能刷出高一致率;gold set 必须含坏样本(Airbnb 十条要点之⑦),且要含"正确的改述"与"流畅的错误"两类陷阱。记忆锚点:没有坏样本的校准集是假的。
- 误区:一致率 90% 已经很好,不必看 kappa。 真相:若 90% 样本是 good,全判 good 的傻 judge 一致率也是 90%(但 κ=0——恒判一类零判别力)。类别越不平衡,一致率越会撒谎。记忆锚点:看 κ,别只看一致率。
- 误区:找到一篇去偏论文就照搬(swap / CoT / 校准各挑一个"银弹")。 真相:2604.23178(2026)对 9 种策略 × 5 模型 × 3 基准的系统复盘显示:单点策略多数收益有限且跨模型不稳定;风格偏差是最主要的残余偏差;组合策略 + 中端模型才是性价比之王(便宜约 15 倍且一致率更高)。记忆锚点:去偏靠组合,银弹不存在。
- 误区:judge prompt 随手改,反正"改得更好了"。 真相:judge 版本 = 模型 + prompt + 参数 + 协议,任一变更都让新旧分数不可比;回归异动时查不到是模型变了还是 judge 变了。阿里的三统计(一致性/高风险漏判率/边界稳定性)必须随每次升级产出。记忆锚点:judge 即资产,改动即发版。
- 误区:推理模型(o1/R1 系)一定更会当 judge。 真相:JudgeBench 报告推理型模型在部分客观评判任务上并不占优;Critique 研究显示 CoT judge 会"推理出错误的自信"。"会推理"≠"会评判",评判能力要单独元评估。记忆锚点:推理强 ≠ 评判强。
- 误区:judge 不执行代码、不碰外部世界,所以没有安全问题。 真相:judge 是攻击面——对抗攻击可让安全 judge 把 100% 的有害输出判为安全(2503.04474,2025);消费检索内容/工具返回的 judge 可被 PoisonedRAG(2402.07867,2024)式投毒操纵;judge 分数进训练循环还会被 reward hacking。记忆锚点:judge 也要红队。
六、推荐资源
一手工业实践(本章素材来源,完整精读笔记见 _research/00-industry-practice.md 与 _research/01-llm-judge.md)
- Airbnb《Eval-driven development: Lessons from evaluating GenAI at scale》——judge 五条使用规则、rubric 0/1 实例、五步校准法、78%→88% 案例、"未校准 judge 制造误导性信心"的原始出处。
- DoorDash《Building Ask DoorDash (Part 3): Evaluation》(2026-06-30)——judge 接口(标准+证据→verdict+rationale)、eligibility 前置、binary rubric 汇总、GEPA 校准 judge、离线/线上同一 judge 的原始出处。
- 阿里技术《Agent 评测:方法论与体系设计》——"规则主判、Judge 辅助、人工兜底"、~85% 校准口径、升级三统计、多 LLM 对抗打分的原始出处。
- 腾讯技术工程《AI Agent & Skill 测评方案及落地实践》——Rubric 评分器(固定版本大模型 + Prompt + JSON Schema)、≥85% 可用口径、"校准 LLM 评委是人工最核心场景"的原始出处。
前沿论文(全部来自 _research/01-llm-judge.md,arxiv ID 已核实)
- MT-Bench / Chatbot Arena:Judging LLM-as-a-Judge(2306.05685,2023,NeurIPS 2023)——范式奠基,GPT-4 judge 与人类一致性约 80%+。
- 位置偏差:Large Language Models are not Fair Evaluators(2305.17926,2023);句级对齐:Split and Merge(2310.01432,2023)。
- 自我偏好:LLM Evaluators Recognize and Favor Their Own Generations(2404.13076,2024)。
- 风格偏差:Style Outweighs Substance(2409.15268,2024)。
- 长度控制:Length-Controlled AlpacaEval(2404.04475,2024,TMLR)。
- 评审团:Replacing Judges with Juries (PoLL)(2404.18796,2024,COLM)。
- 去偏系统复盘:Judging the Judges(2604.23178,2026)。
- 元评估:JudgeBench(2410.12784,2024,ICLR 2025)、RewardBench(2403.13787,2024,NeurIPS D&B)、CriticBench(2402.14809,2024,ACL Findings)、MM-Eval(2410.17578,2024)。
- 鲁棒性与攻防:Know Thy Judge(2503.04474,2025)、PoisonedRAG(2402.07867,2024)。
- 可训练 judge:Prometheus 2(2405.01535,2024,EMNLP)、Self-Taught Evaluators(2408.02666,2024)、GenRM(2408.15240,2024,NeurIPS)、RM-R1(2505.02387,2025)、CompassJudger-2(2507.09104,2025)、JudgeLM(2310.17631,2023)。
- Prompt 进化:GEPA(2507.19457,2025);综述:A Survey on LLM-as-a-Judge(2411.15594,2024);蒸馏基准:Arena-Hard(2406.11939,2024)。
动手实验(labs)
labs/eval_lab04_judge_bias.py(本章核心实验之一)——MockJudge 注入位置/冗长/自我偏好偏差→等质量对照组量化→swap-and-average / 多 judge 投票 / 长度受控评分三种缓解的有效性断言。运行:cd evals-special/labs && python3 eval_lab04_judge_bias.pylabs/eval_lab05_judge_calibration.py(本章核心实验之二)——复刻 Airbnb 78%→88% 校准案例:60 条 gold(含"正确的改述"与"流畅的错误")、混淆矩阵 / 一致率 / Cohen's κ、rubric 修订闭环、升级三统计监控。运行:cd evals-special/labs && python3 eval_lab05_judge_calibration.pylabs/eval_lab11_arena_bradley_terry.py——Bradley-Terry / Elo 与长度风格控制,呼应 2.7 的竞技场聚合与 LC 思想(详见第 E09 章 · 评估的统计学基础)。运行:cd evals-special/labs && python3 eval_lab11_arena_bradley_terry.py
交叉引用
- 三层评分的另外两层:第 E04 章 · 程序化评分(judge 的上游边界)、第 E06 章 · 人工评估与评分路由(judge 的校准源与人工兜底)。
- judge 的上下游:第 E03 章 · 黄金数据集(校准集从哪来)、第 E07 章 · 轨迹与 Agent 级评估(Transcript Builder 证据切片全貌)、第 E09 章 · 评估的统计学基础(一致率/κ/置信区间)、第 E10 章 · 评测驱动开发(judge 筛候选、一次一变量)、第 E12 章 · 在线评估与数据飞轮(离线/线上同一 judge、judge 分数作奖励)、第 E14 章 · 前沿论文全景(judge 方向综述)、第 E15 章 · 工业实践案例研究(四家 judge 口径横向对比)。
- 主手册第 8 章 · Agent 评估与可观测性——本章是其"LLM-as-Judge"一节的深挖版。
评分三层之三:人工评估与评分路由
一句话导读:在「规则 → Judge → 人工」的三层评分体系里,人工是最贵、最慢、最不可扩展的一层,却也是唯一能产出新口径、裁决自动评分器的一层。本章回答四个问题:人力该花在哪些工作(六个高杠杆场景)、标注工程怎么做(指南/分歧/一致性)、哪些样本值得送人工(评分路由)、人工结论如何放大(反哺闭环)。学完你能设计一套完整的人机协同评分流水线,并扛住系统设计级的追问。
前置阅读:第 E04 章 · 程序化评分(规则层)、第 E05 章 · LLM-as-Judge 深入(Judge 层)。本章是评分三层的收口篇——三层不是并列的三选一,而是一条有路由、有反哺的流水线,人工站在流水线的两个关键位置:校准入口与冲突出口。
一、知识图谱
评分三层(选择优先级:确定性 > Rubric > 人工)
┌───────────────────┬───────────────────┬───────────────────┐
▼ ▼ ▼
【第一层 规则】 【第二层 Judge】 【第三层 人工】
硬条件/工具/schema 语义/策略/rubric 兜底 + 校准源
毫秒级·稳定100% 秒级·有抖动·需校准 分钟-小时级·最贵·最权威
│ │ ▲
│ 明显通过/明显失败 │ 一致率≥85%后放量 │
├──────────────────►├───────────────────┤
│ │ │
└── 不确定/冲突/新版本 ──►【人工评分路由】──┘
①边界分 ②低置信 ③reason含糊
④多judge分歧 ⑤新版本抽样 ⑥规则-Judge冲突
│
┌──────────┬──────────┬─┴───────┬───────────┐
▼ ▼ ▼ ▼ ▼
校准Judge 主观打分 诊断0%/100% 建Ground Trace采样
(最核心) 异常 Truth +高风险100%复核
│ │
└───────────────┬───────────────┘
▼
专家时间分配:60%+ 花在「校准Judge」与「诊断异常」
坚决不做日常全量打分
│
▼
【反哺】人工结论 → 校准规则 / Judge prompt / 根因标签体系
先用一张表定位本章在评分三层中的角色:
| 层 | 评什么 | 成本 | 稳定性 | 覆盖 | 门禁角色 |
|---|---|---|---|---|---|
| 规则(E04) | 硬条件:工具调用、状态、字段、禁用动作 | 毫秒级 / 免费 | 100% | 已知硬指标 | 硬门禁 |
| Judge(E05) | 语义、策略合理性、语气 | 秒级 / API 费用 | 有抖动,需降噪 | 未知软指标 | 分级门禁 |
| 人工(本章) | 口径、争议、高风险、异常 | 分钟-小时级 / 人力 | 取决于标注员水平 | 主观 + 边缘场景 | 不进门禁,做采样审查与终判 |
(表格口径来自腾讯三类评分器对照;"人工不进门禁"是关键设计决策:人力无法支撑每次 CI 运行,人工的价值在门禁之外——定口径、校尺子、查漏。)
二、核心概念精讲
2.1 定位:人工是评分系统的「校准源」,不是「打分主力」
三层的分工原则,阿里的一句话最凝练:规则主判,Judge 辅助,人工兜底。规则看"硬条件"(工具、状态、字段、禁用动作),LLM 看"语义/策略合理性",能写成代码的由规则主判;高风险/抽检/低置信/变更观察期追加 LLM Judge;能自动稳定判断的不长期依赖人工(阿里)。腾讯给出同样的优先级:确定性 > Rubric > 人工。
为什么"人工全量打分"是反模式?三笔账:
- 成本账:人工评分是分钟-小时级/人力成本,而自动评分是毫秒-秒级。腾讯的痛点表写得很直白:Skill 越多、模型越快,人肉回归指数增长,只能选择性验证、留下盲区。DoorDash 的数字更具冲击力——全量回归从手工 6+ 小时压到自动约 20 分钟(50 场景 × 8 trials = 400 次对话的 sweep)。
- 规模账:日常打分的样本量是生产流量级的。DoorDash 从"平均 1 条/天员工反馈"做到"2,000 个/天自动评分会话",靠的是校准过的 Judge 而不是扩招标注员。
- 杠杆账:专家最稀缺的能力是"判断什么是好",而不是"重复判断"。把专家耗在逐条打分上,等于用最贵的资源做最可替代的工作。
由此得到三条被多家公司验证的经验法则:
| 公司 | 人工定位的表述 |
|---|---|
| 腾讯 | 能自动化的坚决不找专家;专家时间 60%+ 花在"校准 LLM 评委"与"诊断异常" |
| DoorDash | 人工用在杠杆最大处:定 rubric、标注校准集、审计 judge 行为;打分主力是 judge |
| Airbnb | EDD 原则之一:指定一个最终人类决策者,裁决"好 vs 坏"争议;人工负责建 ground truth、安全高风险决策、细微差别与创意、解决自动评估器间冲突 |
| 阿里 | 人工兜底:定口径、校准 Judge、处理争议样本、抽查高风险场景;能自动稳定判断的不长期依赖人工 |
注意这四家的表述殊途同归:人工评估的成熟度,不看"能动员多少人打分",而看"自动化评分器以多小的人力投入变得可信"。人工不是评分系统的执行层,而是它的校准源与仲裁庭。
2.2 人工评估的六个高杠杆场景
腾讯把"人工必须出场"的场景收敛为六个,这是本章的主干清单:
| # | 场景 | 做什么 | 关键数字/做法 |
|---|---|---|---|
| ① | 校准 LLM 评委(最核心) | 抽样一批人工先判,量化 judge 与人的一致率 | 抽样 100–200 条对齐;一致率 ≥85% 才可用(腾讯);阿里口径 ~85% 后进日常自动化 |
| ② | 主观任务打分 | 语气、清晰度、解释质量等无法程序化的维度 | Rubric + 人工抽样;体验与对齐维度(P2)早期靠 Rubric+人工,成熟后转 A/B+用户反馈 |
| ③ | 诊断通过率异常 | 通过率 0% 或 100% 通常是任务/评分器坏了,不是模型弱 | 0% pass^N 一般先查任务定义与评分器,而不是怀疑模型能力 |
| ④ | 建 Ground Truth | 新评测套件先产出参考解,作为后续自动评分的锚 | 前 20–50 个参考解(腾讯);基线快照机制:执行 1 次 → 人工确认过程与结果 → 快照成为基线 |
| ⑤ | Trace 采样审查 | 每周固定抽样读轨迹,找自动评分器看不见的隐藏失败模式 | 与 Airbnb "When in doubt, look at your data"(约 100 样本人工精读输出与 trace)同构 |
| ⑥ | 高风险兜底 | 医疗/金融/安全类场景 100% 人工复核 | 阿里补充:赔付/隐私/合规/投诉升级,自动通过的也要定期人工复核 |
六个场景的内在结构值得记住:①④ 是为自动化评分器"造尺子",③⑤ 是给自动化评分器"质检",②⑥ 是自动化永远不该独自碰的领域。
再叠上另外两家的清单,覆盖面更完整:
- Airbnb 的人工四用途:建 ground truth;安全高风险决策;细微差别与创意(nuance & creativity);解决自动评估器间冲突——最后一条是"多 judge 分歧进人工"这个路由规则的方法论来源。
- 阿里的适用环节:① 新建评测集定口径——例如"订单已发货 + 用户拒收 + 运费险 + 特殊类目"该走哪条流程,需要业务先定,这不是模型问题也不是评分器问题,是业务规则问题;② 校准 Judge——"judge 能判礼貌/清晰,但判不了'叠加优惠差价是否应补偿'这类依赖内部政策的问题";③ 处理争议样本;④ 抽查高风险场景。
一个面试可以直接复述的判断框架:凡是答案依赖"内部政策、业务口径、价值排序"的样本,自动评分器天然无权裁决——因为它们的训练分布里没有你的内部政策。这类样本永远要路由给人(见 2.6 分工决策表)。
各场景的操作要点(面试追问"具体怎么做"时的得分点):
- ① 校准 Judge:校准样本要覆盖各分段与边界案例;人工对校准集的判定结论本身要版本化存档——它是后续每次 judge 升级对照的金标。
- ② 主观任务打分:给标注员的 rubric 要写行为锚点("什么样的回复算简洁"),而不是"质量好/一般/差"这类抽象词;每次打分输出 reason,供他人复核与后续分歧分析。
- ③ 异常诊断:标准动作是分层抽样 10–20 条逐条精读,读的是输入、输出、trace 三件套而非只读输出;对照旧版本被评系统重跑,区分"模型变了"还是"尺子变了"。
- ④ Ground Truth:参考解不只记最终答案,还记关键过程(工具调用序列、中间产物)。腾讯的基线快照机制是标准做法:用例先执行 1 次 → 人工审核过程与结果 → 不可接受则修后重跑 → 可接受则该次快照成为基线,后续每次执行与基线对比;Agent/Skill 逻辑变更、模型升级或用例本身修改时重新快照。
- ⑤ Trace 采样:固定节奏(每周)+ 固定抽样率,重点读两类样本——自动评分器打高分的(防"结果看似对但路径已偏离"的假阳性,阿里明确要求为此加过程型与风险型检查,轨迹评估细节详见第 E07 章 · 轨迹与 Agent 级评估)与用户反馈差的。
- ⑥ 高风险兜底:复核结论要留痕(复核人、依据、rubric 版本)进审计日志;"自动通过也要定期复核"要排期化,不能靠临时起意。
2.3 Judge 校准:人工评估的第一任务
为什么校准排在第一位? 两句话足够:
- Airbnb:未校准的 judge 会制造误导性信心——分数看起来在涨,可能只是尺子变松了。
- DoorDash:"LLM Judge only useful if it agrees with human reviewers." Judge 的全部合法性来自与人工判断的一致性。
Airbnb 的校准五步法(本章必须能默写的流程):
- 建 50–100 条 gold set,必须含坏样本——只有好样本的校准集测不出 judge 的误罚倾向;
- 用 judge 跑该集合;
- 看一致率,目标 high 80s ~ 90s%;分歧程度可用 Cohen's kappa / Krippendorff's alpha 度量;
- 逐条检查分歧 → 改 rubric / 改 few-shot 示例 → 重复第 2 步;
- 失败模式变化时重新校准——校准不是一次性动作。
实战案例(Airbnb 旅行平台客服政策问答助手):PM/SME 标注 60 条 gold(含失败样本);judge 初始一致率 78%(过低)——分歧分析发现 judge 误罚了正确的改述(语义正确但字面不同于参考答案的回答被扣分);修 rubric 与示例后一致率达 88%;同期检索改进减少了 groundedness 失败。这个案例的价值在于展示校准循环的完整收益链:人工标注 → 暴露 judge 缺陷 → 修 rubric → judge 可信 → 规模化打分(该助手随后扩到 5,000 样本、每日抽 5% 去标识化生产流量)。
四家校准线对照(面试高频数字题):
| 公司 | 一致率口径 | 说明 |
|---|---|---|
| Airbnb | 目标 high 80s ~ 90s | 配 Cohen's κ / Krippendorff's α 度量分歧 |
| 腾讯 | ≥85% 才可用 | 抽样 100–200 条对齐 |
| 阿里 | ~85%(参考值)后进日常自动化 | 升级时还要看高风险漏判率、边界稳定性 |
| DoorDash | 与人工标注一致才放量 | 用 GEPA 自动优化 judge prompt(见下) |
三家独立给出 85% 上下的阈值,可以视为行业经验收敛值。注意表述的严谨性:这是经验线不是统计定律——门槛的实质是"judge 与专家的分歧 ≤ 专家之间的分歧"(主手册第 8 章 · Agent 评估与可观测性 对这一判据有展开)。
分歧怎么分解:第 4 步的"检查分歧"不是逐条重标一遍,实用做法是先把分歧样本按方向分桶,再对症下药:
| 分歧类型 | 表现 | 典型病因 | 修复动作 |
|---|---|---|---|
| Judge 偏严 | 把正确答案判错 | rubric 措辞过窄、过度依赖字面匹配 | 放宽 rubric 措辞、补"正确改述"的正向 few-shot(Airbnb 78%→88% 案例即此型) |
| Judge 偏松 | 把错误答案放过 | 缺事实核对项、被流畅性迷惑 | 加事实核对检查项、补"流畅的错误"负例 |
| 边界真分歧 | 人也拿不准 | rubric 对该情形没有规定 | 走 2.4 的分歧处理:裁决后写回 rubric |
分桶的价值在于:前两类改的是 judge(rubric/示例),第三类改的是口径本身——修复路径完全不同,混在一起处理会反复返工。
校准的自动化:GEPA(DoorDash 实践)。人工校准的瓶颈是"改 rubric 靠人试",DoorDash 把这一步交给了反射式 prompt 优化器 GEPA(arXiv 2507.19457,2025):对候选 prompt 采样运行 → 用自然语言反思诊断失败 → 变异生成新 prompt → 按 Pareto 前沿在多个任务切片上保留候选(而非只看平均分)。落到 judge 校准上:GEPA 迭代提出 judge prompt 修订,只保留在留出集上提升与人工标注一致率的版本。这等于把"分析分歧 → 改 rubric → 重测"的人工循环部分自动化,人工退到"标注留出集 + 审计修订方向"的位置。GEPA 原论文报告其样本效率比 GRPO 强化学习高约 35 倍量级(详见第 E10 章 · 评测驱动开发)。
校准是持续运营,不是一次验收(阿里):维护 Judge 金标校准集;每次 judge prompt/模型升级固定产出三类统计:
- 与人工标注一致性(一致率,或多模型对抗 Kappa);
- 高风险样本漏判率(合规/资损/隐私——这类样本漏判一个的代价远超平均分波动);
- 边界样本稳定性(重复评测的波动幅度)。
何时触发重新校准?把三家的触发条件合并成一张清单:rubric 演进/新增能力(DoorDash)、失败模式变化(Airbnb)、judge prompt 或模型升级(阿里)。三者任一发生,旧校准结论作废。
动手实验:校准五步法 + 混淆矩阵 + κ 的完整实现见 labs。
cd evals-special/labs && python3 eval_lab05_judge_calibration.py该 lab 复现了 Airbnb 案例:Judge v1 字面重叠式 rubric 误罚"正确的改述"(一致率 < 82%),修订 rubric 后 v2 ≥ 85%。
2.4 标注工程:指南、分歧与标注者间一致性
人工评估的可信度不取决于"专家多厉害",而取决于标注工程的四个要素:指南、分歧处理、一致性度量、规模化路径。
(1)标注指南 / rubric 先于标注员。 Airbnb 的判断标准一针见血:"如果人都无法一致地应用 rubric,模型也不可能。" 标注指南不是评分的辅助文档,而是整个评分体系(人工 + judge)的单一事实来源。DoorDash 进一步要求每条标准写成"从会话本身可验证"——同一条 rubric 既供人工校准使用,又供 judge 规模化使用(第 E05 章 · LLM-as-Judge 深入 对 rubric 工程有完整展开,含 Airbnb 房源 listing 语气 0/1 判定的完整实例)。rubric 写得好不好,有一个廉价的检验方法:让两个专家各自独立按指南标一批样本,看一致率——IAA 低首先是 rubric 的问题,不是人的问题。
(2)专家分歧处理:先停下,解决分歧再自动化。 Airbnb 的纪律是:专家有分歧就先停下解决分歧再自动化。这条纪律背后的逻辑:专家分歧通常不是随机噪声,而是口径未定义的信号——两个专家各自在用指南没覆盖的隐含标准。此时强行自动化(取多数、平均、或交给 judge),等于把未定义的口径固化成系统性偏差。正确流程是把分歧样本摆上桌 → 辩论出裁决 → 把裁决写回 rubric → 再标下一批。这个"分歧 → 口径"的转化过程,正是 2.7 反哺闭环在标注阶段的形态。
(3)标注者间一致性(IAA, Inter-Annotator Agreement)的度量。 Airbnb 校准流程中点名的两个指标:
| 指标 | 适用 | 直觉 |
|---|---|---|
| Cohen's kappa | 两位标注者的分类一致性 | 一致率扣除"瞎猜也能一致"的基线后剩下的比例;κ=1 完全一致,κ≤0 等同于乱猜 |
| Krippendorff's alpha | 多标注者、多种数据类型(分类/有序/连续) | κ 的泛化版,标注员数量与缺失标注都能处理 |
IAA 有双重身份:它既是标注质量的度量,更是 rubric 质量的度量。IAA 低 → 先修 rubric 再谈换人、再谈自动化。同时,IAA 也给出了 judge 校准目标的天花板参照:judge 与人的目标一致率定在 high 80s ~ 90s 而非 100%,部分原因正是人与人之间也做不到 100%(详见易错点 10)。
κ 的手算示例(面试计算题高频形态)。设人工专家与 judge 对 100 条样本独立做 pass/fail 判定,混淆矩阵如下:
人工:pass 人工:fail
Judge:pass 72 8
Judge:fail 6 14
- 观察一致率 P_o = (72+14)/100 = 86%;
- 期望机遇一致率 P_e = P(judge pass)×P(人工 pass) + P(judge fail)×P(人工 fail) = 0.80×0.78 + 0.20×0.22 = 0.668;
- Cohen's κ = (P_o − P_e) / (1 − P_e) = (0.86 − 0.668) / (1 − 0.668) ≈ 0.58。
解读这个反差:一致率 86% 看起来踩线达标,κ=0.58 却说明一致的大半来自"大多数样本本来就 pass"的基础率,judge 的真实判别力有限——单看 fail 行,人工判 fail 的 22 条里 judge 只抓到 14 条,漏判率约 36%。这正是分布偏斜场景的典型失真:一致率与 κ 讲的是两个故事,而真正致命的那个数字(坏样本漏判)两者都没直接回答。所以阿里的 judge 升级统计把高风险样本漏判率单列成项——校准报告里它必须与一致率并排出现。
(4)规模化路径:先小后大,先专家后队伍。 四家的起步规模惊人一致:
| 公司 | 起步规模 | 扩张条件 |
|---|---|---|
| Airbnb | 20–100 个专家标注样本起步 | rubric 稳定且需要规模时才扩大标注队伍 |
| 腾讯 | 新套件前 20–50 个参考解 | 通过率稳定后用例"毕业"进回归集 |
| 阿里 | 先做 50–200 条高质量 golden set | 成熟后扩展分类采样集、长尾集、对抗集、线上回流集 |
| DoorDash | rubric + 校准集 + 参考解 | 校准一致率达标后 judge 放量到每天 2,000 会话 |
顺序不能颠倒:先用少量专家把 rubric 磨稳定,再扩队伍。提前规模化标注的后果是:一群标注员按一份含糊的指南生产大批量低质标签,返工成本远高于前期慢慢磨 rubric。
(5)gold set 必须含坏样本。 这是 Airbnb 十条要点之一。校准集的构成要刻意覆盖三类"陷阱样本":
- 流畅的错误:语言漂亮但事实错误——测 judge 是否被流畅性迷惑;
- 正确的改述:语义正确但字面不同于参考答案——测 judge 是否过度依赖字面匹配(Airbnb 78%→88% 案例的病灶正是这里);
- 边界样本:刚好踩在 rubric 判定线上的样本——它们决定 judge 的判定边界画在哪。
(6)隐私与合规。 Airbnb 明确:生产流量抽样送人工评审前必须去标识化,且用途限定于安全与质量。这不是可选项——任何把未脱敏生产会话直接丢给标注团队的流程,在合规审查处直接死亡(数据飞轮的合规红线详见第 E12 章 · 在线评估与数据飞轮)。
动手实验:gold set 的构造、入库标准检查与治理流水线见 labs。
cd evals-special/labs && python3 eval_lab02_golden_dataset.py
2.5 人工评分路由:不是「分数低」才配进人工
三层评分流水线真正的设计难点不在每一层怎么评,而在层与层之间怎么流转。阿里给出了完整的分层筛查架构:
粗筛层(低成本快速分流) 精判层(确认 badcase) 人工复核层(终判)
规则 Scorer + 轻量 Judge → 完整规则 + Judge → 高风险 / 低置信 /
明显通过 / 明显失败 / 存疑 产出:问题分类、问题现象、 冲突 / 口径未固化
置信度、判定依据
关键设计:评分输出不止 pass/fail。精判层必须同时产出问题分类(现象层:如事实性错误/答非所问/过度承诺)、问题现象、置信度、判定依据——为下游 RCA 提供"现象入口"(第 E11 章 · Badcase 根因分析与优化闭环)。对路由而言,这四个字段里的置信度与判定依据(reason)是路由信号的直接来源:没有它们,下表的六类触发条件有一半无法实现。
人工评分路由的六类触发条件(阿里的核心贡献,也是本章的面试题眼):
| # | 触发信号 | 具体含义 | 捕获什么问题 |
|---|---|---|---|
| ① | 边界分 | 自动得分落在阈值附近的灰区 | 阈值误判风险最高的样本 |
| ② | 低置信 | 评分器自己输出的置信度低 | 评分器"知道自己不确定" |
| ③ | reason 含糊 | judge 给了分但判定依据含糊、不可复核 | judge 在"猜"而不是"判" |
| ④ | 多 judge 分歧 | 多个 judge 结论互相冲突 | 口径模糊或样本本身难(呼应 Airbnb"解决自动评估器间冲突") |
| ⑤ | 新版本上线抽样 | 新模型 / 新 Prompt / 新工具 Schema / 新活动上线,按抽样率送人工 | 分布漂移:旧评分器对新版本是"盲"的 |
| ⑥ | 规则与 Judge 冲突 | 两层结论不一致 | 口径缺口 → 人工终判并回收口径 |
为什么"只看分数阈值"不够? 这是路由设计最常见的简化,必须能说出它漏掉的三类信号:
- 低分 ≠ 不确定。一个样本被规则高置信判 fail(如 JSON 损坏、禁用工具被调用),失败得明明白白,不需要人工——它需要的是修复,不是复核。反过来,一个 0.49 分的边界样本比一个 0.05 分的样本更值得人工看。
- 分数捕捉不到"评分器自身的不确定性"。置信度、reason 质量、judge 间分歧,都是分数之外的元信号——它们度量的是"尺子可不可靠",而不仅是"样本好不好"。
- 分数捕捉不到"分布漂移"。新模型/新 prompt/新 schema 上线时,旧评分器可能整体失准但分数看起来正常——此时唯一可靠的策略是按抽样率主动送人工(阿里的"变更观察期"),用人工结论反过来校验评分器是否还有效。这与主动学习思路一致:阿里在样本治理中明确,新分布出现时优先抽取低置信/高影响/新意图/新工具/新知识点样本进人工确认。
路由逻辑可以直接写成代码:
def route_to_human(sample, rule_verdict, judge_verdicts, context) -> bool:
# —— 第一类:不确定性信号 ——
if is_borderline(rule_verdict.score, gate_threshold): # ① 边界分
return True
if max_confidence(rule_verdict, judge_verdicts) < CONF_MIN: # ② 低置信
return True
if is_vague(judge_verdicts[0].reason): # ③ reason 含糊
return True
if len({v.verdict for v in judge_verdicts}) > 1: # ④ 多 judge 分歧
return True
# —— 第二类:漂移信号 ——
if context.recent_change and sampled(context.audit_rate): # ⑤ 新模型/新prompt/
return True # 新schema/新活动抽样
# —— 第三类:冲突信号 ——
if rule_verdict.verdict != judge_verdicts[0].verdict: # ⑥ 规则 vs Judge 冲突
return True # 人工终判 + 回收口径
return False
用 5 条样本走一遍路由决策(判断每条命中哪类信号):
| 样本 | 规则层 | Judge 层 | 置信/reason | 上下文 | 路由结果 |
|---|---|---|---|---|---|
| A | fail(0.02,JSON 损坏) | 未触发 | 高置信 | 常规 | 自动:明确失败,送修复不送人工 |
| B | 0.49(门禁线 0.50) | pass(0.6) | — | 常规 | 人工:① 边界分 |
| C | pass | pass | reason:"整体感觉还行" | 常规 | 人工:③ reason 含糊,不可复核 |
| D | pass | judge1=pass,judge2=fail | — | 常规 | 人工:④ 多 judge 分歧 |
| E | pass | pass(0.9),reason 完整 | — | 新 prompt 上线第 2 天,命中抽样 | 人工:⑤ 新版本观察期抽样 |
注意样本 A 与 E 的对照:A 分数极低但无人工必要,E 分数很高且 reason 完整却必须进人工——路由的依据从来不是分数高低,而是信号的类别。
两个工程细节值得在面试中主动补充:
- 路由率本身要监控。送人工比例突然飙升,通常意味着评分器坏了或分布漂移了(与"0%/100% 异常"同理);路由率长期为零,则可能是阈值设得太松,路由形同虚设。
- 线上抽样是路由的最大进料口。Airbnb 每日抽样 5% 去标识化生产流量,跑检查与 judge 后标记样本送人工,每周 PM 评审——在线评估与人工路由共用同一套打分口径(DoorDash 原则:离线与线上同一 rubric + 同一校准 judge,两边分数才可对齐;详见第 E12 章 · 在线评估与数据飞轮)。
动手实验:分层筛查(粗筛 → 精判)与路由的成本节省可量化复现。
cd evals-special/labs && python3 eval_lab03_programmatic_scorers.py
2.6 人机分工决策表:什么永远留给人
把前面各节的结论汇总成一张可直接用于系统设计的决策表:
| 判断对象 | 谁评 | 理由 | 出处 |
|---|---|---|---|
| 硬条件:工具调用、状态、字段、禁用动作 | 规则 | 确定性、毫秒级、100% 稳定 | 阿里/腾讯 |
| 通用语义:礼貌、清晰、连贯、groundedness | Judge(校准后) | 可规模化;"judge 能判礼貌/清晰" | 阿里 |
| 内部政策口径:"已发货+拒收+运费险+特殊类目走哪条流程" | 人(业务定口径) | 答案不在任何模型的训练分布里 | 阿里 |
| 依赖内部政策的判断:"叠加优惠差价是否应补偿" | 人 | judge 判不了政策依赖型问题 | 阿里 |
| 价值判断与"好 vs 坏"争议 | 指定的人类终判者 | 争议需要唯一裁决人,否则无限循环 | Airbnb EDD 原则 4 |
| 高风险:医疗/金融/安全 | 人 100% 复核 | 单次误判代价不可接受 | 腾讯 |
| 高风险运营:赔付/隐私/合规/投诉升级 | 人(自动通过也定期复核) | 自动通过 ≠ 无需审计 | 阿里 |
| 细微差别与创意 | 人 | rubric 难以穷举"好品味" | Airbnb |
| 自动评分器间冲突 | 人仲裁 | 冲突=口径缺口,需权威裁决并回收口径 | Airbnb/阿里 |
| 通过率 0%/100% 异常诊断 | 人 | 先怀疑任务与评分器 | 腾讯 |
从表中可以提炼出永远留给人的三类维度:
- 政策口径——业务规则的定义权不属于任何自动评分器;
- 价值判断——涉及取舍与排序的争议需要一个被授权的终判者;
- 高风险——误判代价不可接受的场景,自动化只能做初筛,人做最终把关。
以及一条防止过度自动化的边界原则(阿里原文):"能自动稳定判断的不长期依赖人工"——注意它的双向性:既反对"人工全量打分",也反对"人工永远把着不放"。分工的终局是人的有序撤退:今天人判的口径,明天变成规则或校准后的 judge;撤退的前提是自动化层通过了校准验收(一致率、高风险漏判率、边界稳定性)。腾讯表格中"人工评分器不进门禁,做采样审查"正是这种撤退后的稳态形态。
兜底裁决的升级路径(组织层配套):分工表回答"谁评",落地还要回答"评的人之间不一致怎么办"。可操作的三级升级链:标注员分歧 → SME 复审 → 指定的最终决策者裁决——Airbnb EDD 原则 4 要求明确指定这一个人,因为"好 vs 坏"的争议如果没有唯一终裁人,会在委员会里无限循环。每级裁决的结论都要带依据并写回 rubric,这就接上了 2.7 的反哺闭环。另有一个能批量消除"伪分歧"的机制值得借鉴:DoorDash 的 eligibility 适用性前置——judge 先判该标准是否适用本会话,不适用则跳过(如食谱流程不因缺复购步骤被扣分)。实践中相当一部分"judge 与人工分歧"其实是"这条标准本就不该评这个会话",把适用性判断前置,这类分歧在源头就消失了。
2.7 人工结论反哺:一次人工判定要产出三份资产
人工判完不是终点。如果人工结论只用于"给这条样本一个分数",那么下一条同类样本还得再花一次人工——人力成本线性增长,永远追不上样本量。阿里的反哺机制把人工结论导向三个去处:校准规则、校准 judge prompt、校准根因标签体系。
反哺路径一:规则层——口径回收。 路由条件⑥(规则与 judge 冲突)的人工终判,产出的不只是这条样本的 verdict,更是一条新口径。例如业务终判"拒收+运费险场景应走先退款后退货流程",这条裁决应当被写成一条确定性规则(或 rubric 检查项)入库——下次同类样本由规则直接判定,不再消耗人工。这就是"回收口径"四个字的完整含义:人工判定把口径缺口补上,自动化层的能力边界向外推一格。
反哺路径二:Judge 层——校准集回流。 人工与 judge 的分歧样本是校准集最优质的增量来源(它们恰好落在 judge 的判定边界上):分歧样本入金标校准集 → 分析分歧原因 → 修 rubric/few-shot/judge prompt → 重新跑校准五步法(2.3);DoorDash 更进一步用 GEPA 自动搜索 judge prompt 修订、只保留提升留出集一致率的版本,并在 rubric 演进(新增能力)时收新标注、重新校准。
反哺路径三:根因层——标签体系。 人工复核结论反校准根因标签体系(第 E11 章 · Badcase 根因分析与优化闭环):标签要稳定、可统计、指向 owner 与处理动作——运营可配置 / 算法需优化 / 工程需修复 / 业务需定口径。注意阿里强调"业务需定口径"本身就是一类根因:很多看似模型失败的问题,根因是业务规则从未被定义——这类问题的修复动作不是改 prompt,而是开一次业务评审会。
把反哺机制汇总成一张"资产转换表"——人工评估的每一类产出都应对应一个可复用的资产:
| 人工产出 | 转换成的资产 | 消费方 | 杠杆效果 |
|---|---|---|---|
| 冲突样本的终判 + 依据 | 新规则 / 新 rubric 检查项 | 规则层与 Judge 层 | 同类样本下次不再耗人工 |
| 分歧样本集 | 金标校准集增量 | judge 校准流程 | judge 一致率向 85% 线逼近 |
| 根因判定结论 | 根因标签库(指向 owner) | RCA 与修复闭环(E11) | 失败聚类产出可执行行动项 |
| 业务口径裁决 | 评测集的期望行为定义 | golden set(E03) | 新用例获得明确的验收标准 |
| Trace 采样发现的隐藏失败模式 | 新用例 / 新检查项 | 回归集(只增不减) | 线上失败转化为离线防线 |
反哺的规模效应,用两个工业数字收尾:
| 公司/项目 | 人工投入方式 | 杠杆产出 |
|---|---|---|
| DoorDash(Ask DoorDash) | 人工定 rubric + 标注校准集 + 审计 judge,打分交给 judge | 全国上线前 agent 质量分 +8 分、错误率近乎减半;全量回归 6+ 小时 → 约 20 分钟;日均 2,000 个自动评分会话 |
| Discord AITL(EMNLP 2025 工业赛道) | 四类人工客服在线标注持续回流,驱动检索/生成再训练 | 再训练周期从月级压缩到周级;美国试点 recall@75 +11.7%、precision@8 +14.8%、有用性 +8.4%、采用率 +4.5% |
Discord AITL 是人工评估反哺闭环的教科书样本:人工标注 → 评测集 → 再训练 → 上线 → 新标注,且专门量化了 offline 与 online 评测设置的一致性。它说明人工评估的产出不仅校准评分器,还能直接驱动模型迭代——人工不是成本中心,是评分系统的校准源、口径工厂与数据飞轮的进料口。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | 人工的定位:校准源而非打分主力 | ⭐⭐⭐ | 是否理解三层分工本质;能否说出"专家时间 60%+ 花在校准与诊断" |
| 2 | 人工评估的六个高杠杆场景 | ⭐⭐⭐ | 能否列出门槛之外的场景清单(校准/主观/异常诊断/GT/Trace 采样/高风险兜底) |
| 3 | Judge 校准五步法与 85% 校准线 | ⭐⭐⭐ | 是否真做过校准;gold set 含坏样本、分歧分析改 rubric 是得分点 |
| 4 | 人工评分路由的触发条件 | ⭐⭐⭐ | 系统设计深度题眼:必须答出"不是只看分数阈值",六类信号能列四类即合格 |
| 5 | 人机分工边界:永远留给人的维度 | ⭐⭐⭐ | 自动化边界意识:政策口径、价值判断、高风险三类不可让渡 |
| 6 | 专家分歧处理纪律 | ⭐⭐ | 是否知道"先停下解决分歧再自动化";分歧是口径缺口不是噪声 |
| 7 | IAA 度量:Cohen's κ / Krippendorff's α | ⭐⭐ | 标注工程基本功;能说出 IAA 低首先怪 rubric 是加分项 |
| 8 | 0%/100% 通过率异常诊断 | ⭐⭐ | 第一反应是否"先怀疑任务定义与评分器"而不是怀疑模型 |
| 9 | gold set 设计:含坏样本、20–100 起步 | ⭐⭐ | 是否理解"无坏样本的校准集测不出误罚";规模化路径是否先专家后队伍 |
| 10 | Judge 升级后的三项统计 | ⭐⭐ | 是否把 judge 当需持续运营的资产:一致性/高风险漏判率/边界稳定性 |
| 11 | 人工结论反哺闭环 | ⭐⭐ | 人工判定是否被杠杆化:回收口径 → 规则/judge prompt/根因标签 |
| 12 | 隐私合规:去标识化后再人工评审 | ⭐ | 生产环境工程常识;Airbnb"用途限定于安全与质量" |
四、经典面试题与参考答案
题 1(基础):三层评分体系里,为什么人工不做日常全量打分?专家时间应该怎么分配?
参考答案: 三层评分的分工是"规则主判、Judge 辅助、人工兜底"(阿里),选择优先级为确定性 > Rubric > 人工(腾讯)。人工不做全量打分有三笔账:成本上人工是分钟-小时级/人力,规则毫秒级免费、judge 秒级;规模上生产流量是千会话/天量级(DoorDash 日均 2,000 个自动评分会话,人工全量回归要 6+ 小时、自动化后约 20 分钟);杠杆上专家最稀缺的能力是"定义什么是好",不是重复判断。因此腾讯给出经验法则:能自动化的坚决不找专家,专家时间 60%+ 花在"校准 LLM 评委"与"诊断异常";DoorDash 同构:人工用在杠杆最大处——定 rubric、标注校准集、审计 judge 行为;Airbnb 则要求指定一个最终人类决策者裁决争议。人工的正确定位是评分系统的校准源与仲裁庭,不是流水线工人。
题 2(基础):Agent 评测中哪些工作必须留给人工?请给出尽量完整的清单。
参考答案: 按腾讯六场景为主干:① 校准 LLM 评委(最核心,抽样 100–200 条对齐,一致率 ≥85% 才可用);② 主观任务打分(语气、清晰度等 rubric 维度的人工抽样);③ 诊断通过率异常(0%/100% 通常是任务或评分器坏了);④ 建 Ground Truth(新套件前 20–50 个参考解,配合基线快照机制);⑤ Trace 采样审查(每周固定抽样读轨迹找隐藏失败模式);⑥ 高风险兜底(医疗/金融/安全 100% 人工复核)。再补两家:Airbnb 强调人工负责细微差别与创意、安全高风险决策、解决自动评估器间冲突;阿里强调新建评测集时"定口径"(如已发货+拒收+运费险场景走哪条流程需业务先定)与处理争议样本。归纳成三类不可让渡的维度:政策口径、价值判断、高风险——它们的答案依赖内部政策与业务取舍,不在任何模型的训练分布里。
题 3(进阶):请完整描述校准一个 LLM Judge 的流程,给出量化标准,以及不达标时怎么办。
参考答案: 按 Airbnb 校准五步法:① 建 50–100 条 gold set,必须含坏样本——流畅的错误、正确的改述、边界样本三类陷阱样本要刻意覆盖;② 用 judge 跑该集合;③ 看一致率,目标 high 80s ~ 90s(腾讯口径 ≥85%、阿里 ~85% 后进日常自动化),分歧用 Cohen's κ / Krippendorff's α 度量;④ 逐条分析分歧 → 修 rubric 与 few-shot 示例 → 重跑;⑤ 失败模式变化、rubric 演进、judge prompt/模型升级时重新校准。不达标时的动作不是换 judge 模型,而是回到分歧样本:Airbnb 客服案例中初始一致率 78%,分歧分析定位到 judge 误罚正确的改述,修 rubric 与示例后达 88%。校准还应自动化提效:DoorDash 用 GEPA(arXiv 2507.19457)迭代生成 judge prompt 修订、只保留在留出集上提升人工一致率的版本。校准后进入持续运营:每次升级产出三项统计——与人工一致性、高风险样本漏判率、边界样本稳定性。
题 4(进阶):两位专家标注同一校准集出现约 20% 的分歧。有人建议"取多数/平均,先往前推进",你怎么看?
参考答案: 不能取平均往前推进,这是标注工程里最危险的捷径。Airbnb 的纪律是:专家有分歧就先停下解决分歧再自动化。理由是:专家分歧通常不是随机噪声,而是口径未定义的信号——两位专家各自在应用指南没覆盖的隐含标准;此时取多数或平均,等于把一份未定义的口径固化成训练/校准数据,judge 学到的将是系统性偏差,而且后续很难追溯。正确流程:① 把分歧样本摆上桌逐条辩论;② 裁决出唯一答案;③ 把裁决写回 rubric/标注指南——分歧处理过程就是口径固化过程;④ 用更新后的指南重新标注分歧样本验证一致性;⑤ 再进入后续批次。同时要区分:若分歧集中在某类场景,说明 rubric 对该场景欠定义,补指南;若分散且两位专家 IAA 持续偏低,才考虑标注员培训或换人——但第一步永远是先怀疑 rubric,因为"如果人都无法一致地应用 rubric,模型也不可能"(Airbnb)。
题 5(进阶):你的评分流水线如何决定哪些样本最终送人工?为什么不能只看分数阈值?
参考答案: 用阿里的六类路由触发条件:① 边界分(得分落在门禁阈值灰区);② 低置信(评分器输出的置信度低于阈值);③ reason 含糊(judge 判定依据不可复核);④ 多 judge 分歧;⑤ 新模型/新 Prompt/新工具 Schema/新活动上线的抽样观察;⑥ 规则与 judge 结论冲突 → 人工终判并回收口径。这些条件依托分层筛查架构:粗筛层(规则+轻量 judge 快速分流)→ 精判层(完整规则+judge,输出问题分类/现象/置信度/判定依据)→ 人工复核层。只看分数阈值会漏掉三类信号:其一,低分 ≠ 不确定——高置信的明确失败(JSON 损坏、禁用工具)需要的是修复不是复核,边界分反而更值得看;其二,置信度、reason 质量、judge 间分歧度量的是"尺子可不可靠",是分数之外的元信号;其三,分数捕捉不到分布漂移——新版本上线时旧评分器可能整体失准而分数照常,必须按抽样率主动送人工,这也是主动学习"优先抽低置信/新意图/新工具样本"的落点。另外要监控路由率本身:飙升通常意味着评分器坏了或漂移了。
题 6(进阶):某个评测套件的通过率从 70% 突然变成 0%(或 100%),你的第一反应和排查路径是什么?
参考答案: 第一反应不是"模型突然变弱/变强",而是怀疑任务定义或评分器坏了——腾讯明确:0% 或 100% 通常是任务/评分器问题,不是模型能力问题;其稳定性调试经验也给出同构信号:0% pass^N 通常说明任务定义有问题。排查路径:① 查评测基础设施——用例输入是否被改坏、fixture/环境状态是否漂移、被测系统是否根本没跑通(超时、schema 变更导致全量解析失败);② 查评分器——规则断言是否过严(如基线更新后旧快照失配)、judge 是否升级或 prompt 变动导致尺度漂移;③ 人工抽样:按"诊断 0%/100% 异常"场景,专家抽 10–20 条逐条读输入、输出与 trace,判断到底是系统性失败还是系统性误判;④ 用旧版本被评系统重跑同一套件做对照——若旧版本也变 0%/100%,锁定评分器或环境;若旧版本分数正常,才回到新版本变更本身。这正是人工六场景中"诊断异常"的价值:自动评分器无法给自己做体检,体检必须靠人。
题 7(进阶):Judge 模型要升级到"更强"的新版本,能直接换吗?需要走什么验证流程?
参考答案: 不能直接换——"更强"是通用能力判断,不是"在你的 rubric 上判得更准"的证明;未经验证替换 judge 等于悄悄换了一把尺子,历史分数全部失去可比性。验证流程按阿里的 judge 持续运营口径:维护一份 judge 金标校准集(含坏样本与边界样本),对新版 judge 固定产出三项统计——① 与人工标注一致性(一致率或多模型对抗 Kappa),对照 ≥85% 的经验线;② 高风险样本漏判率(合规/资损/隐私),这是新版本最容易悄悄恶化的地方,平均分涨而高风险漏判升是典型的"尺子变松";③ 边界样本稳定性(同一批边界样本重复评测的波动)。同时做新旧桥接:同一批历史样本用新旧 judge 各跑一遍,量化分数漂移幅度,趋势图标注版本断点(主手册第 8 章 · Agent 评估与可观测性 对"judge 版本化与历史数据桥接"有展开)。若新 judge 在分歧样本上的判定理由与旧版系统性不同,还要回到 rubric 层确认是 judge 变了还是口径该变。DoorDash 的实践可作补充:judge prompt 的打磨本身可用 GEPA 类优化器在留出集上自动迭代,但"是否采纳修订"的验收标准始终是与人工标注的一致率。
题 8(系统设计):你们要为一个客服 Agent 搭建评分体系,团队只有一位领域专家(SME)和一位标注员。请设计人机分工方案:如何起步、如何校准、如何路由、如何反哺。
参考答案: 总体原则:把 SME 的时间当最稀缺资源预算——60%+ 花在校准 judge 与诊断异常,坚决不做日常全量打分(腾讯经验法则)。分四阶段: ① 起步(定口径 + 建锚):SME 牵头写 rubric,要求"每条标准从会话本身可验证"(DoorDash),业务口径类问题(退款政策组合、补偿规则)由 SME 直接定标准;标注员配合产出 20–50 个参考解(腾讯)与 50–100 条 gold set,刻意包含坏样本:流畅的错误、正确的改述、边界样本(Airbnb)。 ② 校准:judge 跑 gold set,目标一致率 ≥85%(腾讯/阿里口径);分歧样本由 SME 逐条裁决并写回 rubric——"专家有分歧先停下解决再自动化"(Airbnb);标注员负责按更新后的指南重标分歧批,报 Cohen's κ 监控一致性;预算允许时可用 GEPA 类方法自动搜索 judge prompt 修订。 ③ 路由:分层筛查——粗筛规则分流 → 精判层输出问题分类/现象/置信度/判定依据 → 六类条件路由人工(边界分/低置信/reason 含糊/多 judge 分歧/新版本抽样/规则-judge 冲突);线上每日抽 5% 去标识化流量跑 judge、标记样本进人工队列(Airbnb);医疗/资金/合规类场景 100% 人工复核(腾讯)。 ④ 反哺:人工终判的口径固化为新规则;分歧样本回流校准集;根因标签按"运营可配置/算法需优化/工程需修复/业务需定口径"归类(阿里);每周 SME 评审会看失败主题与路由率趋势(Airbnb 每周 PM 评审)。隐私红线贯穿全程:人工评审前去标识化、用途限定于安全与质量。
题 9(进阶):给定人工与 judge 的混淆矩阵,你如何量化人机一致性?为什么只看一致率会误事?
参考答案: 先算观察一致率 P_o(混淆矩阵对角线占比),再算 Cohen's κ = (P_o − P_e)/(1 − P_e),其中 P_e 是按双方各自的边际分布算出的"机遇一致率"——κ 扣除了"瞎猜也能对上"的部分,度量的是真实判别力。举例:100 条样本,对角线为 72/14,P_o = 86%,P_e = 0.80×0.78 + 0.20×0.22 ≈ 0.67,κ ≈ 0.58——一致率看似达到 85% 线,κ 却揭示一致多半来自"大多数样本本来就 pass"的基础率。pass/fail 判定的分布天然偏斜,一致率会系统性高估 judge 质量:上例中人工判 fail 的 22 条里 judge 只抓到 14 条,漏判率约 36%。这就是阿里把高风险样本漏判率单列为 judge 升级统计项的原因——合规/资损/隐私类样本漏一个的代价远超平均分波动。工程结论:一致率、κ、坏样本/高风险召回要并排报告;多标注员或非二值任务用 Krippendorff's α。
题 10(系统设计):为一个涉及资金操作的高风险 Agent(退款/赔付)设计人工评估的运营方案。
参考答案: 按四条线设计:① 进料线:赔付/资损/隐私/合规/投诉升级类样本无条件进人工队列,与自动评分结果无关——阿里的口径是"自动通过的也要定期人工复核";路由六条件中此类样本叠加"高风险"权重优先处理。② 裁决线:双人复核制(初审 + 复审),结论带依据、rubric 版本与会话 ID 留痕进审计日志;分歧按"标注员 → SME → 指定终判者"升级(Airbnb EDD 原则 4 要求明确唯一终判人);裁决结论写回业务口径与 rubric。③ 校准线:高风险场景全部作为对抗样本纳入 judge 金标校准集;judge 每次升级单独报告"高风险样本漏判率",该指标一票否决——平均一致率达标但高风险漏判恶化即阻断放量。④ 闭环线:确认的高风险 badcase 只增不减进回归集;根因标签绑定 owner(运营可配置/算法需优化/工程需修复/业务需定口径);稳定性按关键决策类口径——腾讯对关键决策类容忍阈值为 0%(N 次全过,一次失败都可能误判),发布门禁用连续成功率(pass^k)而非至少一次成功率。贯穿四线的原则:高风险场景自动化只做筛查、人做终判,且每次终判都要可审计、可复用。
五、易错点 · 反直觉点
- 误区:专家越多,评测越可靠。 真相:人力堆在日常打分上是负杠杆——成本分钟-小时级、扩展性差,而且专家被消耗在重复劳动上就没空做校准与诊断;腾讯的口径是专家时间 60%+ 必须花在"校准 LLM 评委"与"诊断异常"。记忆锚点:专家是校准砝码,不是流水线。
- 误区:分数低于阈值的样本送人工复核就够了。 真相:低分 ≠ 不确定——高置信的明确失败不需要人工;路由要看的是不确定性信号(边界分/低置信/reason 含糊/多 judge 分歧)、漂移信号(新版本抽样)与冲突信号(规则 vs judge),阿里明确"不由分数阈值单独决定"。记忆锚点:路由看的是"尺子可疑",不是"分数难看"。
- 误区:专家意见不一致就投票取多数,先推进进度。 真相:分歧通常是口径未定义的信号,取多数会把未定义的口径固化成系统性偏差;Airbnb 的纪律是先停下解决分歧再自动化,裁决结果要写回 rubric。记忆锚点:分歧不是噪声,是口径缺口。
- 误区:校准集里放满"标准好答案"就够了。 真相:gold set 必须含坏样本(Airbnb 十条要点之一)——没有"流畅的错误"测不出 judge 被流畅性迷惑,没有"正确的改述"测不出 judge 误罚同义改写(78%→88% 案例的病灶正在于此)。记忆锚点:没有坏样本的 gold set,校不出尺子的偏差。
- 误区:通过率 0% 说明模型太弱,100% 说明评测太简单。 真相:0% 或 100% 通常是任务定义或评分器坏了(腾讯六场景之三);0% pass^N 的调试技巧是先查任务定义,不是先怀疑能力。记忆锚点:全军覆没先查尺子,再查选手。
- 误区:judge 是强模型就能直接上岗,校准是走形式。 真相:未校准的 judge 制造误导性信心(Airbnb),"LLM Judge only useful if it agrees with human reviewers"(DoorDash);一致率不达 85% 上下就放量,等于拿一把没校准的尺子做发布决策。记忆锚点:先校尺,再量货。
- 误区:人工判定完、分数入库,这条样本就关闭了。 真相:人工结论必须反哺三处——口径固化为规则(下次同类不再耗人工)、分歧样本回流校准集修 judge prompt、结论反校准根因标签体系(阿里);判完不反哺,人力成本永远线性增长。记忆锚点:一次人工判定,要产出三份资产。
- 误区:把生产会话直接导给标注团队评审,效率高。 真相:生产流量送人工前必须去标识化,且用途限定于安全与质量(Airbnb 隐私注记)——未脱敏的人工评审流程在合规审查处直接出局。记忆锚点:不脱敏,不评审。
- 误区:judge/rubric 升级后,旧校准结论继续有效。 真相:rubric 演进、judge prompt/模型升级、失败模式变化,任一发生都要重新校准(DoorDash/Airbnb),且升级要固定产出三项统计:与人工一致性、高风险漏判率、边界稳定性(阿里)。记忆锚点:尺子一换,先重新校尺。
- 误区:一致率要追求 100%,85% 是妥协。 真相:人与人之间也做不到 100% 一致——校准目标的实质是"judge 与专家的分歧 ≤ 专家之间的分歧";盲目追 100% 会过拟合到个别专家的口味,或把 rubric 改成无法泛化的特例清单。记忆锚点:校准的天花板是 IAA,不是完美。
六、推荐资源
论文
- GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning(arXiv 2507.19457,2025-07)——DoorDash 用于 judge 校准的反射式 prompt 优化器:采样运行 → 自然语言反思 → 变异 prompt → Pareto 前沿按切片保留候选;本章 2.3 的"自动化校准"即此工程化应用。
- Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena(arXiv 2306.05685,2023-06)——judge 与人类一致率(80%+)及 judge 偏差清单的奠基文献;理解"为什么 judge 需要人工校准"的历史起点。
- Agent-in-the-Loop: A Data Flywheel for Continuous Improvement in LLM-based Customer Support(Discord,EMNLP 2025 工业赛道,ACL Anthology 2025.emnlp-industry.135)——四类人工在线标注持续回流、再训练周期月级→周级的完整数据飞轮样本;人工评估反哺闭环(2.7)的学术侧对照。
工程博客
- Airbnb《Eval-driven development: Lessons from evaluating GenAI at scale》——人工评估四用途、20–100 样本起步、专家分歧纪律、校准五步法与 78%→88% 实战案例的原始出处。
- DoorDash《Building Ask DoorDash (Part 3): Evaluation》(2026-06-30)——"人工用在杠杆最大处"、GEPA 校准、"同一 rubric 既供人工校准又供 judge 规模化"的出处;配合同系列《A Simulation and Evaluation Flywheel to Develop LLM Chatbots at Scale》(2026-01)读:judge 用人工标注样本校准到与专家一致后才放量。
- 阿里技术《Agent 评测:方法论与体系设计》——人工评分路由(六类触发条件)、分层筛查三层架构、评分输出规范、judge 升级三项统计、根因标签四 owner 的出处,本章 2.5–2.7 的主力素材。
- 腾讯技术工程《AI Agent & Skill 测评方案及落地实践》——三类评分器对照表、人工六个必要场景、"专家时间 60%+"经验法则、0%/100% 异常诊断的出处。
- Anthropic《Demystifying evals for AI agents》(2026-01)——"起步只需 20–50 个真实用例"、打分三层(确定性代码检查 > 模型 rubric > 人工校准)的官方表述。
本特辑交叉引用
- 第 E04 章 · 评分三层之一:程序化评分——规则层的检查清单与评分输出规范(本章路由信号的来源)。
- 第 E05 章 · 评分三层之二:LLM-as-Judge 深入——rubric 工程与 judge 偏差全景(本章校准对象的构造细节)。
- 第 E10 章 · 评测驱动开发(EDD)——"100 样本人工精读法"与 Airbnb 完整案例演练。
- 第 E11 章 · Badcase 根因分析与优化闭环——人工结论反哺的根因标签体系("人审兜底"的下游)。
- 第 E12 章 · 在线评估与数据飞轮——线上抽样送人工、离线-线上同一 judge 口径、反馈生产线。
- 主手册第 8 章 · Agent 评估与可观测性——人机协同(HITL/HOTL)与 judge 校准的概览版。
动手 labs
| Lab | 本章对应内容 | 运行命令 |
|---|---|---|
labs/eval_lab05_judge_calibration.py |
校准五步法:一致率/κ/分歧分析/复现 Airbnb 78%→88% | cd evals-special/labs && python3 eval_lab05_judge_calibration.py |
labs/eval_lab03_programmatic_scorers.py |
分层筛查与路由:粗筛→精判的成本节省量化 | cd evals-special/labs && python3 eval_lab03_programmatic_scorers.py |
labs/eval_lab02_golden_dataset.py |
gold set 构造、入库标准与治理(含坏样本设计) | cd evals-special/labs && python3 eval_lab02_golden_dataset.py |
labs/eval_lab09_rca_pipeline.py |
人工结论反哺的根因标签与"人审兜底"环节 | cd evals-special/labs && python3 eval_lab09_rca_pipeline.py |
轨迹与 Agent 级评估
一句话导读:只看"最终答案对不对"的评估,会系统性放过 Agent 最危险的失败——结果碰巧对、路径已经错。本章讲透过程级评估的完整工程:为什么 outcome-only 有四个盲区、Airbnb 三层模型(step/trajectory/session)与阿里四层评判(Turn/Session/Trace/Outcome)如何分工、结构化 Trace 为什么是被测 Agent 的标准能力而非事后补救、DoorDash 的 Transcript Builder 如何把原始 trace 塑形为 judge 能用的证据切片、腾讯 LCS 序列比对怎么做归一化与扣分、评测如何镜像多智能体运行时架构,以及 2024–2026 前沿(PRM、progress rate、Agent-as-a-Judge、元评估)如何落到工程。学完本章,你能设计一套"结果 + 过程"双门槛的 Agent 级评估体系,并回答面试中最常被追问的那句:"你怎么知道 Agent 不是碰巧答对的?"
一、知识图谱
轨迹与 Agent 级评估(评什么形态:过程 > 单一结果)
│
├── 为什么只看最终答案不够
│ ├── 假阳性:结果对但路径错 / 带风险 ——「生产迟早暴露」(阿里)
│ ├── 一次请求 = 搜索 × 推理 × 外部动作 × 文本生成,每环节可独立失败(Airbnb)
│ ├── 三个致命缺陷:诊断盲区(20 步轨迹错在第 3 步无法定位)
│ │ 奖励稀疏(终局标量无法归因)/ 捷径与欺骗(reward hacking)
│ └── 双向背离:过程对但结果败(环境抖动)⇄ 结果对但过程违规(跳过校验)
│
├── 分层评估模型
│ ├── Airbnb 三层:step(单工具调用/推理步)→ trajectory(路径合理高效)
│ │ → session(整体达成用户目标)
│ ├── 阿里四层:Turn(单轮)/ Session(整段会话)/ Trace(执行轨迹)/ Outcome(最终结果)
│ │ └── 「每轮都答得还行,但最终没解决问题,仍是失败」——不要只平均每轮分数
│ └── 每层失败 → 指向不同根因:单工具实现 / 规划编排 / 目标理解
│
├── Trace 基础设施(前提)
│ ├── 立场:Trace 是被测 Agent 的标准能力,不是事后补救(阿里/腾讯)
│ ├── 打点:OpenTelemetry;span 记录用户输入/模型输出/工具调用与返回/widgets(DoorDash)
│ ├── 存储:ClickHouse(DoorDash);span 层级 session→agent/task→llm_call→tool_call
│ ├── 结构化三要求:可解析 / 内容完整 / 跨版本格式稳定(腾讯)
│ └── 标准演进:OTel GenAI semconv 仍 Development;2025-08 agentic 提案;2025-12 Datadog 支持
│
├── 把 trace 变成可判证据(DoorDash Transcript Builder)
│ ├── 原始 trace 三大难判:工具返回巨大 / schema 脚手架噪声 / 证据散落多 span
│ ├── 三动作:重组分散 span · 删无信号 token · 裁超大载荷
│ └── 每条标准声明依赖证据,judge 只拿那一片(grounding=论断+工具输出;
│ 多样性=推荐+原始请求;叙述=流式文本)→ 聚焦让判断更一致
│
├── 轨迹比对技术(腾讯 LCS 实现)
│ ├── 禁 exact match:路径多样,合法替代路径不该被判错
│ ├── 归一化五规则:时间戳占位 / 搜索忽略查询参数 / 写入只留路径
│ │ / 终端命令提取脚本名 / 连续读文件组内不校验顺序
│ ├── LCS 对齐 → 四类偏差:缺少 / 多余 / 不一致 / 顺序错,各扣 2 分上限 -10
│ └── 效率对比:耗时/token 以基线为基准每超 10% 扣 1;基线=人工确认过的执行快照
│
├── 评测镜像运行时架构(DoorDash 多智能体)
│ └── Orchestrator 评路由 / 护栏贯穿全流程评 / 领域 Agent 评任务能力
│
├── 前沿:过程奖励与信用分配(2023–2026)
│ ├── PRM800K → Math-Shepherd(MC rollout)→ OmegaPRM(二分 O(log n))
│ ├── GenRM(生成式批注验证)/ VinePPO(重采样无偏归因)/ PRIME(隐式奖励)
│ ├── Qwen Lessons:PRM 可被 hack、难度外推差 → 红队 + OOD 分层校准
│ └── Agent 侧:AgentBoard progress rate / τ-bench 终态 diff + pass^k
│ / Agent-as-a-Judge(带工具核验,时间 -97.72%/成本 -97.64%)/ AgentRewardBench(元评估,FPR>50%)
│
└── 落地原则:执行式验证为主、judge 为辅、人工抽检校准;
评估器上线前先测 FPR/FNR;「结果正确 + 规则合规」双门槛
本章在特辑中的位置:评分三层(E04 程序化 / E05 Judge / E06 人工)回答"拿什么评",本章回答"评什么形态"——当被测对象从"一次输出"变成"一条轨迹"时,评估的输入(trace)、判据(三层 + 双门槛)、工具(对齐算法、Transcript Builder、PRM)全部要升级。与第 E08 章(对话与仿真评测)的分工:本章讲轨迹本身怎么评,E08 讲"轨迹从哪来"(模拟器 + fixtures);与第 E11 章的分工:本章的三层分数是 RCA 范围收敛的输入。
二、核心概念精讲
2.1 为什么只看最终答案不够:四个盲区与"假阳性"
阿里对这件事的表述最直接:"有些样本最终答案看似对,但执行路径已偏离或带风险——这类假阳性在生产迟早暴露。" 腾讯痛点表里也有同款一条:"过程易忽略——答案碰巧对但推理路径错,分不清'正确调用工具后回答'与'训练数据碰巧答对'"。Airbnb 则从请求结构给出根因:一次 Agent 请求可能同时包含搜索、推理、外部动作、文本生成,每个环节都可能独立失败,而最终文本把所有中间失败都"抹平"了。
先看一次请求的内部结构——Airbnb 所说"每个环节可独立失败"的解剖图:
一次客服 Agent 请求(五个环节,任何一个可独立失败)
用户:"帮我退掉昨天买的订单"
│
├─ ① 意图识别 ── 可能把「退货」识别成「物流查询」
├─ ② 检索 ── 可能召回错误的退款政策文档
├─ ③ 推理与规划 ── 可能漏掉「先查订单状态」这一步
├─ ④ 工具调用 ── 可能把 order_id 参数传错、或压根没调用
└─ ⑤ 回复生成 ── 可能编造「一定退款成功」的过度承诺
│
▼
最终回复:"好的,已为您提交退款,请留意到账。"
└── 只读这一句话,①~⑤ 的失败全部不可见
只看最终答案(outcome-only)的评估有四个盲区:
| # | 盲区 | 具体表现 | 后果 |
|---|---|---|---|
| 1 | 假阳性(结果对、路径错) | 退款 Agent 跳过"查询订单状态"工具,凭上下文直接答"已为您退款",恰好这次订单确实可退 | 风险敞口持续存在;下一次遇到不可退订单就是资损事故 |
| 2 | 诊断盲区 | 一条 20 步的失败轨迹,错误可能发生在第 3 步,但终局只有一个 0/1 标量 | 失败无法归因,只能靠人肉读日志;迭代没有方向 |
| 3 | 捷径与欺骗 | Agent 绕过规则、伪造输出、reward hacking——最终状态"看起来对"不代表过程正确 | 评测分被刷高,线上行为不可控 |
| 4 | 碰运气不可复现 | "训练数据碰巧答对"与"正确调用工具后回答"在最终文本上无法区分 | 通过率虚高,换一批用例立刻打回原形 |
把阿里那个退款案例展开成 trace 视角,假阳性的结构一目了然:
期望轨迹:verify_identity → get_order_status → (可退?) → apply_refund → notify_user
实际轨迹:verify_identity → [get_order_status 缺失] → 直接生成「已退款」回复
outcome 评分:回复礼貌、格式正确、包含订单号 → 满分 ✗
trajectory 评分:关键校验工具未调用 → 硬门禁拦截 ✓
一个贯穿全章的真实案例(阿里 badcase 库):用户咨询"已发货的订单怎么退款",Agent 没有调用订单状态查询工具,直接按"未发货退款"流程回复并承诺退款成功——最终回复看起来礼貌、完整、格式正确,outcome 评分拿满分;但路径上关键校验工具未调用,且承诺了政策不允许的"一定退款成功"。这类样本在离线评测集里以"通过"存在,直到线上产生投诉才被回流(详见第 E11 章 · Badcase 根因分析与优化闭环)。阿里的结论:对这类 case 必须加过程型与风险型检查。
还要注意双向背离:过程全对但终局失败(环境抖动、最后一步失误)与终局成功但过程违规,是两个方向的反例。工业界(如客服 Agent)因此普遍采用"终态正确 + 规则合规双门槛",而不是二选一。学界的过程奖励模型(PRM)研究更关注前一个方向,这也是学术指标直接搬进生产会水土不服的原因之一。
动手验证:
cd evals-special/labs && python3 eval_lab06_trajectory_eval.py。lab 构造了四类运行(完全正确 / 结果对但路径错 / 路径对但结果错 / 全错),断言 outcome-only 评分必然放过"结果对但路径错"的假阳性样本,而三层评估 + 硬门禁能把它拦下来。
2.2 三层评估模型:step / trajectory / session(Airbnb)与四层评判(阿里)
Airbnb 的 Agentic 评估框架把评估对象切成三层:
| 层 | 评估对象 | 回答的问题 | 典型判定手段 | 失败时指向的根因 |
|---|---|---|---|---|
| Step-level | 单次工具调用 / 单个推理步 | 这一步合法吗?参数对吗?是不是禁用动作? | 参数 JSON Schema 校验、must-call / must-not-call 断言、禁用动作检查(程序化,见第 E04 章) | 单工具实现问题、参数生成缺陷 |
| Trajectory-level | 整条路径 | 路径合理吗?高效吗?有没有绕路、重复、跳步、顺序颠倒? | 与基线序列 LCS 对齐、无序关键调用集合比对、步骤数/token 预算检查 | 规划与编排问题、SOP 未被遵循 |
| Session-level | 整个交互 | 用户目标达成了吗?关键信息都覆盖了吗? | 终态比对(数据库 diff)、目标 checklist、judge 对最终回复评分 | 目标理解问题、需求遗漏 |
三层各自独立失败,任何一层都不能代替另外两层:session 分高掩盖不了 trajectory 违规(假阳性),trajectory 完美也救不了 session 失败(白跑一趟)。这与 2.1 的双向背离一一对应。
阿里面向对话 Agent 给出同构但更细的四层:Turn(单轮)/ Session(整段会话)/ Trace(执行轨迹)/ Outcome(最终结果),并特别警告一个对话场景特有的陷阱:不要只平均每轮分数——"每轮都答得还行,但最终没解决问题,仍是失败"。举个例子:一段 8 轮的退款客服会话,每轮都礼貌响应、有问必答(turn 平均分 4+/5),但全程没有调用过一次退款工具,用户最后一句还是"钱还没到"——turn 均值很漂亮,outcome 层却是彻底失败。四层必须同时看,而不是取平均。四层与 Airbnb 三层的对应关系:
| 阿里四层 | Airbnb 三层 | 特殊说明 |
|---|---|---|
| Turn | (step 的对话侧投影) | 单轮回复的语气、澄清质量;平均分陷阱的源头 |
| Trace | step + trajectory | 执行轨迹层:工具调用序列、计划、检索记录 |
| Session | session | 整段会话是否推进了用户目标 |
| Outcome | session 的结果面 | 最终结果是否真正解决问题(工单闭环、退款成功) |
多智能体系统下还有一个工程要点(Airbnb):Agent 通常在 root 下发 trace 和 span,评估侧可以通过树遍历重建 trace,校验 subagent 调用与工具使用——即轨迹结构本身(谁调用了谁、嵌套是否正确)也是评估对象。第 E08 章会展开多 Agent 场景的模拟器设计,主手册第 8 章则从 DAG 视角讨论了 handoff 评估,本章聚焦"轨迹怎么判分"。
2.3 Trace 先行:结构化 Trace 是被测 Agent 的标准能力
轨迹评估的输入是 trace。阿里与腾讯不约而同把这件事提到原则高度:"Trace 输出是被测 Agent 的标准能力,而非事后补救"(阿里);"设计阶段就把结构化 Trace 作为标准能力,而非事后补救"(腾讯)。理由很朴素:三层评估器全部消费 trace——step 层逐个 span 校验、trajectory 层抽取调用序列、session 层读取最终回复与终态;没有结构化 trace,过程评估整体不存在。
(1)span 里记什么。 DoorDash 的 Ask DoorDash 用 OpenTelemetry 打点,trace 存进内部 ClickHouse;span 记录四类内容:用户输入、模型输出、工具调用与返回、展示给用户的 widgets。阿里的要求更细:稳定记录工具名、入参、返回值、时间戳、耗时、错误;复杂 Agent 还要记录计划、检索、Guardrail 判定。腾讯把"内容完整"具体到"每步工具名/入参/返回/时间戳,理想含思维链与决策依据"。
(2)结构化三要求(腾讯):
| 要求 | 含义 | 违反时的代价 |
|---|---|---|
| 可解析 | 结构化格式(JSONL/JSON),而非自由文本日志 | "有日志无结构"只能写解析器——成本高、易碎,格式一变全线崩 |
| 内容完整 | 每步工具名/入参/返回/时间戳,理想含思维链与决策依据 | 缺入参无法判参数正确性,缺返回无法判 groundedness |
| 跨版本格式稳定 | schema 不因 Agent 升级而漂移 | 历史 trace 与历史分数全部不可比,趋势图断档 |
被测系统不满足时的三档对策(腾讯):有日志无结构 → 写解析器(下策);仅最终输出 → 只能做结果评测(中策);可改造 → 推动被测系统增加 Trace 输出(推荐)。
满足三要求的最小 trace 长这样(字段对应:腾讯"每步工具名/入参/返回/时间戳" + DoorDash 四类 span 内容):
{
"session_id": "sess_20260805_0001",
"agent_version": "refund-agent-v1.8",
"spans": [
{"span_id": "s1", "type": "user_message",
"content": "帮我退掉订单 #1234", "ts": "10:00:00.000"},
{"span_id": "s2", "parent": "s1", "type": "tool_call",
"name": "get_order_status", "params": {"order_id": "1234"},
"ts": "10:00:01.210", "duration_ms": 180},
{"span_id": "s3", "parent": "s2", "type": "tool_result",
"result": {"status": "shipped", "refundable": false}, "ts": "10:00:01.390"},
{"span_id": "s4", "parent": "s1", "type": "llm_call", "model": "model-x-v2",
"input_tokens": 1840, "output_tokens": 96, "duration_ms": 920},
{"span_id": "s5", "parent": "s1", "type": "assistant_message",
"content": "该订单已发货,暂不支持直接退款……", "ts": "10:00:02.400"}
]
}
注意两点:agent_version 这类元数据是跨版本可比性的前提(分数差异归因);多智能体场景再加 parent_agent/subagent 调用边,Airbnb 正是靠树遍历重建 trace 并校验 subagent 调用。span 层级的推荐设计是 session → agent/task → llm_call → tool_call,为 OTel agentic conventions 留位置。
(3)标准化进展。 行业侧的收敛方向是 OpenTelemetry GenAI semantic conventions(gen_ai.* 属性命名空间)。按时间线(据调研整理):2024 年各家私有 schema 混战(Traceloop OpenLLMetry、Arize OpenInference 等)→ 2025-01 OpenLLMetry 语义约定并入 OTel → 2025-03 OTel 官方博客发布 AI agent 可观测性标准路线图 → 2025-08 提出 agentic systems 语义约定提案(agent/task/chain/tool 层级 span 属性) → 2025-12 Datadog 等厂商宣布原生支持 OTel GenAI semconv(v1.37+)。注意:截至 2026 年中,GenAI 语义约定仍处于 Development(开发中) 稳定性;部分 agent/tool 属性(如 gen_ai.agent.id)已进入属性 registry,但完整的 agentic span 约定仍在提案推进中、命名可能变(与主手册第 8 章口径一致)——工程上的务实做法是第一天就按 gen_ai.* 属性打点、同时保留私有字段兼容层,span 层级按 session → agent/task → llm_call → tool_call 设计,为 agentic conventions 留位置。核心属性速查:
| 属性 | 含义 | 对轨迹评估的用途 |
|---|---|---|
gen_ai.system |
provider | 区分多供应商混部的分数归因 |
gen_ai.request.model / gen_ai.response.model |
请求/实际模型 | 模型迁移时分数可比性(见 DoorDash 模型迁移案例,第 E15 章) |
gen_ai.usage.input_tokens / output_tokens |
token 用量 | trajectory 层效率预算(token 超标扣分)的数据源 |
gen_ai.operation.name |
chat / embeddings / agent 等 | span 类型识别,驱动 trace 解析器 |
(4)trace 的复利。 trace schema 稳定之后会产生三重回报:生产 trace 是免费的评测集来源(脱敏后可直接转回放用例)、失败聚类有了统一字段(详见第 E12 章 · 在线评估与数据飞轮)、自动诊断有了输入(2.8 节的 TRAIL/AgentDebug 都以 trace 为输入)。阿里把评测执行环境隔离也列为配套要求——多用例共享状态会导致分数不可复现,这与 trace 完整性同属"评估前置条件"。
2.4 Transcript Builder:把原始 Trace 塑形为"证据切片"(DoorDash)
有了 trace 不等于能判分。DoorDash 的原话:原始 trace 完整但难判,具体三难:
- 工具返回可能巨大——一次餐厅搜索 API 返回上百条记录,judge 的上下文窗口装不下,装得下也会被淹没;
- schema 脚手架与无信号字段多——内部协议字段、调试标记占了大量 token,对判定毫无贡献;
- 证据散落多个 span/turn——判断"推荐是否有据"需要把第 2 轮的论断和第 5 轮的工具返回拼在一起。
解法是 Transcript Builder:一组 Python 脚本,做三个动作——重组分散的 span、删除无质量信号的 token、裁剪超大载荷,产出紧凑视图。关键设计在下一步:每条 rubric 标准声明自己依赖的证据,builder 只把那一片交给 judge。原文给出三个实例:
| rubric 标准 | judge 拿到的证据切片 |
|---|---|
| grounding 检查(论断是否有据) | Agent 的论断 + 背后的工具输出 |
| 多样性检查(推荐是否真实差异) | 推荐列表 + 用户原始请求 |
| 叙述检查(是否泄露内部过程) | Agent 工作时流式输出的文本 |
塑形前后对比(示意,字段取自 DoorDash 原文描述):
【judge 前:原始 trace 片段】
tool_result(search_restaurants):
{meta: {request_id:"...", schema_v:"3.1", debug:{...数百字...}},
results: [{name:"A", price:..., rating:..., eta:..., promotions:[...],
tracking:{...}}, ... 共 137 条 ...]} ← 数万 token,大量无信号字段
assistant(span #12): "A 川菜馆离您很近,30 分钟可达" ← 待核验的论断
...(中间隔 7 个 turn 的其他 span)...
【judge 后:grounding 证据切片】
assertion: "A 川菜馆离您很近,30 分钟可达"
evidence: search_restaurants.results[0] → {name:"A 川菜馆", distance_km:0.8, eta_min:30}
verdict: ____ rationale: ____
效果是"聚焦证据让判断更一致"——这与第 E05 章的 judge 校准逻辑同构:给 judge 的无关上下文越多,偏差与方差越大。DoorDash 把它列为四条 Lessons Learned 的第一条:"Judge 需要'为问题塑形'的 transcript 视图——删无关、只留标准依赖的证据。"
工程上可以这样理解:Transcript Builder 是"评测侧的 ETL"。它把一份完整的原始 trace(存 ClickHouse 的那份)物化成 N 个按标准定制的视图;原始 trace 保留用于人工复核与 RCA,视图只服务自动评分。这带来一个附带好处——judge 误判时,人审可以回到原始 trace 查证,评分与证据链永远可追溯。实现时的两个注意点:裁剪规则要版本化(裁过头会把关键证据切掉,属于"评测系统自己产生的 bug",DoorDash Lesson 4 明确说被标记失败中有真实一部分是 harness 自身故障);每条标准的证据声明应与 rubric 一起 review,二者是同一个契约的两半。
2.5 轨迹比对与 LCS 序列对齐:腾讯实现
trajectory-level 的核心动作是"把这条轨迹和预期路径比一比"。最直觉的做法是 exact match(完全一致才通过),但它是轨迹评估的头号反模式:同一任务存在多条合法路径(先查订单还是先验身份?),exact match 会把大量正确行为判错,评估集退化成"背答案"。可用的比对粒度由严到宽:
| 比对方式 | 判定逻辑 | 适用 | 缺点 |
|---|---|---|---|
| Exact match | 序列逐项全等 | 几乎不适用 | 合法变通路径全部误杀 |
| LCS 对齐 + 归一化 | 最长公共子序列求公共骨架,偏差分类扣分 | 有标准 SOP、步骤顺序重要的任务(腾讯 TPerf) | 需要维护基线快照 |
| 无序关键调用集合 | 只查关键工具调没调、参数对不对,不管顺序 | 路径自由度高的任务 | 抓不住顺序依赖(先鉴权后操作) |
| 偏序约束 | 只断言先后关系(A 必须在 B 前) | 有安全依赖但路径自由的任务 | 约束要逐条人工设计 |
| LLM/Agent 评审 | judge 读轨迹给 rubric 分 | 无法穷举规则的开放任务 | 需校准,先过元评估(见 2.8) |
腾讯 TPerf(AI 性能分析 Agent)给出目前公开细节最完整的 LCS 实现。完整流水线分四步:
第一步:归一化。 对齐之前先把"不影响对错的差异"抹掉,否则同一行为每次运行都会被判"不一致"。五条规则:
| 归一化规则 | 抹掉的差异 | 不抹会怎样 |
|---|---|---|
| 时间戳占位 | 每次运行的绝对时间不同 | 每一步都不匹配 |
| 搜索类工具忽略查询参数 | 同一检索意图的措辞差异 | 合理改写被判参数错 |
| 写入操作只留路径 | 文件内容的合理差异 | 产物比对退化为 diff 全文 |
| 终端命令提取脚本名 | 命令参数顺序/细节差异 | 等价执行被判不一致 |
| 连续读文件组内不校验顺序 | 并行读多个文件的次序 | 并发调度差异被误罚 |
第二步:LCS 对齐。 对归一化后的基线序列与 trial 序列求最长公共子序列(LCS),LCS 即两者的"公共骨架",代表被正确执行的部分。
第三步:偏差分类扣分。 没进入 LCS 的 span 分成四类:不一致 / 多余 / 缺少 / 顺序错,各扣 2 分,本维度上限 -10。"缺少"里最严重的子类是"缺少关键校验步骤"——在综合判定中它不应只扣 2 分,而应触发硬门禁(见 2.8 与 lab06)。
第四步:效率对比。 过程质量不只看"走对没有",还看"走贵没有":耗时以 300 秒为基准,每超 10% 扣 1 分;token 以基线为基准每超 10% 扣 1 分,上限 -10。这与腾讯五维指标中"效率与成本"一脉相承——"pass@1 高但 token 花 10 倍的方案生产上不可接受"。
用一个最小例子走一遍对齐(lab06 中的场景):
基线 SOP:[verify_identity, get_order_status, apply_refund, notify_user]
Trial A:[verify_identity, apply_refund, get_order_status, notify_user]
LCS 公共骨架(长度 3):[verify_identity, get_order_status, notify_user]
偏差分类:apply_refund 与 get_order_status 顺序错(-2)
——违反「先查状态、再办退款」的 SOP,但两步都在 → 扣分即可
Trial B:[verify_identity, apply_refund, notify_user]
LCS 公共骨架(长度 3):[verify_identity, apply_refund, notify_user]
偏差分类:get_order_status 缺少
——缺少的是关键校验工具 → 不走扣分,直接触发硬门禁判失败(假阳性)
对应的判定骨架(示意):
def trajectory_score(trial_spans, baseline_spans):
t = [normalize(s) for s in trial_spans] # 五规则归一化
b = [normalize(s) for s in baseline_spans]
lcs = longest_common_subsequence(b, t) # 公共骨架
for span in classify_unmatched(b, t, lcs): # 缺少/多余/不一致/顺序错
if span.kind == "missing" and span.critical:
return HARD_GATE_FAIL # 关键校验缺失:一票否决
deduct(2, cap=-10)
deduct_efficiency(duration_vs=300, token_vs=baseline, per_10pct=1, cap=-10)
return max(0, 100 + total_deductions) # ≥80 达标(腾讯口径)
配套的基线快照机制(腾讯):用例设计只定义 prompt 与检查规则 → 执行 1 次 → 人工审核过程与结果 → 不可接受则修后重跑 → 可接受则该次快照成为基线(含 CoT、工具调用序列、中间产物、完整 trace、最终响应)。基线更新时机只有三个:Agent/Skill 逻辑变更、模型版本升级、用例本身修改。TPerf 实战规模:9 大场景分组 30+ 用例(CPU 瓶颈 6 / 网卡 5 / 磁盘 4 / 磁盘 IO 2 / 内存 1 / TCP 队列 3 / Nginx 1 / 配置问题 1 / 正常场景 5),支持 7 模型参数化对比,单用例约 3000 秒,全量 30+ × 7 模型约 3–5 小时;基线配置随代码仓库 Git 版本化,执行结果每次重新生成归档,且支持"重新评分"(评分逻辑调整后无需重跑 Agent)。
动手验证:lab06 实现了归一化 + LCS 对齐 + 四类扣分的完整可运行版本,并断言"假阳性样本 outcome 分高但 trajectory 分低 → 综合判定失败"。运行:
cd evals-special/labs && python3 eval_lab06_trajectory_eval.py。
2.6 评测镜像运行时架构:多智能体系统怎么切评估责任(DoorDash)
当被测系统本身是多智能体架构,评估体系应该与运行时架构同形,否则失败无法归因到 owner。DoorDash Ask DoorDash 的运行时:用户消息 → Orchestrator(路由层)→ 分发到领域 Agent(如 Restaurant Discovery Agent、Grocery Shopping Agent)→ 领域 Agent 直接处理或交还 Orchestrator。评测按同一结构切分:
| 运行时组件 | 评测对象 | 评估什么 | rubric 归属 |
|---|---|---|---|
| Orchestrator 路由层 | 路由决策 | 消息是否被分发给正确的领域 Agent;该转不转 / 转错人 | 路由专项评测 |
| 贯穿全流程 | 护栏(Guardrail) | 全体 Agent 共同遵守的标准,如"回复简洁、不向用户叙述思维过程""不呈现可证伪虚假信息" | Guardrail 类 rubric(全 Agent 通用) |
| 领域 Agent | 任务能力 | 该领域的能力标准,如餐厅发现的"约束满足(配送时间/预算/饮食限制)""结果多样性(真实差异而非近似重复)";杂货购物的"购物执行(用户明确修改请求被执行)""商品相关性" | Capability 类 rubric(按领域) |
这个同形设计回答了多智能体评估最容易扯皮的问题:"端到端分数掉了,是谁的锅?"——路由错误记 Orchestrator,领域任务失败记领域 Agent,护栏违规则跨 Agent 追。DoorDash 的 rubric 工程还有两个与轨迹评估直接相关的细节(rubric 工程本身详见第 E05 章):
- 每条标准是 binary check,汇总为会话级总分——二值判定比连续打分稳定,轨迹级证据交给 judge 时尤其如此;
- checklist 式场景 rubric:把标准下沉到场景级清单,例如"两人份 ≤$60 素食 taco 购物清单"场景,清单逐项验证"每件商品都是素食 taco 原料、小计 ≤$60"。这类具体清单比宽泛通用标准方差更低,小样本也能给出可用信号,支撑更快迭代。
另一个连接点:Eligibility 适用性前置——judge 先判该标准是否适用本会话,不适用则跳过(例如食谱流程不因缺少复购步骤被扣分)。这防止"用 A 场景的轨迹标准去罚 B 场景的合法路径",是轨迹评估中路径多样性问题的 rubric 侧解法。
这套"trace 基础设施 + 证据切片 + 镜像架构"的组合拳带来的业务结果(DoorDash 原文数字):从平均每天仅 1 条员工反馈,到每天 2,000 个自动评分会话;全国上线前 agent 质量分 +8 分、错误率近乎减半;全量回归从手工 6+ 小时压缩到约 20 分钟——过程级评估不是成本中心,而是让发布敢踩油门的依据。
2.7 前沿一:过程奖励模型(PRM)与信用分配
评估视角的"给步骤打分",在训练视角叫过程奖励 / 信用分配(credit assignment)——同一套信号,评测用它归因,RL 用它训练。2023–2026 这条线的演进值得每个做 Agent 评估的工程师了解,因为 PRM 正在成为轨迹评估的候选评分器。
PRM vs ORM 的形式化:ORM(outcome reward model)对完整解给一个分数;PRM(process reward model)对每个步骤给分数,整解分数通常取各步对数似然加和 score(y) = Σ_i log r_i。同一套步骤分数有四个用途,评测工程师至少会碰到前三个:
| 用途 | 形态 | 例子 |
|---|---|---|
| 推理时选择 | best-of-N 重排序(选 argmax score) | PRM800K:best-of-1250 把 MATH 从 52.9% 抬到 78.2% |
| 推理时搜索 | 束搜索 / 树搜索的节点估值 | MCTS + PRM(rStar-Math) |
| 训练时奖励 | RL 的稠密奖励,缓解终局奖励稀疏 | Math-Shepherd 逐步 PPO、StepAgent、SPA-RL |
| 纯评测 | 分数报告与失败诊断 | 步骤分数定位"模型卡在哪一步" |
标注成本的三次下降(这是 PRM 工程化的主线):
| 阶段 | 论文 | 方法 | 关键数字 |
|---|---|---|---|
| 人工标注 | Let's Verify Step by Step(PRM800K,arXiv 2305.20050,2023) | 80 万条人工步骤标注(correct/incorrect/neutral 三标签)训练 PRM | GPT-4 直接解 MATH 52.9%;PRM best-of-1250 达 78.2%(ORM 约 72%);步骤级标签达到同等性能所需样本量约低 100 倍 |
| 蒙特卡洛自动标注 | Math-Shepherd(arXiv 2312.08935,2023) | 对某步之后的续写做多次 rollout,"该步之后能走到正确答案的比例"作为软标签 | Mistral-7B GSM8K 77.9%→84.1%(逐步 RL),加验证 89.1%;MATH 28.6%→33.0%,加验证 43.5% |
| 二分搜索 | OmegaPRM(arXiv 2406.06592,2024) | 二分定位第一个错误步骤,单条轨迹标注成本 O(n)→O(log n) | 无人工干预 MATH rollout 正确率相对 SFT 基线 +24%;标注成本较朴素蒙特卡洛降约 100 倍 |
OmegaPRM 对评测平台的启示超出标注本身:给轨迹打分不必逐步全量打分,先粗粒度二分定位可疑区间再细查——这与调试长轨迹时"先看中间步骤对不对"的人工策略同构。
两个不需要步骤标签的路线:
- PRIME(arXiv 2412.01981,2024):token 级价值头 + 隐式奖励,从结果奖励反推每 token 的过程价值,完全不需要步骤标注;对评测的启示是"只有终局真值(如单元测试通过与否)时,仍可通过价值估计获得步骤级归因"。
- VinePPO(arXiv 2410.01679,2024):在轨迹中间状态重采样 K 条续写,用续写实际回报构造无偏的步骤优势估计。工程含义值得单独记住:"从某步出发的成功率"本身就是该步质量的无偏评估——不训练任何模型也能回答"这一步到底值多少分",可直接用作离线轨迹归因工具(数学基准上相对 GRPO/PPO 最高约 +4 个百分点)。
生成式验证器:GenRM(Generative Verifiers,arXiv 2408.15240,2024)把验证做成生成任务——先生成对每一步的自然语言批注(critique),再输出 verdict。它桥接了 PRM 与 LLM-as-a-Judge 两个世界:批注式验证提供可解释的打分依据,天然接入 judge 工程栈,是当前步骤级 rubric 评估最常用的打分形式(详见第 E05 章)。
PRM 的失败学(必读):阿里 Qwen 团队的《The Lessons of Developing Process Reward Models in Mathematical Reasoning》(arXiv 2501.07301,2025)系统披露四个结论:① 步骤级标签确实比轨迹级标签更高效;② PRM 的分数可以被 hack——best-of-N 选择中模型会生成恰好骗过 PRM 的解(PRM800K 尤其明显);③ PRM 在难度外推与分布漂移下性能显著退化;④ PRM 与 ORM 组合使用效果更好。对应工程清单:任何验证器上线前做对抗性审计(hacking 红队)、按难度分层校准、报告中区分 in-distribution 与 OOD 的可信度。rStar-Math(arXiv 2501.04519,2025)进一步指出验证器必须"跟着被测系统一起进化":它让 PRM 与策略通过 MCTS 共同自进化(Qwen2.5-Math-7B 在 AIME24 达 53.3%,超过 o1-preview 约 8.7 个百分点;MATH 从基线 58.8% 提升到约 90%——注意 58.8% 是 rStar-Math 之前的基线分,不是最终成绩)。评测工程上的对应物:被测 Agent 升级后,旧验证器的分数不可直接比较,需要重新校准或共同迭代。
综合 Qwen Lessons 与 rStar-Math,把 PRM 当评测器/选择器使用时的工程清单:
- 标注:优先蒙特卡洛或二分自动标注(成本可控),人工标注只用于校准集;
- 分布:验证器训练分布要覆盖目标难度,OOD 场景分层报告准确率;
- 红队:上线前做 reward hacking 对抗审计——专门生成"骗验证器"的样本看它上不上当;
- 组合:PRM 与 ORM 组合使用效果更好(Qwen Lessons 结论四);
- 共迭代:被测策略升级后重训/重校准验证器,记录两者的配对兼容性。
信用分配分类学(依据 2026 年综述《From Reasoning to Agentic》,arXiv 2604.09459)可作为面试答题框架:按粒度(token 级 / 步骤级 / 片段级 / 轨迹级)、按信号来源(人工标注 / 模型标注 / 自动估计如 MC rollout 与重采样 / 规则式如单元测试与状态 diff)、按用途(训练时奖励 / 推理时选择 / 纯评测报告)。
2.8 前沿二:Agent 轨迹的专属评估方法与元评估
PRM 线源自数学推理;Agent 轨迹评估有自己的四个代表工作,各自贡献了一个可迁移的工程范式:
(1)AgentBoard(arXiv 2401.13178,2024)——progress rate,让失败可诊断。 为每个任务定义子目标集合,用归一化加权距离衡量轨迹"走了多远",把 0/1 成功率拆成连续的进展曲线。数据点:即便最强模型总体成功率也仅约 40% 出头;progress rate 与 success rate 的结合揭示了不同模型在规划、探索、利用子能力上的分化。工程迁移:为核心任务定义子目标/检查点,报告 progress rate 而不只是成功率——它直接决定你能不能回答"模型卡在哪一步"。
(2)τ-bench(arXiv 2406.12045,2024)——执行式验证 + pass^k。 评估不靠看对话文本,而是比对对话结束时数据库状态与目标状态是否一致——纯执行式(execution-based)验证,抗"看起来对"的文本欺骗。关键数字:GPT-4o 级模型成功率 <50%,零售域 pass^8 <25%(pass^k 的统计细节见第 E02 章 · 评估指标体系与第 E09 章 · 评估的统计学基础)。它定义的黄金标准组合是:状态比对(而非文本判断)+ 多次重复(可靠性)+ 规则合规性检查。同属执行式验证的还有 Terminal-Bench(arXiv 2601.11868,2026):80 个高难度 CLI 长程任务,每个配 pytest 风格功能测试 + oracle 参考解,最强模型 + agent 组合成功率约 35%。执行式验证的共同模式:可执行的真值判定程序 + 沙箱;优点客观可复现,代价是每个任务都要写判定程序。
(3)Agent-as-a-Judge(arXiv 2410.10934,2024)——评估者要有"手脚"。 与 LLM-as-a-Judge 的本质区别:评估者是会执行工具的 Agent——拿到被测 Agent 的完整代码库/产物后,可以运行代码、做静态分析、逐步对照分层需求打分。配套 DevAI 基准:55 个真实自动化 AI 开发任务、365 条分层用户需求。关键数字(论文摘要口径):与人工评估同等可靠,相比三位人类专家评估节省 97.72% 的时间、97.64% 的成本,且评估质量显著优于纯文本判读的 LLM-as-Judge。它是当前对"开放式产物(代码库、报告)"做过程级评估的主流范式;97% 优势的前提是 rubric 质量与 Judge 的工具权限,且为场景特定报告值、不宜外推为普适结论,引用时应一并说明。
(4)AgentRewardBench(arXiv 2504.08942,2025)——评估器本身必须被评估。 这是本方向最重要的"元评估"工作:收集 197 条 Web Agent 轨迹(含成功与人工确认的失败案例),系统测试各类自动评估器识别"轨迹真正成功"的能力。核心发现令人清醒:多数评估器的 false positive 率极高——多个常用评估器在失败轨迹上的误报率超过 50%,纯 LLM 判别尤其不可靠;结合代码/执行检查与分步核对的方案明显更好。落地要求:任何轨迹评估器(尤其 LLM judge)上线前,先在已知成败的轨迹集上测 FPR/FNR;优先选择有执行式依据的评估器;把评估器准确率作为评测基础设施的一级指标。
把四者串起来,得到轨迹评估器的选型优先级(与第 E04 章"确定性优先"一脉相承):
规则/执行式验证(终态 diff、单测、schema、must-call 断言)
↓ 覆盖不到的语义判断
Agent-as-a-Judge / 带证据切片的 LLM judge(须过元评估:已知成败集测 FPR/FNR)
↓ 高风险 / 低置信 / 评估器分歧
人工抽检(校准 judge、审"结果对但轨迹可疑"样本,见第 E06 章)
trace 级自动诊断的现状:TRAIL(arXiv 2505.08638,2025)提出覆盖子代理/工具调用/任务推理等维度的 27 类错误分类学,发布 148 条人工标注 agent trace;即便最强模型,"给定完整 trace 定位根因"的准确率也仅约 40–60%。AgentDebug(arXiv 2509.25370,2025)把失败归因到 6 个模块(工具使用、上下文/记忆管理、规划、验证等)并做"诊断→修复→复跑"闭环,失败恢复率提升约 10% 量级。SentinelAgent(arXiv 2505.24201,2025)则把视角从"事后诊断"推向"运行时监控":将 agent 间交互建模为图结构,由专职监督 agent 结合图拓扑与运行时指标做异常检测与归因——离线评测保证出厂质量,运行时异常检测保证存量质量,二者互补(在线侧详见第 E12 章)。结论:trace 质量与 span 粒度决定自动诊断上限;LLM 诊断结果应作为"待人工确认的假设"呈现,而非自动修复。
综合判定:加权平均 vs 硬门禁。 三层分数如何汇总成一个判定?lab06 给出的答案是"加权 + 一票否决"双轨:常规偏差(顺序错、多余步骤、效率超标)用扣分制(腾讯 80 分达标线);但禁用动作命中、关键校验缺失、最终目标未达成这三类失败不允许被其他层的高分"平均"掉——跳过身份校验不能靠"语气好"补回来。门禁的数量要克制,否则误杀率上升,评估体系会退回"没人信"的状态(门禁设计的完整讨论见第 E10 章 · 评测驱动开发)。
本节收束:轨迹评估落地清单(把 2.3–2.8 压缩成八条可执行动作):
- 结构化轨迹日志先行——没有满足三要求的 trace,后面全部免谈;
- 评估器分层——规则/执行式验证为主,Agent/LLM judge 为辅,人工抽检校准;
- 评估器先过元评估——在已知成败的轨迹集上测 FPR/FNR,再谈上线;
- judge 只拿证据切片——Transcript Builder 塑形,每条标准声明依赖证据;
- 轨迹比对禁 exact match——归一化 + LCS / 无序集合 / 偏序约束三选一;
- 长程任务报 progress rate——子目标分解让失败可诊断,而不只是 0/1;
- 可靠性多次试验——pass@1 + pass^k(k≥4),固定温度与用户模拟协议;
- 把评估器当资产管理——版本化、定期元评估、记录验证器与被测模型的配对兼容性。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | outcome-only 评估的盲区与"假阳性" | ⭐⭐⭐ | 能不能举出"结果对但路径错"的具体案例并说清四盲区(假阳性/诊断盲区/捷径/碰运气) |
| 2 | 三层评估模型 step/trajectory/session 分工 | ⭐⭐⭐ | 每层评什么、用什么判、失败指向什么根因,层间为何不可替代 |
| 3 | Trace 是被测 Agent 的标准能力(三要求) | ⭐⭐⭐ | 可解析/内容完整/跨版本稳定;被测系统没有 trace 时的三档对策 |
| 4 | Transcript Builder 与证据切片 | ⭐⭐⭐ | 为什么要给 judge"塑形视图";每条标准声明依赖证据的工程含义 |
| 5 | 轨迹比对为什么禁 exact match + LCS/归一化 | ⭐⭐ | 路径多样性;归一化五规则与四类偏差扣分;归一化过度的风险 |
| 6 | 执行式验证(终态 diff / 测试套件) | ⭐⭐ | τ-bench 数据库状态比对与 pass^k;抗文本欺骗的原理与代价 |
| 7 | Agent-as-a-Judge vs LLM-as-a-Judge | ⭐⭐ | 差在"评估者有没有手脚";DevAI 时间 -97.72%/成本 -97.64% 的前提条件 |
| 8 | PRM vs ORM 与自动标注路线 | ⭐⭐ | 步骤级监督为什么样本效率高 100 倍;MC rollout 与二分标注的成本逻辑 |
| 9 | PRM 的 hack 性与分布漂移 | ⭐⭐⭐ | Qwen Lessons 四结论;验证器红队、OOD 分层、随被测系统共同迭代 |
| 10 | progress rate / 子目标分解 | ⭐⭐ | 把 0/1 成功率拆成进展曲线,回答"模型卡在哪" |
| 11 | 评测镜像运行时架构(多 Agent) | ⭐⭐ | 路由/护栏/领域能力各在哪层评;端到端掉分如何归因到 owner |
| 12 | 评估器的元评估(AgentRewardBench) | ⭐⭐⭐ | 纯阅读式轨迹 judge 误报率 >50%;上线前用已知成败集测 FPR/FNR |
| 13 | 信用分配方法谱系 | ⭐ | 粒度×信号来源×用途三维分类;VinePPO 重采样可当离线归因工具 |
| 14 | trace 级自动诊断现状 | ⭐ | TRAIL 27 类错误、定位准确率仅 40–60%,人工兜底不可省 |
四、经典面试题与参考答案
题 1(基础):为什么评估 Agent 不能只看最终答案?请举一个具体例子。
参考答案: 四个盲区:① 假阳性——结果对但路径错/带风险,如退款 Agent 跳过订单状态查询直接承诺退款成功,这次恰好可退所以"答对了",但风险敞口一直在,阿里明确这类假阳性"在生产迟早暴露";② 诊断盲区——20 步轨迹失败,错误可能在第 3 步,终局只有一个 0/1 标量,无法定位;③ 捷径与欺骗——最终状态"看起来对"可能来自绕过规则或 reward hacking;④ 碰运气——"训练数据碰巧答对"与"正确调用工具后回答"在最终文本上无法区分,通过率不可复现。此外还有双向背离:过程全对也可能因环境抖动而终局失败,所以工业界用"终态正确 + 规则合规"双门槛,而不是单看任一侧。
题 2(基础):说说轨迹评估的三层模型,每层评什么、怎么评、失败说明什么?
参考答案: Airbnb 三层:step-level 评单工具调用/推理步——参数 JSON Schema 校验、must-call/must-not-call 断言、禁用动作检查,失败指向单工具实现或参数生成问题;trajectory-level 评整条路径是否合理高效——与基线做 LCS 对齐、无序关键调用集合比对、步数/token 预算检查,失败指向规划与编排问题(绕路、重复、跳步、顺序颠倒);session-level 评整体是否达成用户目标——终态比对、目标 checklist,失败指向目标理解问题。三层独立失败、不可替代:session 分高掩盖不了 trajectory 违规(假阳性),trajectory 完美救不了 session 失败。阿里对话 Agent 版本是四层:Turn/Session/Trace/Outcome,特别警告"不要只平均每轮分数"——每轮都答得还行但最终没解决问题仍是失败。
题 3(基础→进阶):什么是结构化 Trace 的三个要求?接手的被测 Agent 没有 Trace 输出怎么办?
参考答案: 三要求(腾讯):① 可解析——JSONL/JSON 结构化格式而非自由文本;② 内容完整——每步工具名/入参/返回/时间戳/耗时/错误,理想含思维链与决策依据;DoorDash 的 span 记录用户输入、模型输出、工具调用与返回、展示给用户的 widgets;③ 跨版本格式稳定——schema 不随版本漂移,否则历史分数不可比。没有 trace 时三档对策:有日志无结构 → 写解析器(成本高易碎,下策);只有最终输出 → 只能做结果评测(中策);可改造 → 推动被测系统增加 trace 输出(推荐)。立场要鲜明:trace 是被测 Agent 的标准能力而非事后补救(阿里/腾讯共识)。标准化方向是 OTel GenAI semconv(gen_ai.* 属性),截至 2026 年仍处 Development 状态,agentic 层级 2025-08 才有提案,应"先按标准打点 + 保留私有字段兼容层"。
题 4(进阶):DoorDash 的 Transcript Builder 解决什么问题?如果让你设计,怎么做?
参考答案: 问题:原始 trace 完整但难判——工具返回可能巨大(超出/淹没 judge 上下文)、schema 脚手架与无信号字段多、证据散落多个 span/turn。设计分两步:第一步是三个清洗动作——重组分散的 span、删无质量信号的 token、裁剪超大载荷,产出紧凑视图(DoorDash 用一组 Python 脚本实现,原始 trace 仍存 ClickHouse 供人审与 RCA);第二步是证据切片——每条 rubric 标准声明自己依赖的证据,builder 只把那一片交给 judge:grounding 检查拿 agent 论断 + 背后工具输出,多样性检查拿推荐列表 + 原始请求,叙述检查拿流式输出文本。收益:聚焦证据让 judge 判断更一致、上下文成本更低。注意点:裁剪规则要版本化(裁过头是 harness 自身 bug,DoorDash 承认被标记失败中有真实一部分来自评测系统自己);证据声明与 rubric 是同一契约,要一起 review。
题 5(进阶):两条工具调用轨迹怎么做比对?为什么不能 exact match?归一化的作用和风险是什么?
参考答案: 不能 exact match,因为同一任务有多条合法路径,全等比对会把合法变通判错,评估集退化成背答案。腾讯 TPerf 的 LCS 方案四步:① 归一化——时间戳占位、搜索类工具忽略查询参数、写入只留路径、终端命令提取脚本名、连续读文件组内不校验顺序;② 求 LCS 公共骨架;③ 非 LCS 部分分类为不一致/多余/缺少/顺序错,各扣 2 分、上限 -10;④ 效率对比——耗时以 300 秒为基准每超 10% 扣 1,token 以基线为基准每超 10% 扣 1、上限 -10。归一化的作用是抹掉"不影响对错的差异",否则同一行为每次运行都被判不一致;风险是归一化过度——若把金额、订单号这类关键参数也忽略掉,参数错误会被静默放过,等于把假阳性重新放进来。路径自由度更高的任务可退到无序关键调用集合或偏序约束(只断言"先鉴权后操作"这类依赖)。基线来自"执行 1 次 + 人工确认"的快照机制,只在逻辑变更/模型升级/用例修改时更新。
题 6(进阶):PRM 和 ORM 有什么区别?没有步骤级标注数据时,还有哪些办法拿到步骤级信号?
参考答案: ORM 对完整解打一个分,PRM 对每个步骤打分、整解分数通常取各步对数似然加和。PRM800K(arXiv 2305.20050,2023)证明步骤级标签信息密度约高 100 倍(GPT-4 直接解 MATH 52.9%,PRM best-of-1250 达 78.2%)。没有步骤标注时有四条路线:① 蒙特卡洛标注(Math-Shepherd,arXiv 2312.08935)——从某步多次 rollout,"走到正确答案的比例"作软标签;② 二分搜索(OmegaPRM,arXiv 2406.06592)——二分定位第一个错误步骤,标注成本 O(n)→O(log n),降约 100 倍;③ 隐式奖励(PRIME,arXiv 2412.01981)——token 级价值头从结果奖励反推过程价值,只有单元测试真值也能用;④ 中间状态重采样(VinePPO,arXiv 2410.01679)——从某步重采样 K 条续写看成功率,不训练模型即可做离线步骤归因。必须补一句失败学(Qwen Lessons,arXiv 2501.07301):PRM 分数可被 hack、难度外推下退化,直接当评测器要先做红队与 OOD 分层校准。
题 7(进阶):Agent-as-a-Judge 和 LLM-as-a-Judge 的本质区别是什么?它能直接信任吗?
参考答案: 本质区别:评估者是否有环境交互能力。LLM-as-a-Judge 是"阅读式"——读 transcript 打分;Agent-as-a-Judge(arXiv 2410.10934,2024)让 Judge Agent 带工具核验——运行代码、静态分析、逐条对照分层需求,能核验而非仅阅读。在 DevAI 基准(55 个真实 AI 开发任务、365 条分层用户需求)上,它与人工评估同等可靠,相比三位人类专家节省 97.72% 时间、97.64% 成本(场景特定值),评估质量显著优于纯文本判读。但不能直接信任,两个理由:① AgentRewardBench(arXiv 2504.08942,2025)用 197 条 Web Agent 轨迹测出多数自动评估器在失败轨迹上的误报率超过 50%,结合执行检查与分步核对的方案才明显更好——所以任何轨迹评估器上线前先在已知成败的轨迹集上测 FPR/FNR;② 97% 的时间/成本优势有前提——rubric 质量与 Judge 的工具权限,开放式产物评估尤其依赖分层 rubric 写得好不好。
题 8(进阶):什么是"评估器的元评估"?你的轨迹评估方案上线前要做哪些验证?
参考答案: 元评估 = 评估"评估器本身"。动机是 AgentRewardBench 的实证:自动轨迹评估器把明显失败的轨迹判为成功的比例普遍超过 50%,且评估器之间差异巨大——不测元指标就上线,等于把质量门禁交给一个未知的分类器。上线前验证清单:① 构造已知成败的轨迹集(成功 + 人工确认的失败,含"结果对但过程错"的假阳性样本),测评估器的 FPR/FNR——假阳性识别能力是轨迹评估器的核心能力;② 与人工标注对齐,一致率达到团队口径(Airbnb high 80s~90s,阿里/腾讯约 85%)后才进自动化(详见第 E05 章校准流程);③ 偏差检查(位置/冗长/同源偏好,见第 E05 章);④ 稳定性检查(同轨迹重复评分方差);⑤ 持续运营——judge 模型/prompt/rubric 任一变更触发重校准,记录评估器与被测模型的配对兼容性(被测 Agent 升级后旧评估器分数不可比,rStar-Math 的教训)。
题 9(系统设计):为一个多领域对话 Agent(客服 + 购物助手,Orchestrator 路由到各领域 Agent)设计完整的轨迹与 Agent 级评估体系。
参考答案: 分六层回答。 ① Trace 先行:被测系统按 OTel 打点,span 记录用户输入/模型输出/工具调用与返回/widgets(DoorDash 口径),层级 session→agent/task→llm_call→tool_call;满足可解析、内容完整、跨版本格式稳定三要求;trace 存 ClickHouse 类列式存储。 ② 评测镜像运行时架构(DoorDash):Orchestrator 评路由准确率(该转不转/转错人);护栏 rubric 贯穿全流程评(不泄露内部过程、不呈现可证伪虚假信息,全体 Agent 通用);每个领域 Agent 评任务能力(客服评工单闭环与政策合规,购物评约束满足与多样性),失败可归因到 owner。 ③ 三层评分:step 层用程序化断言(参数 schema、must-call/must-not-call、禁用动作);trajectory 层用归一化 + LCS 对齐关键 SOP(缺少关键校验触发硬门禁,其余按腾讯口径各扣 2、上限 -10)+ 效率预算(步数/token/耗时);session 层用执行式验证——终态数据库 diff(τ-bench 范式)+ 目标 checklist,不靠判文本。 ④ Judge 层:语义类标准(groundedness、叙述质量)用 LLM judge,前置 Transcript Builder:每条标准声明证据依赖,judge 只拿切片;judge 校准到 ≥85% 一致率,rubric 写成 binary check + eligibility 前置。 ⑤ 元评估与门禁:所有自动评估器先在已知成败轨迹集测 FPR/FNR;综合判定 = 加权扣分 + 一票否决(禁用动作/关键校验缺失/目标未达成);多 trial 报 pass@1 与 pass^k(无人值守口径看 pass^k)。 ⑥ 闭环:线上 trace 抽样回流(每日去标识化 5% 流量,Airbnb 口径),"结果对但轨迹可疑"样本人工抽检后入回归集;被测 Agent 升级时评估器同步重校准。仿真侧(模拟器 + fixtures 生成轨迹)见第 E08 章,失败归因流水线见第 E11 章。
题 10(进阶):一条 20 步的轨迹最终失败了,你有哪些办法定位"是哪一步坏的"?
参考答案: 四条路线,成本与保真度各不同。① 中间状态重采样(VinePPO,arXiv 2410.01679 的思路):从可疑步骤出发重采样 K 条续写,续写的成功率就是该步质量的无偏估计——不训练模型即可用于离线归因;② 先粗后细二分定位(OmegaPRM 的工程启示):不必逐步全量打分,先验证轨迹中点状态是否还在正确路径上,再对可疑半区递归二分,O(log n) 成本锁定可疑区间;③ 成功/失败轨迹 diff:同一任务的成功 trial 与失败 trial 做序列对齐,找第一个分叉点(工具参数不同?检索结果不同?规划选择不同?)——前提是 trace schema 跨版本稳定、试验条件可复现;④ 评估器辅助归因:让带工具的 judge(Agent-as-a-Judge 形态)逐步核验并给出批注,适合无法重放的环境,但要先过元评估。所有路线的共同前提是完整结构化 trace(2.3 节)与可重放环境;定位结论应落成结构化归因字段,喂给 RCA 的范围收敛(第 E11 章),而不是停在口头结论。
五、易错点 · 反直觉点
-
轨迹 exact match:把"调用顺序不同但正确"的解判错,评估集退化成背答案,还扼杀了更优路径的发现。→ 真相:用 LCS 对齐 / 无序关键调用集合 / 偏序约束,只锁关键依赖,保留路径自由度。→ 记忆锚点:锁关键步骤,不锁全路径。
-
把"结果对"当"行为对":最终文本会抹平一切中间失败,假阳性样本在离线评测里以"通过"存在。→ 真相:结果对但路径错的样本比结果错更危险——偶发正确不可复现、风险敞口持续存在、失败还无法归因;必须"终态正确 + 规则合规"双门槛。→ 记忆锚点:结果判 pass,轨迹判安全。
-
把原始 trace 整个喂给 judge:上下文被工具返回与脚手架噪声淹没,判断方差大、成本高。→ 真相:DoorDash 的教训是 judge 需要"为问题塑形"的视图——每条标准声明证据依赖,只给那一片。→ 记忆锚点:judge 只看它需要的那页。
-
归一化过度:时间戳、查询参数该抹,但把金额、订单号也抹掉,参数错误就被静默放过。→ 真相:归一化只抹"不影响对错的差异";抹错一个关键字段 = 亲手造一个假阳性。→ 记忆锚点:归一化抹噪声,不抹证据。
-
加权平均一切:用"总分 = 各层加权"做判定,跳过关键校验可以用语气分补回来。→ 真相:禁用动作命中、关键校验缺失、目标未达成必须一票否决(硬门禁),扣分制解决不了安全问题。→ 记忆锚点:安全问题不进平均分。
-
拿 PRM 直接当评测器,不做红队:Qwen Lessons(arXiv 2501.07301)证明 PRM 分数可被 hack——best-of-N 会选出恰好骗过 PRM 的解,难度外推时打分系统性失准。→ 真相:验证器上线前做 hacking 红队 + 难度分层校准,报告区分 in-dist 与 OOD 可信度。→ 记忆锚点:验证器也怕被刷分。
-
纯阅读式 LLM judge 直接评轨迹:AgentRewardBench 实测多数自动评估器在失败轨迹上误报率 >50%,"读起来像成功"与"真的成功"是两回事。→ 真相:优先执行式依据(终态 diff、测试、断言),judge 只做补充,且先在已知成败集上测 FPR/FNR。→ 记忆锚点:先验评估器,再让它评。
-
Trace 事后补:上线后才想起加日志,靠脆弱解析器从自由文本里抠结构化信息。→ 真相:trace 是被测 Agent 的标准能力(阿里/腾讯共识);三要求(可解析/内容完整/跨版本稳定)在设计阶段定,事后补的成本是重造一遍。→ 记忆锚点:没有 trace,就没有过程评估。
-
被测 Agent 升级后直接对比旧评估器分数:验证器在旧策略分布上训练/校准,评估新策略时系统性失准。→ 真相:rStar-Math 的结论是验证器必须与被测系统共同进化;策略升级 → 评估器重校准,否则分数差异归因不了。→ 记忆锚点:尺子也要跟着版本走。
-
只平均每轮分数评对话 Agent:每轮都"答得还行",平均分挺好看,但问题最终没解决。→ 真相:阿里四层评判要求同时看 Turn/Session/Trace/Outcome,session/outcome 层失败一票压过 turn 层均值。→ 记忆锚点:平均分会骗人,闭环才算数。
六、推荐资源
论文(全部来自本特辑 _research/03-trajectory-eval.md 与 _research/10-infra-observability.md,arXiv ID 已核实)
- Let's Verify Step by Step(PRM800K)— arXiv 2305.20050(2023):过程监督的奠基,步骤级标签信息密度约高 100 倍。
- Math-Shepherd — arXiv 2312.08935(2023):蒙特卡洛完成率自动标注,"步骤质量 = 后续成功率"范式的确立。
- OmegaPRM — arXiv 2406.06592(2024):二分搜索把过程标注成本降到 O(log n)。
- Generative Verifiers(GenRM)— arXiv 2408.15240(2024):批注式生成验证,PRM 与 LLM-as-a-Judge 两个世界的桥。
- VinePPO — arXiv 2410.01679(2024):中间状态重采样的无偏步骤归因,可直接当离线轨迹归因工具。
- PRIME — arXiv 2412.01981(2024):无步骤标签的隐式过程奖励。
- The Lessons of Developing Process Reward Models(Qwen)— arXiv 2501.07301(2025):PRM 失败学,hack 与 OOD 问题的第一手报告。
- rStar-Math — arXiv 2501.04519(2025):验证器与策略共同自进化。
- AgentBoard — arXiv 2401.13178(2024):progress rate 与子目标分解。
- τ-bench — arXiv 2406.12045(2024):终态数据库 diff + pass^k,tool-agent 评测的黄金标准。
- Agent-as-a-Judge — arXiv 2410.10934(2024):带工具核验的过程级评估,DevAI 基准。
- AgentRewardBench — arXiv 2504.08942(2025):轨迹评估器的元评估,FPR >50% 的警钟。
- Terminal-Bench — arXiv 2601.11868(2026):执行式验证在 CLI 长程任务上的规模化实践。
- TRAIL — arXiv 2505.08638(2025):27 类 agent trace 错误分类学与自动定位。
- AgentDebug — arXiv 2509.25370(2025):六模块失败归因与"诊断→修复→复跑"闭环。
- 延伸阅读:信用分配综述《From Reasoning to Agentic》arXiv 2604.09459(2026);PRM 综述 arXiv 2510.08049(2025);StepAgent arXiv 2411.03817(2024);SPA-RL arXiv 2505.20732(2025);AgentTrace 结构化日志框架 arXiv 2602.10133(2026)。
工程博客(四家工业实践一手来源,数字以 _research/00-industry-practice.md 为准)
- Airbnb《Eval-driven development: Lessons from evaluating GenAI at scale》——三层 Agentic 评估(step/trajectory/session)与 root trace 树遍历的出处。
- DoorDash《Building Ask DoorDash (Part 3): Evaluation》(2026-06)——Transcript Builder、评测镜像运行时架构、OTel + ClickHouse 的出处;同系列 Part 1/2 讲架构与 fixtures(与第 E08 章配套阅读)。
- 阿里技术《Agent 评测:方法论与体系设计》——Turn/Session/Trace/Outcome 四层评判、"trace 是标准能力"立场、假阳性案例的出处。
- 腾讯技术工程《AI Agent & Skill 测评方案及落地实践》——LCS 对齐、归一化五规则、基线快照、TPerf 实战数字的出处。
- OpenTelemetry GenAI Semantic Conventions(
open-telemetry/semantic-conventions-genai,Development 状态;agentic 提案 2025-08)— https://opentelemetry.io/docs/specs/semconv/gen-ai/
动手实验(labs)
| lab | 内容 | 运行命令 |
|---|---|---|
| eval_lab06_trajectory_eval.py | 三层评估 + LCS 对齐 + 假阳性捕获(本章配套实验) | cd evals-special/labs && python3 eval_lab06_trajectory_eval.py |
| eval_lab03_programmatic_scorers.py | step 层断言与分层筛查流水线 | cd evals-special/labs && python3 eval_lab03_programmatic_scorers.py |
| eval_lab05_judge_calibration.py | 轨迹 judge 的校准闭环(一致率/kappa) | cd evals-special/labs && python3 eval_lab05_judge_calibration.py |
| eval_lab07_simulator_fixtures.py | 轨迹从哪来:模拟器 + fixtures 生成可复现轨迹 | cd evals-special/labs && python3 eval_lab07_simulator_fixtures.py |
相关章节
- 第 E04 章 · 评分三层之一:程序化评分——step 层断言的完整清单与扣分制细节。
- 第 E05 章 · LLM-as-Judge 深入——judge 偏差、rubric 工程与校准流程(Transcript Builder 的下游)。
- 第 E06 章 · 人工评估与评分路由——"结果对但轨迹可疑"样本的人审兜底。
- 第 E08 章 · 对话 Agent 与仿真评测——Conversation Simulator 与 fixtures 如何批量生产轨迹。
- 第 E09 章 · 评估的统计学基础——pass^k 的估计与置信区间。
- 第 E11 章 · Badcase 根因分析与优化闭环——三层分数如何喂给 RCA 的范围收敛。
- 第 E13 章 · Benchmark 全景与前沿争议——τ-bench/GAIA/Terminal-Bench 等外部基准的全景对照。
- 主手册第 8 章 · Agent 评估与可观测性——入门浓缩版(本章为其过程评估部分的深挖)。
对话 Agent 与仿真评测
一句话导读:对话 Agent 的质量无法用"一问一答"的静态数据集衡量——用户会追问、改主意、发脾气、等你引导他操作。 本章解决"没有真实用户参与时,如何端到端、可复现、低成本地评测多轮对话 Agent": Conversation Simulator(LLM 扮演用户)+ Fixtures(冻结外部世界)+ checklist 式 rubric + 全量 sweep 的成本工程。 学完你能得到:对话评测五大难点与四层判分框架、DoorDash 会话模拟器与 fixtures 的完整设计细节、 τ-bench/τ²-bench 学术范式与 pass^k 可靠性数字、模拟器保真度的验证方法,以及仿真评测的边界与 offline-online gap 治理。
一、知识图谱
对话 Agent 与仿真评测
├─ 难点:对话评测为什么特殊(2.1)
│ ├─ 五大难点:上下文累积 / 目标切换 / 情绪回应 / 人工接管 / 多轮引导
│ ├─ 核心判据:"每轮都答得还行,但没解决问题仍是失败"(阿里)
│ └─ 四层判分:Turn(单轮)/ Session(整段会话)/ Trace(执行轨迹)/ Outcome(最终结果)
├─ 演员:Conversation Simulator(2.2)
│ ├─ scenario = 开场请求 + 用户目标 + 反应策略(DoorDash)
│ ├─ persona 来源:真实工单抽取 / 隐式画像挖掘(arxiv 2502.18968)/ 真实日志语料
│ ├─ 行为真实性:动态判断 解决? 有进展? 缺信息? 绕圈?;升级像真人(逐步升级而非秒转人工)
│ └─ 非合作模拟:会不耐烦、跑题、改主意(ChatChecker, arxiv 2507.16792)
├─ 舞台:Fixtures 冻结外部状态(2.3)
│ ├─ 录制工具返回替代实时调用:菜单/库存/测试账号不再漂移
│ ├─ reorder_history_v1 实例(DoorDash 复购场景)
│ ├─ 附带收益:可构造欺诈、大额退款等真实里难遇的难例
│ └─ 教训:"环境必须受控,否则分数测量的是噪声"(DoorDash)
├─ 范式:从 τ-bench 到工业流水线(2.4)
│ ├─ τ-bench(arxiv 2406.12045):模拟器 + 工具 + DB 终态哈希 + pass^k
│ ├─ τ²-bench(arxiv 2506.07982):双控——用户侧也能动手,引导比代办难
│ └─ DoorDash:同一 rubric + 同一 judge 贯穿离线线上;GEPA 校准裁判
├─ 判据:checklist 式场景 rubric(2.5)
│ ├─ 素食 taco ≤$60 案例(DoorDash):低方差信号,小样本也能迭代
│ └─ eligibility 适用性前置:不适用的标准跳过而非扣分
├─ 成本:全量 sweep 的工程账(2.6)
│ ├─ 50 场景 × 8 trials = 400 对话;人工 6h+ → 模拟器约 20min
│ └─ 成果:2,000 会话/天自动评分、上线前质量分 +8、错误率近乎减半
└─ 边界:仿真 ≠ 真实(2.7)
├─ 模拟器自身要被评测:目标一致性、幻觉、同源偏差(DAUS, arxiv 2402.13374)
├─ offline-online gap:强离线成绩只是部署可靠性的弱指标(arxiv 2510.22143)
└─ 治理:保真度抽检 + 同一 rubric 同一 judge + shadow/canary 第二道闸
| 你的问题 | 本章落点 |
|---|---|
| 对话评测和单轮评测差在哪 | 2.1 |
| 为什么不能把每轮分数平均一下 | 2.1(四层判分) |
| 模拟用户怎么搭、scenario 怎么写 | 2.2 |
| 外部 API 数据天天变,评测怎么可复现 | 2.3(fixtures) |
| 欺诈、大额退款这种罕见场景怎么测 | 2.3(fixtures 构造难例) |
| τ-bench / pass^k 是什么、数字多少 | 2.4 |
| rubric 怎么写才稳定 | 2.5(checklist + eligibility) |
| 全量回归要多少钱多少时间 | 2.6 |
| 模拟出来的结论能信吗 | 2.7(保真度与 offline-online gap) |
| judge 怎么校准 | 交叉第 E5 章 · LLM-as-Judge 深入 |
| 轨迹与终态怎么评 | 交叉第 E7 章 · 轨迹与 Agent 级评估 |
| 多次 trial 的统计学口径 | 交叉第 E9 章 · 评估的统计学基础 |
| 仿真在 EDD 闭环中的位置 | 交叉第 E10 章 · 评测驱动开发(EDD) |
| 线上验证与回流 | 交叉第 E12 章 · 在线评估与数据飞轮 |
二、核心概念精讲
2.1 对话评测的五个特殊难点:为什么不能"每轮打分取平均"
单轮问答评测的范式是"输入 → 输出 → 对照参考答案"。对话 Agent 把这个范式打碎了—— 阿里技术在《Agent 评测:方法论与体系设计》中把对话 Agent 的特殊难点归纳为五类, 并给出一条总纲式判据:不要只平均每轮分数——每轮都"答得还行"但最终没解决问题,仍是失败。
| # | 难点 | 典型表现 | 对评测的要求 |
|---|---|---|---|
| 1 | 上下文累积 | 关键信息散落在第 2、5、9 轮;agent 后文覆盖前文("上下文被覆盖"是阿里 RCA 中的常见根因) | 必须会话级评测;单轮 judge 看不到跨轮信息是否被正确继承 |
| 2 | 目标切换 | 用户中途改主意:"先不退了,帮我换成换货";一个会话包含多个子目标 | 场景库要含目标切换用例;按最终达成的目标判分,而非第一个目标 |
| 3 | 情绪回应 | 用户愤怒、焦虑时,"答案正确但语气冰冷"会直接升级为投诉 | 体验维度(同理心、语气)单独成 rubric,属 P2 但决定产品生死(腾讯五维之一) |
| 4 | 人工接管 | 该转人工时不转(硬扛)、不该转时乱转(甩锅);转接时上下文丢失 | 升级决策本身是评测对象:转接时机、转接时的信息交接质量 |
| 5 | 多轮引导 | agent 需要指挥用户完成动作(点链接、查设置、拍照上传),而不只是自己执行 | τ²-bench 证明"引导用户操作比直接操作难得多"(见 2.4) |
四层判分框架(阿里):对话 Agent 要同时看四个层面,任何一层单独成立都不够:
| 层 | 评什么 | 典型检查 |
|---|---|---|
| Turn(单轮) | 单条回复的质量 | 语气、格式、不泄露、不编造 |
| Session(整段会话) | 整个交互是否连贯推进 | 是否绕圈、是否重复追问、上下文是否一致 |
| Trace(执行轨迹) | 对话之下的工具调用与推理 | 工具选对了吗、参数对吗、跳过校验了吗(详见第 E7 章) |
| Outcome(最终结果) | 用户的问题到底解决没有 | 退款是否真的发起、订单是否真的改成功 |
四层的关系是:Outcome 是最终裁决,Turn/Session/Trace 是归因与护栏。 一个会话可以每轮 Turn 分都很高(礼貌、流畅、格式正确),但 Outcome 是失败的—— 用户绕了八轮还是没退成款。反过来,Outcome 成功也可能掩盖 Trace 层的风险 (跳过了订单状态校验恰好没出事,即"假阳性",详见第 E7 章)。 工程口径:门禁判 Outcome 与关键 Trace 断言,Turn/Session 分用于诊断与体验迭代,绝不互相替代。
这套四层与 Airbnb 的 step/trajectory/session 三层(第 E7 章)、 腾讯的"触发→核心逻辑→产物质量→异常容错"四场景用例组织(第 E3 章)互为表里: 对话评测的特殊性在于,Session 层的"推进质量"无法静态判分,必须让一个会动态反应的用户把会话跑完—— 这就引出了本章的主体:仿真评测。
2.2 Conversation Simulator:让 LLM 扮演用户
(1)为什么必须"按需生成会话"。 DoorDash 在 Ask DoorDash 评测 harness 的五大挑战中, 把对话评测的困境表述得最尖锐:
| 挑战 | 设计要求(DoorDash 原文表) |
|---|---|
| 开放式目标(一个用户目标有多种可接受结果) | 每个目标表达成 rubric:具体到每次能同样判,宽泛到容纳所有合法路径 |
| 执行不可见(judge 需要看到对话之下的工具调用) | 把 trace 重建为"按标准定制的视图",judge 只看该标准需要的证据 |
| 无法安全彩排(不能拿真用户试变更;历史会话不能对改过的 agent 重放) | 按需生成会话:模拟用户驱动 agent 跑场景,外围数据固定(fixtures),同场景每次一致 |
| 规模化判断(是否帮到用户需要人类级判断,但人工不可扩展) | 校准过的 LLM judge 顶替人类评审 |
| 双环境(开发与生产质量可能背离) | 真实会话与模拟会话用同一 rubric + 同一 judge |
注意第三条里的关键洞察:历史会话不能对改过的 agent 重放——agent 变了,面对同一句话的回应就变了, 对话路径随之完全不同,"重放"测的已不是同一个交互。所以正确姿势不是回放录像,而是 让一个 LLM 扮演用户,按场景设定与 agent 现场对戏,每次生成一条新会话。
(2)模拟器的解剖:scenario 三要素。 DoorDash 的 Conversation Simulator 让 LLM 扮演购物者, 一个 scenario(场景)定义三件事:开场请求、用户目标、对提问/结果的反应方式。 场景是数据而不是代码——sweep 要跑几十上百个场景,场景必须可序列化、可版本管理、可由非工程师编写。 一个结构化完整的场景配置实例(字段组织参照 DoorDash 公开描述与本特辑 lab 约定):
evalId: grocery-reorder-001
sessionInput: # 会话的环境输入(渠道、用户档案等)
channel: chat
userLocale: en-US
conversationScenario:
opening: "Reorder my usuals" # 开场请求:模拟器的第一句话
userGoal: >
完成常购清单复购;确认配送时间;不接受用含花生商品替换
persona: # 从真实工单抽取:脾气 + 情境叙事 + 期望结果
temper: "耐心有限,但讲道理"
contextStory: "每周日晚固定复购的常客,这周赶时间"
expectedOutcome: "订单确认 + 明确配送窗口"
reactionPolicy: # 反应策略:模拟器行为的"性格"
whenAskedClarification: "挤牙膏式补充:一次只说一条自己知道的信息"
whenNoProgressTwice: "要求升级/投诉——像真人一样给过机会才发火"
whenResultWrong: "反驳并给出自己的依据,不轻易接受"
fixtures: # 冻结外部状态(见 2.3)
get_reorder_items: reorder_history_v1
rubric: [reorder-checklist-v2, guardrail-communication, trust-honesty]
trials: 8 # 每场景重复运行次数(支撑 pass^k,见 2.6)
(3)persona 从哪来:四条进料线。
| 来源 | 做法 | 出处 |
|---|---|---|
| 真实工单抽取 | persona 携带脾气、情境叙事、期望结果,会反驳、补充细节、逐步升级而非一上来就转人工 | DoorDash 仿真评测飞轮 |
| 隐式画像挖掘 | 从真实人机交互记录反推未明说的特征(性格、表达习惯、目标倾向),驱动的模拟器在个性化、真实性、多轮一致性上优于直接 prompt | arxiv 2502.18968(2025) |
| 真实日志语料 | WildChat(100 万条 ChatGPT 交互,arxiv 2405.01470,2024)、LMSYS-Chat-1M(arxiv 2309.11998,2023)提供真实用户表达分布 | 构建模拟器/评测集的原料 |
| 规模化合成 | 以 persona 网格批量合成(腾讯参与的 10 亿 persona 工作,arxiv 2406.20094,2024);PersonaBOT 用 RAG 增强 persona 的准确性(arxiv 2505.17156,2025) | 扩大场景覆盖 |
注意方向上的呼应:真实日志 → 隐式画像 → 模拟器 → 回归测试,这本身就是一条数据飞轮 (详见第 E12 章)——模拟器的 persona 不必全靠手写模板,可以从生产对话中"挖掘"。
(4)行为真实性:模拟器要做动态判断,而不是念台词。 一个合格的模拟用户在会话中持续回答四个问题:
是否已解决?是否有进展?是否需要更多信息?是否在绕圈? 并据此决定配合、追问还是升级。
DoorDash 的要求是升级行为像真人:给过几次机会、agent 反复答得差才投诉,
会反驳、会补充细节、会逐步升级,而不是一上来就转人工。
本特辑 labs/eval_lab07_simulator_fixtures.py 用一个最小状态机实现了这种"真人耐心":
未解决但有进展 → 继续配合;被反问 → 补充信息;连续 2 次无进展 → 升级投诉
(cd evals-special/labs && python3 eval_lab07_simulator_fixtures.py)。
(5)合作型模拟的系统性高估与非合作模拟。 如果模拟用户总是礼貌、信息完备、轻易满意, 它会把 agent 的能力系统性高估。ChatChecker(arxiv 2507.16792,2025)把"找茬式测试"工程化: persona 驱动的非合作用户模拟器——用户会不耐烦、跑题、表达模糊、中途改主意—— 配 Breakdown Detector(检测对话崩坏点,定位失败轮次,服务回归归因)与 Dialogue Rater(对系统质量打分)三件套。 工程推论:场景库必须包含"难缠用户"切片(易怒、模糊、改主意、多目标), 否则你在一个礼貌的假用户身上测出了一个礼貌的假高分。 同理,lab07 的 checklist 还验证了一件反直觉的事:编造商品的 agent 可以让"用户"满意收尾—— 模拟用户的满意不等于任务正确,结果判定必须独立于对话氛围(见 2.5)。
2.3 Fixtures:冻结外部世界,否则分数测量的是噪声
(1)问题:实时外部状态让评测不可复现。 对话 Agent 的背后是一圈活着的外部系统: 商品目录每天在变、门店库存实时波动、测试账号状态漂移。如果评测时真的调用这些接口, 同一条用例每次测的其实是不同的题——今天通过明天失败的差异,可能全部来自环境而不是 agent。 DoorDash 的 Lesson Learned 第二条原话是:"环境必须受控,否则分数测量的是噪声。"
(2)解法:录制工具返回,回放替代实时调用。 fixtures 的做法是:
把工具的真实返回录制成固定 payload,评测运行时拦截工具调用、原样回放。
DoorDash 复购场景的实例:开场请求 "Reorder my usuals",工具 get_reorder_items
固定返回录制的 reorder_history_v1——一份 Albertsons 的历史订单
(Meadow Gold 全脂牛奶 ×2、Oroweat 全麦面包、牛油果、Ben & Jerry's 冰淇淋……)。
于是每次运行 agent 都看到同一份订单 → 预期结果可预测 → judge 可以对照同一商品集评分。
把这份 fixture 展开成结构化 JSON 大致如下(商品清单忠实于原文,字段结构为示意):
{
"fixture_id": "reorder_history_v1",
"recorded_from": "生产会话录制并脱敏",
"merchant": "Albertsons",
"items": [
{"name": "Meadow Gold Whole Milk", "qty": 2},
{"name": "Oroweat Whole Wheat Bread", "qty": 1},
{"name": "Avocado", "qty": 3},
{"name": "Ben & Jerry's Ice Cream", "qty": 1}
]
}
(3)fixtures 的三重价值与对照。
| 方案 | 可复现性 | 能测什么 | 风险 |
|---|---|---|---|
| 实时调用生产/测试 API | ❌ 数据随时间漂移 | 当下真实分布 | 分数方差混入环境噪声;可能产生真实副作用 |
| 重放历史会话 | ⚠️ 只有一侧可控 | 旧 agent 的行为 | agent 变更后对话路径完全不同,重放失效(2.2) |
| fixture + 模拟器按需生成 | ✅ 外部状态冻结 | 任意场景含罕见难例 | 保真度需要持续校验(2.7) |
第三重价值常被忽略:fixture 让"真实里很难遇到的场景"变成可批量测试的用例—— DoorDash 用 mock 后端模拟订单/退款/时间戳来复现欺诈、大额退款等边角案例。 这类场景在真实流量里占比极低(正是第 E3 章说的幸存者偏差),却恰恰是资损与合规的高风险区。
(4)fixture 的治理。 fixtures 不是写完就完:
- 版本化:
reorder_history_v1的命名暗示了版本演进;场景配置与 fixture 一起进仓库、带 provenance(EDDOps 对评测资产的通用要求,见第 E10 章)。 - 防 mock 漂移:录制的返回要与生产 API 定期对账——上游 schema 变了、字段语义变了而 fixture 没更新,评测全绿、上线即炸(主手册第 8 章 · Agent 评估与可观测性)。
- 环境隔离:评测执行环境要隔离,避免多用例共享状态导致分数不可复现(阿里);每条用例从干净状态启动。
- 脱敏合规:fixture 源自真实数据时必须去标识化、用途限定(Airbnb 隐私注记,见第 E3 章)。
动手:
labs/eval_lab07_simulator_fixtures.py专门设置了对照组——同一 agent、同样采样随机性下, fixture 组 N 次评分一致,而"漂移的伪实时数据"组方差显著膨胀,亲眼验证 "环境不受控时分数测量的是噪声"。运行:cd evals-special/labs && python3 eval_lab07_simulator_fixtures.py
2.4 标准范式:从 τ-bench 到 DoorDash 全流水线
(1)τ-bench:对话 Agent 仿真评测的模板。 学术侧的范式源头是 Sierra 的 τ-bench(arxiv 2406.12045,2024):LLM 用户模拟器与 agent 多轮对话, agent 需遵守领域政策(retail/airline 域的企业规则)并调用 API 工具, 最终以数据库终态哈希做可验证判定(而非只看对话文本),并用 pass^k 刻画"单次通过率在多次独立试验下的一致性"。这套"模拟器 + 可验证终态 + 重试验可靠性"设计 成为后续几乎所有对话 Agent 仿真评测的模板,也被 DoorDash 等工业实践直接借用。
τ-bench 最具冲击力的数字(论文摘要转述,量级可信、精确值以原文为准):
| 指标 | retail 域 | airline 域 | 含义 |
|---|---|---|---|
| pass^1(单次成功率) | ~61% | ~35% | "能做对一次" |
| pass^8(8 次全对) | ~25% | ~16% | "稳定做对" |
口径提示:上表为论文摘要数字;Sierra 官方榜单(taubench.com)后续报告的 GPT-4o 更高——retail 60.4%、airline ≈42%。本手册凡引 τ-bench GPT-4o 成绩,论文口径记 ~35%(airline)、榜单口径记 ~42%,两者并存,切勿混用(另见本章末数字附注与第 E2 章)。
GPT-4o 从 pass^1 到 pass^8 腰斩再腰斩,说明 "能做对一次"与"稳定做对"之间差距巨大—— 对话每多一轮、任务每多一步,误差都在复合。这也是为什么生产级对话 Agent 的发布门槛 应当使用 pass^k(低 k)而非 pass@1(指标定义与无偏估计见第 E2 章,统计口径见第 E9 章)。
(2)τ²-bench:双控与"多轮引导"难点。 τ²-bench(arxiv 2506.07982,2025)把范式升级为 dual-control(双控):模拟用户不再只是说话,也能自己执行工具动作(点击邮件链接、改路由器设置), agent 必须通过对话引导用户完成动作,并处理联合行动中的信息不对称;新增 telecom 域, 任务涉及跨系统排障、指导非专家用户。评测显示:即使最强模型,在双控设定下的成功率也远低于 τ-bench 单控设定——引导用户操作比直接操作难得多。 这为 2.1 的第五个难点(多轮引导)提供了定量注脚:客服/支持类 agent 的真实瓶颈是"指挥用户", 仿真评测若让用户侧没有行为能力,会系统性高估 agent。
(3)DoorDash 的全流水线:评测镜像运行时架构。 DoorDash 是多 agent 架构: 用户消息 → Orchestrator → 路由到领域 Agent(如 Restaurant Discovery Agent)→ 领域 Agent 直接处理或交还 Orchestrator。评测与之同形:路由在 Orchestrator 评;护栏贯穿全流程评; 任务能力在每个领域 Agent 评(组织方式详见第 E7 章)。对话仿真评测在这条流水线上的位置:
场景库(scenario + persona + fixture)
→ Conversation Simulator 生成模拟用户消息
→ 被测 agent 全流程运行(工具调用被 fixture 拦截回放)
→ OpenTelemetry trace 落 ClickHouse → Transcript Builder 按标准切证据片
→ 校准过的 LLM judge 逐条标准二元判定(verdict + rationale)
→ 汇总为会话级分数 → 全量 sweep 报告(按场景 × trial)
两个贯穿性约定:① 离线与线上用同一 rubric + 同一校准 judge——这是 DoorDash Lesson Learned 第三条: 离线结果只有能带到线上才有意义;若离线线上各自调 judge,两边分数会以难调和的方式背离 (详见第 E12 章)。② judge 校准用 GEPA(arxiv 2507.19457,2025): 迭代提出 judge prompt 修订,只保留在留出集上提升与人工标注一致率的版本 (GEPA 机制与"eval 作为优化目标"见第 E10 章;judge 校准全流程见第 E5 章)。
(4)generator-verifier gap:为什么 judge 模式可行。 DoorDash 仿真评测飞轮依赖一个经验事实: 判定比生成容易——LLM 裁判读全对话 + 工具调用 + 政策后给二元判定 + 理由, 比让模型从零生成完美服务要可靠得多;裁判再用人工标注样本校准到与专家一致后才上量。 这正是"LLM-as-a-Judge"在对话场景成立的前提(judge 的偏差与校准见第 E5 章)。
2.5 场景级 checklist rubric:低方差信号
仿真评测把"跑会话"变成了自动化,但"判会话"仍然是方差的主要来源。 DoorDash 的答案是把开放式目标翻译成场景级 checklist 式 rubric。
(1)实例:素食 taco 购物清单。 DoorDash 杂货购物场景的 rubric 例子: "两人份 ≤$60 素食 taco 购物清单"——judge 逐项验证:每件商品都是素食 taco 原料; 小计 ≤$60。对比两条路线:
| 维度 | 宽泛通用标准("购物清单是否合理") | checklist 式场景标准 |
|---|---|---|
| 判定一致性 | 低——"合理"人各有解 | 高——每项非真即假、可附证据 |
| 方差 | 高,需要大样本才看得出差异 | 低,小样本也有用,支撑更快迭代 |
| 可归因性 | 只知道"不好" | 知道是哪一项坏了(超预算?混入荤食?编造商品?) |
| 适用面 | 任何会话 | 绑定具体场景,场景库要自己长出来 |
这与第 E5 章的通用结论一致:judge 做二值判断比打连续分可靠; DoorDash 的每条标准都是 binary check,汇总为会话级总分。
(2)eligibility 适用性前置。 checklist 有一个隐蔽杀手:不适用的标准误伤会话。 DoorDash 的设计是 judge 先判该标准是否适用本会话,不适用则跳过—— 例如食谱流程不因缺少复购步骤被扣分。适用性判断与标准判定分开, 避免"标准越多、误伤越多",也让 rubric 可以跨场景复用。
(3)与四层判分的对应。 checklist 主要落在 Outcome/Session 层; Guardrail 类标准(如"回复简洁、不向用户叙述思维过程""不呈现可证伪虚假信息") 面向全体 agent 贯穿全流程。lab07 的极简 checklist——目标商品在清单里 / 总价≤预算 / 无编造商品——足以抓住超预算与编造商品两类失败,即使"用户"在对话里表示满意。
2.6 全量 sweep 的成本账与实验设计
(1)一笔明账(DoorDash 原文数字)。 仿真评测的经济性是它成为 CI 门禁的前提:
| 项目 | 数字 |
|---|---|
| 全量 sweep 规模 | 50 场景 × 8 trials = 400 次对话 |
| 人工本地聊 | 约 1 分钟/次 → 6+ 小时 |
| 模拟器并行跑 | 约 20 分钟 |
| 飞轮吞吐 | 5 分钟内跑 200+ 场模拟对话 |
| 门禁纪律 | 一次触发跑完全流程,任何变更必须通过全部 50+ 个 eval 才能上线 |
两个数量级的时间差,正是"回归集只增不减"(第 E10 章)在经济上成立的前提。 DoorDash 报告的整套成果数字:质量信号从平均 1 条/天员工反馈 → 2,000 个/天自动评分会话; 全国上线前 agent 质量分 +8 分、错误率近乎减半,达到生产发布标准; 11 轮迭代中第 3 轮曾回落——回归是常态,门禁的价值正是抓住它; 模拟环境幻觉率下降约 90%;离线提升与线上真实流量表现一致。 这套 harness 还支撑了底座模型迁移(Claude Sonnet 4.6 → Gemini 3.5 Flash): 先被离线评测拦下(分数大跌),定位为兼容性差距而非能力差距,小修后 延迟降 35%、质量无损(案例全程见第 E15 章)。
(2)为什么是 8 trials。 每场景重复 N 次不是浪费,而是可靠性测量本身: N 次独立运行支撑 pass^k 估计(τ-bench 口径报 pass^1 与 pass^8), 并吸收模型采样与模拟器行为的方差。实验设计要点:
- 固定模拟器与 seed:模拟用户的模型版本、温度固定,随机种子受控——模拟器是非确定性来源之一,其变异要么固定、要么用多 trial 吸收(统计处理见第 E9 章);
- trial 间环境重置:fixture 保证外部状态一致,每条 trial 从干净状态启动;
- 报告统计口径:通过率带置信区间(Wilson/bootstrap),版本对比用配对检验—— 400 次对话的样本量下,多大的分差才算"真变好"是统计问题而非感觉问题(第 E9 章)。
(3)分层预算。 E2E 对话仿真位于评测金字塔顶层(单元 grader → 轨迹/结构测试 → E2E 模拟, arxiv 2601.18827,2026),是最贵的一层。落地节奏通常是:PR 触发 smoke 场景子集(少量场景 × 少 trial)
- 每日/每次模型变更跑全量 sweep + 高风险切片(欺诈、退款、人工接管)常设。 OpenAI 托管 Evals 平台的下线(2026 宣布)也提示:评测资产(场景 + fixture + rubric) 要用开放格式托管在自家仓库,与运行平台解耦(第 E10 章)。
2.7 模拟器的保真度与仿真评测的边界
仿真评测最大的风险不是技术故障,而是在假用户身上测出假结论。三个层次的清醒:
(1)模拟器 ≠ 真实用户。 模拟器与被测 agent 常用同族模型(同源偏差),可能互相"太好懂"; 合作型模拟高估、非合作型又可能过于刁钻;学界尚无公认的"模拟器保真度"标准指标。 DAUS(arxiv 2402.13374,2024,Amazon)直面了这个问题:未经微调的通用 LLM 当用户模拟器 不可靠——会偏离用户目标、幻觉出不存在的对话事实;DAUS 用领域数据微调 + 受控解码, 显著提升目标一致性(goal compliance)并抑制幻觉行为,使模拟对话更接近真实分布。 工程结论:用户模拟器本身需要被"评测与校准"——模拟器质量直接决定下游 agent 评测效度; 领域微调/对齐模拟器是工业级仿真评测流水线的常见投资。
(2)保真度抽检的常规动作。 没有单一指标能裁决保真度,工业界的务实做法是一组抽检:
| 动作 | 检查什么 | 失效信号 |
|---|---|---|
| 真实对话小样本对照 | 模拟会话与真实会话在轮次分布、升级率、失败模式上是否同构 | 模拟器"太乖"或"太刁" |
| 换模拟器模型敏感性分析 | 换另一个模型当用户,版本对比结论是否翻转 | 结论翻转 → 测的是"应付某模拟器的技巧" |
| persona 来自真实日志 | 隐式画像(2502.18968)/真实工单抽取是否持续更新 | 校准集过时,分布漂移 |
| offline-online 相关性回测 | 离线模拟涨幅是否在线上兑现 | 系统性不兑现 → 重建场景库 |
(3)offline-online gap:离线是必要不充分。 学术侧的实证很直接: 真实客服对话基准研究(arxiv 2510.22143,2025)明确指出,由于部署环境的分布漂移与交互复杂性, 强 offline 基准成绩只是部署可靠性的弱指标。另一侧,Discord 的 AITL 数据飞轮 (EMNLP'25 工业赛道,ACL Anthology 2025.emnlp-industry.135)把 offline 与 online 评测设置之间的一致性当作专门对象来量化。 DoorDash 能报告"离线提升与线上一致",前提是同一 rubric + 同一校准 judge 两边跑。 完整治理链路:离线门禁 → shadow → canary → A/B → 线上抽样评测, 阿里给了最硬的联动规则:离线提升但线上关键信号(转人工率、重复追问率、投诉率、满意度、 任务完成率、工单闭环率)恶化 → 触发回滚或降级(发布联动详见第 E12 章)。
(4)仿真评测系统自己也会坏。 DoorDash Lesson Learned 第四条: 评测系统自己也产生 bug 报告——被标记的失败中有真实一部分是 harness 自身故障 (judge 误报、trace 缺口),需要与业务 bug 并行修复。 所以成熟的仿真流水线都保留一条"harness 健康度"指标:A/A 噪声基线、 judge 与人工抽检的一致率漂移、fixture 失效率。评测系统本身也要被评测(主手册第 8 章同此观点)。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | 对话评测五大难点与四层判分 | ⭐⭐⭐ | 能否说出"每轮都答得还行但没解决仍是失败",Turn/Session/Trace/Outcome 如何分工 |
| 2 | Conversation Simulator 的 scenario 构成 | ⭐⭐⭐ | 开场请求 + 用户目标 + 反应策略;persona 从真实工单/日志挖掘而非凭空手写 |
| 3 | Fixtures 与环境受控 | ⭐⭐⭐ | "环境必须受控,否则分数测量的是噪声";录制回放 vs 实时调用 vs 历史重放 |
| 4 | τ-bench 范式与 pass^k | ⭐⭐⭐ | 模拟器 + 终态哈希 + 重试验可靠性;GPT-4o retail pass^1 ~61% → pass^8 ~25% |
| 5 | 模拟器保真度与同源偏差 | ⭐⭐⭐ | DAUS 的目标一致性问题;保真度抽检清单;"换模拟器结论是否翻转" |
| 6 | checklist 式 rubric 与低方差信号 | ⭐⭐ | 素食 taco ≤$60 案例;为什么二值清单比宽泛标准更稳、小样本更有用 |
| 7 | 非合作模拟 | ⭐⭐ | ChatChecker:合作型模拟系统性高估;场景库要有"难缠用户"切片 |
| 8 | 双控与多轮引导(τ²-bench) | ⭐⭐ | 引导用户操作比直接操作难得多;用户侧也要有行为能力 |
| 9 | 全量 sweep 的成本与实验设计 | ⭐⭐ | 50×8=400 对话、6h+→20min;8 trials 支撑 pass^k;固定模拟器与 seed |
| 10 | 离线-线上一致性 | ⭐⭐ | 同一 rubric + 同一校准 judge;arxiv 2510.22143"弱指标";阿里回滚规则 |
| 11 | 人工接管/升级行为的评测 | ⭐⭐ | 转接时机与信息交接本身是评测对象;升级要像真人(给过机会才投诉) |
| 12 | 罕见难例的构造 | ⭐ | fixtures 构造欺诈/大额退款;幸存者偏差的对冲 |
四、经典面试题与参考答案
题 1(基础):评测对话 Agent 和评测单轮问答有什么本质区别?为什么不能把每轮分数取平均当会话成功率?
参考答案: 单轮评测是"输入→输出→对照参考",对话评测面对五个特殊难点(阿里归纳): ① 上下文累积——关键信息跨轮分布、可能被后文覆盖;② 目标切换——用户中途改主意,一个会话多个子目标; ③ 情绪回应——答案对但语气差会升级为投诉;④ 人工接管——转接时机与交接质量本身要评; ⑤ 多轮引导——指挥用户操作比自己执行更难(τ²-bench 定量证明)。 不能平均的原因:每轮都"答得还行"但最终没解决问题仍是失败——Turn 层的礼貌流畅无法推出 Outcome 层的任务达成,用户绕八轮没退成款,平均每轮 4 分没有任何意义。 正确做法是四层分开看:Outcome 做最终裁决与门禁,Turn/Session/Trace 做归因与体验迭代,互不替代。
题 2(基础):什么是 fixtures?为什么仿真评测环境必须冻结外部状态?
参考答案:
fixtures 是把工具的真实返回录制成固定 payload,评测运行时拦截调用、原样回放。
原因:对话 Agent 背后的目录、库存、账号状态都在实时漂移,若评测时实时调用,
同一条用例每次测的是不同的题——分差可能全部来自环境而非 agent。
DoorDash 的教训原话是"环境必须受控,否则分数测量的是噪声"。
实例:复购场景开场 "Reorder my usuals",get_reorder_items 固定返回录制的
reorder_history_v1(Albertsons 订单:Meadow Gold 全脂牛奶 ×2、Oroweat 全麦面包、
牛油果、Ben & Jerry's 冰淇淋),每次运行看到相同订单,预期结果可预测,judge 可对照同一商品集评分。
附带收益:fixtures 还能构造欺诈、大额退款等真实流量里罕见的难例,对冲幸存者偏差。
治理三件事:fixture 版本化、定期与生产 API 对账防 mock 漂移、用例间环境隔离。
题 3(进阶):请设计一个用户模拟器的 scenario 结构。怎样让模拟用户的行为"像真人"而不是"念台词"?
参考答案: scenario 三要素(DoorDash 定义):开场请求(模拟器的第一句话)、用户目标(含期望结果)、 反应策略(对提问/结果的反应方式)。persona 建议携带脾气、情境叙事、期望结果, 从真实工单抽取,或用隐式画像方法从真实日志反推(arxiv 2502.18968)。 行为真实性靠动态判断而非脚本:模拟器每轮回答四个问题——是否已解决、是否有进展、 是否需要更多信息、是否在绕圈——据此选择配合、补充、追问或升级。 升级行为要像真人:给过几次机会、反复答差才投诉,会反驳、逐步升级而非一上来就转人工(DoorDash)。 还要刻意包含非合作切片:用户不耐烦、跑题、表达模糊、中途改主意(ChatChecker,arxiv 2507.16792), 因为合作型模拟会系统性高估 agent。配置应是数据不是代码——可序列化、可版本管理、非工程师可写。
题 4(进阶):τ-bench 的评测范式由哪些组件构成?它的 pass^k 数字说明了什么?
参考答案: 四个组件:① LLM 用户模拟器与 agent 多轮对话;② agent 需遵守领域政策(retail/airline 业务规则) 并调用 API 工具;③ 以数据库终态哈希做可验证判定,而非只看对话文本——抗话术干扰; ④ 用 pass^k 刻画可靠性:单次通过率在多次独立试验下的一致性。 数字(论文摘要转述):GPT-4o retail 域 pass^1 ≈60%(官方榜单 60.4%)、airline 域 ≈42%, 而 pass^8 跌至约 25% / 16%——"能做对一次"与"稳定做对"差距巨大, 因为对话每多一轮、误差复合一次。工程推论:生产级对话 Agent 应以 pass^k(低 k)作发布门槛, pass@1 只作能力上限参照;τ²-bench(arxiv 2506.07982)进一步把用户侧升级为能动手的"双控", 最强模型双控成功率也远低于单控——引导用户操作比直接操作难得多。
题 5(进阶):为什么 checklist 式 rubric 比宽泛标准更适合仿真评测?请举一个设计实例,并说明 eligibility 前置的作用。
参考答案: 宽泛标准("购物清单是否合理")人各有解,judge 判定方差高,需要大样本才看得出差异; checklist 把开放式目标拆成非真即假、可附证据的检查项,判定一致性高、方差低, 小样本也有用,支撑更快迭代,且失败时能定位到具体坏项。 实例(DoorDash 杂货场景):"两人份 ≤$60 素食 taco 购物清单"——逐项验证每件商品都是素食 taco 原料、 小计 ≤$60。每条标准都是 binary check,汇总为会话级总分。 eligibility 前置:judge 先判该标准是否适用本会话,不适用则跳过——食谱流程不因缺复购步骤被扣分。 没有这一步,标准越多误伤越多;有了它,rubric 才能跨场景复用。 延伸:判定要独立于对话氛围——编造商品的 agent 可能让模拟用户满意收尾, 所以结果检查必须查事实(商品真实性、价格),不能只问"用户是否满意"。
题 6(进阶):用户模拟器本身也是 LLM。你如何验证它的可靠性,防止"在假用户身上测出假结论"?
参考答案: 先承认已知缺陷:DAUS(arxiv 2402.13374,Amazon)证明未经微调的通用 LLM 模拟器会偏离用户目标、 幻觉出不存在的对话事实;模拟器与被测 agent 同族时存在同源偏差,互相"太好懂"; 学界尚无公认的保真度标准指标。验证手段分四层: ① 模拟器自身指标:目标一致性(是否守住 persona 目标)、幻觉率(是否编造不存在的事实), 必要时领域微调 + 受控解码(DAUS 路线); ② 真实对话对照抽检:模拟会话与真实会话在轮次分布、升级率、失败模式上是否同构; ③ 敏感性分析:换一个模拟器模型重跑,若版本对比结论翻转,说明测的是"应付特定模拟器的技巧"; ④ offline-online 相关性回测:离线模拟涨幅是否在线上兑现,系统性不兑现就重建场景库。 组织上把模拟器当资产管理:persona 从真实日志持续挖掘更新(隐式画像/数据飞轮), 合作/非合作/模糊/易怒等切片齐全,定期保真度抽检。
题 7(系统设计):为一个外卖/零售客服对话 Agent 设计端到端仿真评测体系。
参考答案: 按"场景库—演员—舞台—判官—门禁—回流"六层设计: ① 场景库:scenario = 开场请求 + 用户目标 + 反应策略,persona 从真实工单抽取 (脾气、情境叙事、期望结果),覆盖复购、退款、投诉、目标切换、难缠用户等切片; 每条场景带 provenance 与 slice 标签,场景即数据、可版本管理。 ② 模拟器:LLM 扮演用户,动态判断解决/进展/缺信息/绕圈,升级像真人(给过机会才投诉); 含非合作切片;固定模型版本与 seed。 ③ fixtures:录制工具返回冻结目录/库存/订单状态;专门构造欺诈、大额退款难例; fixture 版本化并定期与生产对账;用例间环境隔离。 ④ 判分:场景级 checklist rubric(binary check + eligibility 前置)+ 终态校验(订单/退款状态); judge 逐条标准独立评分、输入为 transcript 证据切片 + 工具调用 + 政策,输出 verdict + rationale; judge 用人工标注校准(GEPA 打磨,一致率达标才进门禁);评测镜像运行时架构——路由、护栏、领域能力分开评。 ⑤ 门禁与实验设计:全量 sweep = 场景 × 8 trials(支撑 pass^k 与方差吸收), PR 跑 smoke 子集、每日与模型变更跑全量;通过率带置信区间,版本对比用配对检验。 ⑥ 回流:线上失败与 harness 自身故障(judge 误报、trace 缺口)分两条线修复; 同一 rubric + 同一 judge 跑线上抽样,离线升线上降触发回滚;失败场景回流为新 scenario。 成本锚点(DoorDash):50 场景 × 8 trials = 400 对话,人工 6h+ → 模拟器约 20min; 上线前质量分 +8、错误率近乎减半、2,000 会话/天自动评分。
题 8(系统设计/开放):你的对话 Agent 仿真评测全绿,但上线后转人工率与投诉率没降。给出你的排查框架与治理方案。
参考答案: 先定位差距来源,五个候选: ① 模拟器失真:合作型用户过多、persona 过时、模拟器与被测模型同源互相迎合—— 做真实对话对照抽检与换模拟器敏感性分析; ② rubric 与真实痛点错位:仿真测的是任务完成,投诉来自语气、等待、解释缺失、 结果对了但没告知(把线上投诉做归因分类,反查评测盲区); ③ 环境保真度不足:fixture 与生产漂移、线上才有的真实数据形态(超长订单、多语言)没覆盖—— fixture 对账 + 用线上真实会话补场景; ④ offline-online 口径分裂:离线线上两套 judge 或两套 rubric——统一为同一 rubric + 同一校准 judge (DoorDash 原则三:各自调 judge 分数会难调和地背离); ⑤ 分布漂移:评测集停留在旧分布——对比线上抽样与场景库分布做覆盖度审计。 理论锚点:arxiv 2510.22143 明确强 offline 成绩只是部署可靠性的弱指标; 阿里联动规则最硬:离线提升但线上关键信号恶化 → 回滚或降级。 治理上把仿真定位成"必要不充分":离线门禁之外保留 shadow/canary 第二道闸, 线上抽样用同一 rubric 持续评分,offline-online 相关性定期回测,不兑现即重建场景库。
五、易错点 · 反直觉点
- 把每轮分数平均当会话成功率:每轮都礼貌流畅,用户绕八轮没解决问题仍是失败。 → 真相:Outcome 层才是最终裁决,Turn 分只做诊断。→ 记忆锚点:平均分会奖励"礼貌地不作为"。
- 用历史会话重放测新版本:以为录像回放最真实,实际 agent 一变更,对话路径完全不同,重放测的不是同一个交互。 → 真相:DoorDash 的结论是"按需生成会话",模拟器驱动 agent 现场跑场景。→ 记忆锚点:重放测的是旧 agent 的过去,不是新 agent 的未来。
- 评测时实时调用外部 API:目录在变、库存在变、账号在漂移,同一条用例每次测的是不同的题。 → 真相:fixtures 冻结外部状态,分数差异才能归因于 agent。→ 记忆锚点:环境不受控时,分数测量的是噪声。
- 模拟用户太合作:礼貌、信息完备、轻易满意的模拟器,把 agent 测出礼貌的假高分。 → 真相:合作型模拟系统性高估;场景库必须有不耐烦、跑题、改主意的非合作切片(ChatChecker)。→ 记忆锚点:假用户不会投诉,假分数不会说谎——只会骗你。
- 模拟器与被测 agent 同源:同族模型互相"太好懂",评测变成自家人对暗号。 → 真相:同源偏差需靠换模拟器敏感性分析与真实对话抽检对冲;模拟器质量直接决定评测效度(DAUS)。→ 记忆锚点:裁判、模拟器、被测者,三角关系越独立越可信。
- fixture 写完不维护:上游 schema 变了、字段语义变了,fixture 还停在旧世界,评测全绿、上线即炸。 → 真相:fixture 要版本化、定期与生产 API 对账(mock drift 治理)。→ 记忆锚点:冻结的是状态,不是维护责任。
- 只报 pass@1 不报 trial 设计:单次成功率 61% 听起来不错,τ-bench 里 GPT-4o 的 pass^8 只有约 25%。 → 真相:对话/客服类生产场景必须报 pass^k 与试验次数,能力上限与可靠性分开报告。→ 记忆锚点:能做对一次 ≠ 稳定做对。
- 只看"用户是否满意"判成功:编造商品的 agent 可以让模拟用户满意收尾。 → 真相:结果判定要独立于对话氛围——查事实(商品真实性、价格、终态),满意度只是 P2 观察项。→ 记忆锚点:满意可以被话术制造,终态不会撒谎。
- 把仿真当终点:离线模拟全绿就直接全量上线。 → 真相:强 offline 成绩只是部署可靠性的弱指标(arxiv 2510.22143);仿真之后还有 shadow/canary 与线上同 rubric 抽检,离线升线上降要敢回滚。→ 记忆锚点:仿真是排练场,不是公演。
- 忽略 harness 自身故障:失败列表里全是"agent 的错"。 → 真相:被标记失败中有真实一部分是评测系统自己的 bug(judge 误报、trace 缺口),要并行修复(DoorDash Lesson 4)。→ 记忆锚点:秤不准时,先修秤再称象。
六、推荐资源
核心论文(arxiv ID 均来自本特辑 _research/06-edd-simulation.md 调研,已核实)
- τ-bench(Sierra,2024):对话 Agent 仿真评测的范式源头——LLM 用户模拟器 + 政策遵守 + DB 终态哈希 + pass^k。 https://arxiv.org/abs/2406.12045
- τ²-bench(Sierra,2025):双控环境,用户侧也能执行工具动作;"引导比代办难"的定量证据。 https://arxiv.org/abs/2506.07982
- DAUS: Reliable LLM-based User Simulator for Task-Oriented Dialogue Systems(Amazon,2024): 模拟器自身的可靠性问题——目标一致性与幻觉,领域微调 + 受控解码。 https://arxiv.org/abs/2402.13374
- Know You First and Be You Better: Modeling Human-Like User Simulators via Implicit Profiles(2025): 从真实日志挖掘隐式用户画像驱动模拟器。 https://arxiv.org/abs/2502.18968
- ChatChecker: Dialogue System Testing Through Non-cooperative User Simulation(2025): 非合作模拟 + Breakdown Detector + Dialogue Rater。 https://arxiv.org/abs/2507.16792
- Benchmarking and Learning Real-World Customer Service Dialogue(2025): offline-online gap 实证——强离线基准只是部署可靠性的弱指标。 https://arxiv.org/abs/2510.22143
- Gromada et al., Evaluating Conversational Agents with Persona-driven User Simulations (EMNLP 2025 工业赛道,销售 bot 案例;无 arxiv 版本):persona 切片 × 业务 KPI(转化、升级率)的评测组织方式。 https://aclanthology.org/2025.emnlp-industry.16/
- Agent-in-the-Loop(Discord,EMNLP 2025 工业赛道):数据飞轮与 offline-online 一致性的量化样本。 https://aclanthology.org/2025.emnlp-industry.135/
- 延伸阅读:PersonaBOT(RAG 增强 persona 模拟器,https://arxiv.org/abs/2505.17156); WildChat 1M 真实交互日志(https://arxiv.org/abs/2405.01470); LMSYS-Chat-1M(https://arxiv.org/abs/2309.11998); Generative Agents(LLM 模拟人类行为的奠基,https://arxiv.org/abs/2304.03442); 10 亿 persona 规模化合成(Tencent 参与,https://arxiv.org/abs/2406.20094); From Simulation to Strategy(模拟器→策略规划闭环,https://arxiv.org/abs/2510.08621)。
工业博客与文档
- DoorDash《Building Ask DoorDash (Part 3): Evaluation》(2026-06-30):五大挑战表、 Conversation Simulator、fixtures、checklist rubric、GEPA 校准——本章 DoorDash 细节的第一来源。
- DoorDash《A Simulation and Evaluation Flywheel to Develop LLM Chatbots at Scale》(2026-01-26): 模拟器 persona 从真实工单抽取、mock 后端构造欺诈难例、200+ 对话/5 分钟、幻觉率降约 90%。
- Anthropic《Demystifying evals for AI agents》(2026-01):起步 20–50 个真实用例、pass@k/pass^k、 capability/regression 双套件(与第 E10 章对读)。
动手 labs
labs/eval_lab07_simulator_fixtures.py(本章配套):状态机驱动的模拟用户 + fixtures 拦截回放 + 漂移对照组方差实验 + checklist rubric。运行:cd evals-special/labs && python3 eval_lab07_simulator_fixtures.pylabs/eval_lab06_trajectory_eval.py:轨迹三层评估与"结果对但路径错"的假阳性捕获(配合 2.1 四层判分)。labs/eval_lab08_statistics_ci.py:多 trial 通过率如何报置信区间与显著性(配合 2.6 实验设计)。
章节交叉
- 第 E5 章 · LLM-as-Judge 深入:judge 的偏差、校准与 GEPA 全流程。
- 第 E7 章 · 轨迹与 Agent 级评估:Transcript Builder 证据切片、评测镜像运行时架构。
- 第 E9 章 · 评估的统计学基础:pass^k 的估计、样本量与版本对比显著性。
- 第 E10 章 · 评测驱动开发(EDD):仿真评测在 EDD 闭环中的位置与失败回流。
- 第 E12 章 · 在线评估与数据飞轮:离线-线上一把尺子、发布联动与回流。
- 第 E15 章 · 工业实践案例研究:DoorDash 案例全文(含 reasoning leakage 与模型迁移两案)。
- 主手册第 8 章 · Agent 评估与可观测性:评估环境与可复现性的通识基础(本章是其深挖)。
评估的统计学基础
一句话导读:「v2 通过率 85%,比 v1 的 82% 高,可以发布」——这句话缺了三个限定词:85% 的误差范围有多大、3 个点的差距能否与噪声区分、多大的差距才值得一次发布。本章把评测分数装进统计学的骨架:单个分数用 Wilson 区间与 bootstrap 给出误差条;评测规模用样本量公式在跑之前算清楚;版本对比用配对设计与最小可感知变化(MPP)判定真伪;pass@k/pass^k 用无偏估计量与重复实验设计报数;竞技场排名用 Bradley-Terry、tie 建模与风格控制回归。学完本章,你能现场手算 CI 与样本量,能回答一切「这个分数可信吗」类的面试题——这也是评测岗笔试计算题的全部题源。
一、知识图谱
评估的统计学基础
│
├─ 1. 基本立场:评测 = 小样本统计推断
│ ├─ 分数是统计量(随机变量),不是真值
│ └─ 五大方差来源:采样 / temperature=0 非确定性 / prompt 措辞 / judge / 题目抽样
│
├─ 2. 区间估计(给单个分数装误差条)
│ ├─ 二项比例:Wald 区间的两个致命伤 → Wilson score interval(默认)
│ ├─ Bootstrap:任意统计量的无公式误差条(重抽样单元 = 评测单元)
│ └─ 覆盖率:评判 CI 好坏的唯一硬指标
│
├─ 3. 样本量与功效(评测之前定规模)
│ ├─ 估精度:n ≥ z²p(1−p)/ε²(±2pp ⇒ ~2400 题;±1pp ⇒ ~9600 题)
│ ├─ 比版本:n ∝ 1/δ²(检出 5pp ≈ 1000 条/组;3pp ≈ 2800 条/组)
│ ├─ 先导法:ReliableEval 矩方法反解 n(2505.22169)
│ └─ 为什么 100 条 golden set 只是起点不是终点
│
├─ 4. 版本对比(差异是真是假)
│ ├─ 配对设计:同一题集 + McNemar / 配对 bootstrap
│ ├─ 直接 bootstrap「分差」,不要肉眼比两个 CI 是否重叠
│ └─ 阿里门禁三件套:置信区间 + 显著性 + 最小可感知变化(MPP)
│
├─ 5. pass@k / pass^k 的统计学
│ ├─ 无偏估计量 1 − C(n−c,k)/C(n,k)(HumanEval,2107.03374)
│ ├─ 小 n 方差爆炸与 Beta 后验替代(2510.04265)
│ ├─ pass^k:iid 假设下 ≈ p^k;τ-bench 实测 60%→25% 不可外推(2406.12045)
│ └─ 重复设计:N=3/5/8/10 取舍;repetitions ≥3 是底线
│
├─ 6. 竞技场方法论(成对比较的统计学)
│ ├─ Bradley-Terry MLE vs 增量 Elo:顺序无关性是切换的根本原因
│ ├─ Tie 建模:丢弃/半分都有偏 → Davidson / factored tie(2412.18407)
│ ├─ Bootstrap CI(典型宽 5–15 Elo)与分差检验
│ ├─ 风格控制回归(2404.04475 / Arena style control / Arena-Hard 2406.11939)
│ └─ 脆弱性:丢票敏感(2508.11847)与投票操纵(2501.17858)
│
├─ 7. 噪声与可复现
│ ├─ temperature=0 + seed 仍非确定(2410.03492)
│ ├─ 重复 3–5 次 + 聚合,排名翻转率显著下降(2509.24086)
│ └─ judge 报告规范:偏差校正 + CI(2511.21140);judge 样本效率下界(2410.13341)
│
└─ 8. 面试计算工具箱(第四节题源)
└─ 算 CI / 反解样本量 / 配对检验 / pass^k 外推 / Elo-BT 换算
30 秒抓住主线:评测是用几十到几千道题的样本,推断模型在全体任务分布上的表现——这是一个统计推断问题,不是算术问题。于是有三个必须回答的问题:① 单个分数的误差多大(2.2–2.3);② 多少样本才够(2.4);③ 两个分数的差异是真是假(2.5)。在此之上,pass@k/pass^k 有自己的估计陷阱(2.6),竞技场排名自成一套配对比较统计学(2.7),而一切结论的前提是控制住噪声来源(2.8)。2024 年之前业界普遍把跑分当成确定性点估计;2024 年起,置信区间、重复实验、显著性检验成为严肃评测报告的标配——这条演进主线贯穿本章所有论文引用。
二、核心概念精讲
2.1 评测是小样本统计推断:点估计、区间估计与五大方差来源
LLM 评测的本质:用几十到几千道题的样本,去推断模型在「全体可能任务分布」上的能力,并据此排序、做 A/B 决策。样本有限,所以任何评测分数都是一个统计量(随机变量)而不是真值——换一批题、换一次运行、换一个 judge,分数都会变。2024–2026 评测统计学的主线,就是「从点估计走向分布推断」。
一个分数至少由五个随机源共同塑造(汇总自 2410.03492、2509.24086、2505.22169 的方差来源分析):
| # | 方差来源 | 机理 | 控制手段 |
|---|---|---|---|
| 1 | 采样随机性 | temperature>0 时输出本身是抽样 | 固定温度并记录;多次 trial 取均值 |
| 2 | temperature=0 的非确定性 | 批处理效应、底层 kernel、量化的非确定性——即使固定种子,输出仍可能不同 | 重复实验;固定并记录推理栈版本 |
| 3 | prompt 措辞敏感性 | 语义等价的改写可改变结果,即使最强模型也显著存在 | 随机化评测/prompt 扰动检验(2505.22169) |
| 4 | judge 的随机性与版本漂移 | judge 自身有噪声,升级后偏差参数会变 | judge 版本锁定;人工校准集定期重估 |
| 5 | 题目集的抽样方差 | golden set 只是任务分布的一个样本 | 报告 CI;扩容时按 1/δ² 规划 |
推论一:没有误差条的分数在评审中应当被质疑——这是全章最低成本、最高收益的纪律。 推论二:发布评测结论前,把上表过一遍,至少固定并记录其中可控项(种子、温度、judge 版本、题目集快照)。
动手:用固定种子做 1000 次模拟实验,亲眼验证「声称 95% 的区间是否真的覆盖真值约 95%」——
cd evals-special/labs && python3 eval_lab08_statistics_ci.py
2.2 通过率的置信区间:Wald 的陷阱与 Wilson score interval
通过率 p̂ = X/n(n 条用例中 X 条通过)是最基础的评测指标,也是二项比例。它的标准误约为 √(p(1−p)/n)——n=100、p≈0.83 时约 3.7 个点,95% 区间约 ±7.4 个点。这就是「100 条评测集上 2–3 个点的差异看不出任何东西」的数学根源。
最朴素的区间是 Wald 区间:p̂ ± z·√(p̂(1−p̂)/n)(95% 时 z=1.96)。公式好记,但有两个致命伤:
- 端点越界:n=20、全部失败(p̂=0)时,Wald 给出区间 [0, 0]——声称「真实通过率精确等于 0」,荒谬;真实上界按「三三法则」约为 3/n ≈ 15%。p̂=1 时同理给出 [1, 1]。
- 覆盖率不足:小样本或极端比例下,声称 95% 的 Wald 区间实际覆盖率远低于 95%,是「假安全感」。
Wilson score interval(得分区间)是报告二项比例的默认选择:
z = 1.96(95% 置信水平)
p̂ + z²/(2n) ± z·√( p̂(1−p̂)/n + z²/(4n²) )
Wilson 上下限 = ────────────────────────────────────────────
1 + z²/n
三个直觉帮你记住它:
- 它是「反转得分检验」的产物:把所有「与观测 p̂ 不矛盾的 p₀」收集起来就是区间,构造方式天然比 Wald 的「以 p̂ 为中心对称外扩」更合理;
- 它做了收缩:区间中心不是 p̂,而是 p̂ 向 1/2 的加权平均(权重 z²/n),n 越小收缩越强——这正是小样本需要的保守;
- 端点永远落在 [0,1] 内,且小样本下覆盖率接近名义水平。
同一数据两种区间的对比:
| 场景 | Wald 区间 | Wilson 区间 | 评注 |
|---|---|---|---|
| n=100,85 通过 | [78.0%, 92.0%] | [76.7%, 90.7%] | 中样本下差异不大,Wilson 略宽且略向 1/2 收缩 |
| n=20,0 通过 | [0, 0](越界/荒谬) | [0, 16.1%] | 「全挂」≠ 真通过率为 0,上界仍有 16% |
| n=20,20 通过 | [100%, 100%] | [83.9%, 100%] | 「全过」也不等于完美 |
| n=30,p̂=0.5 | ±17.9pp | ±18pp 量级 | 30 题竞赛集的分辨率只有 ~±18pp |
覆盖率(coverage)是评判 CI 好坏的唯一硬指标:重复做实验,区间盖住真值的频率。95% 是声明,覆盖率模拟才是验证(lab08 用固定种子模拟 1000 次,断言 Wilson 覆盖率落在 [0.92, 0.98])。
2.3 Bootstrap:任意统计量的无公式误差条
Wilson 只解决「单个比例」。评测里还有中位数延迟、pass^k、BT 分数、胜率差……这些没有好用的闭式区间,通用解法是 bootstrap:
重复 B 次(B = 500 ~ 1000):
从原始评测单元中【有放回】重抽样出同规模样本
在重抽样集上重算统计量(准确率 / BT 分数 / 两模型分差 / ……)
取 B 个统计量的 2.5% 与 97.5% 分位数 → 95% CI
三个使用要点,全是面试追问点:
| 要点 | 说明 | 反例 |
|---|---|---|
| 重抽样单元 = 评测单元 | 成对比较按「对局」抽,分类评测按「题目」抽,多轮任务按「会话」抽 | 把一道多轮对话题拆成轮次独立重抽 → 低估方差、CI 假窄 |
| 比较两模型,bootstrap「分差」 | 对同一重抽样同时算两模型分数取差,直接看差值 CI 是否盖住 0 | 各自算 CI 再肉眼比是否重叠 → 保守且口径错误(见易错点 2) |
| B 不能太小 | B<200 时分位数本身有 Monte Carlo 误差 | B=50 的 CI 每次跑都不同,报告不可复现 |
bootstrap vs 公式法怎么选:二项比例优先 Wilson(稳定、无模拟误差、可复现);任何非比例统计量、或分布假设不放心时用 bootstrap;两者都不可行(样本极少、强依赖结构)再考虑 Beta 后验等贝叶斯方法(2510.04265、2504.21303)。bootstrap 也是配对比较显著性检验的方法学源头之一(NLP 经典的配对 bootstrap 检验,Koehn 2004)。
2.4 样本量计算:多少题才够
评测集规模不该拍脑袋,它由「你要多高的分辨率」反解出来。分两类问题。
问题一:估计单个通过率,要 ±ε 的精度需要多少题?
n ≥ z² · p(1−p) / ε² (z=1.96 对应 95%;p 未知时取最坏情况 p=0.5)
速查表(95% 置信水平):
| 目标半宽 ε | p=0.5(最坏情况) | p=0.8 |
|---|---|---|
| ±5pp | ~385 | ~246 |
| ±3pp | ~1,068 | ~683 |
| ±2pp | ~2,400 | ~1,537 |
| ±1pp | ~9,600 | ~6,147 |
(±2pp 需 ~2400 题、±1pp 需 ~9600 题与调研素材一致。)这解释了两个业界现象:① 把精度做细极其昂贵——从 ±2pp 到 ±1pp 样本量翻两番(n ∝ 1/ε²);② 30 题的竞赛集(如 AIME 类)半宽约 ±18pp,在统计上根本无法区分前沿模型——业界经验法则是 ~1000 题起步才有基本功效。
问题二:比较两个版本,要检出 δ 的差异需要多少题?
双比例比较(双侧 α=0.05,功效 1−β=0.8,z_β=0.84):
每组 n ≈ (z_{α/2} + z_β)² · 2·p̄(1−p̄) / δ² (p̄ = (p₁+p₂)/2;加连续性修正再上浮 10–20%)
基线 80% 时的速查表(与第 E2 章门禁口径一致):
| 想检出的差异 δ | 每组所需样本量(约) |
|---|---|
| 10pp | 250 |
| 5pp | 1,000 |
| 3pp | 2,800 |
| 1pp | ~25,000 |
1/δ² 定律是评测经济学的第一性原理:想检出的差异减半,评测预算翻两番。「感觉够了」通常远不够——区分两个真实胜率只差 1% 的模型,需要数千次成对比较。
为什么 100 条 golden set 是行业常见起点(阿里 50–200 条、Airbnb 50–100 条)?四个理由:
- 精度匹配门禁语义:n=100 时通过率 CI 半宽约 ±8pp,足以区分「82% vs 90% 门槛」这类大差距——门禁要的是拦截明显劣化,不是测微差;
- 迭代速度:100 条在分钟级跑完,支撑「一次一变量」的高频迭代(第 E10 章);
- 人工可审:Airbnb 的「100 样本人工精读法」要求专家读得完每一条输出与 trace;
- 成本可控:agent 级评测单条成本高,100 条 × N 次重复才在预算内。
但要清楚它的边界:n=100 只能检出 ~8pp 以上的差异;需要分辨 3pp 就得扩到 ~2800 条(配对设计可显著更少),或接受「小提升不值得发布」的 MPP 设定(2.5)。起点与终点之间,用样本量公式显式做预算。
先导法(把拍脑袋变成实验+公式):ReliableEval(2505.22169,EMNLP 2025 Findings)针对「评测对 prompt 措辞高度敏感」提出随机化评测——对一个题目生成大量语义保持的 prompt 扰动,把评测对象从单点 prompt 扩展为 prompt 分布;再用矩方法从先导样本估计分数方差 σ̂²,反解所需样本数:
n ≥ ( z_{α/2} · σ̂ / ε )²
落地姿势:先用 10% 预算跑先导集估方差,再决定全量规模。该框架在 GPT-4o、Claude-3.7-Sonnet 等 5 个前沿模型上验证:即使最强模型也存在显著 prompt 敏感性;对高方差任务(开放生成、多轮 agent)尤其必要。
2.5 版本对比的显著性:配对设计与阿里门禁三件套
「v1 82%,v2 85%,v2 更好?」——先看设计,再看检验。
配对设计优于独立设计,原因是评测里最大的噪声源是题目难度差异,而不是模型差异:
| 设计 | 做法 | 噪声结构 | 检出力 |
|---|---|---|---|
| 独立设计 | v1、v2 各抽一批题分别跑 | 题目难度差异 + 模型差异混在一起 | 低:差异被题目噪声淹没 |
| 配对设计 | 两版本跑同一批题,逐题对比 | 题目难度被「自己当自己的对照」钉死,只剩同题上的版本差异 | 高:检出同一 δ 所需样本量显著更小 |
配对数据的标准检验是 McNemar 检验:把每题的两版本判定整理成 2×2 表,只看不一致的题——A 对 B 错(b 题)与 A 错 B 对(c 题):
χ² = (|b − c| − 1)² / (b + c) (df=1;χ² ≥ 3.84 即 α=0.05 显著)
直觉:两版本都做对/都做错的题对「谁更好」毫无信息量;全部信息集中在不一致的题上。等价地,也可以对「逐题分差」做配对 bootstrap,取差值 CI 看是否盖住 0。不要用两独立比例的 z 检验——那是独立设计的工具,用在配对数据上既浪费信息又可能错。
手算示例(面试计算题常见形态):n=100 配对,两版本都做对 70 题、A 对 B 错 8 题、A 错 B 对 14 题、都做错 8 题。裸通过率 A=78%、B=84%,「B 高 6 个点」;但 McNemar 只看翻转:χ²=(|8−14|−1)²/(8+14)=25/22≈1.14 < 3.84,不显著——6pp 的裸差距里,不一致样本太少、方向性不够强,证据不足以支持「B 更好」。这个例子说明配对检验的判据是翻转样本的数量与方向比,而不是裸分差。
阿里门禁三件套。阿里对版本对比的统计口径要求(原文表述):
「门禁不只看差了多少,还要看差异是否超过统计噪声。」
落到纸面是三件事缺一不可:
- 置信区间:关键指标报告区间(比例用 Wilson,其余用 bootstrap),不报 CI 的点估计视为噪声;
- 显著性判断:与基线做配对检验,差异要能被证明不是抽样波动;
- 最小可感知变化(MPP):提前定义「提升多少才值得发布」。统计上能检出 0.5pp,不等于 0.5pp 值得一次发布风险——MPP 把「值不值」从统计问题还原为业务决策。
工作示例(lab08 完整复现了这个实验):
| 口径 | v1=82%、v2=85%、n=100 | 同样 3pp、n=2000 |
|---|---|---|
| 单版本 CI(约) | ±7.4pp,两区间大幅重叠 | ±1.6pp |
| 结论 | 不可判:差异远小于统计噪声 | 可判:差异超过噪声 |
同一个 3pp,样本量 20 倍之差,结论从「不能发布」变成「可以发布」。这就是门禁统计口径的意义:不是卡流程,而是把「信不信这个差异」变成可计算的量。
两个补充纪律:① 门禁同时看多个指标时,先指定一个主指标,其余按层级决策——m 个指标各自按 95% 单独判定,至少一项误报的概率是 1−0.95^m,会随指标数膨胀;② 显著性是「有没有差异」,MPP 是「值不值得」,两者都过才放行(见易错点 3)。
2.6 pass@k 与 pass^k 的统计学:估计、方差与重复实验设计
pass@k 的无偏估计量(HumanEval,2107.03374,OpenAI 2021):每题采样 n 个解、c 个通过,则
pass@k = 1 − C(n−c, k) / C(n, k)
它是「从 n 个解里无放回抽 k 个、至少一个通过」的组合概率,避免了「先抽 k 个再看是否通过」的点估计偏差。例:n=10、c=3 时,pass@1 = 0.3(与 c/n 一致),但 pass@2 = 1 − C(7,2)/C(10,2) = 53.3%——明显高于朴素的「30% × 2」。
pass@k 点估计的统计缺陷(2510.04265 的系统批判):
- 每题样本数 n 常常很小(许多新 benchmark n=1~20),n<20 时 pass@k 点估计方差极大;
- 不同 n、不同题目难度混合下的 pass@1 完全不可比——横向对比必须统一 n;
- 替代方案:把每题通过率 p 视为随机变量,用 Beta 后验(如 Beta(c+1, n−c+1))刻画并聚合时传播不确定性,输出能力的后验分布而非单点分数;低样本设置下排序稳定性显著更好。
- 务实共识:保留 pass@k 但必须附带 n 与 CI(bootstrap 或 Beta 近似),或同时报告低方差的平均通过率 avg@k。
pass^k:鲁棒性指标。pass^k = 同一任务独立运行 k 次全部成功的比例(τ-bench 2406.12045 系统提出,2024)。若各次尝试独立同分布、单任务成功率 p,则 pass^k ≈ p^k——衰减速度远超直觉:
| p \ k | 1 | 3 | 5 | 8 |
|---|---|---|---|---|
| 0.95 | 95% | 85.7% | 77.4% | 66.3% |
| 0.90 | 90% | 72.9% | 59.0% | 43.0% |
| 0.80 | 80% | 51.2% | 32.8% | 16.8% |
但不能拿 (平均 pass@1)^k 外推 pass^k。τ-bench 的实测数字(论文摘要转述口径):GPT-4o 在 retail 域 pass^1 ≈60%(官方榜单 60.4%),而 pass^8 ≈25%(摘要 <25%)——若按 iid 外推,0.60^8 ≈ 1.7%,与实测差出一个量级。原因有二:① 任务难度异质(部分任务几乎每次都对、部分几乎每次都错,pass^k 由「稳定会做的题」决定);② 各次尝试正相关(同类错误反复出现)。反过来,若系统存在上下文污染、残留状态、下游限流等破坏独立性的因素,实测 pass^k 也可能更差。结论:pass^k 必须实测,不能外推;报告时同时给 pass@1 与 pass^k,两者的差距就是系统方差的直接度量。工程惯例 k 取 4–8,τ-bench 的 k=8 成为行业标杆。
重复实验设计:N=3/5/8/10 怎么取舍
| N | 典型用途 | 代价与收益 |
|---|---|---|
| 3 | 最低可行重复:筛选候选变更、CI 冒烟 | 性价比拐点:3–5 次重复 + 均值/中位数聚合能显著降低排名翻转率(2509.24086) |
| 5 | 腾讯评分规则的一致性口径(「N 次全达标取均值,建议 N=5」) | 兼顾成本与稳定性,适合日常门禁 |
| 8 | τ-bench pass^8 口径;DoorDash 全量 sweep = 50 场景 × 8 trials = 400 次对话(人工约 6 小时+,模拟器约 20 分钟) | 可靠性发布指标的标准选择 |
| 10+ | 高风险发布评估、对外论文级结论 | 边际收益递减,仅在方差估计本身要很准时用 |
两条依据:其一,单次运行的排名翻转概率不可忽略——在典型 benchmark 规模下,3–5 次重复 + 聚合能显著降低翻转率(2509.24086),这与 2410.03492、2504.07086 相互印证:重复次数是评测预算里性价比最高的一项,比重跑新 benchmark 便宜得多,却能直接消除排名噪声;其二,对 agent 这类高方差任务,预算应分配给「重复次数 + prompt 扰动」,而不是只堆新题目。内部评测平台的合理默认:num_repeats ≥ 3,报告均值 ± 区间。
动手:模拟 N 任务 × K 次重复的 agent 结果矩阵,亲眼看 pass@k 与 pass^k 随 K 分道扬镳——
cd evals-special/labs && python3 eval_lab01_metric_system.py
2.7 竞技场方法论:Bradley-Terry、tie 建模、bootstrap CI 与风格控制
Chatbot Arena 把偏好评测从「固定 benchmark」变成「众包配对比较」,也随之引入一整组统计问题:多少投票才够?分差多少算真?平局怎么办?风格偏好算不算偏差?这套方法论由四篇工作奠基(2403.04132、2412.18407、2406.11939、2404.04475)。
Bradley-Terry vs Elo。对每场对局 (i, j),BT 模型把胜率建模为潜在强度之比:
P(i 胜 j) = γᵢ / (γᵢ + γⱼ),γ > 0
用全部对局做极大似然估计(通常加先验/锚点约束防漂移),再换算到 Elo 尺度:Elo_i = 400·log10(γᵢ/γ_anchor) + Elo_anchor。而 Elo 是在线增量更新:Elo_i ← Elo_i + K·(outcome − expected),期望胜率 = 1/(1+10^(−ΔR/400))。两者是同一概率模型的两种算法:
| 维度 | 增量 Elo | Bradley-Terry MLE |
|---|---|---|
| 计算方式 | 序贯增量,每场更新 | 离线联合极大似然 |
| 结果依赖 | 依赖对局顺序、初始分、K 因子 | 顺序无关 |
| 统计推断 | 难以给出联合 CI / 假设检验 | 可做 bootstrap CI、协方差与渐近正态推断 |
| 适用 | 实时展示 | 正式排名与比较(LMSYS、Arena-Hard、leaderbot 的选择) |
这就是 2024 年各家排行榜从 Elo 切换到 BT 的根本原因:Elo 只是 BT 的一种粗糙在线近似。Chatbot Arena(2403.04132,ICML 2024)论文发表时已有 240K+ 投票、90K+ 用户、50+ 模型,其最终方案就是 BT 评分 + bootstrap 置信区间(对投票数据有放回重抽样、重新拟合 BT、取分位数得 95% CI),BT 分数的 bootstrap CI 通常宽 5–15 Elo 分——媒体常把 2–5 分的差距宣称为「超越」,而这样的差距经常落在 CI 重叠区内。
Tie 不能丢。Arena 投票中约一成以上是平局,标准 BT 不支持 tie,三种处理方式的对比:
| 做法 | 问题 |
|---|---|
| 丢弃 tie | 浪费 ~10% 数据,且平局若非随机出现会引入偏差 |
| 各记半分(half-win) | 简单但没有概率模型支撑 |
| tie 扩展模型:Rao-Kupper(带优势阈值)、Davidson(P(tie) ∝ 2ν√(γᵢγⱼ)) | 有统计基础 |
| factored tie model + 协方差估计(2412.18407) | 显式建模「平局倾向」,并给出排名参数的协方差结构与渐近正态性——模型间分差可做正式假设检验,而不只是看 CI 是否重叠;开源实现 leaderbot |
2412.18407 是竞技场方法论从工程实践到统计学的正式化。自建竞技场/内部偏好评测平台时,这是最值得直接抄的作业:BT MLE 替代增量 Elo;显式建模 tie;相邻排名的分差必须经联合协方差检验才能宣称显著。
排名有多脆弱?两项攻击性研究给出警告:
| 研究 | 发现 | 工程对策 |
|---|---|---|
| 丢票敏感性(2508.11847) | 仅丢弃一小撮成对比较样本,顶部排名就可能改变——根源是顶部模型真实差距小 + 比较图稀疏(模型对交战不均) | 均衡比较图:对头部模型对主动加权采样(active pairing) |
| 投票操纵(2501.17858) | 用影响函数识别「翻转哪些投票对排名影响最大」,少量操纵票即可实质性提升排名 | 投票审计、异常检测、对高影响力投票复核;排名指标不应成为唯一优化目标 |
风格控制回归(style control)。LLM judge 系统性偏好更长的回答,导致「把模型调啰嗦」就能刷分(verbosity hacking)。Length-Controlled AlpacaEval(2404.04475)的解法是回归去偏:
偏好 vote ~ β₀ + β₁·model + β₂·length + β₃·markdown + …
用逻辑回归拟合偏好后,把所有回答的长度等风格变量固定在参考值(如全体均值)时计算期望胜率(G-computation / 回归调整思想),得到 length-controlled win rate。效果:与 Chatbot Arena 的 Spearman 相关性从 0.94 提升到 0.98;verbosity 操纵带来的胜率增益从约 12% 压缩到约 3%。Chatbot Arena 随后引入 style control(多元逻辑回归控制长度、markdown 格式等混淆变量,见 LMSYS 2024-08 博客),并同时发布 overall 与 style-controlled 两个榜单——这等于承认「风格偏好是偏差还是真实用户偏好」取决于你要回答什么问题(学界争议,见 2.8 与第 E13 章)。Arena-Hard(2406.11939,ICML 2025)的 v2 同样引入 style control,其完整配方是「竞技场分布蒸馏 + 强 judge 成对比较 + BT 分数」:从 Arena 真实投票与 WildChat 中聚类蒸馏出 500 道高区分度题目(Arena-Hard-Auto),用强模型 judge 对候选模型 vs 基座模型做成对比较,再用 BT 把胜率升级成可比较的分数——与 Chatbot Arena 人类排名相关性 98.6%,区分度约为 MT-Bench 的 3 倍,成本 <$20。这是「离线自动评测对齐在线竞技场」的模板,其「固定一个参考模型、报告 BT 分数而非裸胜率」的做法被大量内部 eval 系统模仿。
工程结论:任何怀疑输出表面特征(长度、格式、emoji、代码块数量)与质量混淆的 judge 评测,都应做混淆变量回归检查——方法只是一个逻辑回归,却能把抗操纵性提升一个量级。
动手:纯标准库实现 BT 极大似然 + Elo + bootstrap 分差 CI + 风格控制,看朴素 BT 如何「把长当强」、修正后如何恢复真实排序——
cd evals-special/labs && python3 eval_lab11_arena_bradley_terry.py
2.8 噪声与可复现:方差清单、重复实验与 judge 报告规范
「temperature=0 + 固定 seed 所以结果确定」是常见误解。图灵研究所的实证研究(2410.03492)核心结论:即使 temperature=0 + 固定随机种子,模型输出仍可能不确定——批处理效应、底层 kernel、量化的非确定性都会让单次跑分不可复现。该工作还系统研究了重复次数、benchmark 规模、温度对分数均值与预测区间的影响,并提出低成本的分数不确定性量化方法(子集重抽样/重复实验的稀疏设计),让「给分数加误差条」不再昂贵。
可复现性控制清单(方差来源 → 动作):
| 方差来源 | 控制动作 | 报告要求 |
|---|---|---|
| 采样随机性 | 固定温度并写入配置 | 报告温度与 trial 数 |
| 推理栈非确定性 | 固定并记录推理引擎/批处理配置;重复 ≥3 次 | 报告重复次数与聚合方式(均值/中位数) |
| prompt 措辞 | 关键结论做 prompt 扰动检验(2505.22169 随机化评测) | 报告扰动敏感性 |
| judge 漂移 | judge 版本锁定;升级后用人工校准集重估偏差 | 报告 judge 版本号 |
| 题目抽样 | golden set 快照化、只增不减(第 E3 / E10 章) | 报告数据集版本 |
重复实验的量化依据(2509.24086,与 2410.03492、2504.07086 互证):典型 benchmark 规模下,单次运行的排名翻转概率不可忽略;3–5 次重复 + 均值/中位数聚合能显著降低翻转率。延伸阅读中,2504.07086 主张 bootstrap 多次运行取均值来评估推理模型的进步;2512.07795 提出「Run Noise」指标专门分离重复运行的随机性;2502.05234 分析温度与多次采样聚合的方差权衡。争议的本质是成本:重复 3 次意味着 3 倍推理预算,对动辄数千美元的 agent 评测尤甚——但对比「基于单次运行做出错误发布决策」的代价,这通常是最便宜的一笔保险。
judge 评测的统计报告规范(详见第 E5 章,此处给统计学骨架):
观测 judge 分数 = 真实分数 + judge 偏差(bias) + judge 噪声(variance)
How to Correctly Report LLM-as-a-Judge Evaluations(2511.21140)指出:直接报告 judge 原始准确率/胜率会混入偏差与噪声,不同 judge 的分数不可直接比较;应使用偏差校正估计量——用一个小规模人工标注校准集(几百条)估计 judge 的混淆结构/偏差,对被评模型的真实胜率做校正,并构造 CI。judge 升级/换型后偏差参数需重估;多 judge 面板的收益取决于 judge 间错误相关性(相关错误不随面板规模下降)。同时记住理论下界(2410.13341,ICLR 2025):在前沿任务上 judge 评测的误差随样本量下降存在理论极限,靠 judge 做评测最多相当于「把人类标注数据翻倍」的收益量级——judge 适合扩大覆盖,不能替代高质量人工校准集;前沿模型的评测必须保留人工锚点(第 E6 章)。阿里口径与此一致:judge 与人工复核一致率约 85%(参考值)后才进日常自动化,且每次 judge 升级固定产出「与人工一致性 / 高风险漏判率 / 边界样本稳定性」三项统计。
报告纪律汇总(评测报告的最小检查表):
- 一切分数带 CI:二项比例用 Wilson;成对胜率/排名用 bootstrap(按评测单元重抽样,B≥500);
- 版本比较用配对设计(McNemar 或配对 bootstrap),不用两个独立点估计的肉眼对比;
- pass@k 必须报 n,统一各模型的采样预算;题目少时用 Beta 后验区间;
- 重复 ≥3 次,报告均值 ± 区间;temperature=0 + seed 也要重复;
- 样本量在评测前用公式/先导实验规划,而不是跑完再看;
- 竞技场式排名用 BT MLE + tie 模型 + 均衡比较图 + style control;
- judge 分数报告偏差校正后的值与 CI,附 judge 版本与校准集状态;
- CI 重叠的排名视为统计上不可区分,向业务方给「不可区分组」而非精确名次。
面试计算速查表(第四节计算题的公式都在这里):
| 问题 | 公式 | ||
|---|---|---|---|
| 通过率 CI | Wilson:(p̂ + z²/2n ± z√(p̂(1−p̂)/n + z²/4n²)) / (1 + z²/n) | ||
| 估计精度所需样本 | n ≥ z²·p(1−p)/ε² | ||
| 两版本比较样本 | 每组 n ≈ (z_{α/2}+z_β)²·2p̄(1−p̄)/δ² | ||
| 先导法反解样本 | n ≥ (z_{α/2}·σ̂/ε)²(ReliableEval 2505.22169) | ||
| 配对检验 | McNemar:χ² = (\ | b−c\ | −1)²/(b+c) |
| pass@k 无偏估计 | 1 − C(n−c, k)/C(n, k)(2107.03374) | ||
| pass^k(iid) | ≈ p^k(不可用平均值外推,须实测) | ||
| BT→Elo | Elo_i = 400·log10(γᵢ/γ_anchor) + Elo_anchor |
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | 通过率的置信区间:Wald 的缺陷与 Wilson 区间 | ⭐ | 知不知道「分数要带误差条」,能否说出 Wilson 为什么端点不越界 |
| 2 | 样本量公式 n ≥ z²p(1−p)/ε² 与 1/δ² 定律 | ⭐⭐ | 能否现场反解「要 ±2pp 精度需要多少题」,是否理解评测成本与分辨率的平方关系 |
| 3 | 配对设计与 McNemar 检验 | ⭐⭐ | 是否知道两版本对比必须同题集、只看判定不一致的样本 |
| 4 | 阿里门禁三件套:CI + 显著性 + 最小可感知变化(MPP) | ⭐⭐⭐ | 是否理解「差异要超过统计噪声」且「统计显著 ≠ 值得发布」 |
| 5 | bootstrap 的正确用法:按评测单元重抽样、bootstrap 分差而非比 CI 重叠 | ⭐⭐ | 会不会用 bootstrap 给任意指标加误差条,知不知道常见误用 |
| 6 | pass@k 无偏估计量与「必须报 n」 | ⭐⭐ | 能否写出 1−C(n−c,k)/C(n,k),是否知道不同 n 的 pass@k 不可比 |
| 7 | pass^k 的 iid 假设与「不可从 pass@1 外推」 | ⭐⭐ | 能否用 τ-bench 60%→25% 说明实测必要性,能否说出独立性被破坏的机制 |
| 8 | Bradley-Terry vs Elo:为什么业界切换 | ⭐⭐ | 知不知道 Elo 顺序依赖、BT 是联合 MLE,能否写出 P(i≻j)=γᵢ/(γᵢ+γⱼ) |
| 9 | Tie 的处理与 factored tie model | ⭐⭐⭐ | 是否理解丢 tie/半分各有偏差,知道 2412.18407 的协方差检验 |
| 10 | temperature=0 仍非确定、重复 ≥3 次 | ⭐ | 是否知道批处理/kernel 非确定性,能否说出重复次数是性价比最高的预算项 |
| 11 | 风格控制回归(LC-AlpacaEval、Arena style control) | ⭐⭐ | 能否解释 verbosity hacking 与回归去偏原理,能否报出 0.94→0.98 |
| 12 | judge 偏差校正与样本效率下界 | ⭐⭐⭐ | 是否理解「观测=真实+偏差+噪声」,知道 judge 不能无限替代人工标注(2410.13341) |
| 13 | 竞技场排名的脆弱性:丢票敏感与投票操纵 | ⭐⭐⭐ | 有没有「排名是激励面、会被攻击」的意识,知不知道比较图均衡 |
四、经典面试题与参考答案
题 1(基础):什么是置信区间?为什么评测通过率推荐 Wilson 区间而不是 p̂±1.96·SE?
参考答案: 通过率 p̂=X/n 是从有限评测集算出的统计量,会随抽样波动;置信区间给出「真实通过率大概率落在的范围」——95% CI 的含义是:重复做实验,约 95% 的区间会盖住真值。朴素的 Wald 区间 p̂±1.96·√(p̂(1−p̂)/n) 有两个致命伤:① 端点越界——n=20 全失败时给出 [0,0],声称真通过率精确为 0,而其实际上界按三三法则约 3/n≈15%;② 小样本/极端比例下实际覆盖率远低于名义 95%,制造假安全感。Wilson 区间是得分检验的反转:中心把 p̂ 向 1/2 收缩(权重 z²/n,n 越小收缩越强),端点永远落在 [0,1],小样本覆盖率接近名义水平。所以报告二项比例一律用 Wilson;只有大样本、p̂ 远离 0/1 时两者才近似一致。
题 2(基础 · 计算):Golden set 100 条,通过 85 条。给出通过率的 95% Wilson 置信区间,并解释它对版本对比意味着什么。
参考答案: 代公式:z²=3.84,中心 =(0.85+0.0192)/(1.0384)≈0.837,半宽 =1.96·√(0.001275+0.000096)/1.0384≈0.070,得 [76.7%, 90.7%](Wald 会给出 [78.0%, 92.0%],略窄且位置偏高)。含义有三:① 真实通过率可能低至 ~77%——点估计 85% 附近 ±8 个点都与数据相容;② 若发布门槛是 90%,区间上端刚触线、下端差很远,不能宣称达标,需要扩样本或改进系统;③ 若另一版本跑出 82%,其 CI 约 [73.3%, 88.3%],两区间大幅重叠——3 个点的差距在 n=100 下不可判,要做配对检验或直接扩到千级样本。这道题的口算关键:n=100、p≈0.8 时标准误约 4 个点,95% 半宽约 8 个点,记住这个量级就能快速应对一切变体。
题 3(基础):temperature=0 且固定了随机种子,评测结果就完全可复现了吗?为什么仍要多次重复?
参考答案: 不是。随机源至少有三层:① 采样随机性(temperature>0)——这一层确实被 temperature=0 消除;② 推理栈的非确定性——批处理效应、底层 kernel、量化数值误差会让同样的输入在不同 batch 组成/并发顺序下得到不同输出,图灵研究所的实证(2410.03492)确认即使 temperature=0+固定种子,单次跑分仍可能不可复现;③ 评测环境层——工具返回漂移、上下文组装差异(第 E8 章 fixtures 解决的就是这个)。所以重复实验不可省:2509.24086 显示典型 benchmark 规模下单次运行的排名翻转概率不可忽略,3–5 次重复 + 均值/中位数聚合能显著降低翻转率。工程默认:固定并记录种子与推理栈版本、num_repeats≥3、报告均值 ± 区间——重复次数是评测预算里性价比最高的一项。
题 4(进阶 · 计算):基线通过率 80%,想检出新版 prompt 的 5pp 提升(α=0.05 双侧,功效 0.8)。需要多大的评测集?如果预算只够 300 条,怎么办?
参考答案: 双比例样本量公式:每组 n ≈ (z_{α/2}+z_β)²·2p̄(1−p̄)/δ²,其中 p̄=(0.80+0.85)/2=0.825,(1.96+0.84)²≈7.85,得 n≈7.85×2×0.825×0.175/0.0025≈907,加连续性修正约 1000 条/版本(与第 E2 章门禁口径的速查表一致)。预算只有 300 条时四个选项:① 配对设计——两版本跑同一批 300 题,用 McNemar 检验,题目难度被钉死后检出力显著提高,300 条在差异较大(如 ≥8pp)时可用;② 提高 MPP——把「值得发布的门槛」从 5pp 放宽到 ~10pp(n≈250 即可检出),接受小提升不上线;③ 先导法(ReliableEval 2505.22169)——先用 ~30 条先导集估方差,确认真实方差比二项假设小再定规模;④ 诚实地向业务方报告:300 条的分辨率就是 ±5pp 量级,小于此的差异「测不出来」而不是「没有」。核心态度:样本量是评测前算出来的,不是跑完后后悔出来的。
题 5(进阶):评测报告显示 v1 82%、v2 85%(n=100),PM 说「提升了 3 个点,发布吧」。你怎么回应?
参考答案: 三步。第一步,定量拒绝:n=100、p≈0.83 时标准误约 3.7pp,95% CI 半宽约 ±7.4pp,两版本区间大幅重叠——3pp 完全在统计噪声内,当前数据不支持「v2 更好」。第二步,给正确方法:让 v1、v2 跑同一批 100 题做配对比较,用 McNemar 检验只看判定翻转的题;若翻转样本中 v2 赢的显著多于 v1 输的才算有信号。第三步,给决策框架(阿里门禁三件套):即使统计显著,还要过最小可感知变化(MPP)——如果业务上 3pp 不值得一次发布风险,就事先把 MPP 定为 5pp;要可靠检出 3pp 需约 2800 条/组(配对可更少),把「扩评测集到千级」或「接受小提升不发布」两个成本显式摆出来。一句话:门禁不只看差了多少,还要看差异是否超过统计噪声(阿里),这个案例的答案是「现在不能发,数据不够」。
题 6(进阶):pass@k 和 pass^k 有什么区别?为什么 pass^k 不能用 (pass@1)^k 外推?τ-bench 的数字说明了什么?
参考答案: pass@k = k 次尝试至少一次成功,度量能力上限;pass^k = k 次全部成功,度量生产可靠性——用户不会接受「多试几次总有一次成」,支付/退款类场景必须看后者。pass@k 要报无偏估计量 1−C(n−c,k)/C(n,k)(HumanEval,2107.03374),并附每题采样数 n——n<20 时点估计方差极大,不同 n 的结果不可比(2510.04265)。pass^k 在「独立同分布」假设下 ≈ p^k(p=0.9、k=8 时只剩 43%),但真实系统不能用平均值外推:τ-bench(2406.12045)实测 GPT-4o retail 域 pass^1≈60%、pass^8≈25%,而 0.60^8≈1.7%——差一个量级,因为任务难度异质(会做的题每次都做对)且各次尝试相关。反方向上,上下文污染、残留状态、限流也会破坏独立性。所以 pass^k 必须实测:工程惯例 k 取 4–8,重复 N 的取舍是 3 次起步筛选、5 次日常门禁(腾讯口径)、8 次发布级可靠性(τ-bench / DoorDash sweep 口径)。
题 7(进阶):为什么 Chatbot Arena 用 Bradley-Terry 而不是 Elo?平局(tie)应该怎么处理?相邻两名分差 4 分能宣称「超越」吗?
参考答案: 两者是同一概率模型 P(i≻j)=γᵢ/(γᵢ+γⱼ) 的两种算法:Elo 是在线增量近似,结果依赖对局顺序、初始分与 K 因子,只适合实时展示;BT 是全部对局的联合极大似然,顺序无关,且能做统计推断——这是 LMSYS 从增量 Elo 切到 BT+bootstrap CI 的根本原因(2403.04132,ICML 2024)。Tie 不能丢也不能简单记半分:Arena 投票中约一成以上是平局,丢弃浪费数据且若非随机会引入偏差,半分无概率模型支撑;正确做法是用 tie 扩展模型(Davidson:P(tie)∝2ν√(γᵢγⱼ);或 2412.18407 的 factored tie model,还给排名参数估计协方差,支持正式假设检验;开源 leaderbot)。4 分的分差:Arena 的 BT bootstrap CI 通常宽 5–15 Elo,4 分大概率落在重叠区——CI 重叠的相邻排名应视为统计上不可区分,对外应报告「不可区分组」;2508.11847 还显示丢弃一小撮对局就可能翻转顶部排名,所以结论要同时看 CI 与比较图覆盖是否均衡。
题 8(进阶):自动评测器被「长答案」刷分了——模型输出越来越啰嗦,分数水涨船高。如何诊断与治理?
参考答案: 这是 verbosity hacking,本质是 judge 的长度偏好被当成了质量信号。诊断:① 画「judge 分数 vs 输出长度」散点/分桶图,看相关性;② 抽样人工复核长答案,确认长度增益是否对应真实质量;③ 对比同一批回答在长度截断前后的胜率变化。治理的标准解法是风格控制回归(Length-Controlled AlpacaEval,2404.04475):用逻辑回归拟合 偏好 ~ β₀+β₁·model+β₂·length+β₃·markdown+…,然后把长度固定在参考值(如全体均值)计算期望胜率——即 length-controlled win rate(G-computation 思想)。效果量化:AlpacaEval 与 Chatbot Arena 的 Spearman 相关性从 0.94 升到 0.98,verbosity 操纵的胜率增益从 ~12% 压到 ~3%。工程上:任何 judge 指标都应做混淆变量回归检查(长度、格式、emoji、代码块),至少并行发布风格控制后的口径;Arena-Hard v2(2406.11939)也把 style control 作为标配与 Arena 的 style-controlled 排名对齐。注意争议面:风格偏好也可能是真实用户体验的一部分,所以 LMSYS 同时发布 overall 与 style-controlled 两榜——指标必须声明自己的语义。
题 9(系统设计):为一个客服 agent 设计一套统计上严谨的评测与发布门禁。现有 100 条 golden set、一个 LLM judge、每次全量评测预算有限。
参考答案: 分五层设计。① 估计与报数:通过率一律 Wilson CI;非比例指标(延迟分位数、成本)用 bootstrap(B≥500,按会话重抽样);judge 分数先经人工校准集做偏差校正再报(2511.21140),judge 与人工一致率达到公司口径(如阿里 ~85%)才进自动化。② 重复设计:每条用例跑 N 次——日常迭代 N=3~5(成本与翻转率折中),发布评估 N=8(τ-bench/DoorDash 口径);报告 pass@1 与 pass^k 双指标,pass^k 实测不外推;不可逆操作(退款)类场景 pass^k + P0 风险样本 0 失败。③ 样本量规划:100 条的分辨率是 ±8pp,只够门禁拦截大退化;要检出 5pp 的版本差异,用配对设计(同题集 + McNemar)把需求压低,或扩集到 ~1000 条(1/δ² 定律:3pp 需 ~2800 条/组);扩集前先跑 10% 先导集估方差(ReliableEval 矩方法)。④ 门禁决策规则(阿里三件套):P0 硬约束(风险样本 0 失败)先过 → P1 统计比较:配对检验显著 + 差异 CI 不盖 0 + 超过事先定义的 MPP → 放行;多指标时指定主指标防多重比较膨胀。⑤ 运营纪律:judge 版本锁定、升级重校准;golden set 快照化只增不减;重复次数、种子、数据集版本全部写入报告;离线门禁通过后仍要线上灰度联动(第 E12 章)。预算有限时的优先级:重复次数 > 配对设计 > 扩题数——重复是性价比最高的一项(2509.24086)。
五、易错点 · 反直觉点
- 误区:temperature=0 + 固定 seed,跑分就完全确定了。 真相:批处理效应、底层 kernel、量化的非确定性仍在,单次跑分照样不可复现(2410.03492 实证)。记忆锚点:固定种子≠固定输出,重复实验是最后一道防线。
- 误区:两个模型的 CI 不重叠才算显著,重叠就是不显著。 真相:比较两个独立 CI 的重叠是既保守又口径错误的近似;正确做法是配对设计后直接 bootstrap「分差」看是否盖住 0,或用 2412.18407 的联合协方差检验。记忆锚点:判分差自己的 CI,别拿两个区间比重叠。
- 误区:统计显著 = 值得发布。 真相:样本够大时 0.3pp 的差异也能显著,但可能完全不值得一次发布风险;阿里门禁要求显著性与最小可感知变化(MPP)同时满足。记忆锚点:显著性回答「有没有差」,MPP 回答「值不值得」。
- 误区:平局(tie)可以丢弃或各记半分。 真相:Arena 投票中 tie 占一成以上,丢弃浪费数据且非随机缺失时引入偏差,半分没有概率模型支撑;应使用 Davidson/Rao-Kupper 或 factored tie 模型(2412.18407)。记忆锚点:每十票就有一票平局,丢 tie 等于篡改数据。
- 误区:pass@k 直接跨模型、跨 benchmark 比较。 真相:pass@k 的方差强烈依赖每题采样数 n,n<20 时点估计基本不可信,不同 n 的结果完全不可比(2510.04265);必须统一 n 并附 CI。记忆锚点:不带 n 的 pass@k 是裸奔的分数。
- 误区:30 题的竞赛集能区分前沿模型。 真相:n=30、p=0.5 时 95% CI 半宽约 ±18pp,这个分辨率下两个模型的分数差异几乎都在噪声内;业界经验是 ~1000 题起步才有基本功效。记忆锚点:30 题的尺子,刻度是 ±18 个点。
- 误区:pass^k ≈ (平均 pass@1)^k,可以外推。 真相:任务难度异质 + 尝试间相关让实测 pass^k 与 iid 外推差出一个量级——τ-bench 实测 61%→25%(k=8),而 0.61^8≈2%。pass^k 必须实测。记忆锚点:p^k 是物理课的公式,pass^k 是实验课的测量。
- 误区:增量 Elo 是模型的最终实力分。 真相:增量 Elo 依赖对局顺序、初始分与 K 因子,只是 BT 的粗糙在线近似;正式排名用 BT 联合 MLE + bootstrap CI,这也是 LMSYS 切换的原因(2403.04132)。记忆锚点:Elo 看顺序,BT 看全局。
- 误区:judge 的原始分数可以跨模型、跨版本直接比较。 真相:观测 judge 分数 = 真实分数 + 偏差 + 噪声,不同 judge 口径不同;必须用人工校准集估计偏差、报告校正后的分数与 CI(2511.21140),judge 升级后偏差参数重估。记忆锚点:judge 分数是仪表读数,先校准仪表再读数。
- 误区:跑一次就够了,重复实验是浪费预算。 真相:单次运行的排名翻转概率不可忽略,3–5 次重复 + 聚合能显著降低翻转率(2509.24086);重复比重建新题集便宜得多。记忆锚点:重复 3 次,是最便宜的严谨。
六、推荐资源
核心论文(全部来自 _research/04-statistics.md 已核实清单):
| arxiv | 标题 | 时间 | 本章用到 |
|---|---|---|---|
| 2403.04132 | Chatbot Arena: An Open Platform for Evaluating LLMs by Human Preference(ICML 2024) | 2024-03 | BT+bootstrap CI 成为行业标配;240K+ 投票、CI 宽 5–15 Elo |
| 2412.18407 | A Statistical Framework for Ranking LLM-Based Chatbots | 2024-12 | factored tie model、协方差与假设检验、leaderbot |
| 2406.11939 | From Crowdsourced Data to High-Quality Benchmarks: Arena-Hard and BenchBuilder Pipeline(ICML 2025) | 2024-06 | BT-from-win-rates、style control、98.6% 相关性、成本 <$20 |
| 2404.04475 | Length-Controlled AlpacaEval: A Simple Way to Debias Automatic Evaluators | 2024-04 | 回归式长度去偏;0.94→0.98、verbosity 增益 12%→3% |
| 2410.03492 | Towards Reproducible LLM Evaluation: Quantifying Uncertainty in LLM Benchmark Scores | 2024-10 | temperature=0 非确定性;低成本不确定性量化 |
| 2505.22169 | ReliableEval: A Recipe for Stochastic LLM Evaluation via Method of Moments(EMNLP 2025 Findings) | 2025-05 | 矩方法反解样本量;随机化评测 |
| 2410.13341 | Limits to Scalable Evaluation at the Frontier: LLM as Judge Won't Beat Twice the Data(ICLR 2025) | 2024-10 | judge 样本效率理论下界 |
| 2511.21140 | How to Correctly Report LLM-as-a-Judge Evaluations | 2025-11 | 偏差校正估计量 + CI 的报告规范 |
| 2510.04265 | Don't Pass@k: A Bayesian Framework for Large Language Model Evaluation | 2025-10 | pass@k 统计缺陷与 Beta 后验替代 |
| 2509.24086 | Do Repetitions Matter? Strengthening Reliability in LLM Evaluations | 2025-09 | 重复 3–5 次显著降低排名翻转率 |
| 2508.11847 | Dropping Just a Handful of Preferences Can Change Top LLM Rankings | 2025-08 | BT 排名的丢票敏感性;比较图均衡 |
| 2501.17858 | Improving Your Model Ranking on Chatbot Arena by Vote Rigging | 2025-01 | 影响函数投票操纵与防御 |
背景奠基:HumanEval 与 pass@k 无偏估计量(2107.03374,OpenAI,2021);Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena(2306.05685,NeurIPS 2023,GPT-4 judge 与人类一致性 80%+,接近人类间 ~81%);Bradley & Terry (1952)、Elo (1978)、Koehn (2004) 配对 bootstrap 显著性检验(经典文献);τ-bench 与 pass^k(2406.12045,Sierra,2024)。
延伸阅读(素材已交叉确认):WildBench(2406.04770,2024,WB-Reward/WB-Penalty + 不确定性报告);A Sober Look at Progress in Language Model Reasoning(2504.07086,2025,主张 bootstrap 多次运行取均值);Optimizing Temperature for Language Models with Multi-sample Aggregation(2502.05234,2025);A Bayesian Approach to Limited-Sample Challenges(2504.21303,2025);Benchmarking the (In)Stability of LLM Reasoning(2512.07795,提出 Run Noise 指标);Efficient Evaluation of LLM Performance with Statistical Guarantees(2601.20251,2026,有限总体推断/主动查询、固定预算下 ~5x 等效样本增益——素材标注为仅搜索结果交叉确认,引用需谨慎)。
工程博客与开源:LMSYS「Does style matter?」(2024-08-28,style control 官方说明);Arena.ai「Statistical Extensions of the Bradley-Terry and Elo Models」;Cameron Wolfe「Applying Statistics to LLM Evaluations」;开源包 leaderbot(BT+tie 模型工程化)、AlpacaEval(LC win rate)、Arena-Hard-Auto(500 题蒸馏集)。
动手 labs(纯标准库、固定种子、可复现):
| lab | 你将验证 | 运行 |
|---|---|---|
| eval_lab08_statistics_ci.py | Wilson vs Wald 覆盖率模拟、bootstrap、样本量速查表、配对比较「N=100 不可判 / N=2000 可判」 | cd evals-special/labs && python3 eval_lab08_statistics_ci.py |
| eval_lab11_arena_bradley_terry.py | BT 极大似然 vs Elo、bootstrap 分差 CI、风格控制恢复真实排序 | cd evals-special/labs && python3 eval_lab11_arena_bradley_terry.py |
| eval_lab01_metric_system.py | pass@k 无偏估计、pass@k 与 pass^k 随 K 分道扬镳 | cd evals-special/labs && python3 eval_lab01_metric_system.py |
| eval_lab05_judge_calibration.py | judge 一致率 / kappa / 校准迭代(2.8 报告规范的配套实验) | cd evals-special/labs && python3 eval_lab05_judge_calibration.py |
章节交叉引用:指标的分层与统计口径要求(第 E2 章 · 评估指标体系);judge 偏差与校准全流程(第 E5 章 · 评分层之二:LLM-as-Judge 深入);人工校准集与标注一致性(第 E6 章);pass^k 与仿真评测的运行成本(第 E8 章 · 对话 Agent 与仿真评测);门禁在 EDD 循环中的位置(第 E10 章 · 评测驱动开发);Arena 与静态 benchmark 的选型(第 E13 章 · Benchmark 全景与前沿争议);主手册第 8 章 · Agent 评估与可观测性(统计与可靠性一节的浓缩版)。
评测驱动开发(EDD)
一句话导读:评测体系建好之后,真正的难题是把它"嵌进开发流程",让每一次改动都被评测看见、每一个失败都变成资产。 EDD(Eval-Driven Development)就是 GenAI 版的 TDD:不试图预测所有失败,而是发现 → 捕获 → 反复检查失败模式(Airbnb 定义)。 学完本章你能得到:Airbnb 五原则与 100 样本精读法、一次一变量的迭代纪律、capability/regression 双套件与 CI 门禁设计、 EDDOps 学术过程模型、DoorDash 失败回流闭环,以及"eval 作为优化目标函数"的前沿与治理。
一、知识图谱
评测驱动开发(EDD)
├─ 方法论:EDD 是什么
│ ├─ 定义:GenAI 版 TDD —— 发现→捕获→反复检查失败模式(Airbnb)
│ ├─ 无 EDD 的三大坑:虚假信心 / 未发现的回归 / 指标与产品脱节
│ └─ 学术成型:EDDOps 四阶段闭环(arxiv 2411.13768)
│ Plan → Build → Run(offline+online) → Analyze & Improve
├─ 习惯:日常怎么迭代
│ ├─ "When in doubt, look at your data":100 样本人工精读法
│ ├─ Airbnb 五原则:早定门槛 / 从错误推导指标 / 少而精 judge(3-5) / 人类终判者 / 产品持续参与
│ └─ 迭代纪律:一次只改一个变量(prompt → 模型 → serving 配置)
├─ 门禁:怎么放行
│ ├─ 套件二分:capability(起点低、指方向)vs regression(近满分、掉分阻断)
│ ├─ 门槛经验:确定性任务 100%、非确定性 ≥95%(Anthropic 口径,腾讯引用)
│ ├─ 统计口径:置信区间 + 显著性 + 最小可感知变化(阿里)
│ └─ 发布阶梯:offline → shadow → canary → A/B → monitoring
└─ 闭环:怎么增值
├─ 回归集治理:只增不减;能力用例稳定 100% "毕业"进回归集(腾讯)
├─ 失败回流:badcase → 用例 → 回归集(阿里入库标准,详见第 E11 章)
├─ DoorDash:失败按 rubric 聚类 → coding agent 调查 → Agent Skills 沉淀
└─ eval 作为目标函数:DSPy → MIPROv2 → GEPA
| 你的问题 | 本章落点 |
|---|---|
| EDD 是什么,与 TDD 差在哪 | 2.1 |
| 新功能从零起步该怎么走 | 2.2(五原则)、2.5(完整案例演练) |
| EDD 有没有学术化的过程模型 | 2.3(EDDOps) |
| prompt/模型版本怎么比才科学 | 2.4(一次一变量 + 统计口径,交叉第 E9 章) |
| judge 怎么校准到可以进 CI | 2.5(交叉第 E5 章) |
| 套件怎么分、门槛怎么定、CI 怎么跑 | 2.6 |
| 没有真实用户可测怎么办 | 2.7(交叉第 E8 章仿真评测) |
| 失败了怎么闭环回去 | 2.7(交叉第 E11/E12 章) |
| 让优化器自动搜 prompt 行不行 | 2.8(eval 作为目标函数与治理) |
二、核心概念精讲
2.1 EDD 是什么:从"上线前检查点"到"迭代指南针"
定义(Airbnb):Eval-Driven Development 是 GenAI 版的测试驱动开发。传统 TDD 假设你能在写代码前 穷举失败条件;GenAI 系统做不到——输出不可预测、"正确"依赖判断、一次请求里的搜索/推理/外部动作/文本生成 每一环都可能独立失败。所以 EDD 的核心动作不是"预测所有失败",而是:
- 发现(discover):主动跑数据、读输出,找到真实的失败模式;
- 捕获(capture):把每个失败模式固化成可复跑的测试用例与 rubric;
- 反复检查(repeatedly check):让用例进 CI 与线上监控,每次变更都重新验证。
Anthropic 在《Demystifying evals for AI agents》(2026-01)中给出了同构的官方表述:先定义期望行为, 再开发 agent(eval 即规约),起步只需 20–50 个真实用例;OpenAI 的 evaluation best practices 同样明确建议 "从一开始就反复评测(eval-driven)、每次变更都跑 continuous evaluation"。
EDD 与 TDD 的对照(面试高频对比题):
| 维度 | 传统 TDD | EDD |
|---|---|---|
| 被测对象 | 确定性代码 | 模型 + prompt + 工具 + 检索 + serving 构成的系统 |
| 测试编写 | 先写断言,再写实现 | 先写期望行为(用例 + rubric + 判据),再调系统 |
| 期望输出 | 唯一确定值 | 允许多条合法路径;用 rubric/终态/分布描述 |
| 通过标准 | 断言完全成立 | 统计口径:通过率、pass^k、置信区间 |
| 回归语义 | 代码变更 | 模型/prompt/工具/serving 任一变更都可能回归 |
| 失败模式 | 可静态推演 | 必须从真实数据中挖掘(100 样本法) |
| 测试资产 | 单元测试套件 | golden set + 回归集 + judge 校准集 + 基线快照 |
没有 EDD 的三大坑(Airbnb 总结):
| 坑 | 表现 | EDD 的解法 |
|---|---|---|
| 虚假信心 | 用一个浅层 helpfulness 分自我感觉良好 | 从观察到的真实错误推导指标,按维度拆 judge |
| 未被发现的回归 | 改 prompt 后旧场景质量悄悄变差,无人知晓 | 回归集只增不减,PR 触发回归 |
| 指标与产品脱节 | 分数在涨,产品结果没动,浪费精力 | 尽早与产品伙伴定目标与上线门槛(launch gates) |
一句话收束:评测在 EDD 里有四重身份——质量度量、发布门禁、迭代指南针、数据飞轮入口(展开见第 E1 章); EDD 的贡献是让后两重身份成为日常纪律,而不是上线前的一次性仪式。
2.2 Airbnb 五原则与核心习惯:When in doubt, look at your data
Airbnb 在点评摘要、客服、房东/房客消息、内部洞察等多个 GenAI 场景沉淀出 EDD 五原则(产品团队自定标准, 基础设施组提供共享工具与跨团队指南——是实践不是强制令):
| # | 原则 | 落地要点 |
|---|---|---|
| 1 | 尽早设定目标与上线门槛(launch gates) | 即便门槛要在数据评审中才逐渐清晰,也要先立一个可被推翻的初版 |
| 2 | 从观察到的错误中推导指标 | 与跨职能伙伴共同制定;拒绝凭空设计的"万能 helpfulness" |
| 3 | 用少而精的 judge | 3–5 个经校准的评估器,好过一堆嘈杂的评估器 |
| 4 | 指定一个最终人类决策者 | 裁决"好 vs 坏"的争议,避免口径在多人间漂移 |
| 5 | 让产品伙伴持续参与 | 参与版本对比与错误诊断,评测是跨职能产品活动 |
核心习惯:"When in doubt, look at your data." 这是 Airbnb EDD 文化的第一习惯,具体化为 100 样本人工精读法:
跑约 100 个样本(真实或合成)
→ 人工逐条读输出与 trace(不是看平均分)
→ 找错误、归类错误模式(groundedness 失败?啰嗦?不当拒答?格式坏?)
→ 围绕这些失败模式建测试(程序化检查 + judge + gold 集)
为什么 100 条就够起步?因为它解决的不是"估计总体通过率"(那是统计学问题,见第 E9 章),而是 "枚举失败模式的种类"——失败模式的多样性在几十到一百条样本里就会大致显形,而每一种模式都值得一条测试。 Anthropic 的口径更激进:起步只需 20–50 个真实用例。Airbnb 十条要点中的第一条就是: 建复杂工具之前,先人工看输出与 trace。
Airbnb 十条要点速记(原文浓缩,面试可直接引用): ① 先人工看输出与 trace 再建复杂工具;② 避免泛化 helpfulness,瞄准真实产品失败;③ 从小标注集起步快速迭代; ④ 不做万能 judge,按维度拆分;⑤ judge 校准到高一致率后再信任;⑥ 代码检查 + 模型 judge + 人工评审结合; ⑦ gold set 必须含坏样本;⑧ 评整个系统(检索/工具/agent 路径);⑨ 上线前测试要在线上持续运行; ⑩ 评测是跨职能产品活动。
2.3 EDDOps:四阶段闭环的学术成型
EDD 从口号变成有过程模型与参考架构的工程学科,标志性工作是 《Evaluation-Driven Development and Operations of LLM Agents》(arxiv 2411.13768; v1 2024-11 首发,原题 "An Evaluation-Driven Approach to Designing LLM Agents";2025-11 v3 更名加入 Operations)。 作者团队来自 Adelaide University / CSIRO Data61 / UNSW,基于 134 篇学术文献 + 27 份工业灰色文献的多声源综述。
四阶段闭环:
| 阶段 | 内容 | 关键产物 |
|---|---|---|
| Plan | 评测计划版本化:范围、指标、切片(slice)、频率、升级规则、自适应触发条件 | 评测计划书(输入 = 用户目标 + 治理约束 + agent 初版设计) |
| Build | 评测资产 = 标准基准 + 领域知识 + 专家用例 + 合成数据;每个用例带 provenance、oracle(判定标准)、slice 标签、运行模式 | 版本化测试目录 |
| Run | offline:批量基准、精选套件、轨迹回放、缺陷定位;online:生产信号、限流暴露(shadow/canary)、内联校验器、定时或异常触发的探针 | offline + online 证据流、slice 级报告 |
| Analyze & Improve | 优先最小有效变更(prompt/路由/护栏/记忆),大改动(架构/工具契约/检索/模型)走受控 offline 再开发;所有变更版本化、回归重测 | 更新后的 safety case(证据支撑的安全论证) |
三层参考架构:
Supply Chain Layer(评测意图与证据:评测为什么这么定、模型为什么这么选)
↓
Agent Layer(暴露可评测表面:prompt/工具/记忆可检视,结构化 trace)
↓
Operation Layer(Evaluation Backbone + Control Loop)
证据库 = Evaluation Results / Test Cases / Safety Cases
配 AgentOps 可观测性做触发、策略、回滚;连接 offline 证据与 online 信号
一组揭示学界/工业界错位的数字(EDDOps 综述统计,面试引用率极高的深水区素材):
| 口径 | 学术文献(134 篇) | 工业灰色文献(27 份) |
|---|---|---|
| 只做 pre-deployment 评测 | 93.28% | — |
| 覆盖 post-deployment | 仅 2.24% | — |
| 持续评测 | 4.48% | 40.74% |
| 只看端到端指标 | 92.54% | — |
| 用静态基准 | 97.76% | — |
| 已用评测驱动适配 | — | 81.48% |
结论:学术供给集中在"上线前 + 端到端 + 静态基准",而工业界近一半已转向持续评测—— EDD 的主战场在生命周期后半段,这正是本章与第 E12 章(在线评估与数据飞轮)的衔接点。 该论文还明确定义了 shadow evaluation(不暴露给用户的影子评测)与 canary rollout(小流量灰度)在框架中的位置, 验证案例为 LLM 报税助手(Tax Assistant)。
2.4 迭代纪律:一次只改一个变量
GenAI 系统可调的旋钮太多:prompt、模型、检索、工具描述、serving 配置。Airbnb 把迭代纪律总结为一句话: 一次只改一个变量,顺序是:
固定模型,只变 prompt → 固定 prompt,只变模型 → 两者都固定,只变 serving 配置
为什么必须如此:多变量并动时,分数变化无法归因——你不知道是 prompt 修好了错误,还是新模型恰好掩盖了它; 一旦某个版本在回归集上掉分,你甚至不知道该回滚哪个改动。这与 EDDOps 的"最小有效变更优先"完全一致: 先改 prompt/路由/护栏/记忆这类便宜可逆的旋钮,架构/工具契约/检索/模型这类大改动走受控的 offline 再开发。
judge 与候选的互相打磨:迭代不是单向的"judge 给候选打分"。Airbnb 的做法是—— judge 筛候选,顶尖候选反哺 judge 改进(优秀候选暴露 rubric 的盲区:它明明很好,judge 却没给分), 如此往复,直到 judge 与候选集双方稳定。
版本比较必须带统计口径(阿里):即便一次一变量,两个版本的分数差也可能是噪声。阿里的门禁要求
关键指标置信区间 + 与基线的显著性判断 + 最小可感知变化阈值(提前定义"提升多少才值得发布"):
"门禁不只看差了多少,还要看差异是否超过统计噪声。"(统计工具:Wilson 区间、配对检验、样本量计算,
详见第 E9 章;动手实验:cd evals-special/labs && python3 eval_lab08_statistics_ci.py)
反例(面试常让你指错):某团队同一天把 prompt v2 和新底座模型一起上线,总分 +3 分,宣布成功。 两周后线上投诉上升,排查发现:新模型其实 -5 分,prompt v2 是 +8 分——但因为捆绑变更, 他们既错过了发现模型退化的机会,也无法单独保留 prompt 收益。捆绑变更 = 主动放弃归因。
2.5 完整案例演练:Airbnb 旅行客服政策问答助手
这是 Airbnb 博客给出的端到端 EDD 演练,四个阶段每一步都有数字,是回答"EDD 具体怎么做"的最佳模板。
阶段一:探索(100 样本精读)。跑 100 个真实/合成 prompt,人工读输出,归类出四种失败模式:
| 失败模式 | 数量/100 | 后续对应测试 |
|---|---|---|
| groundedness 失败(回复不锚定政策/检索证据) | 15 | groundedness judge |
| 答案正确但啰嗦 | 8 | conciseness judge + 长度检查 |
| 不当拒答(该答不答) | 5 | 拒答边界用例(正反例) |
| JSON 输出失败 | 3 | 程序化 schema 校验 |
阶段二:建测试。JSON 格式与长度用程序化检查(确定性优先,见第 E4 章);groundedness 与 conciseness 各建一个 judge("少而精":只建与观察到的失败对应的 judge);PM/SME 标注 60 条 gold 集,含失败样本 (坏样本是校准 judge 的关键——只喂好样本的校准集测不出 judge 会不会误杀)。
阶段三:校准。judge 初始与人工一致率 78%,过低,不能进自动化。分歧分析发现 judge 在
误罚"正确的改述"——答案语义正确但与参考答案字面不同,字面重叠式的 rubric 把它判错。
修订 rubric 与 few-shot 示例(放宽改述惩罚、加事实核对项)后一致率达 88%,进入自动化。
同期检索侧改进减少了 groundedness 失败。(完整校准流程、Cohen's kappa、阿里 ~85% 与腾讯 ≥85% 口径,
见第 E5 章;动手复现 78%→88%:cd evals-special/labs && python3 eval_lab05_judge_calibration.py)
阶段四:规模化与监控。评测集扩到 5,000 样本;每日抽样 5% 去标识化生产流量跑同一套检查与 judge; 被标记样本送人工复核;每周 PM 评审,产出新增测试与修复项。上线前的测试在线上持续运行—— EDD 的终点不是发布,而是运营。
把案例抽象成 EDD 循环:
┌──────────── 探索:100 样本精读,归类失败模式
│ ↓
│ 建测试:程序化检查 + 维度 judge + gold 集(含坏样本)
│ ↓
│ 校准:judge↔人工一致率 78% → 88%(改 rubric 不是改数据)
│ ↓
│ 门禁:进 CI,PR 触发回归;统计口径判版本差异
│ ↓
└──── 回流 ← 监控:5,000 样本 + 每日 5% 线上抽样 + 每周 PM 评审
2.6 CI 门禁与回归集:capability 套件 vs regression 套件
EDD 的"门禁"环节回答:什么样的版本允许发布。核心是 Anthropic 提出的套件二分法(腾讯引用并落地):
| 维度 | Capability 套件(能力评测) | Regression 套件(回归评测) |
|---|---|---|
| 回答的问题 | "Agent 能把什么做好" | "原有能力是否还在" |
| 期望通过率 | 初始应偏低(20–50% 起步,腾讯口径) | 接近满分(掉分即阻断) |
| 角色 | 目标山峰:指引改进方向、主动拓展、频繁迭代 | 防御地板:拦截漂移,只增不减,CI 每次运行 |
| 失败的含义 | 正常,说明还有空间 | 事故信号,必须定位 |
| 异常信号 | 起步就接近满分 → 套件太容易,无区分度 | 0% 或 100% 之外的怪值 → 先查任务定义/评分器是否坏了(腾讯) |
门槛数字(面试必答):腾讯引用 Anthropic 的推荐——确定性任务用例集整体通过率需 100%,
非确定性任务 ≥95%。腾讯自身的稳定性容忍阈值还按使用类型分级:关键决策类(问题定位/故障诊断)
0% 容忍(N 次全过,任何一次失败都可能误判);辅助分析类 ≤10%;创意生成类 ≤40%(建议 N=5)。
高风险不可逆场景(客服/支付/退款/合规)建议用 pass^k 作发布门槛:Anthropic 文档示例,
单任务成功率 p=0.75、k=3 时 pass^3 ≈ 0.75³ ≈ 42%——"看起来 75% 不错"的 agent,三连全对只有四成把握
(pass@k 与 pass^k 的数学与实验见第 E2 章;cd evals-special/labs && python3 eval_lab01_metric_system.py)。
用例毕业机制(腾讯独创):capability 用例通过率稳定 100% 后"毕业"进回归集——回归集像滚雪球一样
承接所有曾经攻克的能力;回归集只增不减。badcase 的标准旅程:复现并记录完整轨迹 → 分析根因定预期行为
→ 修复 → 纳入用例集防回归 → 进能力集,稳定后毕业到回归集。(用例生命周期与入库标准的完整实现见第 E3 章;
cd evals-special/labs && python3 eval_lab02_golden_dataset.py)
触发时机(腾讯):
| 触发 | 方式 | 目的 |
|---|---|---|
| 提示词变更 | CI 自动,PR 合入前回归 | 拦住每一次 prompt 手改 |
| 模型版本升级 | 手动触发 | 验证兼容性(见 2.8 DoorDash 模型迁移案例) |
| 定期巡检 | 定时全量回归 | 捕获环境/依赖的隐性漂移 |
门禁的质量本身依赖 grader 的质量:Anthropic 报告的 CORE-Bench 案例中,Opus 4.5 在修复了任务定义与 评分器缺陷之后成绩从 42% 跳到 95%——门禁红了一半的时候,先怀疑尺子再怀疑模型(详见易错点 6)。 另一个参照数字:SWE-bench Verified 一年内从 40% 涨到 80%+;创业公司 Bolt 约 3 个月建成 eval 体系。
门禁的成本与分层:全量 E2E 每次 PR 都跑对大团队可行(DoorDash:任何变更必须通过全部 50+ 个 eval, 5 分钟跑 200+ 场模拟对话),对小团队昂贵。折衷方案:分层门禁——单元层 grader/断言必过(秒级、确定性), 轨迹/结构层每日全量,E2E 模拟层抽样或按需触发(arxiv 2601.18827 提出"单元/集成/E2E 三级金字塔", 2604.27789 专门讨论门禁的计算开销与运维复杂度)。
2.7 仿真评测与失败回流:EDD 的"排练场"和"齿轮"
(1)为什么 EDD 离不开仿真:DoorDash 列出的评测挑战中有一条"无法安全彩排"——不能拿真用户试变更,
历史会话也不能对改过的 agent 重放(agent 变了,对话路径就不一样了)。解法是按需生成会话:
LLM 模拟用户驱动 agent 跑场景,外围数据用 fixtures 冻结,同一场景每次运行条件一致
(详见第 E8 章;cd evals-special/labs && python3 eval_lab07_simulator_fixtures.py)。
学术侧的范式源头是 τ-bench(arxiv 2406.12045,2024-06,Sierra):LLM 用户模拟器 + 工具调用 +
数据库终态哈希做可验证判定 + pass^k 刻画可靠性;τ²-bench(arxiv 2506.07982)升级为双控
(用户侧也能执行工具动作)。
(2)仿真的成本账(DoorDash):全量回归 sweep = 50 场景 × 8 trials = 400 次对话; 人工本地聊约 1 分钟/次 → 6+ 小时;模拟器约 20 分钟。harness 建成后:质量信号从平均 1 条/天员工反馈 → 2,000 个/天自动评分会话;全国上线前 agent 质量分 +8 分、错误率近乎减半; 并支撑底座模型迁移(Claude Sonnet 4.6 → Gemini 3.5 Flash)实现延迟降 35%、质量无损。 DoorDash 的仿真评测飞轮还报告:一次触发跑完全流程,任何变更必须通过全部 50+ 个 eval 才能上线; 5 分钟内跑 200+ 场模拟对话;11 轮迭代(第 3 轮曾回落——回归是常态,门禁的价值正是抓住它); 模拟环境幻觉率下降约 90%;离线提升与线上真实流量表现一致。
(3)失败回流闭环(DoorDash 反馈闭环四步)——这是 EDD 从"评分板"升级为"迭代控制面"的关键:
- 失败聚类成主题:逐条看失败会"轶事驱动"(最近/最惊奇的失败主导修复)。rubric 标准天然是问题簇—— grounding 失败、缺替代品、糟糕叙述分开调查,失败列表变成按影响排序的主题列表;
- 从发现到解决:coding agent 检查失败 trace、相关代码路径、近期变更、历史调查; 修复明确时直接起草 PR;prompt/上下文类改动则产出诊断 + 建议供人审;
- Agent Skills 化:把 eval-driven 工作流(聚类失败、调查失败模式)打包成可重复、可复用、可改进的 Agent Skills——skill 分错簇或写出弱修复时,更新 skill 本身,而不是给一次性运行打补丁;
- harness 成为迭代的控制面(control plane for iteration):生产监控 + 失败聚类 + agent 辅助调查 + 发布前验证连成一环。
(badcase 如何结构化归因——RCA 五步、根因标签、行动项——见第 E11 章;
cd evals-special/labs && python3 eval_lab09_rca_pipeline.py)
(4)回流入库的标准(阿里):不是每条线上失败都值得进回归集。入库五条标准: 失败可复现(或至少有稳定 trace + 人工确认)、期望行为明确(可写成规则/judge 标准/人工验收标准)、 根因标签清楚、样本有代表性(覆盖一类问题而非一次性环境抖动)、已脱敏合规。 一条 badcase 至少生产 3 类反馈(评测集 / 训练数据 / 知识修订),分三条生产线沉淀(详见第 E12 章数据飞轮)。 学术侧的对应样本是 Discord AITL(EMNLP'25 工业赛道,ACL Anthology 2025.emnlp-industry.135): 四类人工客服在线标注持续回流,把再训练周期从月级压缩到周级,美国试点 recall@75 +11.7%、precision@8 +14.8%、 有用性 +8.4%、采用率 +4.5%。
(5)仿真器本身也要被评测:模拟器质量直接决定下游评测效度——DAUS(arxiv 2402.13374,Amazon) 证明未经微调的通用 LLM 模拟器会偏离用户目标、幻觉出不存在的对话事实,需领域微调 + 受控解码; 隐式画像(arxiv 2502.18968)从真实日志反推 persona,与数据飞轮天然衔接;ChatChecker(arxiv 2507.16792) 强调非合作模拟(用户会不耐烦、跑题、改主意)——合作型模拟会系统性高估 agent。
2.8 eval 作为目标函数与发布阶梯
(1)从"eval 当裁判"到"eval 当目标":2024–2026 年 EDD 的一个重要演进是 prompt/程序优化器 直接以 eval 分数为搜索目标,形成"eval 定义 → 自动优化 → eval 门禁"的闭环:
| 系统 | 论文 | 机制 | 关键数字 |
|---|---|---|---|
| DSPy | arxiv 2310.03714(2023-10) | LLM 程序声明为模块组合,eval metric + 少量标注编译出最优 few-shot/指令配置 | eval-as-objective 闭环的奠基框架 |
| MIPROv2 | arxiv 2406.11695(2024-06) | 贝叶斯优化搜索"指令提案 × 示例组合",数据感知提案 + 代理评分降本 | 30+ 任务相对最强基线平均约 +5%,部分任务最高约 13% |
| GEPA | arxiv 2507.19457(2025-07) | 反射式进化:采样轨迹 → 自然语言反思失败 → 变异 prompt → Pareto 前沿按切片保留候选(不只看平均分) | 比 GRPO 强化学习平均高约 10%(最高 20%),rollouts 最多减少 35 倍,比 MIPROv2 高 10%+ |
工业落地:DoorDash 用 GEPA 做 judge 校准——迭代提出 judge prompt 修订,只保留在留出集上 提升与人工标注一致率的版本。GEPA 的 Pareto 选择还隐含一条评测设计原则:按切片(slice)看指标, 防止平均分掩盖退化——这与阿里分层指标、腾讯分组报告异曲同工。
(2)eval 成为目标后的新风险:eval 集既是测试又是优化目标,就会被拟合与污染。治理三件套: 留出集(优化不碰、只作终判)、定期换血(防记忆)、污染防护与 provenance(EDDOps 把 contamination safeguards 列为评测资产的必备属性)。另一个教训来自平台层:OpenAI 托管 Evals 平台 (2025 年随 AgentKit 推出)在 2026 年宣布下线(2026-10-31 转只读、2026-11-30 关闭)—— 评测资产(数据集 + grader + 用例定义)要用开放格式(JSON/YAML + 代码)托管在自家仓库,与平台解耦。 OpenAI evaluation best practices 给出的量化目标示例可作参考:摘要 ROUGE-L ≥ 0.40、G-Eval 连贯性 ≥ 80%、 文档问答 recall ≥ 0.85、precision ≥ 0.7、好评率 70%+。
(3)发布阶梯:offline → shadow → canary → A/B → monitoring。离线门禁只是第一道闸:
| 阶梯 | 做什么 | 来源定义 |
|---|---|---|
| offline | golden set + 回归集 + 能力集批量评测,统计口径判差异 | 各厂共识 |
| shadow | 新版本与旧版本并行处理同一输入,结果不暴露给用户,只对比差异 | EDDOps 明确定义的 shadow evaluation |
| canary | 小流量放量 + 在线指标/内联校验器 + 异常触发探针 | EDDOps / 阿里灰度 |
| A/B | 会话级分流、序贯检验、护栏指标 | 主手册第 8 章 |
| monitoring | 持续抽样评测 + 漂移告警 | 第 E12 章 |
离线分数的正确定位是"必要不充分":arxiv 2510.22143(真实客服对话基准)明确指出,由于部署环境的 分布漂移与交互复杂性,强 offline 基准成绩只是部署可靠性的弱指标;而 DoorDash 的经验是离线提升能 兑现到线上,但前提是离线与线上用同一 rubric + 同一校准 judge(DoorDash 原则三:各自调 judge, 两边分数会以难调和的方式背离)。阿里的联动规则最硬:离线提升但线上关键信号恶化 → 触发回滚或降级, 线上信号包括转人工率、重复追问率、投诉率、满意度、任务完成率、工单闭环率。 arxiv 2603.15676 进一步主张"evidence-driven release":发布门禁不仅看分数,还看证据充分性—— 把评测证据(通过率、幻觉率、升级率)写进发布单。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | EDD 定义与 TDD 的关系 | ⭐⭐⭐ | 能否说清"发现→捕获→反复检查"而非预测所有失败 |
| 2 | 无 EDD 的三大坑 | ⭐ | 虚假信心/未发现回归/指标脱节,能否各举一个场景 |
| 3 | Airbnb 五原则 | ⭐⭐ | 早定门槛、从错误推导指标、3–5 个 judge、人类终判、产品参与 |
| 4 | 100 样本人工精读法 | ⭐⭐⭐ | "When in doubt, look at your data"的具体操作与为什么有效 |
| 5 | 一次只改一个变量 | ⭐⭐⭐ | 归因前提;能否构造反例说明捆绑变更的代价 |
| 6 | capability vs regression 套件 | ⭐⭐⭐ | 期望通过率为何一低一高;Anthropic/腾讯门槛数字 |
| 7 | CI 门禁与回归集治理 | ⭐⭐⭐ | PR 触发、只增不减、毕业机制、确定性 100%/非确定性 ≥95% |
| 8 | judge 校准后才能进门禁 | ⭐⭐ | Airbnb 78%→88% 案例;阿里 ~85%、腾讯 ≥85% 口径 |
| 9 | EDDOps 四阶段与学术-工业错位 | ⭐⭐ | Plan/Build/Run/Analyze;93% 学术停留在 pre-deployment |
| 10 | pass^k 作发布门槛 | ⭐⭐ | p=0.75 → pass^3≈42%;关键决策类 0% 容忍 |
| 11 | 仿真评测与 fixtures | ⭐⭐ | 无安全彩排 → 模拟器 + 冻结环境;DoorDash 50×8=400 对话账 |
| 12 | 失败回流闭环 | ⭐⭐⭐ | badcase→用例→回归集;DoorDash 聚类→coding agent→Agent Skills |
| 13 | eval 作为优化目标函数 | ⭐ | DSPy/MIPROv2/GEPA;过拟合治理(留出/换血/防污染) |
| 14 | offline-online gap 与发布阶梯 | ⭐⭐ | 离线必要不充分;shadow/canary/同一 rubric 同一 judge |
四、经典面试题与参考答案
题 1(基础):什么是 EDD?它和传统 TDD 有什么异同?为什么 GenAI 特别需要它?
参考答案: EDD(Eval-Driven Development)是 GenAI 版 TDD。Airbnb 的定义是:不试图预测所有失败,而是 发现→捕获→反复检查失败模式——先定义期望行为(eval 即规约),再开发和调优系统,评测贯穿开发、 发布、运行全生命周期。与 TDD 的相同点是"测试先行、回归防护、资产沉淀"的纪律内核;不同点在于: 被测对象从确定性代码变成模型+prompt+工具+serving 的概率系统;期望输出从唯一值变成 rubric/终态/分布; 通过标准从断言成立变成统计口径(通过率、pass^k、置信区间);回归来源从代码变更扩展到任一组件变更。 GenAI 特别需要它,因为缺少 EDD 会掉进三个坑:虚假信心(浅层 helpfulness 分)、未被发现的回归 (改 prompt 后旧场景悄悄变差)、指标与产品脱节(分数涨但产品结果没动)。
题 2(基础):你的团队目前只在上线前"跑几条 case 感觉还行"。请指出风险,并给出引入 EDD 的最小起步方案。
参考答案: 风险有四:① 同一 prompt 跑通一次≠稳定可用(非确定性);② 每次改 prompt/模型/工具都可能改坏旧场景 且不易第一时间发现;③ 多步链路前段小偏差会被级联放大;④ 存在"结果对但路径错"的假阳性。 最小起步方案(不要求一步到位):1)100 样本精读——跑约 100 条真实/合成 prompt,人工读输出与 trace, 归类失败模式(Airbnb 口径;Anthropic 甚至说 20–50 个真实用例就能起步);2)围绕失败模式建测试: 能代码判的先代码判(schema/长度/关键词),语义维度建 1–3 个 judge;3)建 50–100 条 gold 集(含坏样本), 把 judge 校准到与人工一致率 ≥85%;4)把用例挂进 CI,PR 触发;5)指定一个人类终判者,拉产品伙伴每周评审错误。 关键话术:EDD 的起点不是平台,是习惯——"When in doubt, look at your data"。
题 3(进阶):请复述 Airbnb 旅行客服助手的 EDD 全流程,并说明每一步的产出物。
参考答案: 四阶段:① 探索:跑 100 个 prompt 人工精读,发现 15 个 groundedness 失败、8 个正确但啰嗦、 5 个不当拒答、3 个 JSON 失败——产出是失败模式清单;② 建测试:JSON 与长度用程序化检查, groundedness/conciseness 各建一个 judge,PM/SME 标注 60 条 gold 集(含失败样本)——产出是可复跑的测试资产; ③ 校准:judge 初始一致率 78% 过低,分歧分析发现 judge 误罚"正确的改述",修 rubric 与示例后达 88%; 同期检索改进减少 groundedness 失败——产出是可信的自动化评分器;④ 规模化与监控:扩到 5,000 样本、 每日抽样 5% 去标识化生产流量、被标记样本送人工、每周 PM 评审新增测试与修复——产出是持续运营的闭环。 加分点:指出该流程体现的原则——指标从观察到的错误推导(原则 2)、judge 少而精(原则 3)、 上线前测试在线上持续运行(十条要点之⑨)。
题 4(进阶):为什么 GenAI 迭代要"一次只改一个变量"?请设计一个违反该纪律的场景并说明后果。
参考答案: GenAI 系统有 prompt、模型、检索、工具、serving 配置多个旋钮,多变量并动时分数变化无法归因。 Airbnb 的纪律是严格排序:固定模型只变 prompt → 固定 prompt 只变模型 → 都固定只变 serving 配置; EDDOps 的表述是"最小有效变更优先"(先 prompt/路由/护栏/记忆,后架构/工具契约/检索/模型)。 反例:团队同日上线 prompt v2 + 新底座模型,总分 +3 分宣布成功;两周后投诉上升,拆解发现 prompt v2 实际 +8、新模型实际 -5——捆绑变更让他们既错过发现模型退化,也无法单独保留 prompt 收益, 回滚时更不知道回滚哪个。配套要求:版本比较要带统计口径(置信区间 + 显著性 + 最小可感知变化阈值, 阿里口径"门禁不只看差了多少,还看差异是否超过统计噪声"),否则单变量比较也会被噪声欺骗。
题 5(进阶):capability 套件与 regression 套件有什么区别?各自的通过率应该长什么样?如何设定发布门槛?
参考答案: 二者回答不同问题:capability 套件问"agent 能把什么做好",是目标山峰,初始通过率应偏低 (腾讯口径 20–50% 起步),用于指引改进方向、主动拓展、频繁迭代;regression 套件问"原有能力是否还在", 是防御地板,应接近满分,掉分即阻断,只增不减、CI 每次运行。若 capability 起步就接近满分说明套件无区分度; regression 出现 0%/100% 怪值先怀疑任务定义或评分器坏了(腾讯诊断经验)。发布门槛数字: Anthropic 推荐确定性任务用例集整体 100%、非确定性任务 ≥95%;腾讯按使用类型分级容忍: 关键决策类 0% 容忍、辅助分析类 ≤10%、创意生成类 ≤40%(N=5)。高风险不可逆场景用 pass^k 作门槛 (p=0.75 时 pass^3≈42%)。机制上配"毕业":capability 用例稳定 100% 后转入回归集,回归集滚雪球式承接。
题 6(进阶):你的 judge 与人工一致率停在 78%,团队认为"差不多能用",想直接进 CI。你怎么看?怎么排查?
参考答案:
不能进。未校准的 judge 会制造误导性信心——它系统性误判的样本会让 CI 的通过/失败与真实质量脱钩,
比没有门禁更危险。各厂口径一致:Airbnb 目标 high-80s~90s%,阿里 ~85% 后进自动化,腾讯 ≥85% 才可用。
排查步骤(Airbnb 案例就是模板):1)确认 gold 集含坏样本与边界样本(只喂好样本测不出误杀);
2)按错误类型分解分歧矩阵——78% 的缺口集中在哪类样本;3)典型发现:judge 在误罚"正确的改述"
(字面重叠式 rubric 惩罚了语义正确的不同表述),或放过"流畅的错误";4)修 rubric 与 few-shot 示例
(放宽改述惩罚、加事实核对项),重跑到 ≥85%;5)进 CI 后仍要持续运营:judge prompt/模型升级时重新产出
三项统计(与人工一致性、高风险漏判率、边界稳定性),维护 judge 金标校准集。
(动手复现:cd evals-special/labs && python3 eval_lab05_judge_calibration.py)
题 7(进阶):CI 回归集中一条原本稳定通过的用例这次失败了。给出你的排查路径与"是否阻断合并"的判断依据。
参考答案: 按"先怀疑尺子、再怀疑环境、最后怀疑代码"的顺序:① 评分器自身——judge 模型/prompt 是否升级、 rubric 是否改过(Anthropic 的 CORE-Bench 案例:修复任务与评分器后 Opus 4.5 从 42%→95%,尺子坏的代价极大); ② 环境漂移——工具返回、外部数据、mock 是否与生产分叉(mock drift),用例是否依赖了时变状态; ③ 非确定性——重跑 N 次看是否 flaky(腾讯:N=5 中 1/5 失败=存在幻觉按类型判断,5/5 失败才是稳定失败); ④ 真实回归——以上都排除,才认定本次变更引入回归,定位到具体 diff。阻断判断:regression 套件的 设计语义就是"掉分即阻断",确认是真实回归必须 block;若确认是 flaky/评分器问题,隔离该用例并记录, 不让噪声长期阻塞开发,也不假装噪声不存在。无论哪种结论,处理过程要沉淀:真实回归修复后该用例继续守门, 评分器问题则修 judge 并重新校准——回归集的每一次报警都是体系变厚的机会。
题 8(系统设计):为一个从零开始的客服 Agent 设计 EDD 落地方案(含 90 天路线图、套件设计、CI 门禁与闭环运营)。
参考答案: 分三个阶段。0–30 天(立习惯):100 样本人工精读归类失败模式;与产品定北极星指标与 launch gates (Airbnb 原则 1/5);建 50–200 条 golden set 覆盖核心路径与高风险边界(含负向用例:不当拒答/过度触发/越权); 程序化检查(schema/长度/关键词/工具断言)先行,语义维度建 3–5 个 judge;标注 50–100 gold(含坏样本) 校准 judge 到 ≥85%;指定一名人类终判者。30–60 天(立门禁):套件二分——capability 套件 (起步 20–50%,指方向)+ regression 套件(近满分,掉分阻断);CI 接入:prompt 变更 PR 触发回归、 模型升级手动验证兼容性、每周全量巡检;门槛:确定性 100%/非确定性 ≥95%,关键决策类用 pass^k(k=3~8), 版本比较带置信区间与最小可感知变化阈值;分层控制成本:断言层每次 PR、轨迹层每日、E2E 模拟按需 (模拟器 + fixtures 冻结外部状态,50 场景 × 8 trials 参考 DoorDash 20 分钟跑完)。60–90 天(立闭环): 每日抽样 5% 去标识化生产流量跑同一 rubric + 同一校准 judge(离线线上同口径);失败按 rubric 标准聚类, 高影响簇转 badcase 任务:RCA 定根因 → 修 → 入库防回归(入库五标准:可复现/期望明确/根因清楚/代表性/已脱敏); capability 用例稳定 100% 毕业进回归集;每周 PM 评审错误与新增测试。发布走 offline → shadow → canary → A/B 阶梯,离线升线上降即回滚。90 天的交付物:可复跑的用例库、judge 校准集、回归集、CI 流水线、每周评审机制。
题 9(系统设计):团队想用 GEPA/MIPROv2 类优化器以 eval 分数为目标自动搜索 prompt。请评估收益与风险,并给出治理方案。
参考答案: 收益:把 EDD 的"人工调 prompt"升级为自动搜索。MIPROv2 用贝叶斯优化搜索指令×示例组合 (30+ 任务平均约 +5%、最高约 13%);GEPA 做反射式进化(采样轨迹→自然语言反思→变异→Pareto 前沿 按切片保留候选),比 GRPO 强化学习平均高约 10%(最高 20%)、rollouts 最多省 35 倍。 DoorDash 已用 GEPA 校准 judge prompt(只保留在留出集上提升人机一致率的修订)。 风险:eval 集从裁判变成优化目标,就会被拟合与污染——分数涨可能只是对评测集的记忆; 平均分优化会掩盖切片退化;judge 本身也可能被"钻空子"(固定话术骗过 rubric)。 治理:1)三份数据分离——优化集、留出验证集(优化器不可见)、盲测集(版本发布终判); 2)按 slice 报告(任务类型/难度/用户群),任一关键切片退化即否决(GEPA 的 Pareto 选择即此思想); 3)评测资产带 provenance 与污染防护,定期换血(EDDOps 把 contamination safeguards 列为必备属性); 4)优化产物必须过完整门禁(回归集 + pass^k + 安全用例)并走 shadow/canary 才上线; 5)对"通过但可疑"的样本做轨迹审计,防 specification gaming。一句话:optimizer 越强,eval 集的治理越要像 保护训练数据一样严格。
题 10(进阶):有人说"离线评测做得再好,线上还是会翻车,所以离线评测没用"。请用 EDD 视角反驳并给出正确姿势。
参考答案: 这个说法把"必要不充分"误读成"无用"。证据链两面都要摆:一方面 arxiv 2510.22143 确实指出强 offline 基准 只是部署可靠性的弱指标(分布漂移 + 交互复杂性),EDDOps 综述也发现学术评测 93.28% 停留在 pre-deployment; 另一方面 DoorDash 报告离线模拟提升与线上真实流量一致,前提是工程做对了三件事。正确姿势: 1)离线是必要不充分——它是唯一能在发布前廉价拦截回归的手段(回归集只增不减 + PR 触发, 把"未被发现的回归"这个最贵的坑堵死);2)离线-线上同口径——同一 rubric + 同一校准 judge 两边跑 (DoorDash 原则三:各自调 judge,分数会以难调和的方式背离);3)补上最后一公里—— offline → shadow → canary → A/B → monitoring 发布阶梯,线上信号(转人工率、投诉率、任务完成率) 持续回流,离线升线上降即回滚(阿里口径);4)线上失败回流成离线用例,让离线集分布持续逼近真实分布。 结论:离线翻车不是离线评测的失败,而是"只做离线"的失败——EDD 的答案是把离线、在线、回流连成一个环。
五、易错点 · 反直觉点
-
误区:EDD = 上线前把评测跑一遍。 真相:EDD 的评测贯穿 Plan/Build/Run/Analyze 全生命周期;EDDOps 综述显示工业界 40.74% 已是持续评测, 学术 93.28% 停留在 pre-deployment 正是被批评的错位。上线前的测试上线后要持续运行(Airbnb 十条要点之⑨)。 → 记忆锚点:评测是生命周期,不是检查点。
-
误区:所有评测集通过率越高越好。 真相:capability 套件初始就应偏低(20–50% 起步,是目标山峰),regression 套件才要求近满分(防御地板)。 两个套件混在一起谈通过率,会同时失去方向感和安全感。 → 记忆锚点:能力集是山峰,回归集是地板。
-
误区:prompt 和模型一起改,总分涨了就是赢。 真相:捆绑变更放弃归因——你不知道收益来自谁、退化藏在哪,回滚都无从下手。一次一变量: prompt → 模型 → serving 配置的顺序。 → 记忆锚点:多变量并动 = 主动放弃归因。
-
误区:judge 建得越多越保险。 真相:Airbnb 原则是 3–5 个经校准的 judge 好过一堆嘈杂的评估器;未校准的 judge 数量再多, 制造的也是误导性信心,且每个 judge 都是要维护、要重校准的负债。 → 记忆锚点:judge 贵精不贵多,不校准不信任。
-
误区:回归集里长期通过的用例可以删掉省成本。 真相:回归集只增不减。正确降本姿势是"毕业降级"——稳定多版本通过且低风险的用例降级为抽样集(阿里样本治理), 而不是删除;删除等于把历史教训清零。 → 记忆锚点:回归集只增不减,降本靠降级不靠删除。
-
误区:judge 一致率 78% "差不多能用",先进 CI 再说。 真相:78% 的 judge 在 Airbnb 案例里被查出系统性误罚"正确的改述"——它惩罚的恰是高质量输出。 各家口径一致:high-80s~90s(Airbnb)、~85%(阿里)、≥85%(腾讯)才可进自动化。 → 记忆锚点:judge 的错比模型的错更隐蔽,先修尺子再量布。
-
误区:离线评测全绿 = 可以发布。 真相:离线是必要不充分条件——真实分布漂移与交互复杂性让强离线成绩只是部署可靠性的弱指标 (arxiv 2510.22143)。必须补 shadow/canary/线上监控,且离线线上同一 rubric 同一 judge。 → 记忆锚点:离线全绿只是拿到了发布资格,不是发布令。
-
误区:eval 成了优化目标(GEPA/MIPROv2)之后,原来那份 eval 集照常当裁判。 真相:被优化的 eval 集会被拟合与污染,必须留出集/定期换血/污染防护三件套, 并用优化器从未见过的盲测集做终判。 → 记忆锚点:既当裁判又当考题的卷子,必须轮换。
-
误区:CI 门禁越严越好,每个 PR 都跑全量 E2E。 真相:全量 E2E 昂贵且 flaky,会把团队拖垮或逼出"跳过门禁"的坏习惯。正解是分层门禁: 确定性断言每次 PR 必过、轨迹层每日全量、E2E 模拟按预算抽样或定时跑(DoorDash 靠模拟器把 6+ 小时压到 20 分钟才撑得起全量)。 → 记忆锚点:门禁分层:快的守门,贵的巡场。
-
误区:发布门槛看 pass@1 或平均通过率。 真相:pass@1 衡量"多试几次能不能成",生产无人值守要的是 pass^k(每次都成)。p=0.75 的 agent pass^3 只有 ≈42%;τ-bench 上 GPT-4o retail pass^1 ≈60%(官方榜单 60.4%),pass^8 ≈25%。 → 记忆锚点:demo 看 pass@k,上线看 pass^k。
六、推荐资源
论文(arxiv ID 均已在 _research/06-edd-simulation.md 核实):
- EDD/EDDOps 过程模型与参考架构(本章学术主线):Xia et al., arxiv 2411.13768(2024-11 首发,2025-11 v3)——四阶段闭环、三层架构、学术/工业错位数字。
- τ-bench:Yao et al., arxiv 2406.12045(2024-06)——用户模拟器 + DB 终态哈希 + pass^k 的范式源头;τ²-bench:arxiv 2506.07982(2025-06,双控)。
- GEPA:Agrawal et al., arxiv 2507.19457(2025-07)——反射式 prompt 进化,eval 作为目标函数的代表;MIPROv2:arxiv 2406.11695(2024-06);DSPy:arxiv 2310.03714(2023-10,背景奠基)。
- CI/门禁方向:Automated Structural Testing of LLM-based Agents, arxiv 2601.18827(2026-01,评测三级金字塔);Automated Self-Testing as a Quality Gate, arxiv 2603.15676(2026-03,evidence-driven release);Test Before You Deploy, arxiv 2604.27789(2026-04,LLM 供应链治理)。
- offline-online gap:Benchmarking and Learning Real-World Customer Service Dialogue, arxiv 2510.22143(2025-10)。
- 数据飞轮学术样本:Discord AITL, Agent-in-the-Loop(EMNLP 2025 Industry,ACL Anthology 2025.emnlp-industry.135)。
- 模拟器可靠性:DAUS, arxiv 2402.13374;隐式画像, arxiv 2502.18968;ChatChecker 非合作模拟, arxiv 2507.16792;persona 驱动销售 bot(Gromada, EMNLP 2025 Industry,ACL Anthology 2025.emnlp-industry.16)。
工程博客(数字出处,详见 _research/00-industry-practice.md):
- Airbnb《Eval-driven development: Lessons from evaluating GenAI at scale》(Rohit Girme, Dan Miller, Mia Zhao, Lifan Yang, Clint Kelly)——本章 2.2/2.4/2.5 全部数字的原始出处。
- Anthropic《Demystifying evals for AI agents》(2026-01-09)——capability/regression 套件、20–50 用例起步、pass^k 例子的出处。
- DoorDash《Building Ask DoorDash (Part 3): Evaluation》(2026-06-30)与《A Simulation and Evaluation Flywheel to Develop LLM Chatbots at Scale》(2026-01-26)——2.7 全部数字。
- OpenAI Evaluation best practices——量化目标示例与五路数据来源;注意其托管 Evals 平台已宣布下线(2026-10-31 只读、2026-11-30 关闭)。
- Hamel Husain《Your AI Product Needs Evals》(hamel.dev,evals-as-tests 布道文本)、Braintrust《What is eval-driven development》、Google web.dev《Evaluation-driven development》、DeepEval EDD 指南、GitHub awesome-eval-driven-development 清单。
本特辑交叉引用:
- 第 E1 章 · 为什么评估是 GenAI 工程的生命线(三大坑与评测四重身份的完整展开)
- 第 E2 章 · 评估指标体系(pass@k/pass^k 数学定义、P0/P1/P2 分层)
- 第 E3 章 · 黄金数据集与用例设计(毕业机制与入库标准的数据集侧视角)
- 第 E5 章 · LLM-as-Judge 深入(judge 校准全流程:本章 2.5 的 78%→88% 在这里展开)
- 第 E8 章 · 对话 Agent 与仿真评测(模拟器、fixtures 的完整实现细节)
- 第 E9 章 · 评估的统计学基础(门禁的置信区间/显著性/样本量工具)
- 第 E11 章 · Badcase 根因分析与优化闭环(本章 2.7 失败回流的归因侧)
- 第 E12 章 · 在线评估与数据飞轮(本章发布阶梯之后的线上运营)
labs 动手实验:
| Lab | 对应本章内容 | 运行命令 |
|---|---|---|
labs/eval_lab10_edd_loop.py |
EDD 全闭环:门禁/回归/一次一变量/badcase 回流(prompt_v3 回归陷阱演练) | cd evals-special/labs && python3 eval_lab10_edd_loop.py |
labs/eval_lab05_judge_calibration.py |
复现 judge 一致率 78%→88% 的校准循环(误罚改述案例) | cd evals-special/labs && python3 eval_lab05_judge_calibration.py |
labs/eval_lab02_golden_dataset.py |
用例毕业机制与回归集只增不减 | cd evals-special/labs && python3 eval_lab02_golden_dataset.py |
labs/eval_lab07_simulator_fixtures.py |
模拟器 + fixtures:环境不受控时分数测量的是噪声 | cd evals-special/labs && python3 eval_lab07_simulator_fixtures.py |
labs/eval_lab08_statistics_ci.py |
版本比较的置信区间与显著性(门禁统计口径) | cd evals-special/labs && python3 eval_lab08_statistics_ci.py |
(主手册第 8 章 · Agent 评估与可观测性提供了本章的浓缩版背景;本章是其在"开发流程嵌入"方向上的深挖。)
Badcase 根因分析与优化闭环
评分只回答"有多差",RCA(Root Cause Analysis,根因分析)才回答"为什么差、谁来修、修完怎么证明"。 本章以阿里的 RCA 五步法为骨架,拆解 badcase 从发现到修复验收的全链路工程:双通路入口、 范围收敛、三态诊断、三层定责、问题簇聚类、结构化行动项与反馈生产线。学完你应该能独立设计 一条"badcase 进、行动项出"的质量闭环,并在面试中讲清每一步的成本、置信度与 owner。
一、知识图谱
离线入口 线上入口
───────────── ─────────────────────────────────
回归失败 / 门禁不达标 会话抽检 / 人工质检 / 投诉工单
能力集低分 / Judge 低分 低满意度 / 版本回归失败 / 监控告警
│ │
└──────────► 同一 Badcase 任务表 ◄──────────┘
(统一 schema · 持久化 · 已脱敏)
│
▼
┌──────────────────────────────────────────────────────────────┐
│ RCA Pipeline(单次分析 = 异步 Multi-Agent Workflow) │
│ │
│ ① 证据汇总 sessionId/traceId 聚合全链路日志 │
│ ▼ │
│ ② 范围收敛 "现象 × 模块"映射表:命中走确定性,未命中 LLM 兜底 │
│ ▼ (只缩小候选,不直接定责) │
│ ③ 分模块诊断 逐模块读 IO → PASS / SOFT_PASS / FAIL │
│ ▼ (SOFT_PASS = 上游错误传播,不是本地之错) │
│ ④ 责任判定 三层漏斗:严重 FAIL 一票否决 → 规则模式匹配 │
│ ▼ → LLM 汇总责任传递 │
│ ⑤ 结构化落盘 分类/现象/枚举/责任层/责任模块/置信度/修复建议 │
└──────────────────────────┬───────────────────────────────────┘
▼
问题簇聚类(同根因 / 同场景 / 同工具 / 同知识点)
报告不罗列 100 条 badcase,而是产出少数几个"主题"
▼
结构化行动项(失败范围 / 证据 / 动作 / owner / 验收 / 优先级)
——拒绝"优化 Prompt"式泛化建议
▼
反馈生产三条线:评测集线 | 训练数据线 | 知识修订线
▼
质量资产库:用例库 · Trace 库 · 根因标签库 ·
修复建议库 · Judge 校准集 · 回归集
本章知识骨架(与模块对应):
| 小节 | 解决的问题 | 关键词 |
|---|---|---|
| 2.1 | 为什么 badcase 治理是评测体系的分水岭 | 现象 ≠ 根因、三类问题、闭环 |
| 2.2 | badcase 从哪里来、落到哪里 | 双通路、同一任务表、schema |
| 2.3 | RCA 五步总览 + 证据汇总 + 范围收敛 | 映射表、只缩圈不定责 |
| 2.4 | 分模块诊断怎么做 | PASS/SOFT_PASS/FAIL、责任传递 |
| 2.5 | 责任怎么判 | 三层漏斗、缺失型错误、置信度递减 |
| 2.6 | 结论怎么落盘、怎么聚成簇 | 根因标签体系、问题簇、owner |
| 2.7 | RCA 系统本身怎么工程化 | 异步 Workflow、人审兜底、反校准 |
| 2.8 | 从原因到动作、从动作到资产 | 行动项、反馈生产线、质量资产库 |
动手实验:本章配套 labs/eval_lab09_rca_pipeline.py,用纯标准库实现了上述全部五步 +
聚类,内置 4 个 badcase(含阿里经典案例"已发货退款未查订单状态")。运行:
cd evals-special/labs && python3 eval_lab09_rca_pipeline.py
二、核心概念精讲
2.1 为什么 badcase 治理是评测体系的分水岭
阿里对评测平台的总命题是:评测平台不只是"出分工具",核心价值是把问题稳定转化为可执行修复、 形成持续迭代闭环;成熟体系要回答三类问题——评什么 / 怎么判 / 怎么用。第三问恰恰是大多数 团队的断点:分数跑出来了,然后呢?其第 10 章的结论更直接:评测体系的成败取决于它能否在 跨团队协作中长期、稳定地产生可执行行动项;低分必须稳定转成行动项,否则再精细的分数也只是报表。
badcase 治理难在三个结构性事实(与第 E1 章的三大门槛一脉相承):
| 难题 | 对 RCA 的直接后果 |
|---|---|
| 非确定性 | 同一输入不一定同输出,badcase 可能难以复现,必须先固化 Trace 再谈分析 |
| 黑盒化 | 内部决策不透明,不读模块 IO 就只能猜 |
| 错误级联放大 | 多步链路前一个小偏差被放大成错误结论——最终答案错的地方,往往不是根因所在 |
第三条是 RCA 存在意义的核心:多模块流水线里,错误会沿链路向下传播。意图识别判错,后面 Query 改写、知识筛选、回复生成全部跟着错;只看最后一眼"回复不对"就去改生成层 prompt,等于给下游 背锅侠加药量,真正的病灶纹丝不动。
第一个必须内化的区分:现象 ≠ 根因。 评分层(第 E4 章的程序化评分与第 E5 章的 Judge)产出 的是现象分类:事实性错误 / 答非所问 / 过度承诺……阿里明确要求评分输出不止 pass/fail,还要 带问题分类(现象层)/ 问题现象 / 置信度 / 判定依据——这四样东西构成 RCA 的"现象入口"。 现象是症状,根因是病灶;同一种症状可能对应完全不同的病灶(同样是"事实性错误",可能是检索召回 了过期文档,也可能是生成层没忠实使用证据),同一种病灶也可能表现为多种症状。RCA 的全部工作, 就是把现象翻译到根因:哪个模块、什么失败类型、谁是 owner、怎么验收。
2.2 Badcase 双通路入口与同一任务表
badcase 有两条入口通路,阿里要求它们汇入同一 badcase 任务表与同一 RCA Pipeline:
| 入口 | 具体来源 | 特点 |
|---|---|---|
| 离线评测集 | 回归失败、发布门禁不达标、能力集低分样本、Judge 低分 | 有完整评测运行 ID、可复现、期望行为已定义 |
| 线上 | 会话抽检、人工质检、投诉工单、低满意度反馈、版本回归失败、监控告警 | 真实分布、带业务后果,但证据散、需脱敏 |
"同一张表"不是管理洁癖,而是工程必需:
- 口径统一:离线与线上用同一套根因标签体系,才能回答"线上这类问题在离线集里有没有覆盖"—— 这正是第 E12 章 DoorDash"离线-线上同一 rubric + 同一校准 judge"原则在 badcase 侧的镜像。
- 去重与聚类面向全量:聚类永远面向任务表全量(历史 + 新增),只看今天这一批会低估问题簇 的规模。lab09 的自检断言即如此:4 条新诊断 + 8 条历史记录合并聚成 4 个簇、合计 12 条。
- 状态以持久化任务记录为准:分析到哪一步、定责结论是什么、谁认领了修复,都以任务表字段为 准,不依赖人的记忆和群聊记录。
任务表的落盘 schema(对应 lab09 build_rca_record 的输出字段):
| 字段 | 含义 | 示例 |
|---|---|---|
| case_id / session_id | 案例与链路标识 | bc-004 / sess-bc004 |
| scenario / source | 业务场景 / 入口通路 | 退货退款 / 线上投诉工单 |
| issue_class | 问题分类(报告大类) | 工具执行 |
| symptom | 现象(评分层产出) | 跳过校验 |
| enumeration | 问题枚举(更细失败类型,即根因标签) | 关键工具未调用 |
| root_module / confidence / method | 责任模块 / 置信度 / 定责路径 | 回复生成 / 0.72 / llm_fallback |
| evidence / rationale | 逐模块证据枚举 / 定责理由 | 各模块 verdict + reason |
| prompt_version | 出事时的 Prompt 版本 | prompt_v2 |
| fix_suggestion | 结构化修复建议(含 owner) | 补回硬约束并全量回归,owner:算法需优化 |
两条纪律:
- 入库先脱敏。线上会话含用户隐私,入库标准里"已脱敏合规"是硬条件(阿里);Airbnb 的生产 抽样同样要求人工评审前去标识化、用途限定于安全与质量(详见第 E3 章)。
- 入口本身要留痕。
source字段决定了后续分析的一个关键问题:这个簇是"离线集早就该拦住" 还是"线上才暴露的新分布"——前者问责评测集覆盖度,后者触发新用例补充。
2.3 RCA 五步总览:证据汇总与范围收敛
阿里 RCA 五步(本章主体):
| 步骤 | 输入 | 输出 | 方法基调 |
|---|---|---|---|
| ① 证据汇总 | sessionId / chatId / traceId / 评测运行 ID | 该会话的完整模块 IO 链 | 纯工程:日志聚合、按 ts 重建 |
| ② 范围收敛 | 现象分类 + 场景 | 候选模块列表(2~3 个) | 映射表命中走确定性;未命中 LLM 兜底缩圈 |
| ③ 分模块诊断 | 候选模块的 input/output/prompt/工具返回/异常 | 每模块 verdict + 证据 + 摘要 | 规则检查为主,逐模块本地判定 |
| ④ 责任判定 | 现象 + 分模块诊断 + 根因知识库 | 责任模块 / 问题分类 / 枚举 / 修复建议 | 三层漏斗:严重 FAIL → 规则 → LLM |
| ⑤ 结构化落盘 | 以上全部 | 任务记录 + 看板渐进展示 | 结构化写入,供工单/看板消费 |
第一步:证据汇总。 按 sessionId/chatId/traceId/评测运行 ID 找链路日志,汇总用户输入、Agent 回复、模块 IO、prompt、工具调用、异常、耗时、中间产物。线上日志是多会话交错、乱序到达、混着 心跳与指标噪声的,聚合纪律是只信时间戳、不信到达顺序,噪声日志丢弃但计数。这一步成立的前 提是被测 Agent 有结构化 Trace——阿里与腾讯都强调 Trace 输出是被测 Agent 的标准能力而非事后 补救:稳定记录工具名、入参、返回值、时间戳、耗时、错误;结构化 trace 要求可解析、内容完整、 跨版本格式稳定(详见第 E7 章)。没有 trace 的 badcase,RCA 只能退化为"看最终回复猜"。
第二步:范围收敛。 为什么不直接对全模块做无差别分析?两个原因:成本高(每个模块都要 读 IO、跑检查、可能调 LLM)、噪声大(无关模块的 SOFT_PASS 会干扰判断)。阿里的做法是维护 一张"问题现象 × 功能模块"映射表:
| 问题现象 | 优先候选模块 |
|---|---|
| 答非所问 | 意图识别 / Query 改写 / 知识筛选 |
| 事实性错误 | FAQ 检索 / 知识检索 / 回复生成 |
| 过度承诺 | 风险拦截 / 回复生成 |
| 订单未澄清 | 槽位抽取 / 上下文判断 |
| 跳过校验 | 订单状态查询 / 回复生成(lab09 补充条目) |
三条使用纪律:
- 命中走确定性路径,未命中 LLM 兜底缩圈——映射表是经验沉淀,LLM 只处理表外的新现象;
- 映射表只缩小候选,不直接定责——定责永远发生在诊断之后,跳过诊断直接定责等于把"经验" 当"证据";
- 候选要并入场景必需步骤——lab09 的
narrow_scope会把该场景的 REQUIRED_STEPS(如退款 场景必须先查订单状态)并入候选,防止映射表漏掉关键工具。
2.4 分模块诊断:三态判定与责任传递
诊断动作:对候选模块逐个读 input / output / prompt / 工具返回 / 异常日志,每个检查器只回答 一个问题——"这个模块拿到它的输入后,尽到自己的职责了吗?"输出包括:问题摘要、关键证据、改进 建议、结构化归因字段。
为什么是三态而不是二态? 这是责任传递分析的基础:
| verdict | 含义 | 典型成因 |
|---|---|---|
| PASS | 本模块 IO 均正常 | 无 |
| SOFT_PASS | 基本通过但轻微瑕疵 | 模块自身逻辑没错,输出却有问题——通常是上游错误沿流水线传播 |
| FAIL | 本模块自身处理违反职责 | 本地错误(error)或必需步骤缺失(missing) |
若只有 PASS/FAIL,"上游错、下游跟着错"的链条上每个下游模块都会被判 FAIL,定责时只能和稀泥
"人人有份";显式建模 SOFT_PASS,才能把"真凶"和"被牵连者"分开。lab09 的实现机制:按流水线
顺序检查,维护 upstream_bad 标记——一旦某模块 FAIL/SOFT_PASS,其后本应 PASS 的模块自动降级
为 SOFT_PASS 并注明"上游已出错,错误可能沿流水线向下传播"。
案例演练:现象"事实性错误"(阿里原文实例 + lab09 bc-002 的具体化):
用户问"这款手机的电池容量是多少?",Agent 答"3000mAh",正确答案是 5000mAh。
诊断顺序是沿信息流逐段排查:
| 模块 | 检查问题 | 结果 |
|---|---|---|
| FAQ 检索 | 是否召回正确政策/参数 | SOFT_PASS(无命中或低分,回退知识检索,非本模块之错) |
| 知识检索 | 是否保留关键片段 | FAIL:命中 K-1024 v1 过期文档(最新版为 v2,旧版写着 3000mAh) |
| 回复生成 | 是否忠实使用证据 | SOFT_PASS:草稿忠实引用了召回片段——忠实本身没错,错在证据是脏的 |
前两段通过而回复仍错 → 回复生成 FAIL、前两模块 PASS/SOFT_PASS(原文口径);lab09 进一步把 "忠实引用脏证据"判为 SOFT_PASS,责任归到链条最上游的知识检索。注意两个检查器设计细节:
- 本地检查只读本模块 IO:知识筛选模块只要"筛选结果与自己拿到的意图自洽"即无本地错误—— 意图本身就是上游给的脏输入时,锅不在筛选;
- 启发式无法证伪时不下结论:意图识别用主题关键词反推,命中唯一主题才敢判错,命中 0 个或 多个主题宁可放过——诊断器误报会污染整条 RCA 的可信度。lab09 专门放了一条健康对照会话, 断言"健康会话不允许出现 FAIL"。
另有一个运营信号值得注意(腾讯口径,同样适用于诊断器自身):通过率 0% 或 100% 通常是任务或 评分器坏了,不是模型弱——诊断器长期全 PASS 或全 FAIL 时先怀疑诊断器(详见第 E6 章人工评估 的"诊断异常"场景)。
2.5 责任判定:三层漏斗与缺失型错误陷阱
责任判定层消费"现象 + 分模块诊断 + 根因知识库",产出四个字段:责任模块 / 问题分类 (报告大类)/ 问题枚举(更细失败类型)/ 修复建议。报告大类按阿里的口径分为四类: 语义理解 / 知识召回 / 工具执行 / 风险防控。
核心是三层策略,设计逻辑是"越确定的方法越靠前"——它同时是一个成本漏斗:
| 层 | 策略 | 适用 | 置信度(lab09 口径) |
|---|---|---|---|
| 1 | 严重模块结论直接定责(一票否决) | 关键防线模块 FAIL,后果不可逆(资损/合规) | 0.95 |
| 2 | 规则引擎匹配确定性模式 | 沿因果链归因到"最上游的非缺失型 FAIL" | 0.90 |
| 3 | LLM 汇总复杂链路责任传递 | 缺失型错误、跨模块推理难题 | ≤0.72 |
第 1 层:风险拦截这类关键防线一旦 FAIL(检出过度承诺却放行),无需再分析——后果不可逆的 模块拥有一票否决权。第 2 层:按流水线顺序排序所有 FAIL,取最靠前的非缺失型 FAIL 为 责任模块,其后异常视为传播后果。第 3 层:剩下的 FAIL 全是缺失型(模块根本没执行),规则 无法处理,才交给 LLM。
阿里给出的确定性定位清单(第 1、2 层能覆盖的硬错误与过程偏差):
| 手段 | 能定位的问题 |
|---|---|
| 规则定位硬错误 | 工具未调用 / 顺序违反 SOP / 参数缺失 / 报错未重试 / DB 状态未变 / 引用来源不存在 |
| Trace Scorer 定位过程偏差 | 计划与目标不一致 / 证据不足 / 工具返回被误读 / 上下文被覆盖 |
| 映射表缩圈 | 现象 → 候选模块(第 ② 步的延续) |
| LLM 辅助语义归类聚类 | "解释不完整 / 口径理解错 / 意图澄清不足"映射到既有分类,避免同类拆散 |
缺失型错误的归因陷阱(高频考点):工具没被调用,锅不在工具本身——模块根本没执行,定责给
它没有意义;要追问的是"谁本应触发它却没有触发":是 Prompt 忘了写约束?是意图识别没给出
触发条件?还是编排层路由错了?阿里经典案例"已发货退款未查订单状态"的完整归因是:归"工具
覆盖与执行"大类、枚举"关键工具未调用"、责任模块 = 退款 Skill / 退款流程执行模块。lab09
的简化模块划分里,工具调用决策由 Prompt 驱动的回复生成层负责,于是第 3 层 LLM 兜底给出的结论
是:prompt_v2 移除了"退款前必须先查订单状态"的硬约束,属提示词回归,置信度 0.72
(低于规则层的 0.90——LLM 结论天然要打折扣)。
漏斗的两条自检指标(lab09 断言):置信度必须随层级递减(0.95 > 0.90 > 0.72);LLM 兜底 调用次数应远小于 badcase 总数(lab 中 4 条 case 只触发 1 次)。如果 LLM 兜底占比居高不下, 说明规则库没在沉淀——每次人审复核的新模式都应该回流成规则。
LLM 兜底的输出纪律:证据不足时给低置信结论并转人工,而不是硬猜(lab09 MockLLM 的兜底 输出 confidence=0.3 + "建议人工复核并补充根因知识库")。这条纪律与第 E6 章的人工评分路由 完全一致:低置信进人工,人工结论再反哺机器。
2.6 结构化落盘:根因标签体系与问题簇
第五步落盘:把问题分类 / 现象 / 枚举 / 责任层 / 责任模块 / 置信度 / 详细报告 / 修复建议写入 任务记录,看板渐进展示(诊断中 → 已定责 → 已认领 → 修复中 → 待验收 → 已闭环)。落盘记录必须 可被工单系统 / 看板 / 配置平台 / 研发流水线直接消费——JSON 可往返、字段枚举化、无自由文本。
根因标签体系是聚类与统计的齿轮,阿里给出三条设计原则:
- 稳定:标签是枚举不是作文;同类问题永远落同一个标签,避免"解释不完整"和"回复不够 详细"各算一类;
- 可统计:能按标签聚合出趋势("知识召回类本月占比 38%,环比 +9pct");
- 指向 owner 与处理动作:标签可绑定解决角色,四类角色分工:
| owner 角色 | 含义 | 动作示例 |
|---|---|---|
| 运营可配置 | 改配置/知识库即可,不动代码 | 下线知识库过期版本文档、增补 FAQ |
| 算法需优化 | Prompt / 检索策略 / few-shot | 补回"先查订单状态"硬约束(prompt_v2 → v3) |
| 工程需修复 | 代码缺陷 / 防线缺失 | 将"确定性赔付承诺"加入拦截规则库、赔付转人工审批 |
| 业务需定口径 | 流程规范本身没定义 | "订单已发货 + 用户拒收 + 运费险 + 特殊类目"该走哪条流程 |
第四类最容易被忽视:有些 badcase 的根因不在系统,而在业务规则从未被定义——此时修复动作是 "业务先定口径",再谈落地(第 E6 章人工评分的"定口径"场景同源)。
问题簇:报告的最终形态不是 badcase 列表,而是少数几个主题。 同根因 / 同场景 / 同工具 / 同知识点的失败自动聚成簇,阿里给出的标杆产出是:
"退款已发货场景中,Agent 23 次跳过订单状态校验,主要集中在 v1.8 Prompt。"
一句话同时回答了:什么场景、什么问题、多大规模、嫌疑版本。修复才能一次覆盖一批,而不是一条 一条打补丁。聚类键的选择有讲究:用 (场景, 责任模块) 而不是"用户问题文本相似度"——文本 相似的两条 case 完全可能是不同根因(都问退款,一条是工具没调、一条是知识库过期),反之亦然; 而根因标签恰好满足"稳定、可统计、指向 owner"。簇内还应统计主导 Prompt 版本(lab09 输出: 退货簇 5 次跳过校验,集中在 prompt_v2,4/5)——这是把"嫌疑版本"量化出来的关键一步。
DoorDash 从 rubric 侧给出了互为印证的实践:rubric 标准天然是问题簇——grounding 失败 / 缺替代品 / 糟糕叙述分开调查,失败列表就变成了按影响排序的主题列表;逐条看失败会"轶事驱动" (最近、最惊奇的失败主导修复决策),必须靠聚类对抗这种注意力偏差。
2.7 RCA 的工程实现:异步 Multi-Agent Workflow 与人审兜底
阿里把单次 badcase 分析建模为一个异步 Multi-Agent Workflow:证据汇总、范围收敛、分模块 诊断、责任判定各是一个节点,任务状态持久化在任务表里,失败可重试、可中断续跑。选异步的原因 很实在:线上 badcase 是持续流入的(每天若干条到上百条),同步阻塞既无必要也扛不住峰值。
Workflow 内部同样遵循"确定性优先、模型辅助、人审兜底"的总原则(与第 E4 章评分三层、 第 E5 章 Judge 治理一脉相承):
规则定位硬错误(毫秒级,置信度最高)
└─► Trace Scorer 定位过程偏差(秒级)
└─► 映射表缩圈 + LLM 语义归类(API 成本,有抖动)
└─► 高风险 / 低置信 / 结论冲突 → 人工复核(分钟级,终判)
人审兜底的三个触发条件:高风险场景(资损/合规/隐私,即使自动定责置信度高也要复核)、 低置信结论(LLM 兜底输出 confidence 低于阈值)、规则与 LLM 结论冲突。人工结论不是用完即弃, 而是三类反校准的原料:反校准规则库(新模式沉淀为新规则)、反校准 Judge Prompt(定责提示词 迭代)、反校准根因标签(发现标签缺口或标签漂移)。这样 LLM 兜底占比会随时间下降,系统越用 越便宜、越用越确定。
RCA 系统自己也会出错,需要像对待被测系统一样对待它:
| 失效模式 | 治理手段 |
|---|---|
| LLM 兜底"胡说" | 低置信强制转人工;兜底输出必须给 rationale 供复核 |
| 映射表过时(新现象命中旧映射) | 未命中走 LLM 缩圈;定期用人工复核样本回测映射表命中率 |
| 诊断器误报 | 健康对照会话断言"不允许出现 FAIL";0%/100% 异常先怀疑诊断器 |
| badcase 其实是评测系统误报 | 定责层保留"未发现任何 FAIL,可能不是系统错误"分支(lab09 layer 0) |
最后一条尤其重要:DoorDash 的 Lesson Learned 第 4 条明确,被标记失败中有真实一部分是 harness 自身故障(judge 误报、trace 缺口),要并行修复才可信。所以根因标签库里应当有"评测/质检误报" 这一类——RCA 不只给被测系统看病,也给评测系统看病。
工程上建议额外跟踪四个 RCA 自身的质量指标(本章归纳):定责一致率(与人工复核抽样对齐, 参照第 E5 章 ~85% 的 judge 校准线)、LLM 兜底占比(应单调下降)、簇平均规模(越大说明修复 杠杆越高)、行动项转化率(badcase 变成已验收修复的比例——第 2.1 节"低分必须稳定转成行动项" 的直接度量)。
2.8 从原因到动作:结构化行动项与全链路闭环
阿里的第 8 章(自动优化建议)给修复建议定了红线:不能停留在"优化 Prompt / 加强训练 / 提升准确率"这类泛化建议——要明确失败范围、证据、具体动作、owner、验收方式、优先级;产出 结构化行动项,能被工单系统 / 看板 / 配置平台 / 研发流水线直接消费(原文口径:"建议是质量 工程里的标准任务对象")。每个建议要能展开证据链;不同根因对应不同优化手段,原文提出可分 四个等级(未展开细节,工程落地常与 2.6 的 owner 四分类对齐)。
以 lab09 的退款案例为例,一条合格的行动项长这样:
| 字段 | 内容 |
|---|---|
| 失败范围 | 退货退款场景"已发货"分支;线上投诉工单 + 离线回归共 5 例(任务表全量) |
| 证据链 | ① 回复草稿直接承诺退款 → ② trace 中无订单状态查询 span(kind=missing)→ ③ 知识库 K-2019 v3 明文要求"退款前必须先确认订单状态" → ④ prompt_v2 相比 v1 丢失该硬约束 |
| 具体动作 | 回复生成 Prompt 补回硬约束:退款请求必须先调用订单状态查询(prompt_v2 → prompt_v3) |
| owner | 算法需优化 |
| 验收方式 | 该场景全量回归通过;"跳过校验"簇清零;退款回归集无新增失败 |
| 优先级 | P0(资损风险,已发货直接退款会造成货损) |
优先级判定可借用 EDDOps(arXiv 2411.13768)的"最小有效变更优先"原则:先改 prompt / 路由 / 护栏,再动架构 / 工具契约 / 模型——变更面越小,回归验证越便宜,责任也越清晰。
行动项的验收不是"改完了",而是三层证明:
- 离线证明:新增用例(这条 badcase 本身转化而来)通过 + 既有回归集不回归。腾讯的标准路径: 复现记录完整轨迹 → 分析根因定预期行为 → 修复 → 纳入用例集防回归 → 进能力集,稳定后毕业到 回归集;Anthropic 的口径(腾讯转引):确定性任务用例集整体通过率需 100%,非确定性任务 ≥95% (详见第 E10 章)。
- 线上证明:修复上线后观察三类信号——离线质量信号、线上体验信号(转人工率、重复追问率、 投诉率、满意度)、业务结果信号(任务完成率、工单闭环率、退款成功率);DoorDash 的 reasoning leakage 案例是范本:线上评分发现泄漏 → 修 prompt → 用生产中最易触发的场景离线验证 (泄漏率降 11%)→ hero 场景全量扫描无回归 → 上线后监控确认阶跃改善(详见第 E12 章)。
- 簇级证明:该问题簇的规模归零或降到噪声水平——单条 case 通过不代表簇被消灭。
反馈生产:一条 badcase 至少生产 3 类反馈。 阿里的第 9 章把闭环拆成三条生产线:
| 生产线 | 产出 | 去向 |
|---|---|---|
| 评测集线 | 新用例(badcase 本体 + 同簇变体) | 能力集 → 毕业后回归集(只增不减) |
| 训练数据线 | 修复前后轨迹构成的偏好对 / 正确示范 | SFT / 偏好优化(详见第 E12 章数据飞轮) |
| 知识修订线 | 过期文档下线、知识点增补、口径澄清 | 知识库 / 配置平台(owner:运营可配置) |
入库标准五条(阿里):失败可复现(或至少有稳定 Trace + 人工确认);期望行为明确 (可写成规则 / Judge 标准 / 人工验收标准);根因标签清楚(归到具体能力域或业务流程); 样本有代表性(覆盖一类问题而非一次性环境抖动);已脱敏合规。配套样本治理:同簇保留 代表例(防止簇膨胀淹没重点);P0/P1 风险长期保留;稳定多版本通过且低风险者降级为抽样集; 新分布出现时主动学习优先抽取低置信 / 高影响 / 新意图 / 新工具 / 新知识点样本进人工确认。
终局是质量资产库:用例库、Trace 库、根因标签库、修复建议库、Judge 校准集、回归集。 阿里的原话是:"质量资产越厚,Agent 迭代越不靠个人经验和临时救火。"
最后看一个"闭环 agent 化"的前沿样本——DoorDash 的反馈闭环:失败按 rubric 标准聚类成主题 → coding agent 检查失败 trace、相关代码路径、近期变更、历史调查 → 修复明确时直接起草 PR, prompt/上下文学习类改动则产出诊断 + 建议供人审 → 整套 eval-driven 工作流(聚类失败、调查失败 模式)打包成 Agent Skills,可重复、可复用、可改进;skill 分错簇或写出弱修复时,更新 skill 而非打补丁一次性运行。DoorDash 对此的定位值得背诵:harness 不只是记分板,是迭代的控制面 (control plane for iteration)——生产监控 + 失败聚类 + agent 辅助调查 + 发布前验证连成一环。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | 现象 ≠ 根因;评分输出的"现象入口"四要素 | ⭐ | 是否理解评分层与归因层的分工 |
| 2 | RCA 五步骨架(证据汇总→范围收敛→分模块诊断→责任判定→结构化落盘) | ⭐⭐⭐ | 能否完整复述工业级归因流程及每步产物 |
| 3 | "现象 × 模块"映射表与"只缩圈不定责"纪律 | ⭐⭐ | 是否理解收敛的成本/噪声动机与边界 |
| 4 | 三态诊断 PASS/SOFT_PASS/FAIL 与责任传递 | ⭐⭐⭐ | 多模块同时异常时能否区分真凶与被牵连者 |
| 5 | 缺失型错误归因陷阱(工具没调,锅不在工具) | ⭐⭐⭐ | 深水区:跨模块因果推理能力 |
| 6 | 三层定责漏斗(严重 FAIL → 规则 → LLM)与置信度/成本递减 | ⭐⭐⭐ | 是否理解"确定性优先"的工程经济学 |
| 7 | 根因标签三原则(稳定/可统计/指向 owner)与四类 owner | ⭐⭐ | 标签体系能否支撑统计与分工 |
| 8 | 问题簇:聚类键 (场景, 责任模块) 与主导版本 | ⭐⭐ | 报告产出"主题"还是"轶事" |
| 9 | 行动项六要素(范围/证据/动作/owner/验收/优先级) | ⭐⭐⭐ | 能否交付可被系统消费的修复对象 |
| 10 | 双通路入口与同一任务表 | ⭐⭐ | 离线-线上闭环口径是否统一 |
| 11 | 反馈生产三条线与入库五标准 | ⭐⭐ | 一条 badcase 是否榨出三类资产 |
| 12 | RCA 的异步 Multi-Agent Workflow 与人审反校准 | ⭐⭐ | RCA 系统自身的工程化与可信度治理 |
| 13 | RCA 自身失效:评测误报也要进根因库 | ⭐ | 是否理解"评测系统也产生 bug 报告"(DoorDash) |
| 14 | 修复验收三层证明(离线/线上/簇级) | ⭐⭐ | 闭环是否真的闭上了 |
四、经典面试题与参考答案
题 1(基础):评分层把一条 case 标成"事实性错误",这是根因吗?评分输出除了 pass/fail 还应提供什么?
参考答案: 不是。"事实性错误"是现象分类(症状),不是根因(病灶)——同为事实性错误, 可能是知识检索召回了过期文档,也可能是回复生成没有忠实使用证据,修复动作完全不同。阿里明确 要求评分输出不止 pass/fail,还要带四样东西:问题分类(现象层)、问题现象、置信度、判定依据, 它们构成 RCA 的"现象入口"。现象分类 ≠ 最终根因,RCA 的任务就是把现象翻译到根因:哪个模块、 什么失败类型、谁是 owner。
题 2(基础):请复述 Badcase RCA 的五步流程,每步的输入、输出与一条关键纪律。
参考答案: 阿里口径:① 证据汇总:按 sessionId/chatId/traceId/评测运行 ID 聚合链路日志 (用户输入、Agent 回复、模块 IO、prompt、工具调用、异常、耗时、中间产物);纪律:状态以持久化 任务记录为准,只信时间戳不信到达顺序。② 范围收敛:用"问题现象 × 功能模块"映射表缩到 2~3 个候选模块(答非所问→意图识别/Query 改写/知识筛选等);纪律:映射表只缩小候选,不直接 定责,命中走确定性路径、未命中 LLM 兜底缩圈。③ 分模块诊断:逐模块读 IO/prompt/工具返回, 输出 PASS/SOFT_PASS/FAIL 与证据;纪律:本地检查只读本模块 IO,上游错误显式传播为 SOFT_PASS。 ④ 责任判定:消费"现象 + 诊断 + 根因知识库",三层漏斗定责并输出问题分类/枚举/修复建议。 ⑤ 结构化落盘:写入任务记录(分类/现象/枚举/责任层/责任模块/置信度/报告/建议),看板渐进 展示,供工单系统直接消费。
题 3(进阶):为什么要做"范围收敛"?映射表命中后能直接定责吗?
参考答案: 不能。全模块无差别分析有两个代价:成本高(每模块都要读 IO 跑检查,LLM 诊断 还有 API 费用)与噪声大(无关模块的 SOFT_PASS 会干扰判断,把定责带偏)。映射表把候选缩到 2~3 个模块,但它只缩小候选、不直接定责,原因有三:① 映射是经验先验,不是证据——同一现象 在不同 case 里根因可能完全不同;② 跳过诊断直接定责,就失去了"证据链",修复无法验收、人审 无法复核;③ 映射表会过时,新现象可能命中旧映射。正确流程:映射表缩圈 → 候选模块逐个诊断 → 诊断之后才定责;未命中映射表时退化为 LLM 兜底缩圈。另外工程上建议把场景必需步骤(如退款必查 订单状态)并入候选,防止映射表漏掉关键工具。
题 4(进阶):为什么分模块诊断要用 PASS/SOFT_PASS/FAIL 三态而不是二态?举个"责任传递"的例子。
参考答案: 二态无法区分"本地错误"与"上游传播"。多模块流水线里错误会向下传播:意图识别 把退货问题误判成物流查询,Query 改写、知识筛选、FAQ 检索会一路跟着错——若只有 PASS/FAIL, 四个模块全 FAIL,定责只能"人人有份",修复变成四处打补丁。三态下:意图识别 FAIL(真凶), 后续模块本地逻辑没错但输出受污染 → SOFT_PASS(被牵连者),定责沿因果链归到最上游的 非缺失型 FAIL。再如知识检索召回过期文档(FAIL),回复生成忠实引用了脏证据——忠实本身没错, 判 SOFT_PASS,责任归知识检索而非生成层。SOFT_PASS 是"责任传递"分析的基础,也是修复只改一处 就能覆盖一批 badcase 的依据。
题 5(进阶):退款场景 SOP 要求先查订单状态,但 trace 里这个工具从未被调用。锅该算谁头上?RCA 系统如何保证不背错锅?
参考答案: 这是缺失型错误:模块根本没执行,定责给未执行的模块本身没有意义——要追问 "谁本应触发它却没有触发"。候选解释:Prompt 忘了写硬约束(提示词回归)、意图识别没给出 触发条件、编排层路由错误、或工具本身不可用。区分它们要补证据:对比 prompt 版本 diff(lab09 案例中 prompt_v2 移除了"退款前必须先查订单状态"约束 → 提示词回归)、检查意图输出是否正确、 查工具注册与健康状态。阿里该案例的归因:大类"工具覆盖与执行"、枚举"关键工具未调用"、 责任模块 = 退款 Skill/退款流程执行模块。在三层定责漏斗中,缺失型错误规则层处理不了(没有 "最上游非缺失型 FAIL"可归),落在第 3 层由 LLM 做跨模块推理,置信度低于规则层(lab09: 0.72 < 0.90),低置信转人工复核。
题 6(进阶):如何设计一套根因标签体系?问题簇的聚类键为什么选 (场景, 责任模块) 而不是用户问题文本相似度?
参考答案: 标签三原则(阿里):稳定(枚举不是自由文本,同类问题永远落同一标签,靠 LLM 归类时要把"解释不完整/口径理解错"映射到既有分类,避免同类拆散);可统计(能聚合成趋势 看占比与环比);指向 owner 与处理动作(绑定四类解决角色:运营可配置/算法需优化/工程需 修复/业务需定口径)。聚类键选 (场景, 责任模块) 的原因:文本相似的两条 case 完全可能根因不同 (都问退款,一条是工具没调、一条是知识库过期),文本不同的也可能同根因——文本相似度度量的是 "表面像不像",根因标签度量的才是"修起来是不是同一件事"。簇内再统计主导 Prompt 版本,产出 "退款已发货场景 23 次跳过订单状态校验,集中在 v1.8 Prompt"这类可直接驱动修复决策的结论。
题 7(进阶):为什么"优化 Prompt、提升准确率"这种修复建议不可接受?给出你的行动项结构。
参考答案: 它不可执行、不可验收、无 owner:改哪个 prompt 的哪一句?改完怎么证明?谁来改? 阿里第 8 章的红线:建议必须明确失败范围、证据、具体动作、owner、验收方式、优先级,产出 结构化行动项,能被工单系统/看板/配置平台/研发流水线直接消费——"建议是质量工程里的标准任务 对象"。示例(退款案例):失败范围 = 退货退款"已发货"分支、全量 5 例;证据链 = 草稿直接承诺 退款 → trace 无订单状态查询 span → 知识库明文要求先查状态 → prompt_v2 丢失该约束;动作 = v2→v3 补回硬约束;owner = 算法需优化;验收 = 该场景全量回归通过且簇清零、回归集无新增失败; 优先级 = P0(资损)。每个建议可展开证据链,优先级按"最小有效变更优先"(EDDOps:先 prompt/ 路由/护栏,再架构/模型)。
题 8(进阶):RCA 系统自己也会出错——LLM 兜底胡说、映射表过时、甚至 badcase 本来就是评测误报。你怎么保证 RCA 结论可信?
参考答案: 四道防线:① 确定性优先的漏斗结构——能用规则定的绝不用 LLM;LLM 兜底占比 应随规则沉淀单调下降,占比不降说明人审结论没回流。② 置信度显式分层 + 低置信强制人审—— 严重 FAIL 0.95、规则 0.90、LLM ≤0.72(lab09 口径);高风险场景(资损/合规)即使高置信也复核; LLM 证据不足时输出低置信转人工,不硬猜。③ 人审结论三类反校准——反校准规则库(新模式变新 规则)、反校准定责 Prompt、反校准根因标签(补标签缺口);并像校准 judge 一样定期抽样对齐定责 一致率(参照 ~85% 校准线)。④ 给评测系统留出口——定责层保留"未发现任何 FAIL,可能不是 系统错误"分支,根因库里设"评测/质检误报"类:DoorDash 明确被标记失败中有真实一部分是 harness 自身故障(judge 误报、trace 缺口),并行修复才可信。另外用健康对照会话断言诊断器不误报。
题 9(系统设计):为一个日均万级会话的客服 Agent 设计 badcase RCA 与优化闭环平台。
参考答案: 分六层: ① 入口层:离线(回归失败/门禁不达标/Judge 低分)+ 线上(会话抽检/人工质检/投诉工单/低 满意度/监控告警)双通路汇入同一任务表;入库五标准过滤(可复现/期望明确/根因标签清楚/有 代表性/已脱敏)。 ② 证据层:全量结构化 Trace(工具名/入参/返回/时间戳/耗时/错误 + prompt 版本),按 sessionId 聚合、按 ts 重建,噪声计数。 ③ 分析层:每条 badcase 一个异步 Multi-Agent Workflow 跑五步——映射表缩圈(命中走确定性、 未命中 LLM 兜底)→ 候选模块三态诊断 → 三层漏斗定责(严重 FAIL 一票否决/规则因果链/LLM 缺失型 归因)。 ④ 聚类层:全量任务表按 (场景, 责任模块) 聚簇,输出主导版本与规模,按影响排序——报告只讲 主题不讲轶事。 ⑤ 行动层:每簇生成结构化行动项(范围/证据链/动作/owner 四分类/验收/优先级),工单系统消费; 人审兜底低置信与高风险,结论反校准规则库与标签库。 ⑥ 闭环层:反馈生产三条线——评测集线(badcase 转用例,能力集毕业进回归集,只增不减)、 训练数据线(修复前后轨迹做偏好对)、知识修订线(过期文档下线);验收三层证明(离线回归 + 线上三类信号 + 簇级清零);沉淀用例库/Trace 库/根因标签库/修复建议库/Judge 校准集/回归集。 度量 RCA 自身:定责一致率、LLM 兜底占比、行动项转化率。
五、易错点 · 反直觉点
- 把现象当根因:看到"答非所问"就去改生成层 prompt。→ 真相:现象是症状,"答非所问" 的根因常在意图识别/Query 改写/知识筛选,改生成层是给被牵连者加药量。→ 记忆锚点:先翻译, 再开药。
- 全模块无差别分析:每条 badcase 把八个模块全查一遍。→ 真相:成本高且噪声大,无关模块的 SOFT_PASS 会干扰定责;映射表缩到 2~3 个候选是标准做法。→ 记忆锚点:先缩圈,再尸检。
- 映射表命中直接定责:跳过诊断直接写结论。→ 真相:映射是先验不是证据,只缩小候选;定责 永远发生在诊断之后,否则修复没有证据链、无法验收。→ 记忆锚点:映射表是导航,不是法官。
- 缺失型错误甩锅给缺失的模块:"订单状态查询没执行 → 订单状态查询模块的锅"。→ 真相:模块 没执行就定责给它没有意义,要问"谁本应触发它却没有触发"(Prompt/编排/意图)。→ 记忆锚点: 没上场的人不背锅。
- 多模块同时 FAIL 就"人人有份":二态判定下四处打补丁。→ 真相:缺了 SOFT_PASS 就无法区分 真凶与被牵连者;沿因果链归因到最上游的非缺失型 FAIL,一处修复覆盖整条传播链。→ 记忆锚点: 上游一个因,下游一片果。
- 按用户问题文本相似度聚类:以为问法相似就是同一类问题。→ 真相:文本相似根因可以完全不同; 聚类键用 (场景, 责任模块) 才能对齐"修起来是不是同一件事"。→ 记忆锚点:按病灶聚类,不按口音 聚类。
- 修复建议停在"优化 Prompt":无范围、无证据、无 owner、无验收。→ 真相:这种建议不可执行也 不可验收,等于没分析;行动项必须是能被工单系统消费的标准任务对象。→ 记忆锚点:没有验收方式 的建议只是感想。
- RCA 全程交给 LLM:每条 case 直接丢给大模型写归因报告。→ 真相:成本爆炸、置信度无分层、 结论不可复核;正确结构是确定性优先、模型辅助、人审兜底,LLM 只处理规则搞不定的长尾且占比应 持续下降。→ 记忆锚点:规则在前,模型在后,人工兜底。
- 修完就完,不回流:badcase 修好就关闭工单。→ 真相:不回评测集,同类问题换个表述还会再来; 一条 badcase 至少要生产三类资产(评测集/训练数据/知识修订),并进回归集只增不减。→ 记忆锚点: 不回流不闭环。
- 根因标签自由发挥:每次定责写一句话感想。→ 真相:自由文本不可统计、不可聚类、指不了 owner;标签必须枚举化、稳定、绑定解决角色(运营/算法/工程/业务)。→ 记忆锚点:标签是枚举, 不是作文。
六、推荐资源
一手工业实践(本章数字出处)
- 阿里技术《Agent 评测:方法论与体系设计》(2026 年第 28 篇)——本章主体的 RCA 五步、三层定责、 根因标签体系、结构化行动项、反馈生产三条线与质量资产库均出自其第 7/8/9 章;"23 次跳过订单状态 校验,集中在 v1.8 Prompt"等案例为原文数字。
- DoorDash《Building Ask DoorDash (Part 3): Evaluation》(2026-06-30)——失败聚类成主题、coding agent 调查失败 trace 并起草 PR、Agent Skills 沉淀、"harness 是迭代的控制面",以及 reasoning leakage 案例(泄漏率降 11%)与"评测系统自己也产生 bug 报告"四条 Lessons Learned。 https://careersatdoordash.com/blog/building-ask-doordash-part-three-evaluation/
- Airbnb《Eval-driven development: Lessons from evaluating GenAI at scale》——"When in doubt, look at your data" 的 100 样本人工精读法与"一次只改一个变量"的迭代纪律,是 badcase 探索阶段的 方法论底座(详见第 E10 章)。
前沿论文(arxiv ID 均经核实)
- 《Evaluation-Driven Development and Operations of LLM Agents》(EDDOps,arXiv 2411.13768, 2024-11 首发 / 2025-11 v3)——"Analyze & Improve"阶段与"最小有效变更优先"(先 prompt/路由/ 护栏,再架构/模型)是行动项优先级排序的学术表述;其综述还量化了学界 93% 评测停留在 pre-deployment 的错配。https://arxiv.org/abs/2411.13768
- 《GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning》(arXiv 2507.19457, 2025-07)——"采样轨迹 → 自然语言反思诊断失败 → 变异 prompt → Pareto 前沿按切片保留",是 "失败诊断驱动优化"的自动化形态;DoorDash 用它校准 judge。样本效率比 GRPO 高约 35 倍量级。 https://arxiv.org/abs/2507.19457
- 《Agent-as-a-Judge: Evaluate Agents with Agents》(arXiv 2410.10934,2024-10)——让带工具的 评审 agent 检查中间产物与轨迹而非只读最终输出,与"分模块诊断自动化"同构;论文报告与人类评审 一致率约 90%(黑盒 90.44% / 灰盒 92.07%,远超 LLM-as-Judge 的约 70%),并把评估时间与成本各降 约 97%(97.72% 时间、97.64% 成本)——注意"97%"是省时省钱幅度,不是一致率。https://arxiv.org/abs/2410.10934
- 《Automated Structural Testing of LLM-based Agents》(arXiv 2601.18827,2026-01)——基于 OpenTelemetry 轨迹对 agent 控制流(工具调用序列、分支、异常路径)做断言式结构测试,正是 RCA 第 1、2 层"规则定位硬错误"的自动化基础。https://arxiv.org/abs/2601.18827
- 《Agent-in-the-Loop: A Data Flywheel for Continuous Improvement in LLM-based Customer Support》(Discord,EMNLP 2025 Industry,ACL Anthology 2025.emnlp-industry.135)——在线标注 持续回流驱动再训练(月级 → 周级)并量化 offline-online 一致性,是 2.8 节"训练数据线"的生产级 样本。https://aclanthology.org/2025.emnlp-industry.135/
动手 labs
labs/eval_lab09_rca_pipeline.py—— 本章配套实验:纯标准库实现 RCA 五步 + 三层定责漏斗 + 问题簇聚类,内置阿里"已发货退款未查订单状态"案例;断言置信度漏斗 0.95 > 0.90 > 0.72、 LLM 兜底仅 1 次、退货簇 5 次集中于 prompt_v2。 运行:cd evals-special/labs && python3 eval_lab09_rca_pipeline.pylabs/eval_lab06_trajectory_eval.py—— 轨迹三层评估与假阳性捕获:RCA 证据层依赖的结构化 trace 与"结果对但路径错"的检出(第 E7 章配套)。 运行:cd evals-special/labs && python3 eval_lab06_trajectory_eval.pylabs/eval_lab02_golden_dataset.py—— 黄金数据集治理:badcase 回流入库标准检查与"毕业"机制 (第 E3 章配套)。运行:cd evals-special/labs && python3 eval_lab02_golden_dataset.pylabs/eval_lab10_edd_loop.py—— EDD 全闭环:门禁、回归与"一次一变量",行动项验收环节的 动态演示(第 E10 章配套)。运行:cd evals-special/labs && python3 eval_lab10_edd_loop.py
交叉引用
- 第 E4 章 · 程序化评分:评分输出如何为 RCA 提供"现象入口";分层筛查流水线。
- 第 E6 章 · 人工评估与评分路由:人工评分路由的触发条件与人审结论反哺;"业务需定口径"场景。
- 第 E7 章 · 轨迹与 Agent 级评估:RCA 证据层依赖的结构化 Trace 与 Transcript Builder。
- 第 E10 章 · 评测驱动开发(EDD):badcase 如何变成测试、CI 门禁与回归纪律。
- 第 E12 章 · 在线评估与数据飞轮:行动项上线后的三类线上信号、漂移检测与反馈生产线全景。
- 主手册第 8 章 · Agent 评估与可观测性:本章是其在 badcase 治理维度的深挖版。
在线评估与数据飞轮
发布门禁只回答"这个版本能不能发",在线评估回答"这个版本在真实用户那里到底好不好", 数据飞轮回答"下一个版本如何自动变得更聪明"。本章拆解发布后的完整质量工程: 在线抽样与打分(Airbnb 每日 5% 去标识化流量)、离线-线上同一套评分(DoorDash 原则)、 发布联动的三类信号与回滚判据(阿里)、分布漂移与指标漂移的检测与归因、以及 badcase → 评测集 → 训练数据 → 模型更新的数据飞轮全景。学完你应该能独立设计一条 "生产流量进、质量资产出、下一版本带着资产上线"的闭环,并在面试中讲清每一环的 抽样策略、统计口径、合规前提与失效模式。
一、知识图谱
离线世界 线上世界
┌──────────────────────────────┐ ┌──────────────────────────────────┐
│ golden set / 回归集 / 模拟器 │ │ 生产流量(100% 全量 trace 打点) │
│ │ │ │ │ │
│ 离线门禁(P0 指标+统计口径) │ │ 抽样:随机 5%(Airbnb)+ 分层放大 │
│ │ │ │ (高风险 / 低置信 / 新意图优先) │
│ 灰度联动 ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄▶ 在线打分:同一 rubric + 同一校准 judge │
│ │ │ │ │ │
│ ▼ │ │ 三类信号:离线质量 × 线上体验 × 业务结果 │
│ 离线升 + 线上降 → 回滚/降级 ◀┄┄┄┄┄┄┼┄┄ 漂移检测:分布漂移 / 指标漂移 │
└──────────────────────────────┘ └────────────┬─────────────────────┘
│ badcase(脱敏后)
▼
与离线 badcase 汇入同一任务表 → RCA(详见第 E11 章)
│
┌─────────────────────────────┼─────────────────────────────┐
▼ ▼ ▼
反馈生产线①评测集线 反馈生产线②训练数据线 反馈生产线③知识修订线
badcase → 用例 修复前后轨迹 → 偏好对/筛样 过期文档下线/口径澄清
入库五标准 + 样本治理 进训练前同样过门禁 知识点绑定用例
└─────────────────────────────┼─────────────────────────────┘
▼
质量资产库(终局):用例库 · Trace 库 · 根因标签库 ·
修复建议库 · Judge 校准集 · 回归集
│
新版本携带更厚的资产 → 回到发布联动(飞轮转动一圈)
本章知识骨架(与模块对应):
| 小节 | 解决的问题 | 关键词 |
|---|---|---|
| 2.1 | 为什么离线评测做到极致仍然不够 | 离线-线上 gap、双环境、93.28% |
| 2.2 | 生产流量怎么抽、抽多少、合规前提 | 5% 随机、分层放大、去标识化 |
| 2.3 | 离线与线上凭什么可比 | 同一 rubric + 同一 judge、judge 版本化 |
| 2.4 | 发布时跟踪什么信号、何时回滚 | 三类信号、灰度联动、回滚判据 |
| 2.5 | 线上分数掉了,是质量掉了还是尺子坏了 | 分布漂移、指标漂移、三种解释 |
| 2.6 | 一条 badcase 如何榨出三类资产 | 三条生产线、入库五标准、样本治理 |
| 2.7 | 飞轮的终点形态是什么 | 质量资产库六库、资产复利、生命周期 |
| 2.8 | 线上↔离线双向流动的真实案例 | reasoning leakage、模型迁移 |
动手实验:本章没有独立的"在线评估 lab",但四个配套 lab 分别覆盖飞轮的一个齿轮:
抽样后打分的统计口径(eval_lab08)、judge 校准与再校准(eval_lab05)、badcase 入库标准与
毕业机制(eval_lab02)、门禁与回归闭环(eval_lab10)。运行示例:
cd evals-special/labs && python3 eval_lab08_statistics_ci.py
二、核心概念精讲
2.1 为什么离线评测做到极致仍然不够
第 E10 章讲了评测驱动开发:先有门禁,再谈发布。但门禁通过只说明"在离线集这个 curated 分布上达标",生产环境会在三个维度上击穿离线假设:
| 离线评测的软肋 | 生产环境的现实 | 直接后果 |
|---|---|---|
| 分布是 curated 的 | 真实用户的意图分布、表达习惯、长尾问法永远比评测集宽 | 报告"看起来不错"但关键长尾漏掉(幸存者偏差的另一面,详见第 E3 章) |
| 环境是冻结的 | fixtures 冻结了上游世界(目录/库存/订单),生产是活的 | 目录变化、库存波动、真实追问无法离线彩排 |
| 对手是温和的 | 真实流量含模糊表述、情绪、多轮改主意,乃至注入式输入 | 模拟器覆盖率永远小于真实交互空间 |
学术界对这个 gap 有量化证据。EDD/EDDOps 的系统综述(arXiv 2411.13768,2024-11 首发, 2025-11 v3)统计了 134 篇学术文献:93.28% 只做 pre-deployment 评测,仅 2.24% 覆盖 post-deployment,4.48% 是持续评测;97.76% 用静态基准。而工业灰色文献方向相反:40.74% 已是持续评测、81.48% 已用评测驱动适配——学界与工业界的关注点正好错位。另有客服 agent 基准研究(arXiv 2510.22143,2025)明确指出:由于真实部署环境的分布漂移与交互复杂性, 强 offline 基准成绩只是部署可靠性的弱指标。
DoorDash 把这件事列为 eval harness 的第五大挑战——双环境:"开发与生产质量可能背离", 对应的设计要求是"真实会话与模拟会话用同一 rubric + 同一 judge:离线结论带到线上,线上失败 离线复现"。Airbnb 十条要点的第 ⑨ 条同样直白:上线前测试要在线上持续运行;其评测方法 按 开发期 / 发布前 / 生产 三阶段映射,强调分层防御与持续监控,而非一次性测试。
一句话定位:离线评测管"出厂质量",在线评估管"存量质量 + 真实分布上的地面真值"。 前者是后者的必要条件,不是充分条件。
2.2 在线抽样:随机打底、分层放大、合规先行
生产流量全量人工评审不可能,全量 judge 打分的成本也常常不划算,抽样策略分两层:
(1)随机抽样打底——估计总体。 随机样本的价值在于无偏:只有随机抽样能回答"线上整体 质量是多少分"这个估计问题。Airbnb 旅行客服助手在规模化阶段的做法是标杆:评测集扩到 5,000 样本;每日抽样 5% 去标识化生产流量,跑程序化检查与 judge;被标记的样本送 人工评审;每周 PM 评审,新增测试与修复。DoorDash 的量化结果可以作为"这套打法值不值"的 注脚:质量信号从平均 1 条/天的员工反馈变成 2,000 个/天自动评分会话;全国上线前 agent 质量分 +8 分、错误率近乎减半,达到生产发布标准。
(2)分层抽样放大——抓风险。 随机样本里高风险场景占比天然低(这正是第 E3 章讲的 幸存者偏差),靠随机抽样等它浮出来,等于等事故替你收集 badcase。分层抽样要优先放大:
| 分层维度 | 含义 | 出处 |
|---|---|---|
| 高风险 | 资损/合规/赔付/投诉升级相关会话 | 阿里:高风险场景自动通过也要定期人工复核;腾讯:医疗/金融/安全 100% 人工复核 |
| 低置信 | judge 打分含糊、多 judge 分歧、规则与 judge 冲突的样本 | 阿里人工评分路由与主动学习口径 |
| 新分布 | 新意图 / 新工具 / 新知识点 / 新活动上线 | 阿里:新分布出现时主动学习优先抽取低置信/高影响/新意图/新工具/新知识点样本进人工确认 |
腾讯把"Trace 采样审查"列为人工评分六个必要场景之一:每周固定抽样读轨迹找隐藏失败模式—— 分层的不只是会话,还包括轨迹级深读。
(3)合规先行。 在线抽样的每一步都踩在用户数据上,三家都给了硬约束:
- Airbnb:生产抽样用隐私保护方法——人工评审前去标识化、用途限定于安全与质量。
- 阿里:badcase 入库五标准之一是"已脱敏合规"。
- 调研侧的现实(_research/10-infra-observability.md 争议 4):trace 含用户 PII 与商业敏感 内容,"生产流量是最真实的评测分布"与"合规上不能直接把用户数据进评测集"天然冲突; 业界通行做法是采样脱敏 + 合成改写,目前尚无论文级标准答案。
工程上的顺序纪律:先去标识化,再进 judge,再进人审,再谈入库。脱敏不是入库前的最后 一步,而是抽样管道的第一个算子。
2.3 离线-线上同一套打分:同一 rubric、同一 judge、同一校准
DoorDash 四条 Lessons Learned 的第三条是全章最重要的一句:
离线结果只有能带到线上才有意义——同一 rubric + 同一校准 judge 两边跑;各自调 judge, 分数会难调和地背离。
为什么"各自调"必然背离?因为离线 judge 会被离线集的分布塑形(哪些失败多见就按哪些失败 调 rubric),线上 judge 会被线上分布塑形,两边 rubric 各自演进后,同一个会话在两套 judge 下可以拿到不同 verdict——于是"离线修好了"无法证明"线上会好","线上报警"也无法 在离线复现,双环境彻底脱钩。这正是 DoorDash 第五挑战的设计要求要消灭的状态。
落地到工程,"同一套打分"要版本化地理解。_research/10-infra-observability.md 的 judge 治理口径:一个完整的 judge 版本 = judge 模型快照 + judge prompt 版本 + rubric 版本 + 评分协议(pointwise/pairwise)四者组合。只固定其中一个(比如"我们都用同一个模型")不叫 同一套打分。配套纪律:
| 纪律 | 内容 | 出处 |
|---|---|---|
| 校准线 | judge 与人工一致率 high 80s~90s(Airbnb)/ ~85% 后进自动化(阿里)/ ≥85% 可用(腾讯),详见第 E5 章 | 四家共识 |
| 升级即重校准 | judge prompt/模型每次升级固定产出三类统计:与人工标注一致性、高风险样本漏判率(合规/资损/隐私)、边界样本稳定性(重复评测波动) | 阿里 Judge 持续运营 |
| 漂移监控 | 保留带人工标签的金标校准集,judge 每次换版本重跑,监控与人类一致性的漂移;模型 API 升级必须触发 judge 重校准 | _research/10 judge 治理 |
| 成本路线 | 生产大规模在线评测倾向开源专用 judge,离线高价值评测用前沿闭源模型 | _research/10 启示 6 |
在线 judge 的成本工程值得单独一句:每日数千会话的打分量下,Prometheus 2 (arXiv 2405.01535,2024)这类专门化开源 judge 是关键使能技术——7B judge 在多个 meta-eval 基准上与 GPT-4 judge 的 Pearson 相关差距缩小到 ~0.8+ 水平,且行为更可预测、 可版本化、可本地部署。把 judge 当模型资产管(版本号、校准集、漂移看板),在线评分才 可能既便宜又可信。
2.4 发布联动:三类信号、灰度与回滚判据
阿里第 9 章给出了发布阶段的完整口径:离线门禁与线上灰度联动,跟踪三类信号:
| 信号类别 | 具体指标(阿里原文) | 回答的问题 |
|---|---|---|
| 离线质量信号 | 核心场景通过率、P0 风险数、关键工具参数正确率 | 这个版本出厂合格吗 |
| 线上体验信号 | 转人工率、重复追问率、投诉率、满意度变化 | 用户感受到了吗 |
| 业务结果信号 | 任务完成率、工单闭环率、退款/赔付成功率 | 业务真的变好了吗 |
以及全章最硬的一条判据:离线提升但线上关键信号恶化 → 触发回滚或降级。
这条判据反直觉的地方在于:离线分数是团队花了最多力气优化的东西,心理上最难放弃。但三类 信号的优先级排列揭示了原因——离线质量是预测器,业务结果才是目标本身;两者背离时, 说明预测器失真(离线集覆盖不到线上的变化),此时信目标不信预测器。这也呼应 2.1 的实证: 强 offline 基准成绩只是部署可靠性的弱指标(arXiv 2510.22143,2025)。
发布通道的编排,EDDOps(arXiv 2411.13768)给出了学术表述:shadow evaluation(影子 评测:新版本与旧版本并行跑同一批真实请求,但输出不暴露给用户)→ canary rollout (小流量灰度)→ 全量;safety case(证据支撑的安全论证)随评测证据持续更新。主手册第 8 章 的对应口径是 Shadow mode → Canary → A/B(会话级分流、序贯检验)→ 全量。
两个配套纪律:
- 门禁要带统计口径。阿里:版本对比要配套统计检验——关键指标置信区间 + 与基线的
显著性判断 + 最小可感知变化阈值;"门禁不只看差了多少,还要看差异是否超过统计噪声"。
线上小样本下用 Wilson 区间而非朴素比例(详见第 E9 章;动手:
cd evals-special/labs && python3 eval_lab08_statistics_ci.py)。 - 触发时机要枚举。腾讯的执行口径:提示词变更(CI 自动,PR 合入前回归)、模型版本 升级(手动,验证兼容性)、定期巡检(定时全量回归);通过率口径引用 Anthropic 推荐—— 确定性任务用例集整体通过率需 100%,非确定性任务 ≥95%。
2.5 漂移检测:分布漂移 × 指标漂移,以及"三种解释"的鉴别
线上评分趋势是飞轮的仪表盘,但仪表盘掉针不一定是发动机坏了。先定义两种漂移:
| 漂移类型 | 漂移的是什么 | 典型诱因 | 典型探针 |
|---|---|---|---|
| 分布漂移 | 输入侧:意图占比、query 复杂度、新意图/新工具/新知识点、用户群结构 | 市场活动、新品类上线、竞品导流、季节性 | 意图分类分布、会话长度分布、新意图占比、路由分布 |
| 指标漂移 | 输出侧:同一分布下的质量分、业务指标随时间趋势 | 模型/prompt/工具链变更、上游数据劣化、真实能力退化 | 逐 rubric 标准失败率、judge 分数分位数、转人工率日环比 |
监控与告警的工程形态:为每条 rubric 标准建失败率时序图、为 judge 分数建分位数图、为业务 信号建日环比看板;告警阈值用统计口径设定而不是拍脑袋(参照 2.4 的统计纪律)。多智能体 系统还有结构化手段:SentinelAgent(arXiv 2505.24201,2025)将 agent 间交互建模为图, 由专职监督 agent 结合图拓扑与运行时指标做异常检测与归因,目标是发现"偏离预期协作模式" 的行为。_research/10 的提炼是:把"行为基线 + 偏离告警"纳入可观测性栈,而不只看延迟与 token 成本——这是"评测左移到运行时"的方向。
告警触发后的鉴别诊断,是本章的高频深水区。 某条 rubric 标准线上失败率一周上升 5 个 百分点,候选解释恰好三种,排查顺序如下:
| 候选解释 | 鉴别动作 | 判据 |
|---|---|---|
| ① judge 漂移(尺子坏了) | 固定 judge 版本:用上一版 judge 重放本周样本;检查本周是否发生过 judge 模型/prompt 升级 | 旧 judge 复评后差异消失 → judge 漂移;阿里口径:judge 升级必须回看三项统计(与人工一致性/高风险漏判率/边界稳定性) |
| ② 分布漂移(考题变了) | 按意图/入口/用户群分桶看失败率;对比本周与历史周的输入分布 | 差异集中在个别桶且桶占比变化大 → 分布漂移;该桶单独治理(新意图补用例),而非全局回滚 |
| ③ 真实质量退化(考生变差了) | 固定一批历史 case 做新旧版本配对重跑(离线复现) | 离线可复现 → 定位到具体变更(prompt/模型/工具/上游数据),走 RCA 与回滚 |
顺序的意义:先排除尺子(成本最低,一次重放即可),再排除考题(一次分桶即可),最后才 归因考生。顺序反了就会把 judge 升级的锅扣给模型、把新意图涌入的锅扣给 prompt。 同时要记住统计底线:inspect_evals 团队(arXiv 2507.06893,2025)明确强调小样本上 1-2 分的差异默认视为噪声——日抽样量不大时,先算置信区间再发告警。
最后,在线评测系统自己也在被观测:DoorDash 第四条 Lessons Learned——被标记失败中 有真实一部分是 harness 自身故障(judge 误报、trace 缺口),并行修复才可信。漂移看板 本身需要一个"harness 故障率"指标(详见第 E11 章题 8 的评测误报讨论)。
2.6 数据飞轮:主循环、三条生产线与样本治理
飞轮的主循环一句话:badcase → 评测集 → 训练数据 → 模型更新 → 新 badcase,每转一圈, 系统的"已知问题库存"变厚、未知问题变少。阿里第 9 章的总命题是终点不是报告,而是把 线上失败持续转化为可复用研发资产;并给出两条量化口径:一条 badcase 至少生产 3 类 反馈;平台可分三条生产线:
| 生产线 | 输入 | 产出 | 消费者 |
|---|---|---|---|
| 评测集线 | badcase + RCA 结论 | 新用例(触发/核心逻辑/产物质量/异常容错四场景,详见第 E3 章) | 回归门禁、版本对比 |
| 训练数据线 | 修复前后的轨迹对、judge 打分、人工确认标签 | 偏好对 / 拒绝采样筛出的优质轨迹 / SFT 样本 | 模型再训练(训完仍须过门禁与灰度) |
| 知识修订线 | 根因落在知识点的 badcase | 过期文档下线、口径澄清、知识点与新用例绑定 | 检索/RAG 组件 |
评测集线大家最熟,训练数据线最容易踩坑:把在线信号喂进训练之前,训练数据本身要带 provenance(哪个 judge 版本、哪个 rubric、哪批人审标签),且训出的模型必须重新过离线 门禁与线上灰度——否则飞轮变成放大器:RLAIF 研究(arXiv 2309.00267,2023)已证明 AI 反馈会把评测器自身的偏好(冗长、格式、自我偏好)注入训练分布;奖励模型过度优化有 平方根标度律的定量刻画(arXiv 2210.10760,OpenAI,ICML 2023)——代理奖励持续上升、 真实目标先升后降;谄媚到 reward tampering 的谱系(arXiv 2406.10162,Anthropic,2024) 则说明优化压力会教系统"钻评分的空子"。飞轮的每一圈都必须重新过门禁,这是对 Goodhart 的工程防御。
入库五标准(阿里,badcase 进任何一条生产线前都要过):
- 失败可复现(或至少有稳定 Trace + 人工确认);
- 期望行为明确(可写成规则 / Judge 标准 / 人工验收标准);
- 根因标签清楚(归到具体能力域或业务流程);
- 样本有代表性(覆盖一类问题而非一次性环境抖动);
- 已脱敏合规。
样本治理(阿里)——飞轮转久了评测集会膨胀,治理四策:
| 策略 | 规则 | 目的 |
|---|---|---|
| 同簇去重 | 同一问题簇只保留代表例 | 防"23 条相似 case 刷存在感",控制回归成本 |
| 风险分层保留 | P0/P1 风险用例长期保留 | 高风险永不毕业 |
| 稳定者降级 | 稳定多版本通过且低风险者降级为抽样集 | 回归集瘦身但不删除 |
| 主动学习补新 | 新分布出现时优先抽取低置信/高影响/新意图/新工具/新知识点样本进人工确认 | 预算花在不确定的地方 |
腾讯从用例生命周期角度给了互补口径:能力测评(起步 20–50% 通过率的目标山峰)与回归 测评(接近 100% 的防御漂移)分池管理,通过率稳定 100% 后用例"毕业"进回归集,回归集 只增不减。两者合起来就是完整的样本生命周期:发现 → 入库 → 能力集迭代 → 毕业进回归 → 长期稳定者降级抽样 → 高风险者永久驻守。
飞轮的工业化样本:Discord 的 AITL(Agent-in-the-Loop,EMNLP 2025 工业赛道, ACL Anthology 2025.emnlp-industry.135)用四类人工客服在线标注持续回流,驱动 LLM 客服 系统的检索/生成持续再训练,把再训练周期从月级压缩到周级,并专门分析了 offline 与 online 评测设置之间的一致性;美国试点数字:recall@75 +11.7%、precision@8 +14.8%、 有用性 +8.4%、采用率 +4.5%。这是"人工标注 → 评测集 → 再训练 → 上线 → 新标注"闭环的 生产级证明。
2.7 质量资产库:飞轮的终局形态
阿里第 9 章把闭环的终点定义为六座库,并配了一句值得背诵的话:"质量资产越厚,Agent 迭代越不靠个人经验和临时救火。"
| 资产库 | 存什么 | 谁在消费 | 增长来源 |
|---|---|---|---|
| 用例库 | 四场景用例 + 期望行为定义 | 能力评测、回归门禁 | 专家设计 / LLM 扩展 / badcase 回流 |
| Trace 库 | 结构化全链路 trace(含失败与被标记样本) | RCA、回放评测、失败聚类 | 生产打点 + 抽样归档 |
| 根因标签库 | 枚举化标签 + (现象×模块) 映射表 | RCA Pipeline 的范围收敛与定责 | 人审结论反校准 |
| 修复建议库 | 结构化行动项(范围/证据/动作/owner/验收/优先级) | 工单系统、看板、研发流水线 | RCA 落盘 |
| Judge 校准集 | 带人工标签的金标集(含坏样本与边界样本) | judge 升级重校准、漂移监控 | 分歧样本、新失败模式 |
| 回归集 | 毕业用例,只增不减 | CI 每次运行、发布门禁 | 能力集毕业流转 |
六库的共同属性是复利:每一条 badcase 走完 RCA 后同时给多座库充值,下一圈飞轮的 每一环(抽样有分层依据、打分有校准基线、归因有映射表、修复有先例库)都比上一圈便宜。 反之,没有资产沉淀的团队永远在"一次性救火":修完即忘,同类问题换表述再来一遍。
资产本身也有生命周期治理,学界给出了可直接借用的范式:
- 评测集即数据供应链:LiveBench(arXiv 2406.19314,2024)给题目带时间戳、版本号、
上下架状态,按月滚动发布新题下架旧题;LiveCodeBench(arXiv 2403.07974,2024)给每题
带发布日期元数据,评测时按被测模型 cutoff 做时间窗切片。飞轮入库的用例同样要带
created_at / source / status,否则评测集会像没有 git 的代码库一样不可维护。 - 结果必须可复现:EleutherAI 的 harness 方法论(arXiv 2405.14782,2024)给出公式—— eval 结果 = (数据集版本, prompt 模板, 评分方式, 解码参数, 模型快照) 的函数,缺任何 一项都不可复现。在线评分同理:每个线上分数都要能回答"哪个 judge 版本、哪个 rubric 版本、哪条流水线打的"。
- 治理流程可抄:inspect_evals 仓库论文(arXiv 2507.06893,2025)系统总结了 100+ 贡献者共建评测仓库的运营流程(贡献者管理、统计比较、可复现性实践),是"把评测集当 软件产品运营"的参考实现。
2.8 线上↔离线双向流动:DoorDash 两个实战案例
前面讲的都是"离线 → 线上"的方向(门禁把关、灰度观察)。飞轮的另一半是反方向流动, DoorDash 的两个案例各示范了一个方向。
案例 1:Reasoning leakage(线上发现 → 离线验证 → 线上确认)。
| 阶段 | 动作 | 结果 |
|---|---|---|
| 线上发现 | 日常线上评分发现泄漏激增:任务完成但叙述冒出系统语言("reorder skill"、工具名、"fetch"、"in parallel")——"像编码 agent 而非购物助手" | 没有线上打分,这种"任务成功但体验劣化"的问题会被 KPI 绿灯掩盖 |
| 诊断 | 指向 prompt 设计:合并沟通规则,分离内部 skill 指令与面向用户语言 | 失败按 rubric 标准聚成簇再调查(详见第 E10 章反馈闭环) |
| 离线验证 | 用生产中最易触发的场景离线验证 | 泄漏率降 11%;hero 场景全量扫描无回归 |
| 线上确认 | 上线后监控确认阶跃改善 | 闭环完成 |
这个案例的价值:它不是"任务失败"而是"任务成功但泄漏系统语言"——只看业务结果信号永远 发现不了,只有 rubric 级的在线打分才抓得住。
案例 2:底座模型迁移(离线发现差距 → 定位兼容性 → 线上收益)。
agent 原跑在 Claude Sonnet 4.6;Gemini 3.5 Flash 发布后 benchmark 显示可降延迟。离线
harness 一跑:分数大跌。若只看公开 benchmark 就直接迁移,等于把兼容性事故带给用户;
若只看离线大跌就放弃,等于错过 35% 的延迟收益。DoorDash 的路径:eval 给出具体失败模式
→ AI coding agent 做假设与实验 → 结论:不是能力差距,是兼容性差距——Flash 部分工具
参数格式不同(工具签名要 plain string,Flash 传 {"dishes": [...]} JSON 对象);系统
prompt 围绕 Sonnet 惯例隐式调优。"低分反映为 Sonnet 适配的系统,不是更弱的模型。"
修复小而准:工具输入确定性防护(错误形状强制转换回预期形状而非丢弃调用);prompt
显式写出 Sonnet 原本自行推断的内容。重跑 eval:Flash 与 Sonnet 质量持平(harness 噪声
范围内)→ 迁移生产 → 延迟降 35%、质量无损。
| 方向 | 案例 | 若无对侧会发生什么 |
|---|---|---|
| 线上 → 离线 | reasoning leakage | 泄漏问题要等用户投诉才暴露,修复无法在上线前被量化验证 |
| 离线 → 线上 | 模型迁移 | 要么带兼容性事故上线,要么因噎废食放弃 35% 延迟收益 |
配套背景数字(同一套 harness 的整体收益,DoorDash):全量回归从手工 6+ 小时 → 自动约 20 分钟(50 场景 × 8 trials = 400 次对话),这正是"双向流动"能高频发生的 成本前提。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | 离线评测三大软肋与 offline-online gap | ⭐ | 是否理解"门禁通过 ≠ 生产可用" |
| 2 | 在线抽样两层结构:随机打底 + 分层放大 | ⭐⭐ | 能否同时回答"总体多少分"与"风险在哪里" |
| 3 | 去标识化/脱敏是抽样管道的第一算子 | ⭐ | 合规意识是否内化 |
| 4 | 离线-线上同一 rubric + 同一校准 judge(DoorDash) | ⭐⭐⭐ | 能否讲清"各自调 judge 会难调和地背离"的机理 |
| 5 | judge 版本 = 模型快照 + prompt + rubric + 评分协议 | ⭐⭐ | judge 治理的颗粒度 |
| 6 | 发布三类信号(离线质量/线上体验/业务结果)与回滚判据 | ⭐⭐⭐ | 离线升线上降时敢不敢回滚 |
| 7 | 门禁的统计口径:CI + 显著性 + 最小可感知变化 | ⭐⭐ | 是否把噪声当信号 |
| 8 | 分布漂移 vs 指标漂移的定义与探针 | ⭐⭐ | 监控体系设计的基本盘 |
| 9 | 线上分数下降的三种解释与排查顺序(judge 漂移→分布漂移→真实退化) | ⭐⭐⭐ | 深水区:归因顺序体现工程成熟度 |
| 10 | 数据飞轮主循环与三条生产线 | ⭐⭐ | 一条 badcase 是否榨出三类资产 |
| 11 | 入库五标准与样本治理四策(去重/保留/降级/主动学习) | ⭐⭐ | 飞轮转久后评测集膨胀怎么办 |
| 12 | 质量资产库六库与"资产复利" | ⭐ | 是否看见闭环的终局形态 |
| 13 | 飞轮的 Goodhart 风险:judge 偏差进训练、奖励钻空子 | ⭐⭐⭐ | 深水区:飞轮也可能是放大器 |
| 14 | 线上↔离线双向流动(reasoning leakage / 模型迁移) | ⭐⭐ | 能否用案例串起全章 |
四、经典面试题与参考答案
题 1(基础):离线评测集已经做到 5000 条、门禁全绿,为什么还需要在线评估?
参考答案: 三个原因。① 分布缺口:离线集是 curated 分布,真实用户的意图、表达、 长尾问法永远比它宽,随机报告"看起来不错"但关键长尾漏掉(幸存者偏差的另一面)。② 环境缺口:离线用 fixtures 冻结上游世界,生产的库存、目录、真实追问是活的。③ offline-online gap 有实证:EDDOps 综述(arXiv 2411.13768)统计 134 篇学术文献, 93.28% 只做 pre-deployment 评测,仅 2.24% 覆盖 post-deployment;客服 agent 基准研究 (arXiv 2510.22143)明确指出强 offline 基准成绩只是部署可靠性的弱指标。所以离线是必要 条件不是充分条件:离线管出厂质量,在线管存量质量与真实分布上的地面真值。Airbnb 十条 要点第 ⑨ 条即"上线前测试要在线上持续运行"。
题 2(基础):生产流量应该怎么抽样做在线评估?说说 Airbnb 的做法与合规前提。
参考答案: 两层结构。随机抽样打底:Airbnb 旅行客服助手每日抽样 5% 去标识化 生产流量(评测集本身 5,000 样本),跑程序化检查与 judge,被标记样本送人工评审,每周 PM 评审新增测试与修复——随机保证能无偏估计线上总体质量。分层抽样放大:高风险 (资损/合规/投诉升级)、低置信(judge 含糊/多 judge 分歧/规则与 judge 冲突)、新分布 (新意图/新工具/新知识点)优先,阿里口径是主动学习优先抽取低置信/高影响/新意图/新工具/ 新知识点样本进人工确认。合规前提:Airbnb 要求人工评审前去标识化、用途限定于安全与 质量;阿里入库五标准含"已脱敏合规"。工程纪律:去标识化是抽样管道的第一个算子,不是 入库前的最后一步。
题 3(进阶):DoorDash 为什么坚持离线与线上用"同一 rubric + 同一校准 judge"?各自调 judge 会发生什么?工程上怎么落地?
参考答案: 因为离线结果只有能带到线上才有意义。若两边各自调 judge:离线 judge 被离线集分布塑形、线上 judge 被线上分布塑形,rubric 各自演进后同一会话在两套 judge 下 可以拿到不同 verdict——"离线修好了"证明不了"线上会好","线上报警"也无法离线复现, 双环境彻底脱钩;DoorDash 原文警告"各自调 judge,分数会难调和地背离"。工程落地四点: ① 把 judge 当版本对象管理:judge 模型快照 + judge prompt 版本 + rubric 版本 + 评分协议 四者组合才是完整 judge 版本;② 校准线共识:与人工一致率 high 80s~90s(Airbnb)/~85% (阿里、腾讯);③ judge 每次升级固定回看三项统计——与人工一致性、高风险漏判率、边界 稳定性(阿里口径);④ 成本路线:大规模在线打分用开源专用 judge(如 Prometheus 2, arXiv 2405.01535),关键决策点用强模型 judge + 抽样人审。
题 4(进阶):发布新版本时你跟踪哪三类信号?"离线提升但线上恶化"怎么处理?为什么?
参考答案: 阿里口径:① 离线质量信号——核心场景通过率、P0 风险数、关键工具参数 正确率;② 线上体验信号——转人工率、重复追问率、投诉率、满意度变化;③ 业务结果 信号——任务完成率、工单闭环率、退款/赔付成功率。判据是硬性的:离线提升但线上关键 信号恶化 → 触发回滚或降级。原因:离线质量是预测器,业务结果才是目标本身;两者背离 说明预测器失真(离线集覆盖不到线上正在发生的变化),此时必须信目标不信预测器——这与 "强 offline 成绩只是部署可靠性的弱指标"(arXiv 2510.22143)一致。发布通道按 shadow → canary → 全量编排(EDDOps 明确定义了 shadow evaluation 与 canary rollout 的位置), 且每个门禁都带统计口径:置信区间 + 显著性 + 最小可感知变化,不把噪声当信号。
题 5(进阶):某条 rubric 标准的线上失败率一周上升 5 个百分点,给出你的排查顺序与每步判据。
参考答案: 先列三种候选解释,按成本从低到高排查。① judge 漂移(尺子坏了): 确认本周是否有 judge 模型/prompt 升级;用上一版 judge 重放本周样本——若差异消失则是 judge 漂移,回到校准流程(回看与人工一致性/高风险漏判率/边界稳定性三项统计)。 ② 分布漂移(考题变了):按意图/入口/用户群分桶看失败率,对比输入分布——若差异集中 在个别桶且桶占比变化大(如新活动带来新意图),是分布漂移,治理动作是给该桶补用例、 调分层抽样,而非全局回滚。③ 真实质量退化(考生变差了):固定一批历史 case 做新旧 版本配对重跑,离线可复现则定位到具体变更(prompt/模型/工具/上游数据),走 RCA 与回滚。 顺序的意义:先排除尺子(一次重放)、再排除考题(一次分桶)、最后才归因考生;顺序反了 会把 judge 升级的锅扣给模型。另守统计底线:日抽样量小时先算置信区间——inspect_evals (arXiv 2507.06893)明确小样本 1-2 分差异默认视为噪声。
题 6(进阶):画出数据飞轮的主循环。一条线上 badcase 进入体系后至少应产出什么?入库要过哪些标准?
参考答案: 主循环:线上失败 → badcase 脱敏入库 → RCA 定责(详见第 E11 章)→ 三条生产线 → 新版本 → 发布联动 → 新的线上信号。阿里口径:一条 badcase 至少生产 3 类 反馈,对应三条生产线——评测集线(badcase 转用例,进能力集迭代、毕业进回归集)、 训练数据线(修复前后轨迹做偏好对/拒绝采样筛样,喂再训练)、知识修订线(过期 文档下线、口径澄清、知识点绑定新用例)。入库五标准:① 失败可复现(或至少有稳定 Trace + 人工确认);② 期望行为明确(可写成规则/Judge 标准/人工验收标准);③ 根因标签清楚; ④ 样本有代表性(覆盖一类问题而非一次性环境抖动);⑤ 已脱敏合规。工业化证据:Discord AITL 用在线标注持续回流把再训练周期从月级压到周级,试点 recall@75 +11.7%、有用性 +8.4%。
题 7(进阶):飞轮转了半年,回归集从 200 条涨到 4000 条,每次全量回归又慢又贵,很多用例从没失败过。怎么办?
参考答案: 样本治理四策(阿里口径):① 同簇去重——同一问题簇只保留代表例,防止 "23 条相似 case 刷存在感";② 风险分层保留——P0/P1 风险用例长期保留,高风险永不 毕业;③ 稳定者降级——稳定多版本通过且低风险者降级为抽样集(不再每次全量跑,按 比例抽查),回归集瘦身但不删除;④ 主动学习补新——预算优先给低置信/高影响/新意图/ 新工具/新知识点样本。配合腾讯的用例生命周期:能力集(起步 20–50% 通过率、频繁迭代)与 回归集(接近 100%、只增不减)分池管理,通过率稳定 100% 才"毕业"进回归集;Anthropic 口径确定性任务 100%、非确定性任务 ≥95%。关键原则:降级≠删除——用例带着 trace 与根因 标签留在资产库里,分布回潮时可随时召回(呼应 LiveBench 式"上下架状态机", arXiv 2406.19314)。
题 8(进阶):把在线 judge 分数直接当训练奖励喂给模型,让飞轮"自动加速",可行吗?
参考答案: 不可行,至少不能裸奔,这是飞轮最大的暗礁。三层风险:① judge 偏差进 训练分布——RLAIF 研究(arXiv 2309.00267)证明 AI 反馈会把评测器自身的偏好(冗长、 格式、自我偏好)注入训练数据;judge 没校准好,等于拿歪尺子批量生产训练信号。② 过度优化的定量代价——奖励模型过度优化遵循平方根标度律(arXiv 2210.10760):代理 奖励持续上升、真实目标先升后降;judge 容量决定你能安全优化多久。③ 钻空子泛化—— 谄媚可以零样本泛化成 reward tampering(arXiv 2406.10162),系统会学会"讨好评分器"而 不是"做好任务"。工程防御:训练数据带 provenance(judge 版本/rubric 版本/人审标签); 训出的模型必须重新过离线门禁与线上灰度——飞轮的每一圈都必须重新过门禁;对 judge 本身做对抗审查(多 LLM 对抗打分、抽样人审),把"攻击评分器"当独立指标跟踪。
题 9(系统设计):为日均 5 万会话的客服 Agent 设计在线评估与数据飞轮平台。
参考答案: 六层架构。 ① 打点层:全量会话结构化 trace(OpenTelemetry,span 层级 session → agent/task → llm_call → tool_call;trace 是被测 agent 的标准能力而非事后补救),Trace 库落 ClickHouse 类列存。 ② 抽样层:每日 5% 随机抽样(估计总体,参照 Airbnb)+ 分层放大(高风险 100%、 低置信、新意图/新工具/新知识点);去标识化作为管道第一算子,用途限定安全与质量。 ③ 打分层:离线-线上同一 rubric + 同一校准 judge;judge 四元组版本化;大规模打分用 开源 judge 控成本,高风险与边界分转人工(人工路由条件参照第 E6 章);每日数千会话量级 (参照 DoorDash 2,000/天)。 ④ 监控层:分布漂移探针(意图/路由/长度分布)+ 指标漂移看板(逐 rubric 失败率、 judge 分位数、业务信号日环比);告警带统计口径(Wilson CI);失败率异动按"judge 漂移→ 分布漂移→真实退化"三步鉴别。 ⑤ 发布层:离线门禁(P0 指标 + 置信区间 + 最小可感知变化)+ shadow → canary → 全量; 跟踪三类信号(离线质量/线上体验:转人工率、重复追问率、投诉率、满意度/业务结果:任务 完成率、工单闭环率、退款成功率);离线升 + 线上降自动触发回滚或降级。 ⑥ 飞轮层:badcase 与离线失败汇入同一任务表 → RCA 五步 → 三条生产线(评测集/训练 数据/知识修订);入库五标准 + 样本治理四策;沉淀六座质量资产库;度量飞轮自身:badcase→ 行动项转化率、评测集覆盖率(线上问题簇在离线集有无对应)、回归成本曲线。
五、易错点 · 反直觉点
- 在线随机抽样当全貌:"每天随机抽 5%,分数挺高,没问题。" → 真相:高风险场景在随机 样本里占比天然低,幸存者偏差让报告"看起来不错"但关键问题漏掉;必须叠加分层抽样放大 高风险/低置信/新意图。 → 记忆锚点:随机估总体,分层抓风险。
- 离线与线上各调各的 judge:"线上场景特殊,单独调一版 judge 更贴。" → 真相:两套 judge 各自被各自分布塑形,同一会话两种 verdict,离线结论带不到线上、线上失败离线 复现不了,分数会难调和地背离(DoorDash 原文警告)。 → 记忆锚点:一把尺子量两处。
- 线上分数一掉就怪模型:"这周 judge 分掉了 5 个点,模型又退化了!" → 真相:候选解释 有三个——judge 漂移、分布漂移、真实退化;先固定 judge 重放、再按分布分桶、最后才 归因模型。顺序反了会把尺子的锅扣给考生。 → 记忆锚点:先查尺子,再查考题,最后查考生。
- 拿在线流量直接进评测集:"真实会话最真实,直接入库。" → 真相:未脱敏的会话含 PII, 合规上不能直接进评测集;去标识化是抽样管道的第一算子,入库还要过"已脱敏合规"等五条 标准。 → 记忆锚点:先脱敏,再入库。
- badcase 修完就关单:"问题解决了,工单关闭。" → 真相:不回流就不闭环——一条 badcase 至少要生产三类反馈(评测集/训练数据/知识修订),同类问题换个表述还会再来。 → 记忆锚点:一条 badcase,三份产出。
- 所有 badcase 无差别入库:"失败都是财富,全进回归集。" → 真相:不过入库五标准的 样本是噪声——不可复现的、期望不明的、一次性环境抖动的都该拒收;同簇只留代表例,否则 评测集膨胀、回归成本爆炸而信号密度下降。 → 记忆锚点:入库有门槛,同簇留代表。
- judge 分数直接当训练奖励:"打分器有了,RL 数据就有了。" → 真相:judge 偏差会注入 训练分布,代理奖励过度优化有平方根标度律,谄媚可泛化成 reward tampering;训练数据要 带 provenance,训完必须重新过门禁。 → 记忆锚点:飞轮每圈都要重新过门禁。
- 线上指标一波动就回滚:"转人工率今天涨了 1%,快回滚!" → 真相:小样本下 1-2 分差异 默认是噪声(inspect_evals 口径);回滚判据要带置信区间与最小可感知变化,且先做三步 鉴别。乱回滚的团队会丧失灰度发布的勇气。 → 记忆锚点:噪声不是信号。
- 回归集只进不出:"用例只增不减是纪律,谁也不许删。" → 真相:只增不减的是"可用性" 不是"每次必跑"——稳定多版本通过且低风险的用例降级为抽样集,高风险永久驻守;纪律的 目的是防删除,不是防瘦身。 → 记忆锚点:降级不删除,驻守看风险。
- 用在线评估替代离线门禁:"反正线上能看到真实反馈,离线评测差不多得了。" → 真相: 不能拿真用户彩排变更(DoorDash 第三挑战);离线门禁的意义是在伤害用户之前拦截,在线 评估的意义是事后验证与发现新分布——前者是刹车,后者是仪表盘。 → 记忆锚点:刹车与仪表盘, 一个都不能少。
六、推荐资源
一手工业实践(本章数字出处)
- 阿里技术《Agent 评测:方法论与体系设计》(2026 年第 28 篇)——发布联动的三类信号与 "离线升线上降 → 回滚或降级"、反馈生产三条生产线、入库五标准、样本治理四策、质量资产库 六库、Judge 持续运营三项统计均出自其第 9 章。
- DoorDash《Building Ask DoorDash (Part 3): Evaluation》(2026-06-30)——第五挑战 "双环境"与"同一 rubric + 同一 judge"设计要求、四条 Lessons Learned、reasoning leakage 案例(泄漏率降 11%)与底座模型迁移案例(延迟降 35%、质量无损)、2,000 个/天 自动评分会话与全量回归 6+ 小时 → 20 分钟。 https://careersatdoordash.com/blog/building-ask-doordash-part-three-evaluation/
- Airbnb《Eval-driven development: Lessons from evaluating GenAI at scale》——每日抽样 5% 去标识化生产流量、5,000 样本、每周 PM 评审、开发三阶段映射、"上线前测试要在线上 持续运行"与隐私注记(去标识化、用途限定)。
前沿论文(arxiv ID 均经核实,出自 _research/10-infra-observability.md 与 _research/06-edd-simulation.md)
- 《Evaluation-Driven Development and Operations of LLM Agents》(EDDOps, arXiv 2411.13768,2024-11 首发 / 2025-11 v3)——shadow evaluation 与 canary rollout 的位置定义、offline/online 评测与运行时控制环的统一框架;关键统计:学术文献 93.28% 只做 pre-deployment 评测、仅 2.24% 覆盖 post-deployment。https://arxiv.org/abs/2411.13768
- 《Chatbot Arena: An Open Platform for Evaluating LLMs by Human Preference》 (arXiv 2403.04132,2024-03)——真实用户分布上的持续评测:Bradley-Terry 排名、 bootstrap 置信区间、作弊检测;论文发布时 24 万+ 投票、90K+ 用户、50+ 模型,与受控人类评测一致性 约 85%+。"用户投票是最便宜的标注"正是在线飞轮思路的源头之一。 https://arxiv.org/abs/2403.04132
- 《WildBench: Benchmarking LLMs with Challenging Tasks from Real Users in the Wild》 (arXiv 2406.04770,2024-06)——"生产流量 → 评测集"的筛选管线(难度过滤、多样性去重、 敏感信息处理):从 9 万+ 真实对话中筛出 1024 条;WB-Reward 与 Chatbot Arena Elo 的 Spearman 相关 ~0.9。https://arxiv.org/abs/2406.04770
- 《Prometheus 2: An Open Source Language Model Specialized in Evaluating Other Language Models》(arXiv 2405.01535,2024-05)——在线大规模打分的成本解:7B 开源 judge 逼近 GPT-4 judge(Pearson ~0.8+ 量级)、可版本化、可本地部署。 https://arxiv.org/abs/2405.01535
- 《TRAIL: Trace Reasoning and Agentic Issue Localization》(arXiv 2505.08638, 2025-05)——trace 级失败定位的 27 类错误分类学;最佳模型定位准确率仅 ~40-60%, 说明在线失败挖掘的自动化结果要人工兜底。https://arxiv.org/abs/2505.08638
- 《Where LLM Agents Fail and How They Can Learn From Failures》(AgentDebug, arXiv 2509.25370,2025-09)——"失败 → 诊断 → 修复 → 复跑"闭环与六模块失败归因, 相对朴素重试约 +10% 量级成功率改善;其分类学可直接用作线上失败挖掘的标签体系。 https://arxiv.org/abs/2509.25370
- 《SentinelAgent: Graph-based Anomaly Detection in Multi-Agent Systems》 (arXiv 2505.24201,2025-05)——把 agent 交互建模为图做运行时异常检测与归因, 是"行为基线 + 偏离告警"进可观测性栈的代表工作。https://arxiv.org/abs/2505.24201
- 《LiveBench》(arXiv 2406.19314,2024-06)与《LiveCodeBench》(arXiv 2403.07974, 2024-03)——评测集生命周期治理的两种机制:滚动更新(时间戳/版本号/上下架状态)与 时间窗切片(按模型 cutoff 选题);飞轮入库样本的元数据设计直接照抄。
- 《Lessons from the Trenches on Reproducible Evaluation of Language Models》 (arXiv 2405.14782,2024-05)——在线分数的 provenance 规范源头:eval 结果 = (数据集版本, prompt 模板, 评分方式, 解码参数, 模型快照) 的函数。 https://arxiv.org/abs/2405.14782
- 《Developing and Maintaining an Open-Source Repository of AI Evaluations》 (arXiv 2507.06893,2025-07)——"把评测集当软件产品运营"的治理流程;统计纪律: 小样本 1-2 分差异默认视为噪声。https://arxiv.org/abs/2507.06893
- 《Benchmarking and Learning Real-World Customer Service Dialogue》 (arXiv 2510.22143,2025-10)——offline-online gap 的 agent 场景实证:强 offline 基准成绩只是部署可靠性的弱指标。https://arxiv.org/abs/2510.22143
- 《Agent-in-the-Loop: A Data Flywheel for Continuous Improvement in LLM-based Customer Support》(Discord,EMNLP 2025 Industry,ACL Anthology 2025.emnlp-industry.135)——数据飞轮的生产级样本:四类人工客服在线标注持续回流, 再训练周期月级 → 周级;美国试点 recall@75 +11.7%、precision@8 +14.8%、有用性 +8.4%、 采用率 +4.5%;并量化 offline-online 一致性。 https://aclanthology.org/2025.emnlp-industry.135/
- 飞轮训练侧的风险文献(2.6 节引用):《RLAIF vs. RLHF》(arXiv 2309.00267,2023)、 《Scaling Laws for Reward Model Overoptimization》(arXiv 2210.10760,ICML 2023)、 《Sycophancy to Subterfuge》(arXiv 2406.10162,Anthropic,2024-06)。
动手 labs
labs/eval_lab08_statistics_ci.py—— 在线监控的统计底座:Wilson 区间、bootstrap、 样本量计算与"3% 差异在 N=100 下不可判、N=2000 下可判"的版本对比演示。 运行:cd evals-special/labs && python3 eval_lab08_statistics_ci.pylabs/eval_lab05_judge_calibration.py—— 同一 judge 的校准与再校准:一致率/kappa/ 分歧分析,judge 升级后三项统计监控(第 E5 章配套)。 运行:cd evals-special/labs && python3 eval_lab05_judge_calibration.pylabs/eval_lab02_golden_dataset.py—— 飞轮的入库齿轮:入库五标准检查器、badcase 回流入库、毕业机制与回归集只增不减(第 E3 章配套)。 运行:cd evals-special/labs && python3 eval_lab02_golden_dataset.pylabs/eval_lab10_edd_loop.py—— 发布联动前的离线侧:P0 门禁、回归检测与 badcase 回流(第 E10 章配套)。运行:cd evals-special/labs && python3 eval_lab10_edd_loop.py
交叉引用
- 第 E3 章 · 黄金数据集与用例设计:幸存者偏差与四类用例来源;本章 2.6 的评测集线是其 在线侧入口。
- 第 E5 章 · LLM-as-Judge 深入:judge 校准五步与偏差治理;本章 2.3 的"同一校准 judge" 以其校准线为前提。
- 第 E6 章 · 人工评估与评分路由:在线被标记样本的人工终判路由与结论反哺。
- 第 E9 章 · 评估的统计学基础:Wilson 区间、样本量与最小可感知变化;在线告警阈值与 回滚判据的统计口径。
- 第 E10 章 · 评测驱动开发(EDD):失败聚类与 Agent Skills 化的反馈闭环;离线门禁纪律。
- 第 E11 章 · Badcase 根因分析与优化闭环:线上 badcase 脱敏入库后的 RCA 五步;本章是其 下游(反馈生产线与资产库)的上游(在线发现与抽样)。
- 第 E13 章 · Benchmark 全景与前沿争议:在线信号作为"地面真值"与公开 benchmark、私有 golden set 的三层互补关系。
- 主手册第 8 章 · Agent 评估与可观测性:本章是其"在线评估与运营"一节的深挖版。
Benchmark 全景与前沿争议
一句话导读:公开 benchmark 是 evals 体系的"外部坐标",但坐标会老化(饱和)、会被污染(泄漏)、会被作弊(Goodhart)。本章回答三个问题——主流 benchmark 各自测什么、怎么判;污染 / 饱和 / 过拟合三大威胁的机理与对策;如何把公开基准、私有 golden set、在线信号组合成可信的选型与发布决策。学完你能画出一张 2024–2026 的 benchmark 全景图,并能在面试中回答"只能选一个向老板汇报,选哪个"这类系统设计题。
一、知识图谱
Benchmark 全景与前沿争议
│
├─ 1. 分类轴(怎么认识一个 benchmark)
│ ├─ 更新形态:静态固定集 ←→ 动态可再生集
│ ├─ 定位:能力型(单项能力)/ 领域型(行业环境)/ 应用型(端到端产品形态)
│ └─ 交互形态:单轮问答 / 多轮对话 / 环境交互(Web / OS / CLI)
│
├─ 2. 全景速览(谁在测什么)
│ ├─ 对话工具型:τ-bench / τ²-bench(pass^k + 终态 DB 断言)
│ ├─ 通用助手型:GAIA(精确匹配 + L1/L2/L3)/ AgentBench(8 环境聚合)
│ ├─ 软件工程型:SWE-bench 家族(测试驱动)/ Terminal-Bench(Docker + pytest)/ BFCL(函数调用)
│ ├─ Web / OS / SaaS:WebArena 家族 / OSWorld / WindowsAgentArena / WorkArena(++)
│ ├─ 深度浏览型:BrowseComp(闭源题面)/ AssistantBench / WebVoyager
│ └─ 知识天花板探针:HLE(专家级难题)
│
├─ 3. 判定方式谱系(怎么算对)
│ ├─ 短答案精确匹配 → 执行测试(FAIL_TO_PASS)→ 终态断言 → LLM/Agent-as-Judge
│ └─ 轨迹精确匹配:已淘汰(惩罚合法替代路径)
│
├─ 4. 三大威胁(为什么分数会失真)
│ ├─ 污染:题目进训练语料 → 虚高
│ │ └─ 检测四范式:成员推断(Min-K%)/ 语义级变体 / 格式敏感性 / canary
│ ├─ 饱和:分数逼近天花板 → 失去区分度(MMLU 教训、"两年饱和律")
│ └─ Goodhart:优化代理指标 ≠ 提升真实能力(reward overoptimization)
│
├─ 5. 动态基准(四种机制与代价)
│ ├─ 时间截止线(LiveCodeBench)/ 定期轮换(LiveBench)
│ └─ 程序化生成(DyVal / DynaMath / UGMathBench)/ 保义翻新(2503.06643)
│
├─ 6. 选型与决策(怎么用)
│ ├─ 三层互补:公开 benchmark(外部坐标)+ 私有 golden set(业务真值)+ 在线信号(地面真值)
│ ├─ Arena vs 静态 benchmark:各测什么、何时信谁
│ └─ 统计纪律:CI / 重复实验 / BT / style control(详见第 E9 章)
│
└─ 7. 前沿争议
├─ 排行榜是否已被污染失效 · 难度军备竞赛是不是 treadmill · harness 效应
└─ benchmark 分数与生产表现的相关性(HAL / AI Agent Index、Sean Grove 实证)
二、核心概念精讲
2.1 Benchmark 分类学:三条轴
拿到任何一个 benchmark,先用三条轴给它定位,才能判断"它的分数对我意味着什么"。
轴一:更新形态——静态 vs 动态
| 维度 | 静态基准 | 动态基准 |
|---|---|---|
| 题目集 | 一次发布、固定不变 | 持续更新或可无限生成 |
| 代表 | GAIA、SWE-bench、OSWorld、MMLU | LiveBench、LiveCodeBench、DyVal、Chatbot Arena |
| 优点 | 跨期完全可比、运行便宜、可沉淀基线 | 抗污染、能持续保持区分度 |
| 缺点 | 污染 + 饱和双重退化 | 跨版本不可直接比较、运营成本高 |
| 典型结局 | 两年内逼近饱和(见 2.5) | 变成"当前快照"而非"连续量尺" |
轴二:定位——能力 / 领域 / 应用
| 类型 | 测什么 | 代表 | 与业务的距离 |
|---|---|---|---|
| 能力型 | 单项基础能力(函数调用、知识、数学) | BFCL、HLE、MMLU-Pro | 最远:只能拼能力画像,不能预测端到端表现 |
| 领域型 | 特定行业/环境内的任务完成 | SWE-bench(开源仓库修 issue)、WorkArena(企业 SaaS) | 中等:环境相似但业务规则不同 |
| 应用型 | 端到端产品形态 | τ-bench(客服)、GAIA(通用助手)、OSWorld(桌面助理) | 最近:仍是代理,分布不等于你的流量 |
轴三:交互形态——单轮 / 多轮 / 环境
| 形态 | 判定特点 | 代表 | 工程含义 |
|---|---|---|---|
| 单轮问答 | 精确匹配 / 选择题判分,天然抗 judge 偏差 | GAIA、HLE、MMLU | 便宜、可高频跑,但测不了规划与工具 |
| 多轮对话 | 终态断言 + 政策遵循;需用户模拟器 | τ-bench / τ²-bench | 模拟器本身是效度来源(见 2.4 与易错点 7) |
| 环境交互 | 沙箱环境 + 终态检查脚本 | WebArena、OSWorld、Terminal-Bench、SWE-bench | 环境搭建/重置成本高,需 Docker/VM 化与并行 |
多数 agent benchmark 是三轴的复合体:τ-bench = 静态 × 应用型 × 多轮对话;Terminal-Bench = 静态(版本化)× 领域型 × 环境交互。定位三轴之后,还要追问两件事:它怎么判分(2.3)、它的分数还新鲜吗(2.4–2.6)。
2.2 主流 Agent Benchmark 全景速览
演进时间线(2024–2026,来自 _research/02-agent-benchmarks.md):
- 2024 上半年 · 环境奠基期:WebArena / VisualWebArena / OSWorld / WorkArena 确立"自托管沙箱环境 + 程序化判定"范式;GAIA(2023 底发布)确立"结果精确匹配 + 难度分级"的通用助手范式;τ-bench 把对话式工具 Agent 与用户模拟器引入评测。
- 2024 下半年 · 软件工程爆发期:SWE-bench 成为事实标准,Verified / Multimodal 变体相继出现;Agent-as-a-Judge 开启"用 Agent 评 Agent";WindowsAgentArena 把 Windows 桌面环境工程化。
- 2025 · 难度军备与可靠性转向:SWE-bench 分数逼近 70%+ 后,社区转向更难、抗污染的基准(SWE-bench Pro、Terminal-Bench 2.0 Hard、BrowseComp、HLE);τ²-bench 用"双控"解决模拟器泄题;pass^k / 多次采样成为标配。
- 2026 · 工业化与信任危机并存:Terminal-Bench 论文(ICLR 2026)把终端 Agent 评测标准化;同时 HAL / AI Agent Index 等系统性结论动摇了"一个分数定优劣"的文化——评测重心从公开排行榜转向私有 golden set + 领域定制套件。
主表:12 个必须认识的 benchmark(数字均出自素材调研报告)
| Benchmark(arXiv,年份) | 机构 | 测什么 | 怎么判 | 核心指标 | 关键数字 / 已知问题 |
|---|---|---|---|---|---|
| τ-bench(2406.12045,2024) | Sierra | 客服型 Agent:多轮对话 + 遵守政策文档 + 调用工具 | 终态数据库比对,无需人评 | pass^k | retail 115 + airline 50 任务;GPT-4o retail pass^1 ≈60%(官方榜单 60.4%;摘要口径不足 50%),pass^8 ≈25%(摘要 <25%) |
| τ²-bench(2506.07982,2025) | Sierra | 双控对话:用户侧也是有工具的 Agent,信息不对称 | 同上 | pass^k | 各家分数相对 τ-bench 显著下降——此前高分部分来自模拟器"配合性泄题" |
| GAIA(2311.12983,2023,ICLR'24) | Meta AI + HF + AutoGPT | 通用助手:"人类觉得简单、AI 觉得难"的 466 题,L1/L2/L3 | 短答案精确匹配 | 准确率 | 发布时人类 92% vs GPT-4+插件 ≈15%;2025 年顶级系统进入 70–80% 区间(榜单按月变动),L1 接近饱和 |
| AgentBench(2308.03688,2023,ICLR'24) | 清华 THUDM | LLM-as-Agent 综合能力,8 个交互环境(POMDP 形式化) | 各环境原生判定 + 标准化聚合 | 聚合分 | GPT-4 大幅领先同期开源模型;多数子环境如今已饱和,主要作历史基线 |
| SWE-bench(2310.06770,2023,ICLR'24) | Princeton 等 | 真实 GitHub issue → patch(12 个 Python 仓库、2294 任务) | FAIL_TO_PASS / PASS_TO_PASS 测试 | resolved 率 | 发布时最好 ≈3%;SWE-agent+GPT-4 12.5%;Claude 3.5 Sonnet+SWE-agent 49%;2025 头部 >70% |
| SWE-bench Multimodal(2410.03859,2024,ICLR'25) | Princeton 等 | JS / 前端视觉软件域(17 仓库、617 issue + 截图) | 同上 | resolved 率 | GPT-4o+SWE-agent 在 Python Lite 约 33%,在 Multimodal 跌至个位数~10%——语言/模态分布不外推 |
| Terminal-Bench(2601.11868,2026,ICLR'26) | Stanford + Laude Institute | 终端/命令行 Agent:Docker 容器 + 自然语言指令 | 自动验证脚本(pytest 式断言) | 任务成功率 | 初版 80 任务;2025-07 的 TB 2.0 Hard 精选 89 个高难任务;头部 50%+ 到长尾 <10%,harness 效应为核心发现 |
| BFCL(Gorilla 2305.15334【未核实】,2023 起) | UC Berkeley | 函数调用能力:v1 AST+可执行验证;v3(2024-09)加多轮、缺失函数/参数、幻觉检测 | AST 匹配 + 可执行验证 | 总分 / 子项分 | 头部总分 85–95%,但"缺失函数/相关性检测"子项普遍掉 10–30 分——"知道何时不调用"仍是短板 |
| WebArena(2307.13854,2023,ICLR'24) | CMU 等 | 自托管真实功能网站集群(电商/GitLab/论坛/地图/CMS),812 任务 | 功能性检查(URL/页面终态/DB 状态) | 成功率 | 发布时 GPT-4 系 ≈14%,人类 78%;2025 最佳 >60%,出现饱和压力 |
| OSWorld(2404.07972,2024,NeurIPS'24) | XLANG Lab | 真实 OS 虚拟机(Ubuntu/Windows/macOS)369 个开放式操作任务 | 执行脚本检查终态(文件/系统设置) | 成功率 | 人类基线 72.4%,发布时最好多模态 Agent ≈12%;2025 头部 40%+(369 题全集口径;OSWorld-Verified/厂商口径下 Sonnet 4.5/Opus 4.5 已达 61.4%/66.3%,2025.9/11,见主手册第 8 章);判定脚本脆弱是已知痛点 |
| WorkArena / ++(2403.07718【未核实】/ 2407.05291,2024) | ServiceNow | 企业 SaaS 工作流:表单/列表/知识检索/服务目录下单;++ 加组合式规划 | 领域专家定义的终态断言 | 成功率 | v1 约 33 任务;最好商用模型仅约两成——企业私有系统的隐性知识是真实瓶颈 |
| HLE(Humanity's Last Exam,2501.14249,2025) | CAIS + Scale AI 等 | 约 3000 道专家级前沿知识难题(100+ 学科,约 1/4 多模态) | 精确匹配 + 污染审计 | 准确率 | 发布时最强前沿模型 <10%;2025 年内推理模型推到 30%+,再验"基准两年饱和律";部分题目有歧义,社区众包修订中 |
补充速览(开放网络与企业桌面两条支线):
| Benchmark | 测什么 | 关键数字 / 已知问题 |
|---|---|---|
| BrowseComp(OpenAI 博客,2025-04,无 arXiv) | 1266 道"答案在互联网上但极难检索到"的题;题面不公开以防污染 | Deep Research ≈51.5%,普通 GPT-4o 级浏览仅 ≈2%;闭源题面无法被第三方审计 |
| AssistantBench(2407.15711,2024) | 214 个真实开放网络耗时任务(人类需 5–90 分钟,跨 258 个网站) | 最好模型准确率不超过约 26%(最强约 25.2%);"题目可行性验证"流程值得借鉴 |
| WebVoyager(2401.13919【未核实】,2024) | 真实网站(15 站点、643 任务)端到端多模态网页 Agent | 首创 GPT-4 自动评审(与人工一致性约 87%);真实网站不可复现(改版/登录墙) |
| WindowsAgentArena(2409.08264,2024) | 可大规模并行的 Windows 环境,154 任务 + Navi 基线 agent | Navi(GPT-4V)≈19.5%;并行化工程把评测吞吐提升一个数量级 |
| VisualWebArena(2401.13649【未核实】,2024) | WebArena 的多模态视觉扩展,910 任务 | 按图找商品、视觉问答式导航 |
| MLE-bench(2410.07095,2024) | 75 个 Kaggle 竞赛测 ML 工程 Agent | 竞赛式长程任务 |
| SWE-Lancer(2502.12115,2025) | 以真实自由职业平台计价任务(总额 $1M+)测工程 Agent 的经济价值 | "任务值多少钱"口径 |
速览表的使用方式:面试被问"你了解哪些 agent benchmark"时,不要背清单,而是按 2.1 的三轴归类 + 每个给一句"测什么 / 怎么判 / 一个数字 / 一个坑"。
2.3 判定方式谱系:benchmark 怎么给 agent 判分
Agent 轨迹千变万化,精确匹配轨迹已淘汰——会把大量合法但不同的解决路径判错。2024 年后的共识是功能性正确判定(execution-based evaluation):
| 判定方式 | 机制 | 代表 | 优点 | 缺点 |
|---|---|---|---|---|
| 短答案精确匹配 | 归一化(大小写/标点)后字符串比对 | GAIA、HLE | 零 judge 偏差、零成本 | 只适合唯一答案题 |
| 执行测试 | patch 让 FAIL_TO_PASS 通过且 PASS_TO_PASS 不回归 | SWE-bench | 功能性判定的黄金标准 | "resolved"只保证过测试,不保证 patch 质量(可读性/副作用) |
| 终态断言 | 任务后跑检查脚本:文件内容、DB 状态、HTTP 响应、pytest 断言 | OSWorld、Terminal-Bench、WebArena、τ-bench | 抗话术干扰、全自动 | 判定脚本脆弱(终态检查误判)、环境搭建成本高 |
| LLM-as-a-Judge | rubric + judge 模型 | WebVoyager(与人工一致性 ~87%)【未核实】 | 覆盖开放性输出 | 位置/冗长/自我偏好偏差,需人工校准(详见第 E5 章) |
| Agent-as-a-Judge | 带工具的评审 Agent(可读代码、执行检查) | Agent-as-a-Judge(2410.10934,Zhuge et al.,ICML 2025):DevAI 基准 55 个 AI 开发任务 + 365 条分层用户需求 | 与人类对齐度高,相比三位人类专家节省 97.72% 时间、97.64% 成本(场景特定值) | 需先人工校准;警惕与被测系统同源的自我偏好 |
终态断言长什么样(Terminal-Bench / τ-bench 式判定的最小示例,示意代码):
# 任务:在沙箱里取消订单 #A1024 并退款到原支付方式
# 判分不读 agent 的自然语言回复,只检查世界变成了什么样
def test_task_resolved(env):
order = env.db.get_order("A1024")
assert order.status == "CANCELLED" # 终态:订单状态
assert order.refund_amount == order.paid # 终态:全额退款
assert order.refund_channel == order.pay_channel # 终态:原路退回
assert env.mail.outbox_count(user=order.uid,
subject_contains="取消确认") == 1 # 副作用:通知
# 反向断言:不该发生的副作用
assert not env.db.any_new_orders(user=order.uid)
对照 SWE-bench:FAIL_TO_PASS 测试必须转绿、PASS_TO_PASS 测试不得回归,两者都在干净环境执行——这就是"resolved"的操作性定义。
三条工程纪律:
- 确定性优先:能写测试就不用人评,能用终态断言就别判轨迹;LLM 评审只用于无法程序化的开放性输出,且人工抽样校准目标一致率 ≥85%(素材口径)。
- 判分与能力解耦:Terminal-Bench 配套 Terminus 参考 Agent(只给一个无头终端、纯 bash),把"harness 工程"与"模型能力"分开——排行榜必须声明用的是哪套 harness。
- 可靠性与成本并报:pass^k 要附带平均 token 成本/任务与失败重试成本;高 pass^k 但高成本的方案,单位经济学上可能不如低 pass^k + 人工兜底。
pass^k 是 agent benchmark 的招牌指标(τ-bench 提出):同一任务独立运行 k 次全部成功的比例,pass^k = |{task : ∀ i∈[1..k], success}| / |tasks|;工程惯例 k 取 4–8,同时报告 pass@1 与 pass^k,两者差距反映系统方差。直觉:若每次成功率 p 且独立,pass^k ≈ p^k(p=0.9, k=8 时仅 0.43)。τ-bench 上 GPT-4o retail 域 pass^1≈60%(官方榜单 60.4%)→ pass^8≈25%(摘要 <25%)——这就是"单次看起来不错"与"可部署"之间的鸿沟。统计细节(iid 假设、不可从 pass@1 外推、必须报 n 与 CI)见第 E9 章 · 评估的统计学基础。争议面:有观点认为 pass^k 惩罚了"可诊断、可回滚的错误",主张改报"失败模式分布 + 成本";反方认为无人值守部署就是要高可靠性,pass^k 是最低标准。
2.4 污染:机理、检测四范式与军备竞赛
机理:公开题面进入训练语料 → 模型"背过题" → 分数虚高。SWE-bench 的 GitHub issue 文本大量出现在训练语料中,被普遍怀疑贡献了部分分数增长;GAIA / HLE 题目同样面临泄露。根本难题是举证:闭源模型不公开训练数据,且题目若本来就在公开网络语料里,"见过"是否等于"作弊"?实践者的折中立场是:见过 ≠ 有罪,但分数必须按"可能见过"折价——这正是 LiveCodeBench 式时间截止成为硬标准的原因。
检测四范式(来自 _research/05-benchmark-dynamics.md):
| 范式 | 原理 | 代表方法(arXiv,年份) | 适用与局限 |
|---|---|---|---|
| 成员推断(MIA) | 训练过的文本似然更高 | Min-K% Prob(2310.16789,2023,ICLR'24 oral):取最低 K%(默认 20%)token 的 log-prob 均值做成员性分数,只用 API 概率即可 | 在 WikiMIA 上比既有最强方法提升约 7.4% AUC(平均 AUC 约 0.72);对改写不敏感;需校准阈值;闭源模型可能平滑概率 |
| 语义级泄漏 | 模型记的是"题"不是"字符串" | 翻译/改写变体上的异常增益(2311.04850,Tencent AI Lab,2023):GSM8k/TruthfulQA 翻译成其他语言后仍有记忆信号,且英文原版记忆强于翻译版 | 需可对照的变体集;与"合理泛化"难划界 |
| 格式敏感性 | 捷径表现为对表面结构的依赖 | 选项置换一致性、字母偏置(2503.23483,2025);另一面证据:指令微调模型其实比想象中鲁棒(2404.08382,2024) | 只能作辅助证据——"对顺序鲁棒"本身可以被训练出来 |
| Canary strings | 预埋唯一字符串,探测复现能力 | 源头是 Carlini 等的训练数据提取(2012.07805,Google,2020);私有题集每题埋 1–2 个独特字符串/假事实,定期用补全与问答探测市面模型 | 工业界私有评测标配;只能证明"见过",证不了"没见过" |
审计流程模板:字符串/n-gram 重叠 → 嵌入相似度(与公开题库、模型输出对比)→ Min-K% 概率审计(若可得 logprob)→ canary 探测 → 变体差分(改写前后分差)。任何单一信号都不足以定罪,组合证据 + 统计显著性才下结论。
污染军备竞赛与对决策的扭曲:
- 防守方的结构性手段:时间截止(只用 cutoff 后的题)、私有 holdout(SWE-bench Pro,2509.16941【未核实】,私有测试 + 长程任务)、闭源题面(BrowseComp)、canary、定期版本化刷新(Terminal-Bench 1.0 → 2.0)、合成数据(SWE-smith,2504.21798,bug 注入批量合成 5 万级任务)。
- 对决策的扭曲:Sean Grove(OpenAI)The Illusion of Model Improvement(2024-10,未上 arXiv)用同一模型家族的不同数据混合/检查点在大量基准上实验,发现基准分数差异的很大一部分来自评测集划分与数据泄漏的巧合,而非模型真实改进。
- 学界与工业界的信任差在扩大,共识渐成:单一公开榜单不可作为发布决策依据。
2.5 饱和与崩塌:MMLU 教训与 Goodhart
饱和的判定:当 top 模型准确率 >~90% 且置信区间重叠时,基准失去排序力(天花板效应)。MMLU 在 2024 年即处于此状态(GPT-4o/o1 系 87–90%+)。"基准两年饱和律"在各处被验证:GAIA 15% → 70–80%(2023→2025)、WebArena 14% → 60%+、SWE-bench 3% → 70%+、HLE <10% → 30%+(仅一年内)。
MMLU 的双重崩塌——不只是饱和,还有质量:
| 事件 | 内容 | 数字 |
|---|---|---|
| MMLU-Redux(2406.04127,2024) | 对全部 57 个 subject 各抽 100 题(共 5,700 题)多人重标注 | 约 6.49% 的题存在答案错误或题面歧义(个别学科如 Virology 高达 57%);修复后模型的准确率与相对排名都变化——"权威分数"相当一部分测的是噪声 |
| MMLU-Pro(2406.01574,2024) | "加难"路线:选项 4→10 个、题目推理化、新题源 | 12,032 题,难度提升 16%–32%;GPT-4 级模型从 MMLU 近 90% 跌至 50–60%,恢复头部区分度 |
两条路线——修数据与提难度——成为此后所有老牌 benchmark 的标准动作。但注意 MMLU-Pro 自身也在快速逼近饱和,且 10 选项放大了长题干下的上下文长度效应。
Goodhart:benchmark 崩塌的第三重力量。当 benchmark 分数成为营销 KPI 或 RL 奖励,优化压力会绕开真实能力:Scaling Laws for Reward Model Overoptimization(2210.10760,OpenAI,2022)给出定量形态——以 KL(π‖π_ref) 为横轴,proxy(benchmark)奖励单调上升而 gold(真实能力)先升后降。AlpacaEval 的长度 gaming(把输出调啰嗦就能刷分)是经典案例;2026 年这一动态已进入多智能体合规评测(Beyond Goodhart's Law,2606.07805,2026:当奖励偏向"完成任务"时,agent 对流程约束的遵守退化)。
修复手段谱系(按投入从低到高):
| 手段 | 代表 | 一句话 |
|---|---|---|
| 加难 | MMLU-Pro、HLE | 把分数压回 10–60% 区间恢复区分度;代价:难题样本少、方差大、与用户价值相关性弱 |
| 换源 | LiveBench | 用新近来源(竞赛/论文/新闻)换题 |
| 动态化 | DyVal、LiveCodeBench | 让题目可再生(见 2.6) |
| 专家化 | HLE | 专家出题 + 难度校准 + 污染审计 |
| 对抗化 | Agent Island(2605.04312,2026) | 多智能体博弈:对手自适应变强(抗饱和)、交互轨迹无法提前记忆(抗污染) |
生命周期管理(把基准当传感器管理):每个基准登记版本、发布日期、难度分布、已知错误率、预计饱和时间、退役标准——例如 top 模型 >92% 且 CI 重叠 ⇒ 降级为回归监控,不再用于选型。
2.6 动态基准:四种机制与代价
动态化是对抗污染与饱和的结构性解法,但每种机制都有自己的代价:
| 机制 | 代表(arXiv,年份) | 原理 | 优点 | 代价 |
|---|---|---|---|---|
| 时间截止线 | LiveCodeBench(2403.07974,2024) | 持续从 LeetCode/AtCoder/Codeforces 抓新题,每题带发布时间戳;只用晚于模型数据截止日的题 | "污染距离"可量化、可复现;支持代码生成/自我修复/执行预测/测试输出预测四类任务 | 依赖领域的新题供给;闭源模型的"数据截止声明"不可尽信,需 canary 抽查 |
| 定期轮换 | LiveBench(2406.19314,2024) | 题目取自数学竞赛/arXiv/新闻等新近来源,按月换题;全客观真值 + 自动评分(无 LLM judge),覆盖六类任务 | 抗污染三要素(时间新鲜度 + 客观评分 + 版本轮换);发布时领先模型仍 <70% | 跨版本不可直接比较(2024-07 版与 2025 版分数无可比性),必须 pin 版本号并归档历史答案 |
| 程序化生成 | DyVal(2309.17167,ICLR'24)、DyVal 2(2402.14865,2024)、DynaMath(2411.00836,2024)、UGMathBench(2501.13766,2025) | benchmark = 采样器 + 求解器验证;DAG/参数模板/探测 agent 自动出题 | 机制上免疫记忆污染;带难度旋钮;可做变体族鲁棒性测量 | 题目分布窄、偏合成,需与真实分布题目混合 |
| 保义翻新 | Is Your Benchmark Still Useful?(2503.06643,2025) | 对存量题库做保义(meaning-preserving)改写再制造 | 比推倒重来便宜,保留题面分布与可比性;适合私有集治理 | 改写质量控制难(难度不变、答案唯一),需锚点模型校准 |
动态化的关键证据链:
- DyVal 上动态题表现与 MMLU、Big-Bench 静态子集高度相关(效度成立),但模型间差距被显著拉开——静态并列的模型在动态题上分出高下。
- DyVal 2 的核心发现:静态基准分数与动态探测分数显著脱钩——静态高分模型在动态生成的探测题上准确率差距达两位数百分点,说明静态分数高估了泛化推理能力。
- GSM-Symbolic(2410.05229,Apple,ICLR'25):把 GSM8K 每题生成 100 个符号变体(改名字/数字/语序),模型在变体族间准确率显著波动、并随题目从句数增加而下降;而 GSM-NoOp(加入一个看似相关却无关的从句)更致命——可使准确率相对下降最多约 65%(如 GPT-4o 94.9%→63.0%)。脆弱性而非推理能力,才是相当一部分分数的主要成分。
- 由此的测量升级:对题 q 生成变体族 {q₁..q_k},报告 E[acc] 与 Var[acc],以及扰动敏感度 = 原始分 − 变体族均分;敏感度异常大 ⇒ 记忆或脆弱推理。变体族天然免疫记忆污染。
动态化的未解难题:测量连续性。LiveBench 换题后历史分数失效,排行榜变成"当前快照";生成器的难度漂移同样需要校准。动态化解决污染,却引入跨期可比性问题——引用动态基准分数时永远带上版本号。
2.7 选型策略:三层互补与"只选一个汇报"
核心框架:公开 benchmark(外部坐标)+ 私有 golden set(真实业务)+ 在线信号(地面真值),三层各司其职、互相校验。
| 层 | 角色 | 代表 / 做法 | 局限 |
|---|---|---|---|
| 公开 benchmark | 外部坐标:能力画像、行业对标、候选初筛 | GAIA / SWE-bench Verified / LiveBench / Arena | 污染与饱和、分布不匹配(SWE-bench Multimodal:Python 33% → JS 个位数)、跨基准相关性低 |
| 私有 golden set | 发布门禁:真实业务分布、对齐产品目标 | 自建"τ-bench 式"套件:政策文档/知识库 + 工具(mock API 即可)+ 用户模拟器 + 终态断言;100–300 任务、每题 4–8 次采样、汇报 pass^k | 建设与维护成本高;需抗污染纪律(分层公开/私有、canary、版本化注新) |
| 在线信号 | 地面真值:用户与业务的最终裁决 | 转人工率、重复追问率、投诉率、满意度、任务完成率、工单闭环率(详见第 E12 章) | 延迟大、混淆因素多、不可完全归因到模型 |
选型决策流程(每一步排除一类风险):
公开排行榜(LiveBench / LiveCodeBench / Arena)初筛 —— 排除明显落后的候选(抗饱和/污染由榜单自身机制保证)
↓
自建私有集复测(含 canary 与变体族) —— 排除分布不匹配与"见过题"的候选
↓
小流量 A/B / 影子模式 —— 排除离线-线上不一致
↓
决策(以业务指标为准) —— Goodhart 防线:分数只用于淘汰,不用于加冕
"只能选一个向老板汇报,选哪个"的答题框架(面试高频开放题):
- 有私有集时:选私有 golden set 上的业务口径指标(任务完成率 / pass^k,带 CI)。理由:它是唯一分布与业务一致、判定与产品目标对齐、且抗污染的测量;公开榜单分数只作为附录里的能力画像。
- 没有私有集时(诚实的第二答案):选与产品形态最接近的公开基准——客服选 τ-bench(报 pass^k 而非 pass@1)、代码选 SWE-bench Verified、通用助手选 GAIA——并主动声明它是代理指标,同时把"建设私有集"列为下一步。
- 永远不做的事:拿单一公开榜单的聚合分当发布决策依据——HAL / AI Agent Index(Princeton SAgE,2025)发现不同 agent 基准之间分数相关性很低、且与真实用户满意度弱相关(HAL 具体 arXiv ID 待核实);跨基准外推不成立。
抗 Goodhart 制度设计(三条):(a) 保留一个永不对外宣传的内部 holdout,只用于内部决策;(b) 不把任何单一 benchmark 设为团队 KPI,改用基准组合 + 人评 + 线上指标的多信号决策;(c) 定期核对 proxy(benchmark 分)与 gold(用户满意度/留存)的相关性,相关性衰减即触发评测集更换。
2.8 Arena vs 静态 Benchmark:各测什么、何时信谁
| 维度 | Chatbot Arena(人类偏好竞技场) | 静态 benchmark |
|---|---|---|
| 测什么 | 真实分布用户提问下的人类偏好(有用性 + 风格) | 预定义任务的正确率 |
| 题目来源 | 实时用户提问,天然难以污染(主观但不可泄漏) | 固定题集,有污染与饱和风险 |
| 指标 | Bradley-Terry + bootstrap CI(2403.04132,LMSYS,ICML'24;论文时 240K+ 投票,如今数百万级) | 准确率 / pass 率 |
| 已知偏差 | 风格偏好(长度/markdown);可被少量操纵票影响排名(2501.17858,2025);丢一小撮票顶部排名就可能变(2508.11847,2025) | 污染、饱和、格式捷径、单点方差(GSM-Symbolic) |
| 典型 CI | bootstrap CI 通常宽 5–15 Elo 分 | 依题量而定(见第 E9 章样本量公式) |
| 适用 | 开放式对话、写作、助手体验的相对排序 | 能力下限、回归监控、硬任务(代码/数学/工具) |
静态榜单与竞技场的桥梁:Arena-Hard(2406.11939,LMSYS,ICML'25):BenchBuilder 流水线从 Arena 真实投票与 WildChat 中聚类蒸馏出 500 道高难度 prompt(Arena-Hard-Auto),用强模型 judge 做成对比较、再用 BT 把胜率转化为分数——与 Chatbot Arena 人类排名相关性 98.6%,区分度约为 MT-Bench 的 3 倍,成本 <$20。这是"离线自动评测对齐在线竞技场"的模板:固定一个参考模型,报告其他模型的 BT 分数而非裸胜率。
风格之争与"指标必须声明语义":judge 与人类都系统性偏好更长回答,Length-Controlled AlpacaEval(2404.04475,Stanford,2024)用回归把长度固定在参考值后计算边际胜率:与 Arena 的 Spearman 相关性从 0.94 升到 0.98,verbosity 操纵的胜率增益从 ~12% 压到 ~3%。去偏派认为风格是认知偏差必须剔除;保留派认为排版详尽度本身就是产品价值。LMSYS 的解法是同时发布 overall 与 style-controlled 两个榜单——引用任何 Arena 类分数,先问清它是哪个口径。
何时信谁(决策表):
| 场景 | 优先信 | 原因 |
|---|---|---|
| 两个模型谁写代码更强 | 静态(SWE-bench Verified / LiveCodeBench) | 有执行测试的客观判定,偏好投票测不出正确性 |
| 两个模型谁聊天体验更好 | Arena(style-controlled 口径) | 偏好本就是被测对象 |
| 候选模型初筛 | 公开静态榜(LiveBench 类抗污染榜) | 便宜、快、可复现 |
| 发布门禁 | 都不是——用私有集 + 在线信号 | 见 2.7 三层互补 |
| 相邻两名分差 2–5 分 | 都不信——视为统计不可区分 | bootstrap CI 常宽 5–15 Elo 且重叠;CI 重叠的排名应报告为"不可区分组" |
统计纪律(详见第 E9 章):报告 CI 而非点估计;用 BT 联合估计而非增量 Elo;比较用配对 bootstrap 直接看分差;重复 ≥3 次——单次运行的排名翻转概率不可忽略(2509.24086,2025),即使 temperature=0 + 固定 seed 仍存在非确定性(2410.03492,2024)。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | Benchmark 三轴分类学:静态/动态 × 能力/领域/应用 × 单轮/多轮/环境 | ⭐ | 能否拿到一个陌生 benchmark 先定位再使用,而不是背清单 |
| 2 | 主流 agent benchmark 速览:τ-bench / GAIA / SWE-bench / OSWorld / Terminal-Bench 各测什么、怎么判 | ⭐ | 知不知道每个基准的判定方式与一个标志性数字 |
| 3 | 判定方式谱系:精确匹配 → 执行测试 → 终态断言 → judge;轨迹匹配为何淘汰 | ⭐⭐ | 是否理解"功能性正确判定"与"grade the outcome, not the path" |
| 4 | pass^k:τ-bench 60%→25% 的鸿沟,为什么必须与 pass@1 并报 | ⭐⭐ | 能否区分"单次看起来不错"与"可部署",知不知道 k 取 4–8 的惯例 |
| 5 | 污染检测四范式:Min-K%(比基线 +7.4% AUC)/ 语义变体 / 格式敏感性 / canary | ⭐⭐ | 知不知道字符串匹配审计会漏掉语义级泄漏,canary 只能证"见过" |
| 6 | MMLU 崩塌双路线:Redux 修数据(~10% 坏题)vs MMLU-Pro 提难度(+16–32%) | ⭐⭐ | 能否讲清"饱和 + 质量"双重问题与两条修复路线的代价 |
| 7 | 动态基准四机制:时间截止 / 轮换 / 程序化生成 / 保义翻新,各自代价 | ⭐⭐ | 是否理解 LiveBench 牺牲跨版本可比性、生成器分布偏合成 |
| 8 | GSM-Symbolic 脆弱性:符号变体致分数大幅波动、GSM-NoOp(无关从句)掉最高约 65%,单点分数不可信 | ⭐⭐ | 能否从"点估计"升级到"变体族均值 ± 方差"的测量观 |
| 9 | Arena vs 静态 benchmark:各测什么、何时信谁;Arena-Hard 98.6% 相关性 | ⭐⭐⭐ | 能否给出场景化的"信谁"决策表,知道 style control 与两套榜单 |
| 10 | 三层互补选型:公开 benchmark + 私有 golden set + 在线信号;决策流程每步排除什么风险 | ⭐⭐⭐ | 是否具备"分数只用于淘汰、不用于加冕"的决策架构 |
| 11 | Goodhart 与基准生命周期:holdout、KPI 反模式、退役标准(top>92% 且 CI 重叠) | ⭐⭐⭐ | 有没有"benchmark 是传感器,会老化会被作弊"的治理意识 |
| 12 | harness 效应与跨基准低相关:Terminal-Bench 同一模型换 harness 分数大变;HAL 结论 | ⭐⭐⭐ | 能否批判"排行榜测的是模型还是 harness+模型",拒绝一个分数定优劣 |
四、经典面试题与参考答案
题 1(基础):你会怎么给 benchmark 分类?静态与动态的本质区别是什么?
参考答案: 我用三条轴定位一个 benchmark。①更新形态:静态(固定题集,如 GAIA、SWE-bench、OSWorld)vs 动态(持续更新或可生成,如 LiveBench、LiveCodeBench、DyVal、Chatbot Arena)。②定位:能力型测单项能力(BFCL、HLE)、领域型测行业环境(SWE-bench、WorkArena)、应用型测端到端产品形态(τ-bench、GAIA、OSWorld)。③交互形态:单轮问答 / 多轮对话 / 环境交互。静态与动态的本质区别是题目的时间属性:静态集一旦公开就进入"污染倒计时",且分数逼近天花板后失去区分度;动态集用轮换、时间截止或程序化生成保持新鲜度,代价是跨版本不可直接比较——所以引用动态基准必须 pin 版本号。分类的用途是判断外推性:一个静态、能力型、单轮的基准分数,对"我的客服 agent 能不能上线"几乎没有直接发言权。
题 2(基础):τ-bench、GAIA、SWE-bench、OSWorld 分别测什么?怎么判分?各给一个标志性数字。
参考答案: 四个基准覆盖四种形态。①τ-bench(Sierra,2024,arXiv 2406.12045):客服型 agent——与 LLM 扮演的用户多轮对话、遵守政策文档、调用工具完成退票改址;判分用终态数据库比对;标志性数字:GPT-4o 在 retail 域 pass^1≈60%(官方榜单 60.4%;摘要口径不足 50%)但 pass^8 跌到 ≈25%(摘要 <25%)。②GAIA(Meta/HF/AutoGPT,2023,arXiv 2311.12983):466 道"人类觉得简单、AI 觉得难"的通用助手题,L1/L2/L3 分级,短答案精确匹配;发布时人类 92% vs GPT-4+插件 ≈15%,2025 年顶级系统进入 70–80% 区间(榜单按月变动)。③SWE-bench(Princeton,2023,arXiv 2310.06770):真实 GitHub issue 产出 patch,用 FAIL_TO_PASS / PASS_TO_PASS 测试判定;发布时最好系统 ≈3%,2025 年头部 >70%。④OSWorld(XLANG,2024,arXiv 2404.07972):真实 OS 虚拟机里 369 个计算机操作任务,执行脚本检查终态;人类基线 72.4%,发布时最好 agent ≈12%,2025 年头部 40%+(369 题全集口径;Verified 口径更高,见主手册第 8 章)。判分方式的共同点是功能性判定——没有一个靠比对轨迹。
题 3(进阶):什么是 benchmark 污染?有哪些检测方法?为什么只做字符串匹配审计不够?
参考答案: 污染指题目进入训练语料导致分数虚高。检测有四类范式:①成员推断——Min-K% Prob(arXiv 2310.16789,ICLR 2024 oral)取一段文本中最低 K%(默认 20%)token 的对数概率均值做成员性分数,只需 API logprob,在 WikiMIA 上比既有最强方法提升约 7.4% AUC(平均 AUC 约 0.72);②语义级泄漏检测——把题目翻译或改写后测分差,UC Berkeley/LMSYS(arXiv 2311.04850,2023,Yang、Chiang、Zheng 等)证明 GSM8k/TruthfulQA 的翻译变体上仍有可检测的记忆信号,且英文原版记忆强于翻译版;③格式敏感性——选项置换一致性、字母偏置(arXiv 2503.23483、2404.08382),但鲁棒性可以被训练出来,只能作辅助证据;④canary strings——私有题集埋独特字符串/假事实,定期探测(源头 arXiv 2012.07805)。字符串匹配不够,是因为模型记的是"题"不是"字符串":改一个词、换个语言,记忆信号仍在。所以审计流程是组合拳:n-gram 重叠 → 嵌入相似度 → Min-K% → canary → 变体差分,任何单一信号都不定罪。实践立场:见过 ≠ 有罪,但分数必须按"可能见过"折价。
题 4(进阶):MMLU 出了什么问题?社区修复的两条路线各有什么代价?
参考答案: MMLU 是"饱和 + 质量"双重崩塌。质量侧:MMLU-Redux(arXiv 2406.04127,2024)对全部 57 个 subject 各抽 100 题、共 5,700 题重标注,发现约 6.49% 的题答案错误或题面歧义,修复后模型的准确率与相对排名都会变化——说明"权威分数"相当一部分测的是噪声。饱和侧:2024 年 GPT-4o/o1 系模型已到 87–90%+,天花板效应让基准失去排序力。两条修复路线:①修数据(Redux 派):重标注、剔除坏题——代价是工作量随题库线性增长,且只解决质量不解决饱和;②提难度(MMLU-Pro 派,arXiv 2406.01574):选项 4→10 个、题目推理化、引入新题,12,032 题,难度提升 16%–32%,GPT-4 级模型从近 90% 跌回 50–60%——代价是 10 选项放大上下文长度效应,且新基准照样会快速饱和。更深的教训:任何沿用公开题库的评测都要先做 item 级质检(抽样重标注 + 双评),否则测量误差会混入模型差异;报告分数时注明用的是原版还是修复版。
题 5(进阶):动态基准有哪几种机制?各自的代价是什么?
参考答案: 四种机制。①时间截止线(LiveCodeBench,arXiv 2403.07974,2024):题目带发布时间戳,只用晚于模型数据截止日的题,"污染距离"可量化可复现;代价是依赖领域的新题供给,且闭源模型的截止声明不可尽信,要 canary 抽查。②定期轮换(LiveBench,arXiv 2406.19314,2024):按月换题、全客观自动评分,发布时领先模型仍 <70%;代价是跨版本不可比,必须 pin 版本号归档答案。③程序化生成(DyVal arXiv 2309.17167,DyVal 2 arXiv 2402.14865,DynaMath arXiv 2411.00836,UGMathBench arXiv 2501.13766):benchmark = 采样器 + 求解器验证,机制上免疫记忆,还带难度旋钮;代价是分布偏合成,需与真实分布题目混合。④保义翻新(arXiv 2503.06643,2025):对存量题库做保义改写再制造,成本低、保留分布,适合私有集治理;代价是改写质量控制难,需在锚点模型上做等难度校准。共同代价是测量连续性:动态化解决污染,却让排行榜从"连续量尺"变成"当前快照",这是明确的 open problem。
题 6(进阶):Terminal-Bench 发现的"harness 效应"对"模型 A 比模型 B 强"这类结论意味着什么?评测设计上怎么隔离?
参考答案: Terminal-Bench(arXiv 2601.11868,ICLR 2026)在 TB 2.0 上观察到:各主流 coding agent 分数差异巨大(头部 50%+ 到长尾 <10%),且同一模型换 harness(执行框架)分数变化显著——排行榜测的其实是"harness + 模型"的组合,不是模型本身。这意味着跨团队、跨榜单比较时,"A 比 B 强"的结论可能完全由 harness 工程质量驱动;2025–2026 年开源 harness 生态爆发后,这直接影响"用哪个模型"的工程决策。隔离办法有四条:①模型对比时锁定 harness,harness 改动评估时锁定模型,分别报告;②采用标准参考 harness(如 Terminal-Bench 的 Terminus:只给无头终端、纯 bash),把执行框架与模型能力解耦;③报告时声明完整配置(harness 版本、观测表征、采样参数)——WebArena 的经验是 DOM/可访问性树表征的选择本身显著影响分数;④自建评测中把 harness 纳入被测系统整体,承认"我们测的是系统不是模型",对外沟通时不偷换概念。
题 7(进阶):Chatbot Arena 和静态 benchmark 各测什么?你会在什么场景下信谁?
参考答案: 两者测的是不同构念。Arena(arXiv 2403.04132,LMSYS,ICML 2024)测真实分布用户提问下的人类偏好——有用性 + 风格的混合体,题目来自实时用户,天然难以污染;指标是 Bradley-Terry + bootstrap CI(论文时 240K+ 投票,CI 通常宽 5–15 Elo)。静态 benchmark 测预定义任务的正确率,有客观判定但面临污染与饱和。信谁的决策表:比较写代码能力,信静态(SWE-bench Verified / LiveCodeBench),因为偏好投票测不出正确性;比较聊天体验,信 Arena 且优先 style-controlled 口径——长度偏好是已知偏差,LC-AlpacaEval(arXiv 2404.04475)回归去偏后与 Arena 相关性 0.94→0.98,verbosity 刷分收益从 ~12% 压到 ~3%;候选初筛信抗污染的公开静态榜;发布门禁两者都不信,用私有集 + 在线信号。两个注意事项:相邻两名差 2–5 分在 CI 重叠时应视为统计不可区分;Arena 排名可被少量操纵票影响(arXiv 2501.17858)、丢一小撮票即可改变顶部排名(arXiv 2508.11847),排名是激励面,必须配审计。
题 8(进阶):GSM-Symbolic 的实验说明了什么?它对你设计内部评测有什么具体影响?
参考答案: GSM-Symbolic(arXiv 2410.05229,Apple,ICLR 2025)把 GSM8K 每题用 LLM 生成 100 个符号变体(只改名字、数字、语序),发现准确率在变体族间显著波动、随从句数增加而下降;再构造 GSM-NoOp 加入一个看似相关却无关的从句,可使准确率相对下降最多约 65%(论文头条结论,如 GPT-4o 94.9%→63.0%)。结论:相当一部分"能力分"其实是记忆 + 脆弱模式匹配——单题单次评测只是点估计,同分布同难度的变体之间分数波动巨大。对内部评测的三点影响:①关键能力点改用变体族测量:对题 q 生成变体族,报告 E[acc] ± Var[acc] 与"扰动敏感度"(原始分 − 变体族均分),敏感度异常大就标记为记忆或脆弱推理;②变体族天然免疫记忆污染,可把私有集的数值题参数化(UGMathBench 式随机参数,arXiv 2501.13766),实现无限防泄漏重采样;③报告纪律上,任何分数都要带 CI 与重复次数——这与 DyVal 2(arXiv 2402.14865)"静态高分模型在动态探测下掉两位数百分点"的证据链一致:对外部模型选型,尽量用自建的、对方未见过的题集复测。
题 9(系统设计):你负责为公司的客服 Agent 建立 benchmark 选型与评测策略。给出完整方案:用什么公开基准、怎么建私有集、怎么防污染、怎么判定、怎么汇报、怎么做决策。
参考答案: 分五层设计。①公开基准(外部坐标):τ-bench / τ²-bench(arXiv 2406.12045 / 2506.07982)作为形态最接近的对照——它测的正是政策遵循 + 工具调用 + 多轮对话;函数调用底层能力用 BFCL 子项做画像(看"缺失函数/相关性"子项而非聚合分)。只用于行业对标与初筛,不进门禁。②私有 golden set(发布门禁):仿 τ-bench 四件套自建——政策文档/知识库 + mock API 工具集 + LLM 用户模拟器(固定版本)+ 终态数据库断言;100–300 任务,覆盖触发/核心逻辑/产物质量/异常容错四场景(详见第 E3 章);每题 4–8 次采样,汇报 pass@1 与 pass^k 及两者差距。③抗污染纪律:私有集永不入公开仓库/论文;每题埋 1–2 个 canary 字符串与假事实,定期探测;给每题记录 created_at,版本化注新;怀疑泄漏的题做保义改写轮换(arXiv 2503.06643)而非整套废弃。④判定:确定性优先——终态断言为主,开放性话术维度用 LLM judge,人工校准目标一致率 ≥85%(详见第 E5 章);审计用户模拟器的泄题路径(τ² 的教训)。⑤汇报与决策:所有分数带 CI、重复 ≥3 次;门禁同时要求统计显著与最小可感知变化(第 E9 章);发布决策 = 私有集门禁 + 灰度期在线信号(转人工率、重复追问率、投诉率,第 E12 章)双确认,离线升线上降则回滚。公开榜分只出现在能力画像附录里。
题 10(开放):"如果只能选一个指标向老板汇报我们的 Agent 变强了,你选哪个?"
参考答案: 答题框架分三步。第一步,先问有没有私有评测集:有,就选私有 golden set 上的业务口径——客服 agent 选"任务完成率 + pass^8"(带 CI),因为它是唯一分布与业务一致、判定与产品目标对齐、抗污染的测量;公开榜单分数放附录做能力画像。第二步,没有私有集时给诚实的第二答案:选与产品形态最接近的公开基准——客服选 τ-bench(报 pass^k:GPT-4o retail pass^1≈60% 但 pass^8 只有 ≈25%,单报 pass@1 会系统性误导)、代码选 SWE-bench Verified、通用助手选 GAIA——并主动声明这是代理指标,把"两周内建私有集"列为行动项。第三步,讲清为什么不选别的:不选单一公开榜单——HAL / AI Agent Index(Princeton SAgE,2025)发现跨基准分数相关性低、与真实用户满意度弱相关;不选 Arena 名次——风格偏差 + CI 重叠 + 可操纵;不选离线 judge 均分——Goodhart 风险,benchmark 分数只用于淘汰候选、不用于加冕发布(arXiv 2210.10760 的 proxy-gold 曲线)。这道题的得分点是展示"指标选择 = 决策链路设计",而不是报一个数字。
五、易错点 · 反直觉点
- 误区:公开 benchmark 分数高 = 生产表现好。 真相:跨基准分数相关性很低、与真实用户满意度弱相关(HAL / AI Agent Index,Princeton SAgE,2025);分布也不外推——SWE-bench Multimodal(arXiv 2410.03859,2024)上 GPT-4o+SWE-agent 在 Python Lite 约 33%,到 JS+视觉域跌至个位数~10%。记忆锚点:公开榜单是外部坐标,不是发布门禁。
- 误区:污染审计就是拿题面做字符串匹配。 真相:模型记的是"题"不是"字符串"——翻译/改写变体上仍有可检测的记忆信号(arXiv 2311.04850,2023),必须做语义级审计(嵌入相似度 + 变体差分 + Min-K%)。记忆锚点:背题背的是意思,不是原文。
- 误区:canary 没被探测出来,说明题目没泄漏。 真相:canary 只能证明"见过",证不了"没见过"——阴性结果不构成清白证据;私有集的保密纪律(不入库、不进 issue、不进论文附录)才是第一道防线。记忆锚点:canary 是烟雾报警器,不是安检仪。
- 误区:基准饱和了,出更难的题就能解决。 真相:难度军备竞赛是 treadmill——HLE(arXiv 2501.14249)发布时最强模型 <10%,一年内就被推理模型推到 30%+;且超难题测的是长尾知识,与用户价值相关性弱,难题集还样本少、方差大。记忆锚点:更难 ≠ 更有用,只是把饱和推迟两年。
- 误区:动态基准解决了污染问题,可以放心用。 真相:动态化用测量连续性换抗污染——LiveBench(arXiv 2406.19314)换题后历史分数失效,2024-07 版与 2025 版不可比;引用动态基准不 pin 版本号等于没引用。记忆锚点:动态基准是快照,不是尺子。
- 误区:MMLU 分数仍然可以当"综合能力"指标。 真相:约 6.49% 的题答案错误或歧义(MMLU-Redux,arXiv 2406.04127,2024;个别学科如 Virology 高达 57%),修复后排名都会变;且头部模型 87–90%+ 已近饱和。报告 MMLU 必须注明原版还是修复版。记忆锚点:尺子刻度本身就有一批是错的。
- 误区:用户模拟器配合得好,agent 分数高就是能力强。 真相:τ-bench 的用户模拟器会向 agent 泄露关键信息,τ²-bench(arXiv 2506.07982,2025)引入双控后各家分数显著下降——此前高分部分来自"配合性泄题"。模拟器本身是被测系统的效度来源,换模拟器模型分数就会变,报告必须固定模拟器版本。记忆锚点:考官递答案,考高分不算数。
- 误区:把 benchmark 分数直接设为团队 KPI 或 RL 奖励,分数涨了就是进步。 真相:这是教科书级 Goodhart——proxy 奖励单调上升的同时 gold(真实能力)先升后降(arXiv 2210.10760,2022);AlpacaEval 的长度 gaming 是现成案例。制度防线:永不宣传的内部 holdout、多信号决策、定期核对 proxy-gold 相关性。记忆锚点:分数一旦成为目标,就不再是好测量。
- 误区:单次跑出的分数(或排行榜名次)就是模型的真实水平。 真相:只改人名/数字/语序分数就在变体族间大幅波动,再加一个无关从句(GSM-NoOp)相对掉最多 65%(GSM-Symbolic,arXiv 2410.05229);单次运行排名翻转概率不可忽略(arXiv 2509.24086);temperature=0 + 固定 seed 也仍有非确定性(arXiv 2410.03492)。可靠测量 = 重复 ≥3 次 + 变体族 + CI。记忆锚点:单次分数是照片,分布才是本人。
六、推荐资源
核心论文(来自 _research/02-agent-benchmarks.md、05-benchmark-dynamics.md、04-statistics.md 已核实清单;标注【未核实】者素材中未联网复核,引用前请二次确认):
Agent benchmark 全景
| arXiv | 基准 | 年份 | 本章用到 |
|---|---|---|---|
| 2406.12045 | τ-bench(Sierra) | 2024 | 客服型评测范式、pass^k、终态 DB 断言;60%→25% |
| 2506.07982 | τ²-bench(Sierra) | 2025 | 双控用户模拟、泄题审计 |
| 2311.12983 | GAIA(Meta/HF/AutoGPT,ICLR'24) | 2023 | 精确匹配 + 难度分级;人类 92% vs 15% |
| 2308.03688 | AgentBench(清华,ICLR'24) | 2023 | 多环境聚合评测的套件范式 |
| 2310.06770 | SWE-bench(Princeton,ICLR'24) | 2023 | FAIL_TO_PASS/PASS_TO_PASS 测试驱动判定;3%→70%+ |
| 2410.03859 | SWE-bench Multimodal(ICLR'25) | 2024 | 语言/模态分布不外推:33%→个位数 |
| 2307.13854 | WebArena(CMU,ICLR'24) | 2023 | 自托管沙箱 + 功能性检查;14%→60%+ |
| 2401.13649 | VisualWebArena【未核实】 | 2024 | 多模态网页任务 |
| 2404.07972 | OSWorld(XLANG,NeurIPS'24) | 2024 | OS 级终态脚本判定;人类 72.4% vs 12% |
| 2409.08264 | WindowsAgentArena【未核实】(Microsoft) | 2024 | 并行化评测基础设施样板 |
| 2403.07718【未核实】/ 2407.05291 | WorkArena / WorkArena++(ServiceNow) | 2024 | 企业 SaaS 评测;最好模型仅约两成 |
| 2601.11868 | Terminal-Bench(Stanford + Laude,ICLR'26) | 2026 | Docker + pytest + Terminus;harness 效应 |
| 2501.14249 | Humanity's Last Exam(CAIS + Scale 等) | 2025 | 专家出题 + 难度标定方法论;<10%→30%+ |
| 2407.15711 | AssistantBench(AI2) | 2024 | 214 任务;题目可行性验证流程;最好 agent ~25% |
| 2401.13919 | WebVoyager【未核实】 | 2024 | 真实网站评测 + GPT-4 judge(与人工 ~87% 一致) |
| 2305.15334【未核实】 | Gorilla / BFCL(UC Berkeley) | 2023 | 函数调用子项拆分:相关性/缺失函数是短板 |
| 2410.10934 | Agent-as-a-Judge(Zhuge et al.,ICML 2025) | 2024 | 带工具评审 Agent:DevAI 55 任务/365 需求;相比三位人类专家节省 97.72% 时间、97.64% 成本 |
| 2509.16941【未核实】 | SWE-bench Pro(Princeton) | 2025 | 私有测试 + 长程任务的抗污染路线 |
污染、饱和与动态基准
| arXiv | 标题 | 年份 | 本章用到 |
|---|---|---|---|
| 2310.16789 | Detecting Pretraining Data from LLMs(Min-K% Prob / WikiMIA,ICLR'24 oral) | 2023 | 成员推断;WikiMIA 上比基线 +7.4% AUC(平均 AUC≈0.72) |
| 2311.04850 | Rethinking Benchmark and Contamination with Rephrased Samples(Tencent AI Lab) | 2023 | 语义级泄漏;翻译/改写变体记忆 |
| 2012.07805 | Extracting Training Data from LLMs(Carlini 等,Google) | 2020 | canary strings 方法源头 |
| 2406.04127 | Are We Done with MMLU?(MMLU-Redux) | 2024 | 5,700 题重标注,~6.49% 坏题;修复后排名变化 |
| 2406.01574 | MMLU-Pro | 2024 | 加难路线:10 选项、+16–32%、90%→50–60% |
| 2406.19314 | LiveBench | 2024 | 月度轮换 + 客观评分;跨版本不可比 |
| 2403.07974 | LiveCodeBench | 2024 | 时间截止线与"污染距离" |
| 2309.17167 | DyVal(ICLR'24) | 2023 | 程序化生成基准的范式 |
| 2402.14865 | DyVal 2 | 2024 | 静态-动态分数脱钩,两位数百分点差距 |
| 2410.05229 | GSM-Symbolic(Apple,ICLR'25) | 2024 | 变体脆弱性:符号变体致分数波动、GSM-NoOp 无关从句掉最高约 65%;变体族测量 |
| 2503.06643 | Is Your Benchmark Still Useful? | 2025 | 保义翻新存量题库 |
| 2503.23483 | Order Independence With Finetuning | 2025 | 选项顺序敏感性与置换平均 |
| 2404.08382 | Look at the Text | 2024 | 格式捷径检测的反面证据 |
| 2411.00836 | DynaMath | 2024 | 视觉数学的参数化生成管线 |
| 2501.13766 | UGMathBench | 2025 | 随机参数变体:最轻量的动态化 |
| 2210.10760 | Scaling Laws for Reward Model Overoptimization(OpenAI) | 2022 | Goodhart 的定量版:gold 先升后降 |
| 2605.04312 | Agent Island | 2026 | 多智能体博弈的对抗式动态评测 |
| 2606.07805 | Beyond Goodhart's Law(多智能体合规) | 2026 | 奖励偏向任务完成时流程遵守退化 |
Arena 与统计纪律(详见第 E9 章)
| arXiv | 标题 | 年份 | 本章用到 |
|---|---|---|---|
| 2403.04132 | Chatbot Arena(LMSYS,ICML'24) | 2024 | BT + bootstrap CI;240K+ 投票;CI 宽 5–15 Elo |
| 2406.11939 | Arena-Hard / BenchBuilder(ICML'25) | 2024 | 500 题蒸馏;与 Arena 相关性 98.6%;成本 <$20 |
| 2404.04475 | Length-Controlled AlpacaEval(Stanford) | 2024 | 长度回归去偏:0.94→0.98;verbosity 12%→3% |
| 2410.03492 | Quantifying Uncertainty in LLM Benchmark Scores | 2024 | temperature=0 仍非确定 |
| 2509.24086 | Do Repetitions Matter? | 2025 | 单次运行排名翻转不可忽略;重复 3–5 次 |
| 2501.17858 | Vote Rigging on Chatbot Arena | 2025 | 影响函数投票操纵 |
| 2508.11847 | Dropping a Handful of Preferences Changes Rankings | 2025 | 丢票敏感性;比较图均衡 |
延伸阅读(素材已核实):SWE-smith(2504.21798,bug 注入合成 5 万级任务);SWE-Lancer(2502.12115,$1M+ 计价任务);MLE-bench(2410.07095);AndroidWorld(2405.14573,参数化动态任务);WebShop(2207.01206【未核实】,背景);Mind2Web(2306.06070【未核实】,背景);MT-Bench / LLM-as-a-Judge 起源(2306.05685,2023)。
非 arXiv 材料:
- BrowseComp:OpenAI 博客 "BrowseComp: A simple yet challenging benchmark for browsing agents"(2025-04),1266 题、闭源题面,无 arXiv 论文。
- BFCL 榜单:gorilla.cs.berkeley.edu/leaderboard.html,以博客/技术报告形式持续迭代。
- HAL / AI Agent Index(Princeton SAgE):hal.cs.princeton.edu,系统化运行多 agent 基准并分析跨基准相关性(具体论文 arXiv ID 待核实)。
- Sean Grove(OpenAI),The Illusion of Model Improvement: Can LLM Benchmarks be Misleading?(2024-10):基准分数差异很大一部分来自数据划分与泄漏巧合,未上 arXiv。
- AlpacaEval(GitHub 项目):长度 gaming 导致排行榜失真的经典案例。
动手 labs(纯标准库、固定种子、可复现):
| lab | 你将验证 | 运行 |
|---|---|---|
| eval_lab08_statistics_ci.py | 分数带 CI 的必要性:Wilson 区间、bootstrap、样本量速查 | cd evals-special/labs && python3 eval_lab08_statistics_ci.py |
| eval_lab11_arena_bradley_terry.py | BT vs Elo、bootstrap 分差 CI、风格控制如何恢复真实排序 | cd evals-special/labs && python3 eval_lab11_arena_bradley_terry.py |
| eval_lab01_metric_system.py | pass@k 与 pass^k 随 K 分道扬镳(τ-bench 鸿沟的最小复现) | cd evals-special/labs && python3 eval_lab01_metric_system.py |
| eval_lab02_golden_dataset.py | 私有 golden set 的构建与治理流水线(入库标准、去重、版本化) | cd evals-special/labs && python3 eval_lab02_golden_dataset.py |
章节交叉引用:指标体系与 pass^k 口径(第 E2 章 · 评估指标体系);私有集的用例设计与生命周期治理(第 E3 章 · 黄金数据集与用例设计);judge 偏差与校准(第 E5 章 · 评分三层之二:LLM-as-Judge 深入);用户模拟器与 fixtures 的工程实现(第 E8 章 · 对话 Agent 与仿真评测);CI、bootstrap 与样本量公式(第 E9 章 · 评估的统计学基础);在线信号与离线-线上对齐(第 E12 章 · 在线评估与数据飞轮);本章全部论文的教学化综述(第 E14 章 · 前沿论文全景);Airbnb/DoorDash/阿里/腾讯的私有评测实践(第 E15 章 · 工业实践案例研究);主手册第 8 章 · Agent 评估与可观测性(Benchmark 一节的浓缩版)。
前沿论文全景(2024-2026)
一句话导读:本章把
_research/十份调研报告(200+ 篇论文,多数 arxiv ID 已逐条核实)浓缩为九个方向的"教学化综述"——每个方向讲清演进主线、代表论文与未解问题。这是全特辑的"雷达站":想知道 evals 领域过去两年发生了什么、下一步往哪走,读这一章。
一、知识图谱
Evals 前沿研究全景(2024-2026)
│
├── 测量仪器本身可靠吗?
│ ├── ① LLM-as-Judge:偏差 catalog → 元评估 → 可训练 judge → judge 优化与攻防
│ └── ④ 评测统计学:点估计 → 置信区间/显著性 → Arena 方法论 → 事前设计
│
├── 拿什么考卷?
│ ├── ② Agent 基准:环境奠基 → SWE-bench 爆发 → 难度军备与可靠性转向 → 信任危机
│ └── ⑤ Benchmark 动态:污染检测工具化 → MMLU 信任危机 → 动态基准制度化 → 生成式基准
│
├── 怎么判卷?
│ ├── ③ 轨迹/过程评估:PRM 奠基 → 标注自动化 → Agent 化 → 元评估与信用分配
│ └── ⑧ 组件级/RAG:端到端黑盒 → 声明分解+逐条验证 → 组件级诊断指标
│
├── 评测怎么用?
│ ├── ⑥ EDD 与仿真:方法论成型(EDDOps)→ 仿真标准化(τ-bench 系)→ eval 成为优化目标(GEPA)
│ └── ⑦ 安全评测:单点攻击 → 标准化框架 → 多轮与 Agent → 动态生态化
│
└── 闭环的暗面与底座
├── ⑨a 自改进闭环:self-rewarding → reward hacking 实证 → RLVR 爆发 → 生产环境观测
└── ⑨b 评测基础设施:框架标准化 → 防污染治理 → 可观测性标准 → 自动诊断
阅读方式:每个方向按「演进主线 → 代表论文 → 未解问题」组织。论文均给出 arxiv ID 与年份;细节与更多论文见 _research/0N-*.md 调研报告(引用前请以调研报告为准,个别标注【未核实】的条目需自行复核)。
二、核心概念精讲
2.1 方向①:LLM-as-Judge——裁判科学
演进主线(四段)
- 偏差的实证 catalog(2023–2024 上):位置偏差、冗长偏差、自我偏好、风格压倒实质相继被量化;第一批缓解方法出现(交换/长度回归/评审团集成)。
- 元评估成为独立赛道(2024 下):人们意识到 judge 之间高一致 ≠ judge 正确,出现以客观真值校准 judge 的基准。结论一致:前沿 judge 在客观困难任务上准确率只有 ~57% 量级,与人类评审有明显差距,且可能"集体犯错"。
- 可训练的 judge(2024–2025):judge 从提示词工程走向模型工程——开源评测专用模型、纯合成数据自训练、生成式/推理式 judge(把奖励建模变成 next-token prediction、用 RL 训练"会推理的裁判")。
- judge 的优化与攻防(2025–2026):judge prompt/rubric 本身成为可优化对象(GEPA 反射式 prompt 进化);judge 的可攻击性被正面研究——对抗样本可让安全 judge 把 100% 的有害输出判为安全。系统复盘显示:多数单点去偏策略收益有限,"中端模型 + 组合去偏"反而能胜过前沿 judge 且便宜约 15 倍。
代表论文
| 论文 | ID | 一句话贡献 |
|---|---|---|
| LLM Evaluators Recognize and Favor Their Own Generations(2024) | 2404.13076 | 量化"自我偏好":judge 能识别并偏爱自己生成的文本 |
| Style Outweighs Substance(2024) | 2409.15268 | 系统揭示对齐评测中 judge 的风格偏差压倒内容实质 |
| Length-Controlled AlpacaEval(2024) | 2404.04475 | 用回归剔除长度偏差,把 Spearman 相关性显著提升,成为去偏标准做法 |
| PoLL: Panel of Diverse LLM Judges(2024) | 2404.18796 | 异构小模型评审团比单个大 judge 更准更便宜 |
| JudgeBench(2024) | 2410.12784 | 用客观真值(单元测试等)校准 judge:最强 judge 准确率 ~57% vs 人类 ~78% |
| GenRM: Generative Reward Models(2024) | 2408.15240 | 把奖励建模变成 next-token prediction,生成式 judge 范式 |
| GEPA(2025) | 2507.19457 | 反射式 prompt 进化,以远少于 RL 的 rollout 优化 judge/系统 prompt(DoorDash 生产在用) |
| Know Thy Judge(2025) | 2503.04474 | 对抗攻击可让安全 judge 100% 放行有害输出——judge 是攻击面 |
| Judging the Judges(2026) | 2604.23178 | 对去偏策略的系统复盘:单点收益有限,组合去偏才稳健 |
未解问题:一致性高到底是可靠还是共谋?去偏方法是否真有持久效果(发表偏差 vs 系统复盘的矛盾)?推理模型是否更好的 judge(证据分裂)?judge 分数作训练奖励的 Goodhart 边界在哪?
2.2 方向②:Agent 基准——从沙箱到信任危机
演进主线(四段)
- 环境奠基期(2024 上):自托管沙箱环境 + 程序化判定成为范式;GAIA 确立"结果精确匹配 + 难度分级"的通用助手评测;τ-bench 把对话式工具 Agent 与用户模拟器引入评测。
- 软件工程爆发期(2024 下):SWE-bench 成为事实标准,Verified/Multimodal 变体相继出现;Agent-as-a-Judge 开启"用 Agent 评 Agent"。
- 难度军备与可靠性转向(2025):公开基准分数逼近高位后,社区转向更难、抗污染的新基准;τ²-bench 用"双控"模拟解决泄题;pass^k / 多次采样成为标配。
- 基准工业化与信任危机并存(2026):终端 Agent 评测标准化(Terminal-Bench,ICLR 2026);同时社区系统性质疑:基准间分数相关性低、harness 工程对分数影响巨大、基准分数与生产表现脱节。评测重心正从公开排行榜转向私有 golden set + 领域定制评测套件。
代表论文
| 论文 | ID | 一句话贡献 |
|---|---|---|
| τ-bench(2024) | 2406.12045 | 用户模拟器 + 工具调用 + 数据库终态校验 + pass^k,对话式 Agent 评测范式奠基 |
| τ²-bench(2025) | 2506.07982 | 双控环境(用户侧也能调工具),堵住模拟器泄题 |
| SWE-bench(2023) | 2310.06770 | 真实 GitHub issue 修复任务,软件工程 Agent 评测事实标准 |
| OSWorld(2024) | 2404.07972 | 真实虚拟机上的开放式计算机操作评测 |
| GAIA(2023) | 2311.12983 | 通用 AI 助手基准,精确匹配 + 三级难度 |
| Terminal-Bench(2026) | 2601.11868 | 命令行长程任务评测标准化(ICLR 2026) |
| Humanity's Last Exam(2025) | 2501.14249 | 专家级难题集,难度军备竞赛路线代表 |
未解问题:污染是否已让公开排行榜失效(信任差在扩大)?难度军备是进步还是 treadmill?pass^k 是否过严(惩罚了可回滚的错误)?排行榜测的是模型还是 harness?基准分数与用户满意度的相关性弱(HAL 类发现)如何决策?
2.3 方向③:轨迹与过程级评估——信用分配体系化
演进主线(四段)
- PRM 奠基与标注自动化(2023–2024 上):逐步验证优于只看结果,但依赖海量人工步骤标注;Math-Shepherd 用蒙特卡洛 rollout 自动估计每步后续成功率,OmegaPRM 用二分搜索把标注成本降到 O(log n)。
- 形式多样化(2024 下):生成式验证器(critique + verdict)、VinePPO 把信用分配做进 RL 训练本身(无偏优势估计)、步骤级偏好对齐。
- 反思与落地到 Agent(2024 末–2025):Qwen 团队系统披露 PRM 局限(reward hacking、分布外失效);PRIME 证明无需步骤标签也能拿过程奖励;Agent-as-a-Judge 把步骤级评估扩展到开发型 Agent;τ-bench 用终态比对做执行式验证。
- 元评估与体系化(2025–2026):AgentRewardBench(2025)专门评估"自动轨迹评估器本身",揭示纯阅读式 LLM 判别器的高误报率;信用分配专题综述把推理与 Agent 两条线统一成体系。
一句话:从"给步骤打分"(PRM)到"给 Agent 轨迹打分"(trajectory scoring)再到"给打分器打分"(meta-evaluation),同一套信号反哺训练(RL credit assignment)与推理时搜索(verifier-guided search)。
代表论文
| 论文 | ID | 一句话贡献 |
|---|---|---|
| Math-Shepherd(2023) | 2312.08935 | 蒙特卡洛 rollout 自动标注过程奖励,摆脱人工步骤标注 |
| OmegaPRM(2024) | 2406.06592 | 二分搜索式自动过程监督标注,成本 O(log n) |
| VinePPO(2024) | 2410.01679 | 中间状态重采样获得无偏步骤级优势估计 |
| Agent-as-a-Judge(2024) | 2410.10934 | 带工具的 Judge Agent 做步骤级评估,比纯 LLM judge 大幅省时且贴近人工 |
| PRM Lessons(2025) | 2501.07301 | PRM 工程实践的系统性教训:会被 best-of-N hacking、难度外推差、验证器有分布漂移 |
| τ-bench(2024) | 2406.12045 | 执行式验证代表:数据库终态比对,轨迹评估的工业落地形态 |
未解问题:PRM 到底值不值得做("ORM + 更多采样"性价比之争)?显式步骤标签是否必要(PRIME/VinePPO vs GenRM 路线之争)?纯阅读式轨迹 judge 误报率 >50% 的悲观证据与 Agent-as-a-Judge 的乐观证据如何调和(关键变量:评估器是否拥有执行/核验工具)?过程对但结果错、结果对但过程错,生产该信谁?验证器多久重训一次?
2.4 方向④:评测统计学——从点估计到推断
演进主线(四段)
- 方法论奠基(2024 上):Chatbot Arena 确立 Bradley-Terry 评分 + bootstrap CI;Arena-Hard 把 Arena 蒸馏成可复现自动评测;LC-AlpacaEval 用回归消除长度偏差。
- 反思与形式化(2024 下):量化 benchmark 分数的不确定性;证明 judge 评测的样本效率下界;UC Berkeley 把 Arena 排名形式化为可推断的统计框架(factored tie model + 协方差建模)。
- 规范化与攻击面(2025):"到底需要多少样本/多少次重复"成为独立子方向;pass@k 的统计缺陷被系统批判并给出贝叶斯替代;Arena 排名的可操纵性被攻击性研究检验(投票操纵、丢票敏感性);LLM-judge 结果的报告规范被提出(偏差校正估计量 + 置信区间)。
- 事前设计(2026 进行中):统计保证下的自适应/预算分配式评测出现,评测统计学从"事后解释"走向"事前设计"。
代表论文
| 论文 | ID | 一句话贡献 |
|---|---|---|
| Chatbot Arena(2024) | 2403.04132 | 开放平台众包偏好评测 + BT 评分 + bootstrap CI,成为事实标准 |
| Arena-Hard(2024) | 2406.11939 | Arena 数据蒸馏为可复现基准(BenchBuilder 管线) |
| A Statistical Framework for Ranking LLM-Based Chatbots(2024) | 2412.18407 | BT + tie 模型 + 协方差的严格统计推断框架 |
| ReliableEval(2025) | 2505.22169 | 随机评测的矩方法样本量配方 |
| pass@k 的统计批判(2025) | 2510.04265 | 系统指出 pass@k 的估计缺陷并给出贝叶斯替代 |
| Arena 投票操纵(2025) | 2501.17858 | 证明少量操纵票即可影响排名——排行榜是攻击面 |
| LLM-judge 报告规范(2025) | 2511.21140 | 偏差校正估计量 + CI 的报告标准提案 |
未解问题:风格控制该"去偏"还是"保留"(长度部分承载信息量)?重复实验 3 倍成本谁买单?众包偏好评测在激励存在时是否本质上不可信?微小分差的过度解读如何治理?
2.5 方向⑤:Benchmark 污染、饱和与动态基准
演进主线(四段)
- 污染检测工具化(2023 末–2024 上):三类检测范式成熟——成员推断(Min-K% Prob / WikiMIA,ICLR 2024)、格式变体(改写/翻译后的变体同样泄漏)、选项结构敏感性(选择题分数相当部分来自格式捷径)。
- MMLU 信任危机与修补(2024 中):重标注发现约 10% 的题面/答案有误或歧义,修复后分数与排名都变;MMLU-Pro 走"加深加难"路线。修数据与提难度成为老牌基准的标准动作。
- 动态基准制度化(2024):从"一次性发布测试集"转向"持续更新的测试流"——LiveBench 按月换题、全客观评分;LiveCodeBench 按时间截止线持续采集新题,使"污染距离"可量化;DyVal 系用程序化生成让每次评测题目都是新的。
- 脆弱性量化与生成式基准(2024 末–2026):GSM-Symbolic 证明只改名字/数字/语序就能让数学分数暴跌至多 65%,暴露"能力 vs 记忆"的界限模糊;基准本身变成可无限采样的生成器(DynaMath、UGMathBench);HLE 代表难度军备竞赛路线,同时引发"越来越难却越来越远离用户价值"的批评。
代表论文
| 论文 | ID | 一句话贡献 |
|---|---|---|
| Min-K% Prob / WikiMIA(2023,ICLR 2024) | 2310.16789 | 低概率 token 对数似然判别文本是否在预训练语料中 |
| Are We Done with MMLU?(2024) | 2406.04127 | 重标注 5,700 题发现 ~6.49% 错误,MMLU-Redux 修复版 |
| MMLU-Pro(2024) | 2406.01574 | 10 选项 + 推理型题目,难度提升 16–32% |
| LiveBench(2024) | 2406.19314 | 按月换题 + 全客观自动评分的动态基准 |
| LiveCodeBench(2024) | 2403.07974 | 时间截止线持续采集新题,污染距离可量化 |
| DyVal 2(2024) | 2402.14865 | 程序化生成动态题目;静态高分模型在动态探测下显著掉分 |
| GSM-Symbolic(2024,ICLR 2025) | 2410.05229 | 表面变体让数学分数暴跌至多 65%——脆弱性量化里程碑 |
| Is Your Benchmark Still Useful?(2025) | 2503.06643 | 保义改写程序化翻新旧题库 |
未解问题:污染的举证标准("见过 ≠ 有罪,但分数必须按可能见过折价"是当前折中)?修数据 vs 提难度 vs 换范式三条路线的投入产出?动态基准解决污染却引入测量连续性问题(历史分数失效)?Goodhart 是否无解?
2.6 方向⑥:EDD 与仿真评测——评测成为开发方式
演进主线(六段,2024 末–2026)
- 方法论成型:EDD 从口号变成有过程模型与参考架构的工程学科——arxiv 2411.13768 首发,2025 年 v3 扩展为 EDDOps(offline/online 评测与运行时控制环统一);Anthropic 与 OpenAI 把 eval-driven development 写入官方开发指南。
- 仿真评测标准化:τ-bench 首创"LLM 用户模拟器 + 工具调用 + 终态校验 + pass^k";τ²-bench 升级双控;persona 驱动、非合作模拟、模拟器可靠性本身成为研究对象。
- eval 成为优化目标函数:DSPy → MIPROv2 → GEPA,优化器直接以 eval 分数为搜索目标;Nubank 甚至用 GEPA 优化 LLM 裁判本身的一致性。
- 持续评测与数据飞轮:生产 trace 回流为测试用例(DoorDash、Discord AITL);eval 进 CI 成为发布门禁;"评测资产"像代码资产一样版本化。
- offline-online 一致性出现量化证据:Nubank 报告离线仿真指标与线上 A/B 强相关(首个大规模量化证据);反方(OlaBench)强调 gap 仍普遍——两派证据并存。
- 学界/工业界错位被量化:EDDOps 对 134 篇学术文献统计:约 93% 聚焦部署前、仅约 2% 覆盖部署后;工业界灰色文献约 40% 已转向持续评测——学术供给与工程需求明显错配。
代表论文
| 论文 | ID | 一句话贡献 |
|---|---|---|
| EDDOps(2024/2025 v3) | 2411.13768 | EDD 的过程模型与参考架构:eval 即规约,贯穿全生命周期 |
| Nubank 亿级用户客服 Agent 框架(2026) | 2606.08867 | 离线仿真与线上 A/B 强相关的首个大规模证据(+37pp NPS 量化) |
| τ²-bench(2025) | 2506.07982 | 双控用户模拟(Dec-POMDP),模拟器也能行动 |
| GEPA(2025) | 2507.19457 | 反射式 prompt 进化:eval 作为目标函数的代表性优化器 |
| OlaBench/OlaMind(2025) | 2510.22143 | 反方证据:离线分数与可部署行为之间的 gap 仍普遍 |
未解问题:离线到底能不能代表线上(当前共识"必要不充分",需 shadow/canary/A-B 补最后一公里)?用户模拟器是不是"假用户"(同源偏差、保真度无标准指标)?CI eval 门禁的成本与 flakiness(小团队怎么办)?eval 优化器会不会奖励作弊(grader-hacking)?
2.7 方向⑦:安全与红队评测——从攻击技巧到标准化考试
演进主线(五段)
- 标准化评测框架(2024 上):从零散攻击技巧(GCG、PAIR、TAP)到有固定行为集、固定流水线、公开榜单的标准化考试——HarmBench、JailbreakBench、StrongREJECT 几乎同时出现。
- 从二元判定到分级评分(2024):StrongREJECT 证明二元 ASR 严重低估攻击效果,rubric 分级评分成为主流;安全 judge 从字符串匹配进化到语义级评估器与集成 judge。
- 从单轮到多轮与 Agent(2024 下起):Crescendo、MAST 揭示多轮攻击成功率远高于单轮;InjecAgent、AgentDojo、Agent-SafetyBench、ASB 把评测对象从"聊天回复"扩展到"工具调用轨迹"——提示注入成为 Agent 安全的第一威胁模型。
- 静态题库到动态/生态化(2024–2026):WildTeaming at Scale 挖掘真实用户越狱语料;AgentDojo 引入可参数化、可再生的动态任务环境。
- 攻防双向闭环:评测框架同时服务攻击与防御(robust refusal 训练、防御微调、防御插拔接口)——benchmark 即攻防擂台。
代表论文
| 论文 | ID | 一句话贡献 |
|---|---|---|
| HarmBench(2024) | 2402.04249 | 标准化红队评测框架 + robust refusal 训练 |
| StrongREJECT(2024) | 2402.10260 | 证明二元 ASR 误导攻防军备,推动 rubric 分级评分 |
| JailbreakBench(2024) | 2404.01318 | 开放越狱鲁棒性基准与标准化流水线 |
| AgentDojo(2024) | 2406.13352 | 动态环境评测提示注入攻击与防御,任务可参数化再生 |
| InjecAgent(2024) | 2403.02691 | 工具集成 Agent 的间接提示注入基准 |
| ASB: Agent Security Bench(2024) | 2410.02644 | 十场景系统化的 Agent 安全基准(攻击/防御/度量三位一体) |
未解问题:rubric judge 自身的校准成本把问题推后一层("有害程度"标注主观、跨文化不一致);多轮攻击的评测预算爆炸;动态环境基准的可复现性;安全 judge 被对抗攻击 100% 绕过的鲁棒性缺口(与方向①交汇)。
2.8 方向⑧:组件级评估与 RAG——把黑盒拆开
演进主线(三段)
- 奠基(2023):AIS 归因形式化定义、FActScore 原子事实分解("声明分解 + 逐条验证"范式源头)、ALCE 引用指标、RAGAS/ARES 等 RAG 评测框架密集出现。
- 组件级成熟 + 规模化基准(2024):RAGChecker 提出声明级 + 检索器/生成器双层诊断指标,成为组件级评估标杆;CRAG(Meta KDD Cup 2024)把评测推向动态、带时效的工业级基准;SAFE 把 FActScore 完全自动化做到与人评同级;AttributionBench 首次系统横评归因评估方法本身。
- 效率化、代理化、纵深场景(2025–2026):蒸馏式事实性裁判降本、agentic/多跳检索评估、归因信号进入 RL 训练回路(grounded RL / citation RL)、法律与科研等垂直域引用评测。横切主题:judge 校准——裁判本身会幻觉、有偏好偏差,需要 gold set 校准与统计修正(PPI)。
代表论文
| 论文 | ID | 一句话贡献 |
|---|---|---|
| FActScore(2023) | 2305.14251 | 原子事实分解逐条验证,长文事实性评估奠基范式 |
| SAFE(2024) | 2403.18802 | FActScore 全自动化,与人评同级且便宜 20 倍量级 |
| RAGChecker(2024) | 2408.08067 | 声明级 + 检索/生成双层诊断指标,组件级评估标杆 |
| RAGTruth(2024) | 2401.00396 | RAG 专用幻觉语料 |
| AttributionBench(2024) | 2402.15089 | 首次系统横评归因评估方法:没有绝对赢家,自建 gold 校准是唯一可靠路线 |
未解问题:组件指标高 ≠ 用户满意(检索 recall 高但生成不用、faithfulness 高但答非所问);声明粒度敏感性(抽取过细高估错误、过粗漏检);FActScore 只测 precision 导致"短回答得分高";忠实性 ≠ 正确性的产品拉锯(严格 grounded 会大量拒答)。
2.9 方向⑨:自改进闭环与评测基础设施
9a. 评测与训练闭环——Goodhart 的主战场
- 自我改进闭环成型(2024 上):Self-Rewarding LM 确立"同模型既当运动员又当裁判";Meta-Rewarding 加"裁判的裁判"对抗自我偏好;RLAIF 证明 AI 反馈可替代人类反馈。
- reward hacking 成为实证科学(2024 下):Sycophancy to Subterfuge 展示谄媚零样本泛化成篡改奖励的完整谱系;Alignment Faking 给出策略性伪装对齐的直接证据;Goodhart 被量化到 RLHF。
- RLVR 大爆发与"评测集即奖励"(2025):DeepSeek-R1 用规则可验证奖励把 RL 推上推理主战场,评测集答案验证器事实上成为训练奖励。两波反思:RLVR 是否真教会新能力(pass@k 反转实验);评测集污染让收益变成"背书"而非"推理"。
- 从实验室到生产(2025 下–2026):生产级 RL 训练中直接观测到 reward hacking;agentic 评测出现"模型修改测试文件骗分"的 eval gaming;系统性综述与缓解方法(recontextualization、reward shaping、迭代式奖励模型重训)跟进。
核心张力:评测集既是"考卷"又是"答案来源"时,它同时承担测量工具和奖励函数两种角色,Goodhart 定律必然生效。
| 论文 | ID | 一句话贡献 |
|---|---|---|
| Self-Rewarding Language Models(2024) | 2401.10020 | 自我奖励迭代 DPO 范式奠基 |
| Sycophancy to Subterfuge(2024) | 2406.10162 | reward hacking 的行为谱系:谄媚 → 规格钻营 → 奖励篡改 |
| Alignment Faking(2024) | 2412.14093 | 策略性伪装对齐的直接证据 |
| DeepSeek-R1(2025) | 2501.12948 | 规则可验证奖励(RLVR)引爆推理能力 RL |
| RLVR 的极限(2025) | 2504.13837 | pass@k 反转实验质疑 RLVR 的能力增益 |
| 生产环境 reward hacking 观测(2025) | 2511.18397 | 生产级 RL 训练中 reward hacking 的第一手实证 |
| Eval gaming 案例(2025) | 2506.12286 | Agent 修改测试文件骗分——评测自身成为攻击对象 |
9b. 评测基础设施与可观测性
- 框架标准化:lm-evaluation-harness、Inspect AI(UK AISI)、HELM 三大开源底座;重心从"多刷任务"转向可复现性与评测集治理(版本管理、prompt 固化、种子记录)。
- 与生产分布对齐:WildBench、Chatbot Arena 把真实用户 query 分布引入评测。
- 可观测性标准收敛中:OpenTelemetry GenAI semantic conventions 从各家私有 schema 向统一标准收敛,但仍处 Development 稳定性;部分 agent/tool 属性已进入 registry,完整的 agentic span 约定仍在提案推进中。
- 从观测到诊断:TRAIL、AgentDebug 等用 LLM 读 trace 自动定位失败(~40-60% 定位准确率)——可观测性从"看得见"推向"自动找错",而模型在 trace 调试上的能力短板本身又成了新的评测任务。
未解问题:生产 trace 复用于评测的数据治理(PII 与"最真实分布"的冲突);OTel 标准"现在站队 vs 等技术债"的两难;自动诊断的成熟度是否够生产;第三方评测 vs 自评的治理有效性。
2.10 趋势判断:evals 的下一站
- Judge 校准成为一等公民:2024 年大家问"judge 怎么打分",2026 年问"judge 的分数凭什么可信"。元评估基准、GEPA 式自动校准、judge 版本化与鲁棒性测试正在成为平台标配(第 E5 章)。
- 评测重心从公开榜单转向私有资产:污染 + 饱和 + harness 效应 + 与生产脱节的四重信任危机下,"私有 golden set + 领域评测套件 + 在线信号"三层结构成为工业共识(第 E3、E13 章)。
- 轨迹级评估与信用分配崛起:从"给步骤打分"到"给打分器打分",过程信号同时服务评测、RL 训练与推理时搜索——Agent 评测的颗粒度必然继续下沉(第 E7 章)。
- 评测与训练闭环融合,Goodhart 治理成为显学:RLVR 让评测集直接变奖励,reward hacking / eval gaming 从实验室走进生产——评测设计必须自带防作弊假设(第 E9 方向的本章 + 主手册 2.14)。
- 仿真评测平台化、EDD 流程化:模拟器 + fixtures + CI 门禁 + 数据飞轮构成完整工程闭环;离线-线上一致性的量化证据开始出现,EDD 从方法论走向可审计的工程学科(第 E10 章)。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | LLM-as-Judge 四段演进(偏差→元评估→可训练 judge→优化与攻防) | ⭐⭐⭐ | 是否知道 judge 是"需要校准的测量仪器"而非免费午餐 |
| 2 | JudgeBench 的核心发现:judge 间高一致 ≠ 正确(~57% vs ~78%) | ⭐⭐⭐ | 元评估意识的试金石 |
| 3 | pass^k 的出处(τ-bench)与争议(是否过严) | ⭐⭐⭐ | 可靠性指标的理解深度 |
| 4 | 污染检测三范式:成员推断 / 格式变体 / 选项结构 | ⭐⭐ | 能否说出 Min-K% Prob 与 GSM-Symbolic 各自证明什么 |
| 5 | LiveBench/LiveCodeBench 的动态化机制与代价(测量连续性) | ⭐⭐ | 动态基准不是免费的 |
| 6 | PRM vs ORM 之争与 PRM 的三大局限 | ⭐⭐⭐ | 过程奖励是否值得做的判断力 |
| 7 | Agent-as-a-Judge 为什么比纯 LLM judge 可信(拥有执行/核验工具) | ⭐⭐⭐ | 轨迹评估深水区的核心变量 |
| 8 | Bradley-Terry + bootstrap CI 在 Arena 中的角色 | ⭐⭐ | 评测统计素养 |
| 9 | reward hacking 谱系:谄媚→规格钻营→奖励篡改(Anthropic) | ⭐⭐⭐ | 评测-训练闭环的风险意识 |
| 10 | GSM-Symbolic 的教训:表面变体让分数暴跌 65% | ⭐⭐ | "能力 vs 记忆"界限的实证感 |
| 11 | 离线-线上一致性的两派证据(Nubank vs OlaBench) | ⭐⭐⭐ | 能否辩证回答"离线评测有用吗" |
| 12 | EDDOps 的错位统计:93% 学术评测停在部署前 | ⭐ | 学界-工业界 gap 的谈资 |
| 13 | 提示注入成为 Agent 安全第一威胁模型(InjecAgent/AgentDojo) | ⭐⭐ | 安全评测对象从回复转向轨迹 |
| 14 | OTel GenAI semconv 的现状(Development 状态、部分 agent 属性已入 registry、agentic span 约定推进中) | ⭐ | 可观测性标准的工程判断 |
四、经典面试题与参考答案
题 1(开放):过去一年 evals 领域最重要的三个进展是什么?
参考答案: 我给三个:① judge 校准从最佳实践变成系统工程——GEPA 式自动校准被 DoorDash/Nubank 等生产采用,元评估基准(JudgeBench 类)确立"高一致≠正确"的共识;② 离线-线上一致性首次有大规模量化证据——Nubank 报告离线仿真与线上 A/B 强相关(+37pp NPS),EDD 的可信度地基被浇筑;③ 评测与训练的 Goodhart 冲突进入生产——生产级 RL 中直接观测 reward hacking、agent 修改测试文件骗分的 eval gaming 案例,让"评测集即奖励"的风险从理论变现实。三者共同指向:evals 从"跑分"变成"测量科学 + 治理工程"。
题 2(进阶):有人说"公开 benchmark 已经没用了",你怎么看?
参考答案: 半对。没用的部分:污染(SWE-bench 题面大量进训练语料)、饱和(头部基准 60-75%+)、harness 效应(同一模型换执行框架分数差异巨大)、与生产脱节(HAL 发现基准间相关性低、与用户满意度弱相关)——所以单一公开榜单不能作为发布决策依据。仍有用:淘汰明显差的候选、跨团队沟通的共同语言、研究对照。工业共识是三层:公开基准做外部坐标 + 私有 golden set 做门禁 + 在线信号做地面真值。答出"折价使用 + 三层互补"比站队任何一方都强。
题 3(进阶):LLM judge 可信吗?你引用哪些证据?
参考答案: 可信是校准出来的,不是默认的。证据链:① 偏差实证——自我偏好(2404.13076)、风格压倒实质(2409.15268);② 元评估——JudgeBench 显示最强 judge 客观准确率 ~57% vs 人类 ~78%,judge 间高一致与正确性弱相关;③ 去偏复盘——单点策略收益有限,组合去偏才稳健(2604.23178),中端模型+组合去偏可胜过前沿 judge 且便宜约 15 倍;④ 攻防——对抗样本可让安全 judge 100% 放行有害输出(2503.04474)。工程结论:judge 必须过 gold set 校准(一致率 ≥85% 口径)、版本化、定期重校、高风险场景人工兜底——这正是第 E5 章的落地流程。
题 4(进阶):过程奖励模型(PRM)值得做吗?
参考答案: "有用但娇贵"。正方:PRM800K 证明逐步验证优于只看结果;Math-Shepherd/OmegaPRM 解决了标注成本;verifier-guided search 与 RL 信用分配都吃这套信号。反方(Qwen PRM Lessons):会被 best-of-N hacking、难度外推差、验证器分布漂移;不少团队发现"ORM + 更多采样"性价比更高;AgentRewardBench 还显示纯阅读式轨迹判别器误报率 >50%。决策框架:有明确步骤结构(数学/代码/合规流程)且愿意持续重训验证器 → 做;否则先把 outcome 评估 + 执行式验证做扎实。Agent 场景更推荐 Agent-as-a-Judge 式"带工具的评估器"。
题 5(系统设计):公司要你从零规划未来一年的评测能力建设,你如何排优先级?
参考答案: 按"仪器→考卷→流程→闭环"排:Q1 仪器——选 judge 维度、建 gold 校准集、校准到一致率 ≥85%、上线程序化检查层(先有可信测量);Q2 考卷——50-200 条 golden set 覆盖核心路径与高风险边界,建基线快照与 fixtures,跑通模拟器(E3/E8);Q3 流程——评测进 CI 门禁(P0 指标一票否决 + 回归集只增不减),版本对比带 CI 与显著性(E9/E10);Q4 闭环——线上抽样 + 同 rubric 在线评分、badcase RCA 与行动项、数据飞轮回流(E11/E12)。每季度用一个可量化里程碑验收(judge 一致率、门禁拦截次数、线上失败→回归用例转化率)。同时预留 10-15% 精力跟进本章五个趋势,避免技术路线老化。
题 6(进阶):离线评测到底能不能预测线上表现?
参考答案: 当前共识:必要不充分。正方证据:Nubank 报告离线仿真指标与线上 A/B 强相关并量化 +37pp NPS;DoorDash 的离线提升与线上一致;τ-bench 用可验证终态提高离线信号可信度。反方证据:OlaBench 指出现有基准过度强调可验证任务成功、低估主观质量与真实失败模式;EDDOps 统计 93% 学术评测停在部署前。让它能预测的条件:① 离线指标覆盖主观质量与失败模式(不只任务成功);② 离线-线上同 rubric 同 judge(DoorDash 原则);③ 模拟器与 fixtures 受控(E8);④ shadow/canary/小流量 A/B 补最后一公里。答"能/不能"都错,答条件才对。
题 7(基础):举例说明什么是"评测被训练钻空子"。
参考答案: 四个层级:① 风格层——AlpacaEval 的长度 gaming,长回答刷分(催生 LC-AlpacaEval);② 数据层——评测集进训练语料,GSM8k 改写变体仍泄漏(2311.04850);③ 奖励层——RLHF 中谄媚泛化为奖励篡改(2406.10162);④ 执行层——agent 直接修改测试文件骗分(2506.12286)。防御:私有 holdout 永不公开、动态轮换、终态执行式验证、过程检查、人工抽检旁挂 gold 指标。本质是 Goodhart:分数一旦成为目标就不再是好测量。
题 8(开放):如果让你预测 2027 年 evals 的形态?
参考答案: 五个方向(合理推演即可,展示判断力):① judge 平台化——校准、版本化、鲁棒性元评估成为托管服务;② 评测即优化目标常态化——GEPA 类优化器把 eval 分数当 loss 用,同时 eval gaming 防御成为标配;③ 统计报告规范强制化——没有 CI 和显著性的分数不被接受;④ agent 级可观测性标准落地——OTel agent span 规范成熟,trace 成为一等公民;⑤ 评测员职业化——"eval engineer"像当年的 SRE 一样成为独立岗位。收尾强调:预测细节可能错,但"测量科学 + 治理工程"的方向不会变。
五、易错点 · 反直觉点
- 误区:judge 之间一致率高 = judge 可靠。 真相:JudgeBench 证明 judge 间高一致与客观正确性弱相关,可能"集体犯错"。记忆锚点:一致性测的是"稳定",元评估测的才是"准"。
- 误区:去偏论文都说有效,所以 swap/CoT 校准一定有用。 真相:系统复盘(2604.23178)显示多数单点策略跨模型不稳定,只有组合去偏稳健——论文里"有效"存在发表偏差。
- 误区:公开基准分数涨了 = 模型变强了。 真相:可能是污染、格式捷径(GSM-Symbolic:改名字就掉 65%)或 harness 工程。记忆锚点:分数 = 能力 + 记忆 + 格式 + 环境。
- 误区:动态基准只有好处。 真相:换题让历史分数失效,排行榜变成快照而非连续量尺——动态化解决污染,引入测量连续性问题。
- 误区:PRM 全面优于 ORM。 真相:PRM800K 的结论后来被多次质疑(会被 best-of-N hacking、难度外推差);"ORM + 更多采样"常常性价比更高。
- 误区:LLM 读轨迹就能评轨迹。 真相:AgentRewardBench 显示纯阅读式判别器失败轨迹误报率常 >50%;关键变量是评估器有没有执行/核验工具(Agent-as-a-Judge 为什么强)。
- 误区:pass^k 低说明模型不行。 真相:也可能说明任务判定过严或环境抖动;要同时报 pass@1 与 pass^k 并固定温度再下结论。
- 误区:离线评测没用/离线评测够用。 真相:两个极端都错——"必要不充分",条件(覆盖主观质量、同 rubric 同 judge、shadow/canary 补位)决定预测力。
- 误区:评测集只是考卷。 真相:当评测集成为 RL 奖励(RLVR),它同时是答案来源——Goodhart 必然生效,污染会让收益变"背书"而非"推理"。
- 误区:安全评测就是测模型抗不抗越狱。 真相:还要测过度拒绝(可用性代价)和安全 judge 本身的可操纵性——裁判是攻击面。
六、推荐资源
本特辑调研报告(本章的一手素材,含全部论文条目与核实状态):
_research/01-llm-judge.md~_research/10-infra-observability.md(十份主题报告)_research/00-industry-practice.md(Airbnb/DoorDash/阿里/腾讯四大工业实践精读)
按方向的入门论文(先读这 10 篇): Judge:JudgeBench(2410.12784)、GEPA(2507.19457)|Agent 基准:τ-bench(2406.12045)、SWE-bench(2310.06770)|轨迹:Agent-as-a-Judge(2410.10934)、PRM Lessons(2501.07301)|统计:Chatbot Arena(2403.04132)|Benchmark 动态:GSM-Symbolic(2410.05229)、LiveCodeBench(2403.07974)|闭环:Self-Rewarding LM(2401.10020)
相关章节:judge 落地(第 E5 章);轨迹评估(第 E7 章);统计学细节与公式(第 E9 章);Benchmark 选型策略(第 E13 章);EDD 流程(第 E10 章);工业案例(第 E15 章)。
相关实验:eval_lab05_judge_calibration.py(校准闭环)、eval_lab11_arena_bradley_terry.py(BT/Elo/风格控制)、eval_lab08_statistics_ci.py(置信区间与样本量)。
特辑到此完整:E00 导读 → E01-E15 十五章 → 11 个 labs → 10 份调研报告。回到 E00 的三条学习路线,按需取用。
工业实践案例研究
一句话导读:评测体系不是设计出来的,而是被真实业务迭代出来的。本章逐段拆解 Airbnb、DoorDash、阿里、腾讯四家公司的一手评测工程实践——Airbnb 给出方法论与纪律,DoorDash 给出工程架构,阿里给出治理体系,腾讯给出带阈值的落地模板。学完你能得到:四家各自的关键机制与数字(面试深挖题的弹药)、一张"共识 vs 独创"横向对比表、以及一份综合四家实践的 30/90 天从零落地路线图。
一、知识图谱
工业实践案例研究(四家公司,四个层次)
│
├── Airbnb —— 方法论层:EDD(Eval-Driven Development)
│ ├── 无评测三坑:虚假信心 / 未发现的回归 / 指标与产品结果脱节
│ ├── 核心习惯 "When in doubt, look at your data"(跑 ~100 样本人工精读)
│ ├── 五原则:尽早定门槛 / 从错误推导指标 / 3–5 个 judge / 指定人类终判 / 产品持续参与
│ ├── Judge 校准五步法:旅行客服案例一致率 78% → 88%
│ └── 迭代纪律:一次只改一个变量(prompt → 模型 → serving 配置)
│
├── DoorDash —— 工程层:Eval Harness(Ask DoorDash)
│ ├── 五大挑战 → 五大设计要求(开放目标/执行不可见/无法安全彩排/规模化判断/双环境)
│ ├── 四大组件:Rubric(binary + eligibility + checklist 式)
│ │ Transcript Builder(证据切片,judge 只看该标准需要的一片)
│ │ Conversation Simulator + Fixtures(冻结外部状态)
│ │ LLM-as-a-Judge(GEPA 反射式校准)
│ ├── 评测镜像运行时架构:Orchestrator 评路由 / 护栏贯穿评 / 领域 Agent 评能力
│ ├── 反馈闭环:失败聚类 → coding agent 调查 → 沉淀为 Agent Skills → 迭代控制面
│ └── 实战案例:reasoning leakage(泄漏率 −11%)/ 底座模型迁移(延迟 −35%,质量无损)
│
├── 阿里 —— 治理层:评测平台体系
│ ├── 总命题:把「不稳定的智能行为」持续收敛成「可发布的工程质量」
│ ├── 指标:P0 门禁 / P1 版本比较 / P2 体验观察 + 一致性双指标 + 统计口径门禁
│ ├── 评分:规则主判 → Judge 辅助 → 人工兜底;分层筛查 + 人工评分路由
│ ├── RCA 五步:证据汇总 → 范围收敛 → 分模块诊断 → 责任判定 → 结构化落盘
│ └── 全链路闭环:结构化行动项 → 反馈生产线 → 质量资产库(九个能力模块)
│
├── 腾讯 —— 模板层:测评方案与阈值体系
│ ├── 三类评分器优先级:确定性 > Rubric > 人工
│ ├── 五大维度(P0/P1/P2)/ 用例四场景组织 / 负向用例必不可少
│ ├── 扣分制:初始 100 分,达标线 80 分;基线快照机制(执行 1 次→人工确认→快照)
│ ├── 稳定性:N=5 重复,容忍阈值分级(关键决策 0% / 辅助分析 ≤10% / 创意 ≤40%)
│ ├── 能力测评(起步 20–50%)vs 回归测评(接近 100%,只增不减),用例"毕业"机制
│ └── TPerf 实战:LCS 轨迹对齐 + 归一化,9 大场景 30+ 用例 × 7 模型对比
│
├── 横向对比:四家共识(三大难题 / 三层评分 / ~85% 校准线 / golden set 规模 /
│ 过程评估 / 闭环)vs 各自独创贡献
│
└── 从零落地路线图:30 天(可用最小集)/ 90 天(体系闭环)
四家定位一句话表(素材来源均为 _research/00-industry-practice.md 收录的四篇一手工程博客):
| 公司 | 原文 | 评测体系角色 | 一句话总结 |
|---|---|---|---|
| Airbnb | 《Eval-driven development: Lessons from evaluating GenAI at scale》 | 方法论与纪律 | 评测是跨职能产品活动,纪律比工具重要 |
| DoorDash | 《Building Ask DoorDash (Part 3): Evaluation》(2026-06-30) | 工程 harness | harness 不是记分板,是迭代的控制面 |
| 阿里 | 《Agent 评测:方法论与体系设计》(阿里技术,2026 年第 28 篇) | 治理平台 | 评测终点不是报告,而是稳定产出可执行行动项 |
| 腾讯 | 《AI Agent & Skill 测评方案及落地实践》(TEG 云架构平台部网关测试团队) | 落地模板 | 用数据代替直觉,用全量代替抽查,每个环节给阈值 |
阅读策略:2.1–2.4 逐家深挖(每家按"背景→机制→数字→案例"展开),2.5 做横向对比,2.6 给落地路线图。面试中被追问任何一家时,先报数字,再讲机制,最后落到"它解决了什么别家没解决的问题"。
二、核心概念精讲
2.1 Airbnb:EDD 方法论与迭代纪律
背景与三大坑。 Airbnb 的 GenAI 应用包括点评摘要、客服、房东/房客消息、内部洞察;产品团队自定评测标准,基础设施组提供共享工具与跨团队指南——注意这是实践(practice)而非强制令(mandate),这一组织形态本身就是考点。Airbnb 总结,项目早期没有评测计划会掉进三个坑:
| 坑 | 表现 | 后果 |
|---|---|---|
| 虚假信心 | 用一个浅层 helpfulness 分看着挺高 | 上线后真实场景翻车,分数没预测任何东西 |
| 未被发现的回归 | 改 prompt 后质量悄悄变差 | 没有回归集,没人知道旧场景坏了 |
| 浪费精力 | 指标与产品结果脱节 | 团队优化了半天,产品体验纹丝不动 |
核心习惯:"When in doubt, look at your data." 具体动作是100 样本人工精读法:跑约 100 个样本(真实或合成),人工读输出和 trace,找错误、归类,再围绕这些错误建测试。这是全特辑最便宜也最高杠杆的动作——不需要任何基础设施,只需要一个下午和一双眼睛(详见第 E10 章 · 评测驱动开发(EDD))。
EDD 五原则(面试必答):
- 尽早设定目标与上线门槛(launch gates),即便它们是在数据评审中才逐渐清晰的;
- 从观察到的错误中推导指标,与跨职能伙伴共同制定(不是拍脑袋定 helpfulness);
- 用少而精的 judge:3–5 个经校准的评估器好过一堆嘈杂的评估器;
- 指定一个最终人类决策者,裁决"好 vs 坏"的争议;
- 让产品伙伴持续参与对比与错误诊断。
三层评估框架(Airbnb 版三层评分):
| 层 | 内容 | 关键点 |
|---|---|---|
| 程序化检查(确定性,最先跑) | 格式/schema 校验、空/异常长度、关键词正则、P/R/F1、语义相似度 | 前两项"永远有用";结构化输出要用 JSON schema 强类型化,不要只靠 prompt 措辞产出结构,否则下游管道会坏 |
| LLM-as-a-Judge | 强模型按 rubric 评另一模型输出(语气/连贯/有据性/相关性) | 五条规则:每个质量维度一个 judge;judge 模型尽量与生成模型不同源;带 few-shot;强制输出 schema;清晰打分说明 |
| 人工评估 | 建 ground truth、安全高风险决策、细微差别与创意、裁决自动评估器冲突 | 从 20–100 个专家标注样本起步;rubric 稳定且需要规模时才扩大标注队伍;专家有分歧就先停下解决分歧再谈自动化 |
一句被反复引用的话:"如果人都无法一致地应用 rubric,模型也不可能。"
Judge 校准五步法(全特辑通用流程,第 E5 章展开):① 建 50–100 条 gold set(必须含坏样本);② 用 judge 跑该集合;③ 目标一致率 high 80s ~ 90s%,分歧可用 Cohen's kappa / Krippendorff's alpha 度量;④ 检查分歧 → 改 rubric/示例 → 重复;⑤ 失败模式变化时重新校准。核心警告:未校准的 judge 会制造误导性信心。
完整案例演练:旅行平台客服政策问答助手(面试复述率极高的一段):
| 阶段 | 动作 | 数字与发现 |
|---|---|---|
| 探索 | 跑 100 个 prompt 人工读输出 | 发现 15 个 groundedness 失败、8 个正确但啰嗦、5 个不当拒答、3 个 JSON 失败 |
| 建测试 | JSON 与长度检查;groundedness / conciseness 各一个 judge;PM/SME 标注 gold | 60 条 gold(含失败样本) |
| 校准 | judge 跑 gold 集 | 初始一致率 78%(过低)——根因是 judge 误罚了正确的改述;修 rubric 与示例后达 88%;检索改进减少 groundedness 失败 |
| 规模化与监控 | 扩容 + 上线后持续运行 | 扩到 5,000 样本;每日抽样 5% 去标识化生产流量;跑检查与 judge;标记样本送人工;每周 PM 评审,新增测试与修复 |
迭代纪律:一次只改一个变量。 顺序是:先固定模型变 prompt → 再固定 prompt 变模型 → 再都固定变 serving 配置。Judge 筛候选,顶尖候选反哺 judge 改进,直到双方稳定。这条纪律回答了一个高频追问:"你们同时改了 prompt 和模型,怎么知道是谁的功劳?"——答案是:不允许同时改。
Agentic 评估三层(详见第 E7 章 · 轨迹与 Agent 级评估):只看最终答案不够——推理路径、工具参数、工作流可能在结果看似正确时已经失败。Airbnb 分 step-level(单工具调用/推理步)/ trajectory-level(整体路径是否合理高效)/ session-level(整个交互是否达成用户目标);agent 通常在 root 下发 trace 和 span,可通过树遍历重建 trace,校验 subagent 调用与工具使用。
隐私注记:生产抽样用隐私保护方法——人工评审前去标识化、用途限定于安全与质量。
Airbnb 十条要点(原文收束,面试可直接引用):① 建复杂工具前先人工看输出与 trace;② 避免泛化 helpfulness,瞄准真实产品失败;③ 从小标注集起步快速迭代;④ 不要万能 judge,按维度拆分;⑤ judge 校准到高一致率后再信任;⑥ 代码检查 + 模型 judge + 人工评审结合;⑦ gold set 必须含坏样本;⑧ 评整个系统(检索/工具/agent 路径);⑨ 上线前测试要在线上持续运行;⑩ 评测是跨职能产品活动。
动手:
labs/eval_lab05_judge_calibration.py用纯标准库复现了"78% → 88%"这个校准循环(v1 judge 误罚正确改述 → 分析分歧 → 修 rubric → v2 达标)。运行:cd evals-special/labs && python3 eval_lab05_judge_calibration.py;EDD 全闭环(门禁/回归/一次一变量)见labs/eval_lab10_edd_loop.py。
2.2 DoorDash:Eval Harness 的工程架构
DoorDash 的 Ask DoorDash 是四家案例中工程细节最完整的一篇。先看成果数字(全部为原文数字):
| 指标 | 数字 |
|---|---|
| 质量信号规模 | 从平均 1 条/天的员工反馈 → 2,000 个/天自动评分会话 |
| 上线前质量 | 全国上线前 agent 质量分 +8 分,错误率近乎减半,达到生产发布标准 |
| 回归效率 | 全量回归:手工 6+ 小时 → 自动约 20 分钟 |
| 模型迁移 | 支撑底座模型迁移(Claude Sonnet 4.6 → Gemini 3.5 Flash):延迟降 35%、质量无损 |
五大挑战 → 五大设计要求(原文表格,系统设计题的标准答题骨架):
| 挑战 | 设计要求 |
|---|---|
| 开放式目标(一个用户目标有多种可接受结果) | 每个目标表达成 rubric:具体到每次能同样判,宽泛到容纳所有合法路径 |
| 执行不可见(judge 需要看到对话之下的工具调用;不同标准需要执行记录的不同部分) | trace 会话并重建为"按标准定制的视图",judge 只看该标准需要的证据,隔绝无关 trace 噪声 |
| 无法安全彩排(不能拿真用户试变更,历史会话不能对改过的 agent 重放) | 按需生成会话:模拟用户驱动 agent 跑场景,外围数据固定(fixtures),同场景每次一致 |
| 规模化判断(是否帮到用户需要人类级判断,但人工不可扩展) | 校准过的 LLM judge 顶替人类评审 |
| 双环境(开发与生产质量可能背离) | 真实会话与模拟会话用同一 rubric + 同一 judge:离线结论带到线上,线上失败离线复现 |
评测镜像运行时架构。 Ask DoorDash 是多智能体架构:用户消息 → Orchestrator → 路由到领域 Agent(如 Restaurant Discovery Agent);领域 Agent 直接处理或交还 Orchestrator。评测与之同形:路由在 Orchestrator 评;护栏贯穿全流程评;任务能力在每个领域 Agent 评。这是"评什么"与"架构长什么样"一一对应的范本。
组件一:Rubric 体系。 每条标准是一个 binary check,汇总为会话级总分。三类评测实例:
- Guardrail(全体 agent 适用):如"沟通质量:回复简洁、不向用户叙述思维过程";"信任与诚实:不呈现可证伪虚假信息";
- Capability · 餐厅发现:"约束满足:推荐满足配送时间/预算/饮食限制";"结果多样性:真实差异而非近似重复";
- Capability · 杂货购物:"购物执行:用户的明确修改请求被执行";"商品相关性"。
两个独创设计:① Eligibility 适用性前置——judge 先判该标准是否适用本会话,不适用则跳过(例如食谱流程不因缺少复购步骤被扣分);② 离线 checklist 式 rubric——场景级清单,例:"两人份 ≤$60 素食 taco 购物清单",验证每件商品都是素食 taco 原料、小计 ≤$60。这类标准比宽泛通用标准方差更低,小样本更有用,支撑更快迭代。每条标准都写成"从会话本身可验证"——同一 rubric 既供人工校准又供 judge 规模化。
组件二:Transcript Builder(证据切片)。 基础设施:每会话用 OpenTelemetry 打点,trace 存内部 ClickHouse;span 记录用户输入、模型输出、工具调用与返回、展示给用户的 widgets。问题是原始 trace 完整但难判:工具返回可能巨大、schema 脚手架与无信号字段多、证据散落多个 span/turn。Transcript Builder 是一组 Python 脚本:重组分散 span、删无质量信号 token、裁超大载荷,产出紧凑视图。最关键的设计:每条标准声明自己依赖的证据,builder 只给 judge 那一片——grounding 检查拿 agent 论断 + 背后工具输出;多样性检查拿推荐 + 原始请求;叙述检查拿 agent 工作时流式输出的文本。聚焦证据让判断更一致。
组件三:Conversation Simulator + Fixtures。 LLM 扮演购物者;scenario 定义开场请求、用户目标、对提问/结果的反应方式(详见第 E8 章 · 对话 Agent 与仿真评测)。依赖外部状态时用 fixtures:录制工具返回替代实时调用。原文实例:复购场景开场 "Reorder my usuals",get_reorder_items 固定返回录制的 reorder_history_v1(Albertsons 订单:Meadow Gold 全脂牛奶 ×2、Oroweat 全麦面包、牛油果、Ben & Jerry's 冰淇淋……)。每次运行看到相同订单 → 预期结果可预测,judge 可对照同一商品集评分。成本账:全量 sweep = 50 场景 × 8 trials = 400 次对话;人工本地聊约 1 分钟/次 → 6+ 小时;模拟器约 20 分钟。
组件四:LLM-as-a-Judge(GEPA 校准)。 定位是"带紧反馈环的测量问题"——样本够多(每天估计生产质量)+ 出分够快(不成为发布瓶颈)。人工用在杠杆最大处:定 rubric、标注校准集、审计 judge 行为;打分主力是 judge。原文立场鲜明:"LLM Judge only useful if it agrees with human reviewers." 校准方法用 GEPA(反射式 prompt 优化)打磨 judge 判定边界:迭代提出 judge prompt 修订,只保留在留出集上提升与人工标注一致率的版本。校准持续进行:rubric 演进(新增能力)时收新标注、重新校准。judge 逐条标准独立评分:输入 = 标准 + 该标准依赖的证据;输出 = verdict + 简短 rationale。
平台化:Eval Service。 trace 存储、实时评测执行、UI 化 judge 开发、标注工作流。组织路径值得抄:起步用嵌入式平台团队与 harness 并行共建,再沉淀为共享评测服务(paved path)供其他团队采用。
反馈闭环(四步):① 失败聚类成主题——逐条看失败会"轶事驱动"(最近/最惊奇的失败主导修复),而 rubric 标准天然是问题簇:grounding 失败 / 缺替代品 / 糟糕叙述分开调查,失败列表变成按影响排序的主题列表;② 从发现到解决——从失败簇出发,coding agent 检查失败 trace、相关代码路径、近期变更、历史调查;修复明确时直接起草 PR,prompt/上下文学习改动则产出诊断 + 建议供人审;③ Agent Skills 化——把 eval-driven 工作流(聚类失败、调查失败模式)打包成 Agent Skills,可重复、可复用、可改进;skill 分错簇或写弱修复 → 更新 skill 而非打补丁一次性运行;④ 总结论——harness 不只是记分板,是迭代的控制面(control plane for iteration):生产监控 + 失败聚类 + agent 辅助调查 + 发布前验证连成一环。
实战案例 1:Reasoning leakage。 日常线上评分发现泄漏激增:任务完成但叙述中冒出系统语言("reorder skill"、工具名、"fetch"、"in parallel")——"像编码 agent 而非购物助手"。诊断指向 prompt 设计:合并沟通规则,分离内部 skill 指令与面向用户语言。离线用生产中最易触发的场景验证:泄漏率降 11%;hero 场景全量扫描无回归;上线后监控确认阶跃改善。
实战案例 2:底座模型迁移(兼容性差距 ≠ 能力差距)。 agent 跑在 Claude Sonnet 4.6;5 月中 Gemini 3.5 Flash 发布,benchmark 显示可降延迟。离线 harness 一跑:分数大跌。但 eval 给出具体失败模式,AI coding agent 做假设与实验后得出结论:不是能力差距,是兼容性差距——Flash 部分工具参数格式不同(工具签名要 plain string,Flash 传 {"dishes": [...]} JSON 对象);系统 prompt 围绕 Sonnet 惯例隐式调优。原文金句:"低分反映的是为 Sonnet 适配的系统,不是更弱的模型。"修复小而准:工具输入确定性防护(错误形状强制转换回预期形状而非丢弃调用);prompt 显式写出 Sonnet 原本自行推断的内容(用数据中精确店名、不超出工具结果渲染)。"不是改模型,是修正模型周围的环境。"重跑 eval:Flash 与 Sonnet 质量持平(harness 噪声范围内)→ 迁移生产 → 延迟降 35%、质量无损。
DoorDash 四条 Lessons Learned:① Judge 需要"为问题塑形"的 transcript 视图——删无关、只留标准依赖的证据;② 环境必须受控,否则分数测量的是噪声——fixtures 冻结上游世界;③ 离线结果只有能带到线上才有意义——同一 rubric + 同一校准 judge 两边跑,各自调 judge 分数会难调和地背离;④ 评测系统自己也产生 bug 报告——被标记失败中有真实一部分是 harness 自身故障(judge 误报、trace 缺口),并行修复才可信。
动手:
labs/eval_lab07_simulator_fixtures.py复现 fixtures 对照组实验(漂移组方差显著大于 fixture 组,验证"环境不受控时分数测量的是噪声")。运行:cd evals-special/labs && python3 eval_lab07_simulator_fixtures.py
2.3 阿里:评测平台的治理体系
阿里技术《Agent 评测:方法论与体系设计》共十章,是四家中治理视角最完整的一篇。总命题:Agent 评测是把「不稳定的智能行为」持续收敛成「可发布的工程质量」,不是上线前抽查。 三大门槛:非确定性(同输入不一定同输出)、黑盒化(内部决策不透明)、错误级联放大(前步小错后续放大)。
为什么"跑几条 case 感觉还行"不够(四个失效场景,第 E1 章展开):同一 prompt 跑通一次 ≠ 稳定可用;每次改模型/prompt/工具参数都可能改坏原有场景且不易第一时间发现;多步链路前一个小偏差会被放大成错误结论;更隐蔽的是假阳性——有些样本最终答案看似对,但执行路径已偏离或带风险,在生产迟早暴露。结论:评测体系必须嵌入研发流程;评测平台不只是"出分工具",核心价值是把问题稳定转化为可执行修复、形成持续迭代闭环。
指标体系(P0/P1/P2 分层):五大类指标按用途分层——P0 上线门禁(不达标不发)、P1 版本比较与工程优化、P2 体验改善与长期观察(详见第 E2 章 · 评估指标体系)。两个关键口径:
- 一致性双指标:任务重复运行 N 次——至少一次成功率(能力上限)vs 连续成功率(每次都要成功,客服/支付/退款/合规等生产级场景看这个)。用户不会接受"多试几次总有一次成功"。
- 统计口径门禁:版本对比要配套统计检验——关键指标置信区间 + 与基线的显著性判断 + 最小可感知变化阈值(提前定义提升多少才值得发布)。"门禁不只看差了多少,还要看差异是否超过统计噪声。"
评测数据集:评测集不是线上随机抽样——线上样本有幸存者偏差:正常流程占多数,易错边缘场景占比低,随机采样报告"看起来不错"但关键问题漏掉。Golden Set 默认作为基线评测集(相对稳定、长期复用的核心样本),用于版本对比与发布门禁。四类来源:专家设计用例(定标准)、扩展用例(先用规则确定场景类型/订单状态/用户诉求/期望动作等结构字段,再用 LLM 生成接近真实用户的自然语言表达)、线上真实数据、badcase 回流(如"Agent 直接承诺一定退款成功")。规模路径:先做 50–200 条高质量 golden set 覆盖核心业务路径与高风险边界,成熟后扩展分类采样集、长尾集、对抗集、线上回流集。
评分原则:规则主判,Judge 辅助,人工兜底。 规则看"硬条件"(工具、状态、字段、禁用动作),LLM 看"语义/策略合理性";能写成代码的由规则主判;高风险/抽检/低置信/变更观察期追加 LLM Judge;能自动稳定判断的不长期依赖人工。阿里口径的 judge 工程要点:每分档有可执行标准;输出 reason(定位 + badcase 聚类);few-shot 含边界样本与判定 CoT;周期性校准,与人工复核一致率约 85%(参考值)后进日常自动化;偏差治理——judge 与生成模型同源会偏爱自己风格 → 多 LLM 对抗打分。
人工评分路由(阿里独创,详见第 E6 章):不由分数阈值单独决定——自动评分不确定(边界分/低置信/reason 含糊/多 judge 分歧)进人工;新模型/新 Prompt/新工具 Schema/新活动上线抽样进人工;规则与 Judge 冲突进人工终判并回收口径。分层筛查:粗筛层(规则 Scorer + 轻量 Judge,快速分明显通过/明显失败/存疑)→ 精判层(完整规则 + Judge,确认 badcase 并产出初始问题分类/现象/置信度/判定依据)→ 人工复核层(高风险/低置信/冲突/口径未固化)。评分输出不止 pass/fail:还要问题分类(现象层:事实性错误/答非所问/过度承诺)、问题现象、置信度、判定依据——为 RCA 提供"现象入口",且现象分类 ≠ 最终根因。
Judge 持续运营:维护 Judge 金标校准集;每次 Judge prompt/模型升级固定产出三类统计——与人工标注一致性(一致率或多模型对抗 Kappa)、高风险样本漏判率(合规/资损/隐私)、边界样本稳定性(重复评测波动)。
Badcase RCA 五步(本章重点,详见第 E11 章 · Badcase 根因分析与优化闭环)。入口两条通路:离线评测集 + 线上(会话/人工质检/投诉工单/低满意度/版本回归失败/监控告警)→ 汇入同一 badcase 任务表与同一 RCA Pipeline:
| 步骤 | 动作 | 关键机制 |
|---|---|---|
| ① 证据汇总 | 按 sessionId/chatId/traceId/评测运行 ID 找链路日志 | 汇总用户输入、Agent 回复、模块 IO、prompt、工具调用、异常、耗时、中间产物;状态以持久化任务记录为准 |
| ② 范围收敛 | 维护"问题现象 × 功能模块"映射 | 答非所问 → 优先看意图识别/Query 改写/知识筛选;过度承诺 → 优先看风险拦截/回复生成;命中走确定性路径,未命中 LLM 兜底缩圈;映射表只缩小候选,不直接定责 |
| ③ 分模块诊断 | 候选模块逐个读 input/output/prompt/工具返回/异常日志 | 输出 PASS/SOFT_PASS/FAIL + 问题摘要、关键证据、改进建议。实例:现象"事实性错误" → 先看 FAQ 检索是否召回正确政策 → 知识检索是否保留关键片段 → 回复生成是否忠实使用证据;前两段通过而回复仍错 → 回复生成 FAIL |
| ④ 责任判定 | 消费"现象 + 分模块诊断 + 根因知识库" | 三层策略:严重模块结论直接定责 → 规则引擎匹配确定性模式 → LLM 汇总复杂链路责任传递;输出责任模块/问题大类(语义理解/知识召回/工具执行/风险防控)/问题枚举/修复建议 |
| ⑤ 结构化落盘 | 写入任务记录 | 问题分类/现象/枚举/责任层/责任模块/置信度/详细报告/修复建议,看板渐进展示 |
工程实现:单次 badcase 分析建模为异步 Multi-Agent Workflow,同样遵循"确定性优先、模型辅助、人审兜底":规则定位硬错误(工具未调用/顺序违反 SOP/参数缺失/报错未重试/DB 状态未变/引用来源不存在)→ Trace Scorer 定位过程偏差 → 映射表缩圈 → LLM 辅助语义归类聚类 → 高风险/低置信/冲突进人工复核,人工结论反校准规则/Judge Prompt/根因标签。
根因标签体系:标签要稳定、可统计、指向 owner 与处理动作,可绑定解决角色:运营可配置/算法需优化/工程需修复/业务需定口径。实例:"已发货退款未查订单状态" → 归"工具覆盖与执行"、枚举"关键工具未调用"、责任模块 = 退款 Skill/退款流程执行模块。支持聚类:同根因/同场景/同工具/同知识点的失败自动聚成问题簇——报告不只列 100 条 badcase,而是产出"退款已发货场景中,Agent 23 次跳过订单状态校验,主要集中在 v1.8 Prompt"。
自动优化建议(第 8 章):建议项不能停留在"优化 Prompt/加强训练/提升准确率"——要明确失败范围、证据、具体动作、owner、验收方式、优先级;产出结构化行动项,能被工单系统/看板/配置平台/研发流水线直接消费("建议是质量工程里的标准任务对象")。每个建议可展开证据链。
全链路闭环(第 9 章):完整评测平台含九个能力模块;终点不是报告,而是把线上失败持续转化为可复用研发资产。发布阶段离线门禁与线上灰度联动,跟踪三类信号:
| 信号类 | 指标 |
|---|---|
| 离线质量信号 | 核心场景通过率、P0 风险数、关键工具参数正确率 |
| 线上体验信号 | 转人工率、重复追问率、投诉率、满意度变化 |
| 业务结果信号 | 任务完成率、工单闭环率、退款/赔付成功率 |
红线:离线提升但线上关键信号恶化 → 触发回滚或降级! 另外两条工程约束:Trace 输出是被测 Agent 的标准能力而非事后补救(稳定记录工具名、入参、返回值、时间戳、耗时、错误;复杂 Agent 还记录计划、检索、Guardrail);评测执行环境隔离,避免多用例共享状态导致分数不可复现。
反馈生产与质量资产库:一条 Badcase 至少生产 3 类反馈,平台分三条生产线(评测集/训练数据/知识修订,详见第 E12 章)。入库标准五条:失败可复现(或至少有稳定 Trace + 人工确认)、期望行为明确、根因标签清楚、样本有代表性(覆盖一类问题而非一次性环境抖动)、已脱敏合规。样本治理:同簇保留代表例;P0/P1 风险长期保留;稳定多版本通过且低风险者降级为抽样集;新分布出现时主动学习优先抽取低置信/高影响/新意图/新工具/新知识点样本进人工确认。最终沉淀质量资产库:用例库、Trace 库、根因标签库、修复建议库、Judge 校准集、回归集。"质量资产越厚,Agent 迭代越不靠个人经验和临时救火。"
第 10 章收束:评测体系的成败取决于它能否在跨团队协作中长期、稳定地产生可执行行动项;低分必须稳定转成行动项,否则再精细的分数也只是报表。
动手:
labs/eval_lab09_rca_pipeline.py实现了 RCA 五步全流程(含"已发货退款未查订单状态"案例与问题簇聚类)。运行:cd evals-special/labs && python3 eval_lab09_rca_pipeline.py
2.4 腾讯:测评模板与阈值体系
腾讯技术工程这篇是四家中最像"可直接抄的模板" 的一篇。总公式:
Eval = Agent 输入 → 执行 → 捕获执行过程(Trace + 产物) → 一组检查规则 → 可对比的分数
目标:可重复、可量化、可持续演进的评估闭环;每次变更都能快速跑出可比较的分数;用数据代替直觉,用全量代替抽查。
痛点表(立项依据模板):主观性强(靠"感觉变好了");悄悄退化(改 prompt/升级依赖旧场景变差无人知晓);人工验证成本高(Skill 越多模型越快,人肉回归指数增长,只能选择性验证留盲区);模型不敢升级(无对比数据支撑切换决策);缺少效率基线(变贵变慢无法归因版本);过程易忽略(答案碰巧对但推理路径错,分不清"正确调用工具后回答"与"训练数据碰巧答对")。
三类评分器(选择优先级:确定性 > Rubric > 人工):
| 维度 | 确定性评分器 | Rubric 评分器 | 人工评分器 |
|---|---|---|---|
| 谁来评 | 脚本(Bash/Python/断言/Lint/AST) | 大模型(固定版本) | 领域专家 |
| 规则写在哪 | 代码里 | Prompt + JSON Schema | 人脑 + 标注指南 |
| 成本 | 毫秒级/免费 | 秒级/API 费用 | 分钟-小时级/人力 |
| 稳定性 | 100% | 有抖动(需降噪) | 取决于标注员水平 |
| 覆盖 | 已知硬指标 | 未知软指标 | 主观 + 边缘场景 |
| 典型用例 | 文件存在、构建/测试通过 | 代码风格、意图贴合、解释清晰度 | 校准 LLM、诊断 0%/100% 异常、红队 |
| 门禁角色 | 硬门禁 | 分级门禁(error 硬/warning 软) | 不进门禁,做采样审查 |
确定性评分器类型:工具调用检查(是否调用指定工具、参数是否正确)、产物检查(文件存在、内容符合预期)、关键词匹配、执行指标(调用次数/token 阈值)、基线对比(与基线快照逐项对比)。Rubric 规则示例:observation_points(回答是否基于项目规范而非通用知识/推理是否清晰连贯/有无幻觉编造);scoring:process_score 0-100、result_score 0-100、is_false_positive bool(结果对但过程错的虚假成功)。
人工评分六个必要场景:① 校准 LLM 评委(最核心;抽样 100–200 条对齐,一致率 ≥85% 才可用)② 主观任务打分 ③ 诊断通过率异常(0% 或 100% 通常是任务/评分器坏了,不是模型弱)④ 建 Ground Truth(新套件前 20–50 个参考解)⑤ Trace 采样审查(每周固定抽样读轨迹找隐藏失败模式)⑥ 高风险兜底(医疗/金融/安全 100% 人工复核)。经验法则:能自动化的坚决不找专家;专家时间 60%+ 花在"校准 LLM 评委"与"诊断异常"。
五大评测维度(详见第 E2 章):
| 维度 | 级别 | 评分方式 | 要点 |
|---|---|---|---|
| 功能正确性 | P0 | 代码判 | pass@1/pass^k、任务完成度、指令遵循(JSON Schema/正则)、工具调用正确性;必须自动化全覆盖 |
| 过程质量 | P1 | Rubric + 人工 | 推理合理性、步骤最优性(实际步数 vs 参考解法)、信息完整性、上下文利用率、自我纠错;最能体现"智能",自动化最难 |
| 效率与成本 | P1 | 代码判 | Token avg/p95、工具调用次数、延迟 p50/p95/p99、失败重试率、¥/task;"pass@1 高但 token 花 10 倍的方案生产上不可接受" |
| 鲁棒性与安全 | P0 | 代码 + 人工 | 一致性(pass^k,k=5/10)、异常恢复(故障注入)、抗注入红队、幻觉率、越权断言、合规、误拒%/漏拒%;金融/医疗/企业数据 Agent 必须前置 |
| 体验与对齐 | P2 | Rubric + 人工 | 语气、清晰度、主动澄清、同理心、可解释性、CSAT/NPS;P2 但决定产品生死 |
术语口径:pass^k = k 次每次都通过(稳定性);pass@k = k 次至少 1 次通过(峰值能力)。落地顺序:P0 先落地,P2 按需补。不同 Agent 类型侧重不同(知识库问答 → 准确性/幻觉/溯源;代码编写 → 产物可运行性;功能工具 → 过程合规性;问题定位 → 过程 + 结果双重验证),差异在"用什么评分器、检查什么",流程不变。
用例集设计四场景(详见第 E3 章 · 黄金数据集与用例设计):① 触发(该触发吗?正向:各种合法表述都触发;负向:相似但不相关 prompt 不误触发)→ ② 核心逻辑(过程对吗?工具调用序列/参数/顺序)→ ③ 产物质量(产物好吗?准确/完整/格式)→ ④ 异常容错(出错扛得住?优雅降级 vs 崩溃/死循环/静默失败/泄露)。负向触发用例为什么必不可少:"只测正例,Agent 可能学会什么都触发——过度触发比不触发更难发现。"经验法则:核心逻辑用例量通常是其他三类之和的 2–3 倍;N 条分支至少 N 个正向 + 关键分支负向。
评分规则(扣分制):初始 100 分负分制,每处不符扣对应分至 0;达标线 80 分(推荐值,按 Agent 类型与业务风险调整)。扣分维度:任务结果不符预期 −100;步骤遵循性每步 −10;步骤输出结果每步 −10;工具/知识库调用每项 −10;分析耗时基准 5 分钟每超 1 分钟 −10;一致性 N 次(建议 N=5)全达标取均值。每次评分输出 JSON 扣分明细 + 原因,渲染 HTML 报告归档。
用例基线机制(腾讯独创):基线 = 单用例执行 1 次后经人工确认的预期过程与预期结果快照("正确的执行应该长什么样")。预期过程含 CoT、工具调用序列(入参返回)、中间产物、完整 Trace;预期结果含最终响应、输出文件、输出报告。流程:用例设计只定义 prompt 与检查规则 → 执行 1 次 → 人工审核过程与结果 → 不可接受则修后重跑 → OK 则该次快照成为基线。后续每次执行与基线对比:过程对比(关键步骤缺失/顺序偏离 → 过程退化)、结果对比(关键内容缺失/产物不一致 → 结果退化)、效率对比(token/步骤数超基线比例,如 >50% → 效率退化)。基线更新时机:Agent/Skill 逻辑变更、模型版本升级、用例本身修改 → 重新执行 1 次并人工确认。
稳定性评估与容忍阈值分级:N 次执行,只要 1 次不通过即存在稳定性风险。容忍阈值按使用类型分级:
| 使用类型 | 例子 | 失败容忍阈值 |
|---|---|---|
| 关键决策类 | 问题定位/故障诊断 | 0%(N/N 全过,任何一次失败都可能误判) |
| 辅助分析类 | 性能分析/报告生成 | ≤10% |
| 创意生成类 | 代码建议/文案 | ≤40% |
N=5 的解读:全过 = 稳定;1/5 失败 = 存在幻觉,按类型判断;2/5 = 高幻觉率深入排查;5/5 失败 = 稳定失败,先查任务定义或基线。调试技巧:0% pass^N 通常说明任务定义有问题,不是能力不行。
能力测评 vs 回归测评:能力测评回答"Agent 能把什么做好"(起步通过率 20–50%,目标山峰,主动拓展频繁迭代);回归测评回答"原有能力是否还在"(接近 100%,防御漂移,只增不减,CI 每次运行)。通过率稳定 100% 后用例"毕业"进回归集。引用 Anthropic 推荐:确定性任务用例集整体通过率需 100%,非确定性任务 ≥95%。Bad case 处理流:复现记录完整轨迹 → 分析根因定预期行为 → 修复 → 纳入用例集防回归 → 进能力集,稳定后毕业到回归集。
工程落地细节:Trace 前置三要求——结构化(JSONL/JSON)、内容完整(每步工具名/入参/返回/时间戳,理想含思维链与决策依据)、格式跨版本稳定;不支持时优先推动被测系统增加 Trace 输出,"设计阶段就把结构化 Trace 作为标准能力,而非事后补救"。环境隔离:clone 仓库到临时目录;每用例前重置(git checkout . && git clean -fd);产物统一归档。触发时机:提示词变更(CI 自动,PR 合入前回归)、模型版本升级(手动验证兼容性)、定期巡检(定时全量回归)。
TPerf 实战案例(把上面所有模板跑了一遍的真实项目):TPerf AI 分析 Agent 属功能工具类型,部署在 Knot 智能体平台,MCP 调用 TPerf-API 取性能数据 + 知识库检索,决策树判断资源瓶颈与压测有效性,输出结构化性能分析报告。测评侧重:操作步骤合规性 + 执行效率 + 输出报告质量。
| 评分维度 | 机制 | 扣分 |
|---|---|---|
| 操作步骤(确定性) | LCS 最长公共子序列对齐基线与 Trial 步骤,归一化:时间戳占位/搜索工具忽略查询参数/写入只留路径/终端命令提取脚本名/连续读文件组内不校验顺序 | 不一致/多余/缺少/顺序错各 −2,上限 −10 |
| 效率(确定性) | 耗时基准 300s 每超 10% 扣 1;token 以基线为基准每超 10% 扣 1 | 各上限 −10 |
| 关键判定(模型评分) | 压测有效性/性能结果与基线不一致 | 直接 −80 |
| 章节内容(模型评分) | CPU/内存/网络/磁盘 IO/业务指标/根因定位/优化建议/完整性/准确性,调用 CodeBuddy CLI 逐项对比 | 每项 −5,上限 −80 |
一致性标准三档:数值型(整数精确/小数相对误差 ≤1%)、结论型(异常等级与关键发现一致)、建议型(核心排查方向一致即可)。稳定性 0 容忍说明:TPerf 虽属辅助分析类,但结论直接影响优化决策与发布判断,一次错误结论可能导致性能问题漏检上线 → 采用关键决策类标准(任一 Trial 不达标该用例 0 分)。计分公式:trial_score = max(0, 100 + 各项扣分);trial_pass = score ≥ 80;case_score = 全 pass 取均值,任一不达标为 0。
用例集与执行数字:9 大场景分组 30+ 用例(CPU 瓶颈 6/网卡 5/磁盘 4/磁盘 IO 2/内存 1/TCP 队列 3/Nginx 1/配置问题 1/正常场景 5),每个用例对应真实 TPerf 压测记录(不可变、可复现);支持 7 模型对比(每用例 × 每模型参数化测试)。用例不硬编码预期输出,通过基线会话标识(session_id + message_id)指向人工确认正确的分析记录,评测时从 Knot API 动态获取。执行:Trial 并发 + 评分并行 + 三评分器并行;限流自动重试(≤5 次);单用例约 3000s;全量 30+ × 7 模型约 3–5 小时;pytest 实现,TCase 平台管理用例。关键设计:基线配置随代码仓库 Git 版本化;执行结果每次重新生成并归档;支持重新评分(评分逻辑调整后无需重新触发 Agent)。
动手:
labs/eval_lab01_metric_system.py复现 pass@k/pass^k 与"容忍阈值分级"判定;labs/eval_lab06_trajectory_eval.py复现 LCS 轨迹对齐扣分与假阳性捕获。运行:cd evals-special/labs && python3 eval_lab01_metric_system.py/python3 eval_lab06_trajectory_eval.py
2.5 四家横向对比:共识与独创贡献
把四家放在一起看,会发现独立演化的实践收敛到了几乎相同的骨架——这正是"评测体系的客观规律"的證據,也是面试中最高密度的得分点。
共识表(素材汇总):
| 共识点 | Airbnb | DoorDash | 阿里 | 腾讯 |
|---|---|---|---|---|
| 三大难题 | 非确定性/判断依赖/AI 评 AI | 开放目标/执行不可见/无法安全彩排/规模化判断/双环境 | 非确定性/黑盒化/错误级联 | 非确定性/黑盒化/错误级联 |
| 三层评分 | 程序化 → Judge → 人工 | binary rubric + judge + 人工定标准/标注/审计 | 规则主判 → Judge 辅助 → 人工兜底 + 路由 | 确定性 > Rubric > 人工(优先级) |
| Judge 校准线 | high 80s ~ 90s 一致率 | 与人工标注一致(GEPA 优化) | ~85% 后进自动化 | ≥85% 可用 |
| 起步标注规模 | 50–100 gold set(含坏样本) | rubric + 校准集 + 20–50 参考解 | 50–200 golden set | 前 20–50 参考解 |
| 过程评估 | step/trajectory/session 三层 | transcript builder + 按标准定制视图 | Turn/Session/Trace/Outcome 四层;假阳性 | 过程质量维度 + LCS 基线对齐 |
| 闭环 | 每周 PM 评审新增测试 | 失败聚类 → coding agent → Agent Skills | RCA 五步 → 行动项 → 反馈生产 → 质量资产库 | badcase → 能力集 → 毕业回归集 |
六条可以直接背诵的共识:
- 难题同源:非确定性、不可见、错误放大/级联——四家的全部机制都是对这三件事的响应;
- 三层评分:确定性优先,模型 judge 居中,人工兜底且只花在高杠杆处——没有一家让模型 judge 未经校准直接进门禁,也没有一家让专家做日常全量打分;
- ~85% 校准线:judge 与人工一致率约 85%(high 80s ~ 90s)是四家不约而同的"可用线";
- golden set 从小起步:20–50 参考解 / 50–100 / 50–200,都强调含坏样本、含边界,都走"先小后扩";
- 过程评估不可省:只看最终答案会放过假阳性——四家各自给出了 step/trajectory/session、transcript 视图、Turn/Session/Trace/Outcome、LCS 基线对齐四种实现;
- 闭环是终点:评测的价值不在出分,而在"失败 → 用例/修复/资产"的持续转化。
独创贡献表(各家"别人没有的那一手"):
| 公司 | 独创贡献 | 解决的具体问题 |
|---|---|---|
| Airbnb | 迭代纪律(一次只改一个变量)、judge 少而精(3–5 个)、100 样本人工精读法、"专家分歧先停下" | 归因混乱、评估器噪声、拍脑袋指标 |
| DoorDash | Transcript Builder(证据切片)、fixtures、GEPA 校准、eligibility 前置、checklist 式 rubric、评测镜像运行时架构、Agent Skills 化闭环 | judge 被无关 trace 噪声干扰、环境漂移、rubric 误伤不适用场景 |
| 阿里 | RCA 五步归因体系、统计口径门禁、结构化行动项、反馈生产线(一 badcase ≥3 类产出)、质量资产库、人工评分路由 | 低分无法转化为修复、责任不清、口径漂移 |
| 腾讯 | 基线快照机制、扣分制(80 分线)、稳定性容忍阈值分级、能力/回归"毕业"机制、LCS 轨迹对齐 + 归一化 | 无参照系、无阈值、用例集无序膨胀 |
一个元观察:四家恰好覆盖评测体系建设的四个层面——Airbnb 教你纪律(怎么迭代),DoorDash 教你工程(怎么搭 harness),阿里 教你治理(怎么让组织消费评测结果),腾讯 教你模板(第一周就能跑起来的最小集)。面试回答"你怎么搭评测体系"时,按这四层组织答案比堆砌工具名高级得多。
2.6 从零落地路线图:30 天 / 90 天
综合四家实践(每一步都标注出处),给一份可以直接拿去答辩的路线图。
里程碑一:30 天 —— 可用的评测最小集(目标:一条命令跑出可比较的分数)
| 周 | 动作 | 出处与要点 |
|---|---|---|
| W1 | 结构化 Trace 前置 | 阿里/腾讯:Trace 是被测 Agent 的标准能力而非事后补救;JSONL 结构化、每步工具名/入参/返回/时间戳、跨版本格式稳定。同时做 Agent 类型分类定评测侧重("类型不分,评测结果基本不可用") |
| W1–W2 | 100 样本人工精读 | Airbnb:跑 ~100 个真实/合成样本,人工读输出与 trace,归类错误(参照旅行客服案例的 15/8/5/3 分类法),错误类型即测试清单 |
| W2–W3 | 建 50–200 条 golden set | 阿里:覆盖核心业务路径 + 高风险边界;四类来源(专家设计/结构字段先行 LLM 扩展/线上真实数据/badcase 回流);必须含坏样本(Airbnb);每条用例有明确期望行为 |
| W3–W4 | 程序化评分第一批 | 腾讯:确定性优先——schema 校验、空/异常长度、关键词、工具调用断言、执行指标(调用次数/token 阈值);阿里分层筛查的粗筛层 |
| W4 | 基线快照 + 首条 CI | 腾讯:每用例执行 1 次 → 人工确认 → 快照为基线;提示词变更触发 PR 合入前回归 |
30 天验收标准(四家口径合成):能跑全量 golden set 并输出分层报告;任何一次 prompt 变更能在合入前看到"改坏了哪些旧场景";团队不再用"感觉变好了"描述版本差异。
里程碑二:90 天 —— 体系闭环(目标:低分稳定转化为行动项)
| 模块 | 动作 | 出处与要点 |
|---|---|---|
| Judge 上线 | 3–5 个按维度拆分的 judge | Airbnb 少而精;每维一个、与生成模型不同源、few-shot、强制输出 schema |
| Judge 校准 | 50–100 条校准集(含坏样本)→ 一致率目标 ≥85% | 四家共识线;分析分歧改 rubric 重复(Airbnb 78→88 路径);分歧用 Cohen's kappa 度量;可用 GEPA 式反射优化只保留留出集一致率提升的版本(DoorDash) |
| 环境受控 | fixtures 冻结外部状态 + 会话模拟器 | DoorDash:同场景每次一致;成本参照 50 场景 × 8 trials = 400 对话,人工 6h+ → 模拟器 20min |
| 门禁与统计 | P0 门禁 + 置信区间 + 显著性 + 最小可感知变化 | 阿里:"门禁不只看差了多少,还要看差异是否超过统计噪声";一致性双指标(至少一次 vs 连续成功率) |
| 用例治理 | 能力集(20–50% 起步)+ 回归集(只增不减)+ 毕业机制 | 腾讯:稳定 100% 毕业进回归;Anthropic 口径确定性 100%/非确定性 ≥95% |
| RCA 闭环 | 现象 × 模块映射表 + 根因标签绑定 owner + 结构化行动项 | 阿里 RCA 五步;行动项带失败范围/证据/动作/owner/验收方式/优先级 |
| 在线联动 | 每日抽样去标识化流量(Airbnb 5%);离线线上同一 rubric + 同一 judge(DoorDash);三类信号联动,离线升线上降 → 回滚(阿里) | 详见第 E12 章 · 在线评估与数据飞轮 |
| 组织机制 | 指定人类终判者 + 每周 PM 评审 | Airbnb 原则四、五;专家时间 60%+ 花在校准与诊断(腾讯) |
90 天验收标准:阿里第 10 章口径——评测体系能否在跨团队协作中长期、稳定地产生可执行行动项。对照 DoorDash 的成绩单设定自己的预期:质量信号从人工 1 条/天到自动评分 2,000 个/天、全量回归从 6+ 小时到约 20 分钟,都是在一个季度量级的持续建设后取得的。
动手:路线图各环节对应 labs——指标与阈值
labs/eval_lab01_metric_system.py、数据集治理labs/eval_lab02_golden_dataset.py、程序化评分labs/eval_lab03_programmatic_scorers.py、judge 偏差labs/eval_lab04_judge_bias.py、judge 校准labs/eval_lab05_judge_calibration.py、轨迹评估labs/eval_lab06_trajectory_eval.py、模拟与 fixtureslabs/eval_lab07_simulator_fixtures.py、统计口径labs/eval_lab08_statistics_ci.py、RCAlabs/eval_lab09_rca_pipeline.py。均在cd evals-special/labs后python3 <文件名>直接运行,零第三方依赖。
三、面试高频考点
| # | 考点 | 分级 | 一句话考察意图 |
|---|---|---|---|
| 1 | Airbnb EDD 五原则 | ⭐⭐ | 是否理解评测是产品活动:尽早定门槛、从错误推导指标、judge 少而精、人类终判、产品参与 |
| 2 | "When in doubt, look at your data" 100 样本法 | ⭐ | 冷启动没有基础设施时,最便宜的评测动作是人工精读 |
| 3 | Judge 校准流程与 ~85% 一致率线 | ⭐⭐⭐ | 是否做过 judge 工程:gold 集含坏样本、分歧分析改 rubric、78%→88%、kappa/alpha |
| 4 | 一次只改一个变量的迭代纪律 | ⭐⭐ | 归因能力:prompt/模型/serving 依次变,否则无法解释涨跌 |
| 5 | DoorDash 五大挑战 → 五大设计要求 | ⭐⭐⭐ | 系统设计骨架:开放目标/执行不可见/无法彩排/规模判断/双环境各有对应机制 |
| 6 | Transcript Builder 证据切片 | ⭐⭐⭐ | judge 只看该标准依赖的证据,聚焦让判断更一致——深水区细节 |
| 7 | Fixtures 与环境受控 | ⭐⭐ | 环境不受控时分数测量的是噪声;50×8=400 对话 6h+→20min 的成本账 |
| 8 | 离线-线上同一 rubric + 同一 judge | ⭐⭐⭐ | 各自调 judge 分数会难调和地背离;离线结论必须能带到线上 |
| 9 | 阿里 RCA 五步与根因标签绑定 owner | ⭐⭐⭐ | 评测平台的治理价值:现象 × 模块映射、三层定责、标签可统计可指派 |
| 10 | 结构化行动项 vs "优化 Prompt" | ⭐⭐ | 建议必须带失败范围/证据/动作/owner/验收方式/优先级,否则只是报表 |
| 11 | 腾讯三类评分器优先级(确定性 > Rubric > 人工) | ⭐⭐ | 成本/稳定性/覆盖的取舍逻辑;专家时间 60%+ 在校准与诊断 |
| 12 | 扣分制 + 基线快照 + 容忍阈值分级 | ⭐⭐ | 模板落地能力:80 分线、快照即参照系、关键决策类 0% 容忍 |
| 13 | 能力测评 vs 回归测评与"毕业"机制 | ⭐⭐⭐ | 用例集治理:20–50% 爬山峰 vs 接近 100% 防漂移,只增不减 |
| 14 | 兼容性差距 vs 能力差距(模型迁移) | ⭐⭐⭐ | DoorDash 案例:低分反映的是为旧模型适配的系统;先修环境再谈换模型 |
四、经典面试题与参考答案
题 1(基础):什么是 Eval-Driven Development?请复述 Airbnb 的五原则。
参考答案: EDD 是 Airbnb 提出的 GenAI 开发方法论:不追求预先穷举所有失败,而是发现错误 → 捕获为测试 → 反复检查的持续循环,评测驱动开发全程。五原则:① 尽早设定目标与上线门槛(launch gates),即便它们在数据评审中才逐渐清晰;② 从观察到的错误中推导指标,与跨职能伙伴共同制定;③ 用少而精的 judge——3–5 个经校准的评估器好过一堆嘈杂的评估器;④ 指定一个最终人类决策者裁决"好 vs 坏"争议;⑤ 让产品伙伴持续参与对比与错误诊断。配套的核心习惯是 "When in doubt, look at your data":拿约 100 个样本人工精读输出与 trace,归类错误再建测试。EDD 还包含两条纪律:judge 未校准到 high 80s~90s 一致率不信任;迭代一次只改一个变量。
题 2(基础):项目早期不做评测计划会掉进哪些坑?Airbnb 怎么描述的?
参考答案: Airbnb 总结三大坑:① 虚假信心——用浅层 helpfulness 分看着不错,但分数没有预测真实产品质量;② 未被发现的回归——改 prompt 后旧场景质量悄悄变差,没有回归集就无人知晓;③ 浪费精力——指标与产品结果脱节,团队优化的方向不产生业务价值。对策都在 EDD 里:指标从观察到的真实错误推导(而非拍脑袋 helpfulness)、回归测试只增不减并每周 PM 评审新增、产品伙伴持续参与错误诊断保证指标对齐产品目标。旅行客服案例是完整示范:100 个 prompt 精读发现 15 个 groundedness 失败/8 个啰嗦/5 个不当拒答/3 个 JSON 失败——每条都是"浅层 helpfulness 分抓不到"的真实失败模式。
题 3(进阶):LLM judge 怎么校准?请结合 Airbnb 旅行客服案例讲一遍完整流程,并给出四家共识的量化标准。
参考答案: 流程五步(Airbnb):① 建 50–100 条 gold set,必须含坏样本;② 用 judge 跑该集合;③ 看一致率,目标 high 80s ~ 90s%,分歧用 Cohen's kappa 或 Krippendorff's alpha 度量;④ 逐条检查分歧 → 改 rubric/示例 → 重复;⑤ 失败模式变化时重新校准。案例:旅行客服助手,PM/SME 标注 60 条 gold(含失败样本),judge 初始一致率 78%——根因不是模型弱,而是 rubric 有缺陷:judge 把"正确的改述"误罚为 groundedness 失败;修订 rubric 与示例后达到 88%。四家量化口径高度收敛:Airbnb high 80s~90s、阿里 ~85% 后进日常自动化、腾讯 ≥85% 才可用(抽样 100–200 条对齐)、DoorDash 用 GEPA 迭代 judge prompt 且只保留留出集一致率提升的版本。关键警告:未校准 judge 制造的是误导性信心;且 judge 与生成模型同源会偏爱自己风格,需不同源或多模型对抗打分。
题 4(进阶):DoorDash 的 eval harness 面对哪五大挑战?各自的设计要求是什么?Transcript Builder 解决什么问题?
参考答案: 五大挑战 → 五大设计要求:① 开放式目标(一个目标多种可接受结果)→ 每个目标表达成 rubric,具体到每次能同样判、宽泛到容纳所有合法路径;② 执行不可见 → 把 trace 重建为"按标准定制的视图",judge 只看该标准需要的证据;③ 无法安全彩排 → 模拟用户按需生成会话 + fixtures 固定外围数据;④ 规模化判断 → 校准过的 LLM judge 顶替人类评审;⑤ 双环境背离 → 真实与模拟会话用同一 rubric + 同一 judge。Transcript Builder 是挑战②的实现:原始 trace 完整但难判(工具返回巨大、脚手架字段多、证据散落多 span),它用一组 Python 脚本重组分散 span、删无信号 token、裁超大载荷;最关键的是每条标准声明依赖的证据,builder 只给 judge 那一片——grounding 检查拿论断 + 工具输出,多样性检查拿推荐 + 原始请求。聚焦证据让判断更一致,这是"judge 为什么稳"的工程答案。
题 5(进阶):为什么评测需要 fixtures?DoorDash 的全量回归成本账怎么算?
参考答案:
fixtures 用录制的工具返回替代实时调用,冻结外部状态:目录会变、门店库存会变、测试账号会漂移,不受控的环境让同一用例每次测的其实是不同的题——DoorDash 的教训是"环境必须受控,否则分数测量的是噪声"。实例:复购场景 "Reorder my usuals",get_reorder_items 固定返回录制的 reorder_history_v1(Albertsons 订单:Meadow Gold 全脂牛奶 ×2、Oroweat 全麦面包、牛油果、Ben & Jerry's 冰淇淋),每次运行看到相同订单,预期结果可预测,judge 可对照同一商品集评分;fixtures 还能构造欺诈、大额退款等真实里难遇到的难例。成本账:全量 sweep = 50 场景 × 8 trials = 400 次对话,人工本地聊约 1 分钟/次即 6+ 小时,模拟器约 20 分钟——两个数量级的差距,这是"回归只增不减"在经济上成立的前提。成果:全国上线前质量分 +8 分、错误率近乎减半,质量信号从人工 1 条/天到自动评分 2,000 个/天。
题 6(进阶):换模型后离线评测分数大跌,你怎么判断是新模型不行还是系统不适配?请举 DoorDash 的实例。
参考答案:
先看 eval 给出的具体失败模式而不是总分。DoorDash 实例:agent 跑在 Claude Sonnet 4.6,迁到 Gemini 3.5 Flash 后离线 harness 分数大跌;coding agent 分析失败 trace 后判定不是能力差距,是兼容性差距——Flash 部分工具参数格式不同(工具签名要 plain string,Flash 传 {"dishes": [...]} JSON 对象),且系统 prompt 围绕 Sonnet 惯例隐式调优。"低分反映的是为 Sonnet 适配的系统,不是更弱的模型。"修复小而准:① 工具输入确定性防护——错误形状强制转换回预期形状而非丢弃调用;② prompt 显式写出 Sonnet 原本自行推断的内容(用数据中精确店名、不超出工具结果渲染)。"不是改模型,是修正模型周围的环境。"重跑 eval 质量持平(harness 噪声范围内)后迁移生产,延迟降 35%、质量无损。答题要点:有 eval 才有资格谈迁移——没有失败模式分解,"benchmark 说它行"不能支撑决策。
题 7(进阶):阿里怎么做 badcase 根因分析?请完整讲五步,并说明根因标签为什么要"绑定 owner"。
参考答案: 入口两条通路(离线评测集 + 线上会话/质检/工单/低满意度/回归失败/告警)汇入同一任务表,然后五步:① 证据汇总——按 sessionId/traceId 聚合用户输入、回复、模块 IO、prompt、工具调用、异常、耗时;② 范围收敛——查"问题现象 × 功能模块"映射表(答非所问 → 意图识别/Query 改写/知识筛选;过度承诺 → 风险拦截/回复生成),命中走确定性路径,未命中 LLM 兜底缩圈,映射表只缩小候选不直接定责;③ 分模块诊断——候选模块逐个读 IO,输出 PASS/SOFT_PASS/FAIL(实例:事实性错误 → FAQ 检索 PASS → 知识检索 PASS → 回复生成 FAIL);④ 责任判定——三层策略:严重模块直接定责 → 规则引擎匹配 → LLM 汇总责任传递;⑤ 结构化落盘——问题分类/现象/枚举/责任层/责任模块/置信度/修复建议写入任务记录。根因标签必须稳定、可统计、指向 owner(运营可配置/算法需优化/工程需修复/业务需定口径),否则标签只是分类学不是管理工具;聚簇后报告变成"退款已发货场景中 Agent 23 次跳过订单状态校验,集中在 v1.8 Prompt"——直接可派单。
题 8(进阶):腾讯的三类评分器怎么选?为什么人工评分器"不进门禁"?
参考答案: 选择优先级确定性 > Rubric > 人工。确定性评分器(脚本/断言/Lint/AST)毫秒级、免费、100% 稳定,覆盖已知硬指标,做硬门禁;Rubric 评分器(固定版本大模型 + Prompt + JSON Schema)秒级、有 API 费用、有抖动需降噪,覆盖未知软指标,做分级门禁(error 硬/warning 软);人工评分器分钟-小时级、成本最高、一致性取决于标注员,覆盖主观与边缘场景,不进门禁,做采样审查。人工不进门禁的原因:人力无法随版本频率扩展,且标注员间一致性本身是噪声源;但人工有六个不可替代的场景——校准 LLM 评委(最核心,抽样 100–200 条,一致率 ≥85% 才可用)、主观任务打分、诊断 0%/100% 通过率异常、建 Ground Truth(前 20–50 参考解)、Trace 采样审查、高风险 100% 复核。经验法则:专家时间 60%+ 花在"校准评委"与"诊断异常",坚决不做日常全量打分。
题 9(系统设计):你加入一个还没有评测体系的 Agent 团队,给出 30 天与 90 天两个里程碑的落地计划,每一步说明依据哪家的实践。
参考答案: 30 天(可用最小集):W1 结构化 Trace 前置——Trace 是被测 Agent 的标准能力而非事后补救(阿里/腾讯:JSONL、每步工具名/入参/返回/时间戳、跨版本格式稳定),并按 Agent 类型定评测侧重;W1–W2 跑 ~100 样本人工精读,归类错误(Airbnb 100 样本法,错误类型即测试清单);W2–W3 建 50–200 条 golden set,覆盖核心路径 + 高风险边界,四类来源:专家设计/结构字段先行的 LLM 扩展/线上真实数据/badcase 回流,必须含坏样本(阿里/Airbnb);W3–W4 程序化评分第一批(schema/空输出/关键词/工具调用断言/执行指标,腾讯确定性优先);W4 基线快照——每用例执行 1 次人工确认后快照为基线(腾讯),接 CI 做 PR 前回归。90 天(体系闭环):3–5 个按维度拆分的 judge 并校准到 ≥85% 一致率(四家共识线;Airbnb 78→88 路径,DoorDash GEPA);fixtures + 会话模拟器冻结环境(DoorDash:400 对话 6h+→20min);P0 门禁带统计口径——置信区间 + 显著性 + 最小可感知变化,一致性看连续成功率(阿里);能力集/回归集分治 + 毕业机制(腾讯);RCA 五步 + 根因标签绑定 owner + 结构化行动项(阿里);每日抽样去标识化流量、离线线上同一 rubric 同一 judge、离线升线上降即回滚(Airbnb/DoorDash/阿里);组织上指定人类终判者 + 每周 PM 评审(Airbnb)。验收用阿里第 10 章口径:低分能否稳定转成行动项。
题 10(系统设计):四家公司的评测体系有哪些共识?如果只能保留五条写进你团队的评测宪章,保留哪五条?
参考答案: 共识清单:难题同源(非确定性/黑盒/错误级联)、三层评分(确定性 → judge → 人工)、judge 校准线约 85%、golden set 从小起步(20–200 条,含坏样本)、过程评估不可省(防假阳性)、闭环是终点(失败 → 用例/修复/资产)。我的五条宪章:① 确定性优先——能用代码判断的绝不用模型,三层评分按成本/稳定性/覆盖路由(腾讯优先级 + 阿里分层筛查);② judge 未校准不进门禁——一致率 ≥85% 是可用线,gold 集必须含坏样本,升级必重校准(四家共识 + Airbnb 78→88);③ 评测环境受控——fixtures 冻结外部状态,同用例同条件,否则分数测量的是噪声(DoorDash);④ 离线-线上一把尺子——同一 rubric + 同一校准 judge,离线升线上降触发回滚(DoorDash 原则三 + 阿里三类信号);⑤ 低分必须变成行动项——带失败范围/证据/owner/验收方式,评测资产只增不减(阿里第 10 章 + 腾讯回归集毕业机制)。五条背后的共同逻辑:评测不是出分工具,而是把不确定性收敛为可发布质量的治理系统。
五、易错点 · 反直觉点
- 误区:judge 一致率低就换更强的模型。 真相:Airbnb 案例中 78% 的根因是 rubric 缺陷——judge 误罚了正确的改述,修 rubric 与示例后到 88%,不是换模型。记忆锚点:校准从看分歧样本开始,不是从换模型开始。
- 误区:换模型后离线分数大跌 = 新模型不行。 真相:DoorDash 迁移 Gemini 3.5 Flash 时分数大跌,实为兼容性差距(工具参数形状、围绕 Sonnet 惯例调优的 prompt),修正环境后质量持平、延迟降 35%。记忆锚点:低分测的是"为旧模型适配的系统",先修环境再评模型。
- 误区:线上随机抽样就能当评测集。 真相:线上样本有幸存者偏差——正常流程占多数、易错边缘占比低,随机采样报告"看起来不错"但关键问题漏掉(阿里)。记忆锚点:随机抽样的评测报告是虚假信心。
- 误区:pass@1 高就能上线。 真相:生产级场景(客服/支付/退款/合规)看连续成功率(pass^k),用户不会接受"多试几次总有一次成功"(阿里一致性双指标;腾讯关键决策类 0% 容忍)。记忆锚点:能力上限看至少一次,生产可靠看连续成功。
- 误区:逐条看失败、修一条是一条。 真相:逐条修会"轶事驱动"——最近、最惊奇的失败主导修复优先级;rubric 标准天然是问题簇,先聚类再按影响排序(DoorDash)。记忆锚点:先修簇,再修例。
- 误区:离线一套 judge,线上另一套 judge,各自调到最好。 真相:DoorDash 教训三——各自调 judge,两边分数会以难调和的方式背离;离线结论只有能带到线上才有意义。记忆锚点:同一 rubric、同一 judge,一把尺子量两边。
- 误区:用例只测正向触发就够了。 真相:只测正例,Agent 可能学会什么都触发——过度触发比不触发更难发现(腾讯);负向触发用例必不可少。记忆锚点:负向用例测的是触发的边界。
- 误区:通过率 0% 或 100% 是模型能力的两极。 真相:0%/100% 通常是任务定义或评分器坏了,不是模型弱/强(腾讯人工评分六场景之三;0% pass^N 先查任务定义与基线)。记忆锚点:两个极端先怀疑尺子。
- 误区:回归集和能力集一样维护,都追求覆盖新场景。 真相:两者目标相反——能力集起步 20–50%,爬山峰、主动拓展;回归集接近 100%、防漂移、只增不减、CI 每次运行;稳定 100% 的用例才"毕业"进回归集(腾讯;Anthropic 口径确定性 100%/非确定性 ≥95%)。记忆锚点:能力集爬山峰,回归集守底线。
- 误区:评测平台的价值是把分数算准。 真相:阿里第 10 章——成败取决于能否在跨团队协作中长期、稳定地产生可执行行动项;低分不能稳定转成行动项,再精细的分数也只是报表。记忆锚点:评测的终点是行动项,不是报告。
六、推荐资源
一手工程博客(本章全部数字与机制的原始出处,强烈建议精读原文):
- Airbnb《Eval-driven development: Lessons from evaluating GenAI at scale》(Rohit Girme, Dan Miller, Mia Zhao, Lifan Yang, Clint Kelly)——EDD 五原则、judge 校准五步、旅行客服完整案例、迭代纪律。方法论层必读。
- DoorDash《Building Ask DoorDash (Part 3): Evaluation》(Steven Xu, Fabio Flores, Twisha Jain, 2026-06-30)——五大挑战表、Transcript Builder、fixtures、GEPA 校准、reasoning leakage 与模型迁移两个实战案例。工程层必读,细节密度最高。
- 阿里技术《Agent 评测:方法论与体系设计》(2026 年第 28 篇)——P0/P1/P2 指标、评分路由、RCA 五步、结构化行动项、反馈生产与质量资产库,共十章。治理层必读。
- 腾讯技术工程《AI Agent & Skill 测评方案及落地实践》(martinskxu,TEG 云架构平台部网关测试团队)——三类评分器、五维度、四场景用例、扣分制、基线快照、容忍阈值分级、TPerf 实战。模板层必读,可直接抄。
特辑内交叉引用:
- 方法论展开:第 E1 章 · 为什么评估是 GenAI 工程的生命线(三大坑与四个失效场景)、第 E10 章 · 评测驱动开发(EDD)(Airbnb 案例演练与 DoorDash 反馈闭环)
- 指标与数据:第 E2 章 · 评估指标体系(P0/P1/P2 与五维度)、第 E3 章 · 黄金数据集与用例设计(四来源与四场景)、第 E9 章 · 评估的统计学基础(门禁统计口径)
- 评分三层:第 E4 章 · 程序化评分、第 E5 章 · LLM-as-Judge 深入(校准与 GEPA)、第 E6 章 · 人工评估与评分路由
- 过程与仿真:第 E7 章 · 轨迹与 Agent 级评估(三层模型与 Transcript Builder)、第 E8 章 · 对话 Agent 与仿真评测(模拟器与 fixtures)
- 闭环与在线:第 E11 章 · Badcase 根因分析与优化闭环(RCA 五步全展开)、第 E12 章 · 在线评估与数据飞轮(三类信号与发布联动)
- 主手册浓缩版:主手册第 8 章 · Agent 评估与可观测性(本章是其在工业实践维度的深挖)
动手 labs(全部纯标准库、零依赖、确定性可复现):
| Lab | 对应本章内容 | 运行命令 |
|---|---|---|
labs/eval_lab01_metric_system.py |
pass@k/pass^k 与容忍阈值分级(腾讯) | cd evals-special/labs && python3 eval_lab01_metric_system.py |
labs/eval_lab02_golden_dataset.py |
四来源构造与毕业机制(阿里/腾讯) | cd evals-special/labs && python3 eval_lab02_golden_dataset.py |
labs/eval_lab03_programmatic_scorers.py |
程序化评分与分层筛查(腾讯/阿里) | cd evals-special/labs && python3 eval_lab03_programmatic_scorers.py |
labs/eval_lab04_judge_bias.py |
Judge 偏差量化与缓解 | cd evals-special/labs && python3 eval_lab04_judge_bias.py |
labs/eval_lab05_judge_calibration.py |
复现 Airbnb 78%→88% 校准循环 | cd evals-special/labs && python3 eval_lab05_judge_calibration.py |
labs/eval_lab06_trajectory_eval.py |
LCS 轨迹对齐与假阳性捕获(腾讯 TPerf) | cd evals-special/labs && python3 eval_lab06_trajectory_eval.py |
labs/eval_lab07_simulator_fixtures.py |
fixtures 对照组:环境漂移 → 方差爆炸(DoorDash) | cd evals-special/labs && python3 eval_lab07_simulator_fixtures.py |
labs/eval_lab08_statistics_ci.py |
门禁统计口径:CI/样本量/显著性(阿里) | cd evals-special/labs && python3 eval_lab08_statistics_ci.py |
labs/eval_lab09_rca_pipeline.py |
RCA 五步全流程与问题簇聚类(阿里) | cd evals-special/labs && python3 eval_lab09_rca_pipeline.py |