Lecture 13 · LLM-as-Judge 与评估基础设施 · LLM-as-Judge & Evaluation Infrastructure

Engineering AI Agents · Lecture 13。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应 Maps to:Stanford CS329Z Engineering AI Agents(Fall 2026),Lecture 13 · Mon Nov 9 · LLM-as-Judge & Evaluation Infrastructure。阅读材料:Grace et al., Demystifying Evals for AI Agents(Anthropic Engineering,2026-01-09);Zheng et al., Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena(NeurIPS 2023 Datasets & Benchmarks);Ryan et al., AutoMetrics: Approximate Human Judgements with Automatically Generated Evaluators(ICLR 2026)/ Zhu et al., AutoLibra: Agent Metric Induction from Open-Ended Human Feedback(ICLR 2026)。 依据说明:写作时(2026-10-16)这一讲的 slides 还没有公布。本讲依据课表上的主题描述来写:三类判分器(代码、模型、人)、评审提示词的设计、已知偏差(位置、长度、自我偏好)、二选一 vs 逐条打分、非确定性的指标(pass@k vs pass^k)、harness 的设计、Anthropic 的 8 步路线图、AutoMetrics / AutoLibra。引用的论文和博客数字都核对过原文。全部实验是本讲义自己设计的,不代表课堂上讲了什么。 配套代码 Code:code/lecture13/(只用 Python 标准库;6 个脚本 + 2 个模块 + 1 个可选脚本;不需要 API key;每个脚本几秒以内) 预计阅读时间:3 小时(含运行代码)


0. 本讲导航 · How to read this lecture

0.1 学习目标 Learning goals

学完这一讲你应该能够:

  1. 说出代码、LLM 评审、人三类判分器各自擅长什么、会在哪里出错、各花多少钱,并知道怎样把它们组合起来。
  2. 设计一个 LLM 评审的提示词:二选一还是逐条打分、给不给参考答案、一个总分还是逐维度、给不给”不知道”的出口。
  3. 用构造的对照实验测出评审的位置偏差、长度偏差、自我偏好和”算不清”,并知道每一种怎样缓解。
  4. 用少量人工标签校正评审:区分”一致率高”和”估计无偏”,会用 PPI / PPI++ 给出可信的区间。
  5. 搭一个评估 harness:配置指纹、每次试验自己的种子、记录落盘、续跑与缓存、判分与运行分开、正确处理基础设施错误。
  6. 说出 AutoLibra 和 AutoMetrics 怎样从人的反馈里自动得到指标,以及它们各自的风险。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲只给直觉,后面再展开 Previewed only
第 12 讲:4 元组、任务有效性与结果有效性、pass^k、置信区间与配对检验安全评估、红队、注入的评估(第 14 讲)
第 11 讲 §4–§6:κ、Dawid–Skene、EvalGen(谁来验证验证者)SWE-bench 式的代码评估(第 15 讲)
第 10 讲:人机分工、数据飞轮;前置讲 P3:线程池、缓存键、重试生产环境的监控与可观测性(第 17 讲)

0.3 本讲地图 Map

§0.6 开场:62% 是谁判的?
§1  三类判分器:代码、模型、人                                           ← 代码 01
§2  评审的提示词怎样写                                                 ← 代码 02
§3  四种已知偏差:位置、长度、自我偏好、算不清                            ← 代码 03
§4  用少量人工标签校准评审:一致率、Rogan–Gladen、PPI、PPI++              ← 代码 04
§5  评估 harness:并发、可复现、续跑、重新判分、基础设施错误                ← 代码 05
§6  指标从哪里来:AutoLibra 与 AutoMetrics                               ← 代码 06
§7  Anthropic 的路线图:从 0 到一套能用的评估
§8  用真实模型试一试                                                    ← 代码 07(可选)
§9 小结   §10 常见误区   §11 练习   §12 延伸阅读   §13 下一讲预告

0.4 术语 Terms

术语本讲里的意思
判分器(grader)给智能体的某方面表现打分的逻辑。一个任务可以有好几个判分器,每个可以有好几条检查(Anthropic 的定义)
试验(trial)对一个任务的一次尝试。输出有随机性,所以要跑好几次
记录(transcript / trace / trajectory)一次试验的完整记录:输出、工具调用、推理、中间结果
结果(outcome)试验结束时环境的最终状态,例如数据库里有没有那条预约,而不是智能体说它做了什么
评估 harness端到端跑评估的基础设施:给指令和工具、并发跑、记录、判分、汇总
智能体 harness(脚手架)让模型能当智能体的那一层。评估”一个智能体”,评估的是模型和脚手架的组合
LLM-as-judge(LLM 评审)用一个 LLM 去判另一个系统的输出
二选一(pairwise)/ 逐条打分(pointwise / single answer grading)问”A 和 B 哪个好” / 给一条回答打一个绝对分
参考答案(reference-guided grading)把标准答案放进评审的提示词里
PPIprediction-powered inference:用评审判全部 + 少量人工标签校正偏差,得到无偏的估计和区间

0.5 本讲的代码

代码搭了一个小世界:Orrin Grid(第 10、12 讲的能源公司)的客服助手回答两类问题——“我的 solar 套餐停电 12 小时,能补偿多少?“(按政策:时薪 × 小时,每次最多 30 美元)和政策题(“补偿能折现吗?”)。一条成功的回答要满足两点:关键事实对,并且告诉用户下一步(“补偿会出现在下一张账单上”)。

四个助手系统各有风格:

系统家族特点
AtlasA和评审同一个家族(开头 “Certainly!”,结尾 “Hope this helps!”)
BirchB简洁,不太客套
CedarC啰嗦、热情,在回答后面加几句换说法的重复(MT-Bench 的”重复列表”),错得也最多
DuneB最准,但用词多变:有时把金额写成英文单词,有时把”下一张账单”说成”upcoming statement”

判分器有三类:代码判分器(正则抽数字 + 关键词)、人(众包 / 专家,按回答的真实属性判,带个人噪声)、模拟的 LLM 评审。

提醒:评审会真的”读”回答文字,包括解析英文单词写的数字、认”下一步”的几种说法、认风格标记、数重复句数。但它会不会去验算、被长度和自家风格影响多少、拿不准时偏向哪个位置,都是参数,按 MT-Bench 报告的现象设定。所以本讲测出的偏差大小由参数决定,不能拿来推断真实模型的偏差大小;要学的是测量、缓解、校正的方法。每个偏差旁边都附了论文里真实模型的数字作对照。

0.6 开场:62% 是谁判的?

第 12 讲说过,“我们的智能体得了 62%“背后有十几个决定。其中最容易被忽略的一个是:这 62% 是谁判的?

如果是一段正则,它可能把 “twenty-four dollars” 判错,把 “24 dollars” 判对。如果是另一个 LLM,它可能偏爱更长的回答、偏爱排在前面的回答、偏爱和自己风格相像的回答,还可能根本没去验算那个数字。如果是人,两个人之间也只有八成多一致,而且一条要 2 美元、3 分钟。

这一讲把”判分”本身当成一个需要设计、测量和校准的系统,再把整套评估当成一个需要工程化的系统(harness)。


1. 三类判分器:代码、模型、人 · Three kinds of graders

1.1 Anthropic 的分类

Demystifying Evals for AI Agents 把判分器分成三类:

类型例子强项弱点
代码字符串匹配、跑测试、静态分析、检查最终状态、检查工具调用快、便宜、客观、可复现、好调试对”换一种正确的说法”很脆;判不了主观的东西
模型评分细则(rubric)、自然语言断言、二选一、带参考答案、多个评审投票灵活、可扩展、读得懂细微差别、能判开放式输出非确定、更贵、需要和人校准
人领域专家审阅、众包、抽查、A/B 测试质量的金标准、能校准模型评审贵、慢、规模化需要专家

文章的建议顺序是:能用代码判的用代码,必须用模型的地方用模型,人用来校准和抽查。

1.2 实验:谁在哪里错(代码 01)

600 条回答(150 道题 × 4 个系统),和”真实”(按回答的真实属性判)比:

判分器和真实一致错放(失败判成功)冤枉(成功判失败)每 1,000 条
代码 v1(只认数字和 “next bill”)82.0%0.0%30.9%0 美元
LLM 评审(无参考答案)79.3%25.2%17.4%3 美元
LLM 评审(带参考答案)97.5%0.8%3.7%3 美元
众包标注者(1 人)91.7%8.4%8.3%150 美元
领域专家(1 人)97.3%1.2%3.7%2,000 美元

两类自动判分器错的方向相反:

  • 代码 v1 从不错放,但冤枉了三成的成功回答:75 条是”下一步换了说法”,33 条是”金额用英文单词写”。它只认得写判分器的人想到的那种说法。Anthropic 举过一个真实的例子:标准答案是 96.124991…,判分器把 “96.12” 判错。
  • 无参考的 LLM 评审读得懂换说法,却放过了四分之一的失败回答:主要是它没去验算的错误金额(用错套餐的时薪 34 条、差一档 12 条、忘了上限 5 条),以及它其实不知道答案的政策题(12 条)。

给评审参考答案,错放从 25.2% 降到 0.8%,一致率 97.5%,和专家差不多,成本却差了几百倍。§2 会细讲”给参考答案”为什么这么有效。

1.3 判分器的错误会改变排名

系统真实代码 v1评审·无参考评审·参考专家
Atlas60.0%46.0%56.7%58.7%57.3%
Birch54.0%41.3%50.0%52.7%54.0%
Cedar43.3%36.0%60.7%40.0%42.0%
Dune76.0%38.0%67.3%74.7%73.3%
Kendall τ(和真实)1.000.330.331.001.00

真实最好的 Dune 在代码 v1 下排第 3(它用词最多变),真实最差的 Cedar 在无参考评审下排第 2(它最啰嗦,错误金额最多)。判分器的错误不是均匀的噪声,它和被评系统的风格相关,所以它不只是让分数”低一点”或”高一点”,而是会改变排名。比较两个系统时,要问一句:判分器对它们俩犯的错一样吗?

1.4 分歧是找判分器 bug 最便宜的地方

两个判分器结论不同的那些回答最值得读。代码 01 演示 4 把”代码说失败、评审说成功”的 156 条按原因分了类:

分歧的类型条数
代码判分器的 bug:下一步换了说法65
代码判分器的 bug:金额写成了单词28
评审错了:回答其实是错的63

读完这些分歧再修代码判分器(认英文单词的数字、认两种说法),一致率从 82.0% 升到 100.0%。100% 是因为这个小世界里只有两种说法;在真实世界里,修好的只是读到过的说法,下一个系统换一种新说法,它又会冤枉。

这就是 Anthropic 路线图的第 6 步”读记录”(check the transcripts)。文章里有一个真实的例子:Claude Opus 4.5 在 CORE-Bench 上一开始只得了 42%,修掉判分的 bug(包括上面那个 96.12 的例子)、改掉含糊的任务说明和无法精确复现的随机任务、换了一个限制更少的脚手架之后,分数到了 95%。一个分数低,先怀疑判分器和任务,再怀疑智能体。

1.5 组合:确定性优先,模型补位,人来校准

一个实用的组合是:

  1. 能确定判的用代码:最终状态(数据库里有没有那条记录)、数字(用能认多种写法的解析器)、格式、测试。
  2. 只有”按意思判”的部分交给模型:说没说下一步、语气、是否回答了用户的问题。每个维度一个评审(§2.3),能给参考答案就给。
  3. 人做两件事:一小批人工标签用来校准评审(§4);定期抽读记录,找判分器和任务的 bug(§1.4)。

Anthropic 还区分了两种评估:能力评估(capability eval)问”这个智能体能把什么做好”,起点应该是一个较低的通过率,给团队”一座可以爬的山”;回归评估(regression eval)问”它还能做好以前能做的事吗”,通过率应该接近 100%。能力评估上稳定通过的任务可以”毕业”进回归评估。


2. 评审的提示词怎样写 · Designing the judge

2.1 三种形式

MT-Bench 论文比较了三种用 LLM 当评审的方式:

  • 二选一(pairwise comparison):给评审一个问题和两条回答,问哪条更好或平局。
  • 逐条打分(single answer grading):给评审一条回答,让它打一个分(MT-Bench 用 1–10 分)。
  • 带参考答案(reference-guided grading):把参考答案放进提示词,适合数学这类有标准答案的问题。

二者的权衡很直观:二选一更像人做比较的方式,“哪个更好”比”值几分”容易回答;但 n 个系统两两比较要 n² 次,而且只能给出相对的结论。逐条打分可扩展、可以跨时间比较(今天的 7 分和下个月的 7 分是同一把尺子),但绝对分容易漂移、容易平局。

2.2 一致率:评审 vs 人,人 vs 人(代码 02 演示 1)

MT-Bench 用两种一致率:S1 包含平局(随机猜是 33%),S2 去掉任何一方投了平局的票(随机猜是 50%)。论文报告,在 MT-Bench 上 GPT-4 和人的一致率是 S1 66%、S2 85%;人和人之间是 S1 63%、S2 81%。也就是说,评审和人的一致程度不低于人和人。这是”评审可用”的必要条件,但不是充分条件(§4 会讲为什么)。

在 900 对回答上(同一道题、不同系统):

判法和专家 A:S1和专家 A:S2和真实:S2平局比例
逐条打分(1–10)再比42%54%54%15%
二选一46%57%58%11%
二选一 + 参考答案55%72%72%14%
二选一 + 参考答案 + 交换顺序51%80%82%40%
专家 B(人)69%86%93%13%

这个小世界里的模拟评审比 MT-Bench 里的 GPT-4 差得多(它不常验算,又偏爱啰嗦),所以一致率低;方向和论文一致:二选一比逐条打分好,参考答案大幅提高一致率。逐条打分有 15% 的平局,因为两条回答常常被打成同一个整数分。最后一行提醒我们,人和人之间本身就有分歧,“和某一位人”的一致率有天花板。

交换顺序问两次、两次一致才算数,把平局从 14% 推到 40%,但剩下的票和真实一致 82%。它把”拿不准”的票变成平局,而不是交给位置去决定(§3.1)。

2.3 一个总分 vs 逐维度(代码 02 演示 2)

让评审给一个”总体印象分”、过阈值算成功,还是每个维度(事实对不对、说没说下一步)分开判、都过才算成功?

判法和真实一致错放错放·不啰嗦错放·啰嗦 ≥2 句错放·事实对但没说下一步
总体印象分 ≥ 阈值69.7%50.4%31%75%42%
逐维度(对 且 全)77.0%28.4%23%30%0%
逐维度 + 参考答案96.8%0.8%2%0%0%

总分让一个维度的长处掩盖另一个维度的缺陷(光环效应)。一条”事实对但没说下一步”的回答,因为又礼貌又”详细”,总分过了线。错放还随啰嗦程度上升。Anthropic 的建议是:用结构化的评分细则,每个维度用一个独立的评审去判。

2.4 给评审一个出口(代码 02 演示 3)

政策题的答案不在评审的提示词里,它其实不知道对错:

设计给出结论的比例给出的结论里对的错放交给人
必须给结论100%67.6%14 条0
允许回答 “Unknown”15%68.8%1 条92 条
给参考答案100%97.2%1 条0

Anthropic 的建议是”给 LLM 一个出口”,例如允许它在信息不足时回答 “Unknown”,减少瞎编的结论。实验里它确实把错放从 14 条降到 1 条,代价是 92 条交给人。但它给出的那 15% 结论仍然是猜的(68.8%)。根本的解决办法是第三行:评审只能判它掌握了信息的东西,把政策文本或参考答案给它。

2.5 评审也是非确定的(代码 02 演示 4)

同一条回答判 5 次:

判法5 次里结论变过判 1 次3 次取多数5 次取多数错放:1 次 → 5 次取多数
逐维度、无参考46%81.0%85.7%88.0%16% → 20%
逐维度 + 参考答案12%98.0%100.0%100.0%0% → 0%
总体印象分58%73.7%77.3%78.0%41% → 42%

逐条打 1–10 分时,100 条回答里有 53 条,5 次的最高分和最低分差 4 分以上。

取多数能消掉随机的错误(偶尔不信一条对的回答),消不掉系统性的错误:无参考的评审多数时候根本不验算,错误的金额每次都被相信,于是错放反而从 16% 升到 20%(多数票把”偶尔抓住”也投掉了)。先把提示词设计对,再考虑多判几次。

2.6 一个评审提示词的样子

把上面几条合起来,一个判”说没说下一步”的评审提示词大致是这样(英文,和真实系统一致):

You are grading ONE dimension of a customer-service reply: whether it tells the
customer what happens next (e.g., when the credit will appear).

Customer question: {question}
Reply: {reply}

Rules:
- Judge only this dimension. Ignore correctness, tone and length.
- Do not reward repetition or extra length.
- If the reply does not contain enough information to decide, answer "Unknown".

First write 1-2 sentences of reasoning, then a final line exactly:
Verdict: PASS | FAIL | Unknown

“金额对不对”这个维度单独一个评审,并且把政策和参考答案放进去,或者干脆交给代码判分器。


3. 四种已知偏差 · Known biases

MT-Bench 论文列出了 LLM 评审的几种偏差。它们有一个共同的测量方法:构造一对”质量相同、只差一个无关因素”的输入,看评审的结论变不变。这和软件测试里的”蜕变测试”(metamorphic testing)是一个思路。

3.1 位置偏差:交换顺序(代码 03 演示 1)

同一对回答,A 在前问一次,B 在前再问一次。论文的表 2(GPT-4,默认提示词):一致 65.0%、偏向第一个 30.0%、偏向第二个 5.0%;Claude-v1 一致只有 23.8%、偏向第一个 75.0%。few-shot(给几个判好的例子)把 GPT-4 的一致率提到 77.5%。

评审一致偏向第一个偏向第二个其他(一次平局)
默认56.2%19.2%5.2%19.3%
+ 参考答案63.1%14.2%3.0%19.7%
+ few-shot57.8%11.6%9.1%21.6%
+ 参考答案 + few-shot71.0%6.7%2.6%19.8%

位置偏差只在评审”拿不准”的时候起作用。所以给参考答案也能减少位置偏差:能分清的对子多了,拿不准的少了。缓解:交换顺序问两次,不一致判平局(§2.2 最后一行);或者两种顺序的结论取平均。

3.2 长度偏差:“重复列表攻击”(代码 03 演示 2)

论文的构造:拿一条回答,在后面把已有的内容换个说法重复几条,不增加任何新信息,看评审会不会更喜欢加长的版本。23 条回答上,Claude-v1 和 GPT-3.5 的攻击成功率都是 91.3%,GPT-4 是 8.7%。

评审选了加长的(攻击成功)选了原来的平局
默认90%3%7%
提示词写明”不要奖励重复”43%30%27%
默认 + 交换顺序、两次一致才算73%0%27%
专家(人)5%80%15%

交换顺序缓解不了长度偏差(还有 73%)。它是系统性的偏好,不是拿不准。

长度控制:AlpacaEval 的做法(Dubois et al., 2024)是在统计上把长度的影响扣掉。关键是怎样测出”每多一句,分数涨多少”:用上面那种构造的对照(同一条回答加 3 句重复)去测,这里测出来每多一句重复,1–10 分平均涨 0.82 分。不能直接拿所有回答的分数对长度做回归,因为更长的回答可能本来就更全,回归会把这部分也扣掉。扣掉之后:

系统评审的平均分扣掉长度之后人的平均分(同一刻度)平均重复句数
Atlas8.007.356.130.79
Birch6.126.006.250.15
Cedar7.916.294.781.99
Dune6.476.206.680.33

最啰嗦的 Cedar 从 7.91 降到 6.29,但离人给的 4.78 还远:它的错误金额多,而评审没验算(§3.4)。长度控制只修长度这一种偏差。

3.3 自我偏好:对照组要选对(代码 03 演示 3)

论文报告,GPT-4 给自己的胜率比人给的高约 10%,Claude-v1 高约 25%,GPT-3.5 没有偏爱自己。作者也说明数据有限、差别小,不能确定是否存在自我偏好。

三个家族的评审给四个系统做循环赛(带参考答案、交换顺序,尽量排除其他偏差):

评审Atlas(A)Birch(B)Cedar(C)Dune(B)
专家(人)53.7%53.6%29.3%63.4%
家族 A 的评审63.1%37.7%50.2%49.0%
家族 B 的评审50.0%43.3%49.9%56.8%
家族 C 的评审50.6%40.0%61.2%48.2%
自家评审 − 其他家族评审+12.8+4.5+11.2+8.2

这里有一个容易犯的错误:拿”评审给的胜率 − 人给的胜率”当自我偏好。那样的话,三个评审都把啰嗦的 Cedar 从 29% 抬到 50%–61%,这是长度偏差,不是自我偏好;而家族 B 的评审给 Birch 的胜率反而比人给的低。正确的对照是同一个系统在自家评审和别家评审那里的胜率差:长度、位置这些偏差对所有评审一样,差值里只剩”认得出自家”这一项。

缓解:评审和被评系统用不同家族的模型;或者几个家族的评审一起投票。一个特别要警惕的场景是:用同一个模型既当被优化的系统、又当判分的评审,比如用 GEPA 这类优化器(第 9 讲)、拿同一家族的 LLM 评审的分数当反馈。优化会顺着评审的偏好走。

3.4 算不清:评审和模型犯同一种错(代码 03 演示 4)

论文用 10 道数学题、20 次判分测试评审能不能看出错误的答案:默认提示词失败 70%,思维链(先自己解题)30%,带参考答案 15%。

评审没抓住其中·忘了上限(13 条)其中·用错时薪(72 条)其中·差一档(26 条)把触到上限的正确回答判错
默认61%77%61%54%19%
思维链23%31%25%15%13%
参考答案6%15%4%8%3%

最后一列值得多看一眼:评审验算时自己也会忘了 30 美元的上限,于是把正确的 “30 dollars” 判成错的,把忘了上限的 “48 dollars” 判成对的。评审和被评的模型错误相关时,评审恰好在最需要它的地方失灵。 思维链能减轻但不能消除这种相关;参考答案切断了它。(“忘了上限”只有 13 条,数字是粗略的。)

3.5 小结:偏差的测量与缓解

偏差怎样测怎样缓解
位置交换顺序问两次两次一致才算;few-shot;参考答案(减少拿不准)
长度构造”同一条 + 重复”的对照评分细则写明不奖励重复;用构造对照测斜率做长度控制
自我偏好同一个系统在自家 vs 别家评审那里的胜率差评审用不同家族的模型;多家族投票
算不清构造已知错误的回答,看抓住几成参考答案;思维链;能用代码验算的交给代码

4. 用少量人工标签校准评审 · Calibrating the judge with humans

4.1 一致率要按片看(代码 04 演示 1)

每个系统抽 50 条请专家标注,和评审比:

系统一致率TPRTNRCohen’s κ评审说通过专家说通过
Atlas74%83%(23 条)67%(27 条)0.4856%46%
Birch78%74%(27 条)83%(23 条)0.5648%54%
Cedar66%88%(17 条)55%(33 条)0.3660%34%
Dune78%86%(43 条)29%(7 条)0.1484%86%
合计74%0.4762%55%

三件事:

  • 评审对不同系统犯的错不一样:最啰嗦的 Cedar 的失败回答,评审只抓住 55%。合在一起的一个一致率(74%)会掩盖这一点。
  • 看样本量:Dune 只有 7 条失败的样本,它的 TNR 本身就很不准。
  • κ 的”悖论”:Dune 的一致率 78%,κ 却只有 0.14。κ 扣掉了”碰巧一致”的部分,而当绝大多数回答都通过(86%)时,两边都说”通过”本来就很容易碰巧一致。高一致率 + 低 κ,往往说明正负样本极不平衡(第 11 讲 §4)。

4.2 从一致率到无偏估计

我们真正想要的通常不是”评审和人有多一致”,而是每个系统的真实通过率,并且附一个可信的区间。四种做法:

  1. 只用评审:评审判全部 N 条,取平均。区间窄,但有偏。

  2. 只用人:n 条人工标签取平均。无偏,但 n 小、区间宽。

  3. Rogan–Gladen 修正(流行病学里用来修正筛查测试的经典公式,1978):用人工标签估计评审的 TPR 和 TNR,再把评审的通过率 p̂ 换算成真实通过率:

    θ̂ = (p̂ + TNR − 1) / (TPR + TNR − 1)

    它假设评审对所有系统犯同样的错。

  4. PPI(prediction-powered inference,Angelopoulos et al., 2023):评审在全部 N 条上的平均,加上 n 条有标签样本上”人 − 评审”的平均:

    θ̂ = mean_N(评审) + mean_n(人 − 评审)

    第二项估计的正是评审的偏差,所以只要 n 条是随机抽的,θ̂ 就无偏。方差 = Var(评审)/N + Var(人 − 评审)/n:评审和人越一致,第二项越小。PPI++(Angelopoulos, Duchi & Zrnic, 2023)再加一个系数 λ:

    θ̂_λ = mean_n(人) + λ · [mean_N(评审) − mean_n(评审)]

    λ = 1 就是 PPI,λ = 0 就是只用人;λ 取使方差最小的值,评审是噪声时 λ ≈ 0,所以(大样本下)不会比只用人差。

把 PPI 用到模型评估上的工作,见 Boyeau et al., AutoEval Done Right(2024)。

4.3 哪个估计可信(代码 04 演示 2–3)

每个系统 250 条回答、40 条人工标签,重复 300 次随机抽样:

估计方法偏差·Atlas偏差·Birch偏差·Cedar偏差·Dune平均半宽95% 区间覆盖率完整排名正确
只用评审+7.6−5.2+12.0−7.6±6.025%0%
只用人工标签+0.0−0.7+0.4−1.5±14.996%53%
Rogan–Gladen(pooled)+5.7−11.1+6.5−2.1±11.475%0%
PPI+0.2−0.7+0.4−0.9±15.598%55%
PPI++(λ 平均 0.46)+0.3−0.5+0.6−1.0±12.796%65%

(偏差和半宽的单位都是百分点。真实通过率:Atlas 53%、Birch 62%、Cedar 45%、Dune 77%。)

  • 只用评审:区间很窄,却只有 25% 的时候盖住真值。窄而错的区间比宽的区间更危险,因为它让人放心。(它的第一名倒是每次都对:差距大的地方,偏差不要紧。)
  • Rogan–Gladen:因为评审对不同系统犯的错不同(§4.1),用合在一起的 TPR / TNR 修正之后,Birch 反而偏得更多(−11.1)。要用它,必须按系统分别估计 TPR / TNR,而每个系统的失败样本往往很少。
  • PPI:每个系统单独校正,所以无偏,覆盖率 98%。但这个评审和人只有七成多一致,“人 − 评审”的方差没比”人”本身小多少,区间(±15.5)反而比只用人还宽。这一点论文里也说得很清楚:PPI 的收益取决于评审和人有多相关。
  • PPI++ 自动把 λ 调到 0.46(少信一点评审),区间 ±12.7,覆盖率 96%,完整排名正确的比例最高。

4.4 人工标签值多少,取决于评审有多好(代码 04 演示 4)

每个系统的标签数只用人PPI++·无参考评审(相当于几倍标签)PPI++·带参考评审
10±29.5±23.2(1.6 倍)±11.6(6.5 倍)
20±21.0±17.3(1.5 倍)±9.4(5.0 倍)
40±14.9±12.6(1.4 倍)±7.9(3.5 倍)
80±10.5±9.2(1.3 倍)±6.4(2.7 倍)
160±7.4±6.7(1.2 倍)±5.3(2.0 倍)

配上和人九成七一致的评审(带参考答案),40 条标签做到了只用人约 140 条的精度。标签越多,倍数越小:250 条评审结果自己的抽样误差是 PPI 区间的下限,再多的人工标签也压不过它。

这一节的结论可以记成一句话:评审是降低方差的工具,不是人的替代品。人工标签提供无偏性,评审越好,需要的人工标签越少。 实践中:

  • 每个要比较的系统(或者每个重要的切片)都留一小批随机抽样的人工标签,用来校正。
  • 评审的模型、提示词一变,就重新校准。Anthropic 的说法是:评审要和人类专家紧密校准,等系统稳定之后,人工审阅才可以只是偶尔为之。
  • 报告里写清楚:评审是什么、和人的一致程度(按切片)、用什么方法校正、区间怎样算的。

5. 评估 harness · Evaluation infrastructure

5.1 评估 harness 不是智能体 harness

Anthropic 特意区分了两个词:智能体 harness(脚手架)是让模型能当智能体的那一层,也就是第 5、6 讲搭的东西;评估 harness 是端到端跑评估的基础设施:给出指令和工具、并发地跑任务、记录每一步、判分、汇总。文章附录列了几个现成的评估框架(Harbor、Braintrust、LangSmith、Langfuse、Arize Phoenix / AX)。这一节从零搭一个最小的,看清每个部件为什么存在。

5.2 六个要求

要求不做会怎样代码里的做法(harness.py)
配置有指纹三个月后没人说得清这个分数是哪个提示词跑的config_hash():配置排序后取 sha256 前 12 位,结果、缓存、报告都带上它
每次试验自己的种子并发时执行顺序变了,结果就变了trial_rng(指纹, 任务, 第几次, 第几次尝试)
记录落盘崩了从头再来;想看失败原因没有材料TranscriptStore:每完成一次试验追加一行 JSONL(加锁)
续跑与缓存重跑一次就再花一次钱键 = (指纹, 任务, 第几次);已有记录直接跳过
判分和运行分开判分器修一个 bug 就要重跑整个评估GradeCache:键 = (记录内容的哈希, 判分器版本)
区分基础设施错误限流、超时被算成智能体失败run_eval(infra="retry"):重试,并在报告里写明

5.3 实验(代码 05)

一次完整的评估:150 道题 × 每题 4 次、8 个线程。600 条记录只有 204 KB;通过率 65.7% [61.8%, 69.4%];pass@4 95.3%、pass^4 18.0%。同一份记录同时回答”能不能做到”和”稳不稳”。Anthropic 的例子是:每次 75% 的成功率,连续 3 次都成功的概率只有 0.75³ ≈ 42%。

并发(虚拟时钟):

线程数跑完需要⌈n/w⌉ × 平均耗时的估算
157.5 分钟57.5 分钟
87.3 分钟7.2 分钟
322.1 分钟1.8 分钟
1280.8 分钟0.5 分钟

线程多到一定程度,总时间由最慢的那一次试验(30 秒)决定,前置讲 P3 的估算公式开始偏乐观。真实系统里还有 API 的并发和限速上限。

可复现:种子由(配置指纹, 任务, 第几次)决定,1 个线程和 16 个线程写出的 600 条记录逐字段相同(文件里行的顺序可能不同,按键读回就没关系)。反过来,所有试验共用一个随机数生成器时,只是执行顺序变了,就有 229 次试验的结论不同,通过率 67.3% vs 66.2%。这种 bug 在单线程调试时看不出来,一并发就让结果不可复现。

续跑、缓存、改配置:

操作新跑命中缓存
第一次运行,跑了 250 次后进程崩了2500
重新启动(续跑)350250
再跑一次同样的配置0600
改了提示词版本(指纹变了)6000

续跑后的记录和一口气跑完的逐条相同。反过来要注意:指纹里漏掉一个会影响结果的设置(例如温度、工具列表、环境版本),缓存就会把旧结果当成新结果。

重新判分:判分器从 v1 改到 v2(代码 01 演示 4 修好的那个),通过率 30.7% → 65.7%,智能体一次都没重跑;同一个版本再判一次,判分器也不再调用。

5.4 基础设施错误(代码 05 演示 5)

模拟的智能体每一步都有 8% 的概率碰上 API 过载,所以越长的运行越容易出错(1 步 6%、5 步 35%);而触到上限的题更难,步数也更多。每题 20 次:

处理方式通过率和没有错误时比
算成智能体失败56.1%−10.1 个点
直接丢掉67.2%+1.0 个点(按每道题的成功率和出错率算的期望偏差)
重试(最多 4 次,指数退避)67.0%+0.8 个点(在区间之内)
  • 算成失败:把基础设施的问题算到了智能体头上,低了 10 个点。
  • 直接丢掉:看起来无害,其实悄悄改变了题目的构成。难题在计入的试验里占比从 14.0% 降到 11.4%,期望通过率偏高 1.0 个点。这里难题只占一成多,所以偏差不大;难题越多、错误和难度越相关,偏得越多。
  • 重试:3,000 次试验里只有 3 次在 4 次重试后仍以错误结束。报告里要写明这个数字和处理方式。

Anthropic 在路线图第 4 步讲的是同一类问题的另一面:每次试验要从干净的环境开始。共享的状态(残留的文件、缓存的数据、耗尽的资源)会造成相关的失败,也可能抬高分数。他们见过 Claude 通过查看之前试验留下的 git 历史获得了不公平的优势(第 12 讲 §2.2 的”环境要重置”)。


6. 指标从哪里来:AutoLibra 与 AutoMetrics · Where metrics come from

前面一直默认”我们知道该量什么”(对不对、全不全)。但对开放式的智能体任务,最难的一步往往是定义指标。两篇 ICLR 2026 的论文给了两种自动化的答案。

6.1 AutoLibra:从开放式反馈里归纳指标

Zhu et al. 的流程:

  1. 收集反馈:用户或专家对每条轨迹写一段自由文本(“它把同一个查询调了三遍”)。
  2. 落地(feedback grounding):把反馈拆成要点,每一条对应到轨迹里的具体行为,得到一个方面(aspect)= (行为, 反馈, 正 / 负)。论文用 GPT-4o 做这一步。
  3. 行为聚类:把相似的方面聚成 N 个指标,每个指标有定义、正例、反例。论文用 o3-mini 聚类,并特意说明:嵌入 + K-means 会按任务(哪个网站、哪个角色)而不是按行为分组,所以没有用。
  4. 用指标评估:LLM 评审对每条轨迹的每个指标打 +1 / −1 / N/A,指标的分数 = +1 在非 N/A 里的比例。
  5. 元评估:覆盖率 = 有指标能解释的方面占多少;冗余率 = 一个方面都解释不了的指标占多少。
  6. 挑 N:生成约 20 组不同 N 的指标,留下覆盖率在最高值 1% 以内的,挑冗余率最低的。

论文报告的人工核验一致率:落地 0.95、评审 0.92、元评估 0.90。用归纳出的指标去改进智能体,在 Baba-Is-AI 上每轮用 18 条标注过的轨迹,成功率提高了 20% 以上。

迷你版(代码 06 演示 1–3):80 条轨迹的反馈落成 121 个方面(落地有 5% 的错误)。聚类只看用词(这是和论文最大的不同):

N覆盖率(训练)覆盖率(留出)冗余率(留出)纯度(上帝视角)
462.8%58.8%0%50%
886.0%79.8%0%76%
1088.4%80.5%10%77%
1296.7%91.3%8%89%
1496.7%91.3%7%89%

N 小的时候,几种行为被硬并在一个指标里,指标的定义被较大的那种行为占满,较小的那种解释不了,所以覆盖率低。N 大了以后,多出来的指标是被拆开的同一种行为,或者是落地错误留下的小组(例如 “had a kind and patient tone” 被错归成了”重复调用”),在新数据上一个方面都解释不到,于是冗余率上升。按论文的规则选出 N = 12。

指标细到行为层面的价值在演示 3 里最明显。两个版本的智能体,整体满意度(没有任何负面行为)只差 +5 个点(30% → 35%),但底下是:

指标v1v2变化
没有重复调用64%93%+29
解释了上限22%47%+25
没有漏掉第二个问题86%61%−25

只看一个总分,会以为 v2 没什么变化;细粒度的指标告诉你下一步该修什么。

6.2 AutoMetrics:从少量打分里组合指标

Ryan et al. 的流程分四步:

  1. 生成:按任务自动生成候选的 LLM 评审标准。默认 17 个:10 个单一标准的、5 个评分细则的、1 个带示例的、1 个经过提示词优化的。
  2. 检索:和 MetricBank(48 个现成指标)合在一起,用 ColBERT + LLM 筛到 k = 30 个。
  3. 回归:在不到 100 条人工反馈上,把指标 z 化后用 PLS(偏最小二乘) 回归,按权重绝对值留 n = 5 个,再拟合一次;和人负相关的生成指标扔掉。
  4. 报告:权重、相关性、使用建议。

论文报告:在 5 个任务上,和人的 Kendall 相关比直接用 LLM-as-judge 最多提高 33.4%。拿它当奖励在 τ-bench 航空任务上用 GEPA 优化,测试准确率 0.720,用可验证奖励是 0.680(未优化 0.60)。论文自己列出的局限包括:换了评审用的模型,指标要重新优化;指标只能推广到人工数据覆盖到的范围;预测变量多、样本少时可能抓到偶然的相关;在案例研究里,指标可能学到数据集的特征,需要人把关。

迷你版(代码 06 演示 4):14 个候选指标(7 个”库里的”通用指标 + 7 个”生成的”评审标准,其中一个是原始的 1–10 分评审)。在留出的 250 条上算和人打分的 Kendall τ-b,结果是 20 次随机切分的平均:

方法80 条人工打分20 条人工打分
原始 LLM 评审(1–10 分)0.0500.045
训练集上最好的单个指标0.2390.139
OLS·全部 14 个指标0.2990.092
AutoMetrics·PLS + 留 5 个0.3130.213

原始评审几乎不相关,因为这个世界里的评审很少验算,而且偏爱啰嗦(§3),人却讨厌啰嗦。组合指标让人工打分来决定”哪些维度重要、各占多少”。只有 20 条打分时,OLS 用上全部 14 个指标就过拟合了;PLS 只在几个”和 y 最相关的方向”上回归、再只留 5 个,稳得多。

一个技术细节:这里用的是 τ-b,不是第 11 讲那个忽略平局的版本。人的打分只有 1–5,很多候选指标是 0/1,忽略平局会让单个 0/1 指标显得比连续的组合分数相关得多。τ-b 把平局计入分母,scipy 的 kendalltau 默认就是它。

6.3 两者的关系

AutoLibra 回答”该量什么”(从反馈里归纳出新的维度);AutoMetrics 回答”怎样组合”(从现成的维度里挑几个、配好权重去逼近人)。两者都依赖一小批人的输入,都需要人审一遍产出:归纳出的指标定义对不对,留下的指标是不是学到了数据集的特征。这和第 11 讲 EvalGen 的结论一致:评估标准本身也需要被评估。


7. Anthropic 的路线图:从 0 到一套能用的评估 · A roadmap

Demystifying Evals 的后半部分是一份从零开始的路线图。逐条列出,并标上本课程哪里讲过:

步骤要点本课程
0. 尽早开始20–50 个来自真实失败的简单任务就是很好的开始;等得越久越难建第 10 讲(数据飞轮)
1. 从你手工测的东西开始发布前手工检查的、用户报告的失败,都变成测试用例第 10 讲 §2
2. 写无歧义的任务,配参考解两位领域专家应该得出同样的结论;很多次试验都是 0% 通常说明任务坏了,不是智能体不行;参考解证明任务可解第 12 讲 §3(坏任务、参考智能体)
3. 平衡的题目集既测”该做”的情形,也测”不该做”的情形,免得单向优化(例如搜索该触发时不触发 vs 不该触发时乱触发)第 12 讲(“什么都不用做”的任务)
4. 稳健的 harness、稳定的环境每次试验从干净状态开始;共享状态会造成相关的失败或抬高分数本讲 §5
5. 认真设计判分器能确定判的就确定判,必须时用 LLM,人少用;判产出而不是判路径;多步任务给部分分;防作弊本讲 §1–§3
6. 读记录读很多次试验的记录和分数,分清是智能体错了还是判分器错了本讲 §1.4
7. 监控饱和接近 100% 的评估不再能显示进步(SWE-bench Verified 一年内从 40% 左右涨到 80% 以上)第 12 讲 §3
8. 长期维护专门的团队维护基础设施,领域专家和产品团队贡献任务;评估驱动开发:在能力存在之前先写评估第 10 讲(飞轮)

两条值得单独记住:

  • “判产出,不判路径。” 要求智能体按固定的步骤序列做事的判分器,会冤枉那些用了别的合理路径的智能体。第 12 讲按最终状态判分,就是这个原则。
  • 部分分。 文章的例子:一个客服智能体核实了客户身份但没能办完退款,比一上来就失败的要”有意义地更好”。二元的成功 / 失败会丢掉这个信息。

文章最后一句建议只有三个词:Read the transcripts!


8. 用真实模型试一试 · Try it on a real model

07_real_llm.py 用真实的 Claude 当评审:10 对回答,其中 8 对人的偏好明确、2 对是重复列表攻击。每对两种顺序各问一次,无参考 / 有参考两种提示词,共 40 次调用。

python3 07_real_llm.py --toy

(--toy 用模拟评审,不联网,用来检查脚本本身;去掉它就调用真实模型,需要 pip install anthropic 和 API key。)

运行之后看三件事:

  1. 重复列表那两行,它选了加长的版本吗?交换顺序后结论变没变?
  2. 两次结论不一致的对子,真实偏好通常是什么样的?是差距小的,还是差一个关键事实的?
  3. 参考答案让一致率和正确率变了多少?方向和 MT-Bench 报告的一致吗(参考答案把数学题的判分失败率从 70% 降到 15%)?

10 对太少,下不了任何统计结论。这个脚本的用途是让你亲眼读一读真实评审的推理,看它在哪里被说服、在哪里犹豫。


9. 小结 · Summary

  1. 三类判分器错的方向不同:代码不错放、但会冤枉换了说法的正确回答;无参考的 LLM 评审读得懂换说法、但会放过它没验算的错误;人准但贵,一个人也只有九成多一致。判分器的错误和系统的风格相关,会改变排名。确定性优先、模型补位、人来校准。
  2. 评审的提示词设计比多判几次更重要:能给参考答案就给;每个维度一个评审;给”不知道”的出口;交换顺序。取多数只消掉随机的错误。
  3. 四种偏差都能用构造的对照测出来:位置(交换顺序)、长度(加重复)、自我偏好(同一个系统在自家 vs 别家评审那里的差)、算不清(已知错误的回答)。评审和模型错误相关时最危险。
  4. 评审是降低方差的工具,不是人的替代品:只用评审,区间窄而错;PPI / PPI++ 用少量随机抽样的人工标签保证无偏;评审越好,人工标签越值钱。一致率要按片看,κ 要和样本构成一起看。
  5. 评估 harness 是工程:配置指纹、每次试验自己的种子、记录落盘、续跑与缓存、判分和运行分开、基础设施错误重试并报告。
  6. 指标可以从人的输入里自动长出来:AutoLibra 从反馈归纳维度,AutoMetrics 从少量打分组合维度;两者的产出都要人审。

10. 常见误区 · Common pitfalls

  • “评审和人的一致率 80%,所以评审的分数可以直接用。” 一致率高不等于无偏:评审对 A 系统宽松、对 B 系统严格,一致率照样可以很高,排名却是错的。要按系统看错误,并用人工标签校正。
  • “取 5 次多数,评审就稳了。” 多数票只消掉随机的错误;它从不验算的那些错误,5 次都一样。
  • “交换顺序可以消除评审的偏差。” 只能消除位置偏差。长度偏差、自我偏好是系统性的,交换顺序之后还在。
  • “自我偏好 = 评审给的分 − 人给的分。” 这个差里混着长度偏差等所有偏差。要比同一个系统在自家和别家评审那里的差。
  • “给评审一个总体印象分最省事。” 光环效应会让一个维度的长处掩盖另一个维度的缺陷。每个维度一个评审。
  • “评审说不知道就是评审不行。” 不知道的时候说不知道,比瞎编一个结论好得多。更好的是给它判断所需的信息。
  • “PPI 总比只用人好。” 评审和人不够相关时,普通 PPI 的区间可能更宽;用 PPI++ 让数据决定信评审多少。
  • “API 报错的那几次试验丢掉就行。” 出错的往往是长的、难的运行,丢掉它们会悄悄改变题目构成。重试,并报告。
  • “多线程会让结果不可复现,所以评估只能单线程跑。” 不可复现的原因是共用随机数生成器,不是多线程。每次试验用自己的种子。
  • “判分器改了,要重跑评估。” 记录落盘、判分和运行分开,就只需要重新判分。

11. 练习 · Exercises

练习 1(选判分器):为下面三个任务各选一种主要的判分器,并说明理由:(a) 智能体为用户订一张机票;(b) 智能体总结一份 20 页的合同;(c) 智能体回答”我这个月的账单为什么比上个月高?”。

参考答案 (a) 代码:检查最终状态(预订系统里有没有一张符合要求的机票:日期、航班、乘客、价格上限),这是 outcome,不要看智能体说了什么。(b) 模型为主:用评分细则逐维度判(覆盖了哪些关键条款、有没有编造、长度是否合适),最好给一份参考要点清单(reference-guided);再请人对一小批做校准。(c) 混合:代码检查它引用的数字是否和账单数据一致(金额、差额),模型判解释是否清楚、是否回答了"为什么";"为什么"的正确性如果有标准原因(例如费率上调),可以给评审参考答案。

练习 2(找判分器的 bug):一个代码判分器检查回答里是否包含 “refund processed”。你会怎样系统地找出它冤枉了哪些回答?

参考答案 找一个"读得懂换说法"的第二判分器(LLM 评审或人),在同一批回答上跑;把"代码说失败、第二判分器说成功"的回答全部读一遍,按原因分类("refund has been issued"、"we've refunded you"、大小写、其他语言……)。修判分器之后再在新一批回答上重复,因为修好的只是读到过的说法。更根本的做法是换成检查最终状态:退款系统里有没有这笔退款。

练习 3(S1 与 S2):评审和人在 1,000 票上的 S1 一致率是 60%,S2 一致率是 85%(其中 600 票双方都没投平局)。另一个评审 S1 70%、S2 75%(800 票)。哪个更好?

参考答案 不能只看一个数。第一个评审在"双方都有明确偏好"时很准(85%),但平局判得多或者和人的平局不一致,所以 S1 低;第二个评审给出明确结论的时候更多(800 票),但这些结论只有 75% 和人一致。如果用途是"只在评审有把握时自动决策、其他交给人",第一个更好;如果需要它给出尽可能多的结论,要看错误的代价。另外两者都要和人和人之间的一致率比。

练习 4(设计偏差测试):你怀疑评审偏爱用 Markdown 列表格式的回答。设计一个实验测出这种偏差的大小,并说明为什么不能直接比较”用列表的回答”和”不用列表的回答”的平均分。

参考答案 构造对照:取 50 条回答,各自改写成内容完全相同、只差格式的两个版本(列表 vs 段落),二选一(两种顺序各问一次,排除位置偏差),统计评审选列表版的比例;或者逐条打分,算两个版本的分差的平均。不能直接比较两组回答的平均分,因为用列表的回答可能本来就更全、更有条理(混杂因素),差值混着质量差和格式偏差。

练习 5(自我偏好):你用模型 X 当评审,比较 X 和 Y 两个模型生成的回答,X 赢了 62%。你的同事说”这是自我偏好”。你需要什么额外的数据来判断?

参考答案 至少再用一个不同家族的评审 Z 判同一批对子。如果 Z 也判 X 赢 60% 左右,X 可能真的更好;如果 Z 判 X 只赢 50%,差值(约 12 个点)是 X 对自己的偏好的估计。最好再加一小批人工标签作为锚点。同时确保两种顺序都问过、长度大致相当,或者做长度控制,免得把位置和长度偏差算成自我偏好。

练习 6(PPI 手算):评审在 1,000 条上判通过率 70%。在随机抽的 50 条上,人判通过 30 条;这 50 条上评审判通过 38 条。(a) 只用人的估计是多少?(b) PPI 的估计是多少?(c) 评审是偏宽还是偏严?

参考答案 (a) 30/50 = 60%。(b) θ̂ = 70% + (30 − 38)/50 = 70% − 16% = 54%。(c) 在有标签的样本上,评审比人多判了 8 条通过,所以评审偏宽,PPI 把它往下修了 16 个点。注意 (a) 和 (b) 的估计不同:PPI 用到了评审在全部 1,000 条上的信息(这 50 条里评审判通过 76%,高于它在全部样本上的 70%,说明这 50 条碰巧偏容易),所以 PPI 的估计比 60% 更低。

练习 7(κ 的悖论):评审和人在 200 条上一致 180 条(90%),其中人判 190 条通过、10 条失败。评审对那 10 条失败只判对了 2 条。κ 大约是多少?这说明什么?

参考答案 混淆矩阵:人通过 190 条中评审通过 178、失败 12(因为一致 180 条 = 178 + 2);人失败 10 条中评审通过 8、失败 2。p_o = 0.90;评审通过率 186/200 = 0.93,人 0.95;p_e = 0.93 × 0.95 + 0.07 × 0.05 = 0.8835 + 0.0035 = 0.887;κ = (0.90 − 0.887)/(1 − 0.887) ≈ 0.12。一致率 90% 几乎全来自"大家都说通过"。评审对失败的回答几乎没有分辨力(TNR 20%)——而失败的回答恰恰是评估最想抓住的。看 TPR / TNR,不要只看一致率。

练习 8(harness 的指纹):你的评估缓存键是 (模型名, 提示词版本, 任务, 第几次)。列出至少三个会导致”缓存把旧结果当成新结果”的情形。

参考答案 ① 改了温度、max_tokens、effort 等采样参数;② 改了工具列表或工具的实现(例如搜索工具换了索引);③ 环境变了(数据库快照、网站内容、依赖版本);④ 模型名没变但服务端换了版本(例如带日期的别名指向了新快照);⑤ 系统提示词或脚手架代码改了但"提示词版本"号没改。做法:把所有会影响结果的东西都放进配置并算指纹;对代码和环境,用 git commit、镜像摘要这类内容寻址的标识。

练习 9(基础设施错误):你的评估里 15% 的试验因超时结束,其中大部分是需要 20 步以上的任务。分别说明”算成失败""丢掉""重试”对报告的分数有什么影响,以及你会怎样报告。

参考答案 算成失败:如果超时是 API 慢造成的(基础设施),分数被系统性地压低,而且压低的是长任务。丢掉:长任务(通常更难)在计入的试验里占比下降,分数偏高,而且读者看不出来。重试:最合理,但要区分"API 慢导致的超时"(基础设施,重试)和"智能体自己绕圈子导致的超时"(停止条件,算失败,第 12 讲 §2.3)。报告:写明超时的试验数、处理方式、重试后仍失败的数量,最好按任务长度分别报告分数。

练习 10(开放题:为你的智能体设计评审):挑一个你在做或想做的智能体,按本讲的方法设计它的 LLM 评审:维度、每个维度的提示词要点、哪些维度用代码判、需要多少人工标签、怎样测四种偏差。

参考答案(思路) ① 从真实失败里列出 3–6 个维度(AutoLibra 的思路:先收集反馈、再归纳);② 每个维度写一个单独的评审提示词:只判这一个维度、给参考信息、允许 Unknown、先推理后结论、结构化输出;③ 能用代码判的(状态、数字、格式)全交给代码;④ 每个要比较的系统抽 50–100 条做人工标签,算按系统的 TPR / TNR,用 PPI++ 给通过率和区间;⑤ 用构造的对照测位置(交换顺序)、长度(加重复)、自我偏好(换一个家族的评审)、算不清(注入已知错误);⑥ 评审的模型或提示词一变,重新校准。

12. 延伸阅读 · Further reading

本讲的阅读材料

  • M. Grace, J. Hadfield, R. Olivares, J. De Jonghe, Demystifying Evals for AI Agents, Anthropic Engineering, 2026-01-09.
  • L. Zheng et al., Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena, NeurIPS 2023 Datasets & Benchmarks.
  • M. J. Ryan et al., AutoMetrics: Approximate Human Judgements with Automatically Generated Evaluators, ICLR 2026.
  • H. Zhu et al., AutoLibra: Agent Metric Induction from Open-Ended Human Feedback, ICLR 2026.

相关

  • Y. Dubois et al., Length-Controlled AlpacaEval: A Simple Way to Debias Automatic Evaluators, 2024(长度控制)。
  • A. N. Angelopoulos et al., Prediction-Powered Inference, Science, 2023;A. N. Angelopoulos, J. C. Duchi, T. Zrnic, PPI++: Efficient Prediction-Powered Inference, 2023.
  • P. Boyeau et al., AutoEval Done Right: Using Synthetic Data for Model Evaluation, 2024(PPI 用于模型评估)。
  • W. J. Rogan, B. Gladen, Estimating Prevalence from the Results of a Screening Test, American Journal of Epidemiology, 1978.
  • S. Shankar et al., Who Validates the Validators?(EvalGen),UIST 2024(第 11 讲 §6)。

13. 下一讲预告 · Next lecture

第 14 讲 智能体安全与护栏(11/11)。到目前为止,我们问的都是”智能体做得好不好”;下一讲问”它会不会做坏事、会不会泄露不该泄露的东西”。智能体一旦能读邮件、查日历、发消息,隐私就不再只是”训练数据里有没有你的名字”,而是”它在这个情境下该不该把这条信息告诉这个人”:这是情境完整性(contextual integrity)的视角,PrivacyLens 用它来评估智能体的隐私行为。下一讲还会讨论:怎样用模拟去搜索隐私风险;提示词注入(直接 / 间接)为什么是智能体特有的难题,以及 OpenAI 和 Anthropic 怎样描述它;沙箱、权限模型、人在回路这些护栏各自挡住什么;以及负责任的部署(Anthropic 的 RSP)。前置讲 P4 的威胁模型和分层防御会被反复用到。配套代码会做一个隐私泄露的模拟评估,以及间接注入的分层防御实验。

← 返回课程目录