如何设计一个优秀的 Benchmark
这个问题在过去三年里变得异常紧迫。2023 年底,Claude 2 在 SWE-bench 上只能解决 1.96% 的真实 GitHub issue;到 2024 年,前沿系统已经做到 71.7% Stanford HAI 2025 AI Index。Humanity's Last Exam 从 2025 年初的 8.8% 到 2026 年 4 月突破 50%——一个被设计为「最难标准化考试」的 benchmark,十五个月内就触达饱和曲线。Reuel 等人对 445 个 LLM benchmark 的系统审查发现,大多数 benchmark 并不能真正测量它们声称要测量的东西 Measuring What Matters。
在这篇回答里,我会从经典计算机系统 benchmark 方法论和当代 AI benchmark 实践两条线索出发,梳理一套可操作的设计框架。
一、Benchmark 的五大基础属性(SPEC 框架)
Standard Performance Evaluation Corporation (SPEC) 在过去三十多年里建立了一套 benchmark 评估元标准,至今仍是最清晰的基础框架 SPEC Research Group - How to Build a Benchmark。五个维度:
Relevance(相关性):benchmark 的行为与实际使用场景的关联有多紧密。这是第一性原理——如果你测的东西没人关心,分数再精确也毫无意义。
Reproducibility(可复现性):相同配置下多次运行能否得到一致结果。这对 AI benchmark 尤其棘手:非确定性采样、浮点精度差异、提示词的微小变化都可能导致分数漂移。
Fairness(公平性):不同被测系统能否在同等条件下公平竞争,不存在对特定架构或实现的人工偏见。
Verifiability(可验证性):第三方能否独立验证声称的结果。AI benchmark 在这方面问题严重——BetterBench 研究发现,24 个被评估的 SOTA benchmark 中只有 3 个包含 CI 构建状态,只有 4 个提供了可复现脚本 BetterBench。
Usability(可用性):用户在自己的测试环境中运行 benchmark 的难度。门槛越高,越少人会用,benchmark 的生态价值就越低。
二、当代 AI Benchmark 的三项核心属性(Ofir Press 框架)
SWE-bench、AssistantBench、CiteME 等 benchmark 的作者 Ofir Press 将好的 AI benchmark 提炼为三个核心属性 How to Build Good Language Modeling Benchmarks:
1. Natural(自然性)
任务必须来自真实人类会问的问题,而不是闭门造车编出来的。两个硬指标判断「不自然」:
- 问题设定不现实:比如选择题——「现实中没有人去看医生时说'医生我的肘部疼,原因一定是这四个选项之一……'」
- 题目是编造的,而非来自真实用户问题:如果在 Google 工作,与其坐在房间里空想题目,不如去翻 Search 日志,找出用户搜了但没找到好答案的真实查询
一个很好的自检:问自己「usefulness criteria」——一个在这个 benchmark 上得分比 baseline 高的系统,是否真的对人类有用?是否真的能提高生产力?
2. Automatically Evaluateable(自动可评估)
给定模型输出,你需要自动判断对错。代码类任务用单元测试(SWE-bench 的 FAIL_TO_PASS / PASS_TO_PASS 模式);结构化输出用 JSON schema 校验。但像摘要这种任务自动评估极难,这解释了为什么摘要类 benchmark 尽管实用价值高却进展缓慢。Ofir 明确反对「用 LLM 评 LLM」——「要么用 LM 解决问题,要么用它评判输出;既当运动员又当裁判会导致根本性问题。」
3. Challenging(有挑战性)
这是变化最快的指标。Ofir 的建议经历了三次修订:
- 初版:发布时顶尖模型准确率应在 1%–35%
- 2025 年 1 月修订:应在 0.1%–9%
- 2025 年 5 月修订:「我现在要求合作者不要想'让 AI 得 0% 的 benchmark',而要设计让 AI 得 -200% 的 benchmark。要找那些即使模型性能翻三倍也还是零分的题目。只看现在让模型失败还不够——你必须预测未来 6–12 个月的进步速度,设计出连明年的模型也做不出来的 benchmark。」
一个实用技巧:用强 baseline 过滤掉简单实例(如 Bamboogle 过滤掉 Google 能搜到的题,CiteME 过滤掉 GPT-4o 能直接答对的题)。
三、Construct Validity:让 benchmark 真正测量它声称的东西
这是整个设计过程中最重要的概念,也是最容易被跳过的。
Reuel 等人提出的四种效度类型构成一个完整的检验框架 Measuring What Matters: Construct Validity in LLM Benchmarks:
| 效度类型 | 核心问题 | 典型失败模式 |
|---|---|---|
| Construct(构念效度) | 它是否测量了名字所声称的能力? | 把「通用推理」benchmark 命名为推理测试,实际主要测的是知识记忆 |
| Criterion(效标效度) | 分数是否与下游真实结果相关? | benchmark 分数涨了 10 分但生产环境表现毫无变化 |
| Consequential(后果效度) | 优化这个指标是否产生你想要的行为? | 优化 pass@1 导致模型变得过度保守,拒绝回答合理问题 |
| External(外部效度) | 是否泛化到 eval set 之外的场景? | 在精选测试集上表现好,但换了分布立刻崩 |
核心操作:在写第一道题之前,先用一段话(不是感觉)写下你要测量什么能力、为什么它对系统重要、分数上升或下降意味着什么。如果你说不清楚 construct,你就无法测量它。
GIM benchmark 更进一步,将 IRT(项目反应理论,来自心理测量学的工具)引入 AI benchmark:通过 2PL 模型估计题目难度和区分度参数,使分数不仅是「对了多少」,而是经过校准的潜在能力估计 GIM。位置论文也指出 AI 评估应该是「基于明确能力理论的推理任务」,并提出了 Evaluation Card 作为文档化工具 Position: AI Evaluations Should be Grounded on a Theory of Capability。
四、题目从哪来,谁来出
真实制品碾压合成提示词
SWE-bench 的 2,294 个任务来自 12 个流行 Python 仓库的真实 GitHub issue,评分方式是运行项目实际的测试套件 SWE-bench。真实构造赋予了数据集三个合成数据无法复制的属性:可持续从新 PR 更新、难以用表面启发式攻击、扎根于真人审核过的代码。
对于自定义 benchmark:先挖掘你自己的系统——bug tracker、support ticket、被拒绝的 agent 输出、升级到人工审核的案例,这些都是最高信号的任务来源。Anthropic 的建议是从 20–50 个来自生产失败的案例开始,逐步扩展到 200–1,000 个专家标注的样本 Demystifying Evals for AI Agents。
专家创作 + 对抗性验证
GPQA Diamond 是最干净的参考实现:
- 领域专家出题
- 另一位专家验证
- 修订
- 非专家验证——给非专家(可以上网 30+ 分钟)做一遍
结果是:领域 PhD 正确率 65%(排除明显失误后 74%),但熟练的非专家仅 34%。非专家验证阶段回答了关键问题:「这题是真的难,还是只是冷门?」Diamond 子集是两道专家一致同意且第三位独立验证通过的高置信度切片。GPQA Diamond 还嵌入了 canary 字符串用于污染追踪。
LegalBench 则是专家协作模型的典范:40+ 律师、法学教授和法律从业者贡献了 162 个任务,按六种推理类型分类(问题识别、规则回忆、规则适用、规则结论、解释、修辞理解)。推理类型分类本身就是一个贡献——它迫使出题者说清每道题在测哪种法律认知能力。
四个操作规则
- 从真实失败开始,迭代扩展——seed set → expansion → iteration
- 写出参考答案——如果你的领域专家都做不出来,模型肯定做不出来,这个失败不告诉你任何信息
- 每道题使用多位评分者——单评分者继承单评分者的盲点。SWE-bench Verified 用了三位标注者做 severity ensembled 筛选,去掉了约 1/3 模糊或不可行的原始题目 Introducing SWE-bench Verified
- 严格分离训练集和测试集——train/test contamination 会悄悄抬高 held-out 评估的分数,直到生产环境表现不如预期你才发现
五、评分:代码评、模型评、人评
Anthropic 工程团队的分类法是最清晰的框架 Demystifying Evals for AI Agents:三类评分器,从便宜到贵选用。
Code-based grader(黄金标准)
如果可以,就用它。确切匹配、正则、可执行测试、结构化输出验证——确定性、免费运行、不解决任务就无法绕过。SWE-bench 的 FAIL_TO_PASS / PASS_TO_PASS 模式就是代码评分器。
Model-based grader(LLM judge,开放输出的主力)
关键发现来自 Park et al. (2025):评估标准(rubric)是 LLM judge 可靠性的主导因素,当 rubric 清晰时 chain-of-thought 几乎不带来额外增益 An Empirical Study of LLM-as-a-Judge。Rubric 是 construct 的操作化。如果 rubric 模糊,construct 就模糊,grader 再高级也救不回来。
LeMAJ 法律评估框架发现,使用共享 rubric 后评审者间一致性提高了 11%,rubric 引导的 LLM judge 配置达到了与人类共识的 Cohen's κ = 0.75 LeMAJ。
三个实操规则:
- 用人类标注的 golden set 验证:与人类共识的 75–90% 一致是底线
- 分解为结构化标准:二元检查(「输出是否引用了真实案例?」)+ 有序评分(「1–5 分评分清晰度,附锚点描述」)远优于单一总分
- 注意已知偏差:位置偏差、长度偏差、自我偏好(偏好同模型家族的输出)。随机化位置、标准化长度、用与被测系统不同模型家族的 judge
Human grader(校准层和高风险层)
用于 golden set 构建、judge 校准、以及错误成本不可接受的场景(临床安全、法律合规、金融建议)。经济上往往无法在完整 benchmark 上运行人类,但几乎总是可以在校准子集上运行——这些分数锚定了下游所有 grader。
六、数据污染:Benchmark 设计中最棘手的问题
Singh et al. (2024) 的 ConTAM 分析覆盖 13 个 benchmark × 7 个模型,发现即便开发者尝试过 decontamination,污染仍然被低估 Evaluation Data Contamination in LLMs。在实践中,甚至 BIG-Bench canary 字符串已经被 GPT-4-base 和 Claude 3.5 Sonnet 记住 BIG-Bench Canary Contamination in GPT-4。
四层防御
| 层级 | 方法 | 代表案例 |
|---|---|---|
| 检测 | 嵌入 canary 字符串,事后测试模型是否能复现 | GPQA Diamond |
| 时间隔离 | 为每道题打日期戳,按模型训练截止日期过滤 | LiveCodeBench(从 2023 年 5 月起为编程竞赛题目打时间戳) |
| 空间隔离 | 保留一个从不公开的 private split | GIM benchmark 的 615 public + 205 private 设计 GIM |
| 根本免疫 | 不发布答案(如 SciCode 只发布函数描述和单元测试,不发布解答代码);或动态生成题目 | 动态 benchmark 从静态到动态的演进 Recent Advances in LLM Benchmarks against Data Contamination |
Ofir Press 在 SciCode 设计中体现了「即使 benchmark 完全泄露进训练数据,模型也无法得分」的思路:PhD 出编程题,只发布描述和测试,不发布答案。
Harness 隔离——一个容易被忽视的问题
如果被测系统和评分器共享文件系统,agent 可以读取 grader 日志、探测评分信号、输出满足 grader 却不解决问题的结果。PeerBench 提出了 sealed execution(密封执行)的方案 PeerBench at NeurIPS 2025。这种隔离应该在设计阶段就嵌入架构,而不是事后补救。
七、Goodhart 定律与 Benchmark 生命周期管理
「当一个度量变成目标,它就不再是一个好的度量。」
OpenAI 的 o3 在 ARC-AGI 上得了 75.7%,但细看:o3 在 benchmark 的 75% 公开训练集上训练过,最高计算配置用了 baseline 的 172 倍资源。「这不是伪装成分数的能力突破,而是伪装成能力突破的分数」 The Evaluation Paradox: How Goodhart's Law Breaks AI Benchmarks。
从第一天就区分两类 eval
Capability eval(能力评估):pass rate 低(5–30%),让你看到「模型能做什么新事情」。
Regression eval(回归评估):pass rate 高(>90%),让你看到「我们有没有搞坏原本能用的东西」。
一个只有 capability eval 的团队一旦模型变好就瞎了;一个只有 regression eval 的团队永远看不到模型还不能做什么。同一个 benchmark 会经历从 capability eval 到 regression eval 的生命周期转换——规划这个转换,而不是等它饱和了再手忙脚乱。
持续更新
- 把生产环境失败回流到 eval set——每个用户标记的错误答案、每次人工覆盖、每次升级,都是经过预验证的难题
- 给 benchmark 打版本号,与模型版本对齐
- 标注每次 eval run 的模型版本、prompt 版本、rubric 版本
八、一个完整的设计 Checklist
综合 How2Bench 的 55 项标准检查表 How2Bench、BetterBench 框架 BetterBench、以及以上所有来源,一个 benchmark 设计应覆盖以下维度:
设计阶段
- 用一段话写明 construct:测什么能力、为什么重要、分数变化意味着什么
- 明确目标受众和用例(研究对比 vs 生产决策 vs 安全审计)
- 选定一个主指标 + 3–4 个辅助指标,覆盖你面临的真实 trade-off
- 规划 capability eval → regression eval 的生命周期
任务构建
- 优先使用真实制品(bug report、support ticket、真实查询)
- 如需合成,走「专家出题 → 专家验证 → 修订 → 非专家验证」的 GPQA Diamond 管道
- 每道题写出参考答案
- 使用多位评分者,记录评分者间分歧作为题目模糊度的信号
- 包含平衡的正负案例(「agent 成功取消订单」+「agent 拒绝取消不该取消的订单」)
评分系统
- 能用 code-based grader 就用 code-based grader
- 用 LLM judge 时,rubric 是核心——写清楚每个评分等级的操作定义和锚点
- 用人类标注 golden set 验证 judge 可靠性(≥75–90% 一致)
- 注意并缓解 judge 偏差(位置、长度、自我偏好)
- 隔离被测系统和评分器(harness isolation)
污染防御
- 嵌入 canary 字符串
- 为每道题打日期戳 / 保留 private holdout
- 如可能,不公开发布答案
- 考虑动态生成机制
维护计划
- 版本化:benchmark 版本与模型版本对齐
- 生产失败回流管道
- 定期 re-annotation
- 提供可复现脚本和 CI 集成
补充说明:本次检索覆盖与未覆盖的内容
已覆盖:设计原则(SPEC、Ofir Press)、construct validity(Reuel et al.)、任务来源(SWE-bench、GPQA Diamond、LegalBench)、评分方法(code/model/human grader 三层分类)、污染防御(canary、private holdout、动态生成、harness isolation)、Goodhart 定律与生命周期管理。
尚需深入但本次未充分展开的领域:
- 交互式评估(interactive evaluation)作为一个独立范式的方法论——这是 2026 年 5 月 arXiv 上一篇位置论文的焦点 Interactive Evaluation Requires a Design Science,认为「交互式评估应被视为一种有原则的评估范式,而不仅仅是新的 agent benchmark 家族」
- 多模态 benchmark 的特殊挑战(图像+文本+代码综合治理等)
- 具体领域的 benchmark 设计细节(如医疗影像、金融交易等需要领域专家的深度参与才能讲清)
- IRT(项目反应理论)在 AI benchmark 中的系统应用方法论——目前 GIM 等少数 benchmark 在使用,但尚未成为社区标准