基准:SWE-bench、GAIA 与 AgentBench 本节摘要:排行榜只告诉你哪个模型在某个基准上赢了,却不告诉你三件至关重要的事——基准是否被污染(解法泄露进训练集)、基准是否测量你在乎的能力(代码 vs 浏览 vs 通才)、评估器是否健壮(AST 匹配 vs 状态检查 vs 人工评审)。2026 年,三个基准锚定了 Agent 评估:SWE-bench(Jimenez 等人,ICLR 2024 oral)测代码补丁——2294 个真实 GitHub issue,Agent 拿到修前提交点的代码库加 issue 描述,产出补丁,评估器应用补丁跑测试套件,补丁必须把 FAILTOPASS 测试翻成通过、且不破坏 PASSTOPASS;SWE-bench
本节摘要:排行榜只告诉你哪个模型在某个基准上赢了,却不告诉你三件至关重要的事——基准是否被污染(解法泄露进训练集)、基准是否测量你在乎的能力(代码 vs 浏览 vs 通才)、评估器是否健壮(AST 匹配 vs 状态检查 vs 人工评审)。2026 年,三个基准锚定了 Agent 评估:SWE-bench(Jimenez 等人,ICLR 2024 oral)测代码补丁——2294 个真实 GitHub issue,Agent 拿到修前提交点的代码库加 issue 描述,产出补丁,评估器应用补丁跑测试套件,补丁必须把 FAIL_TO_PASS 测试翻成通过、且不破坏 PASS_TO_PASS;SWE-bench Verified(OpenAI,2024 年 8 月)是人工策展的 500 题子集,清除了歧义 issue 与不可靠测试;SWE-bench+ 的污染审计更扎心——32.67% 的成功补丁在 issue 文本里就泄露了解法,31.08% 因测试覆盖太弱而可疑。GAIA(Mialon 等人,2023)走「人类易、AI 难」路线:人类 92% 通过、带插件的 GPT-4 仅 15%,测通才工具使用与多模态。AgentBench(Liu 等人,ICLR 2024)横跨 8 个环境,发现开源 LLM 追赶商业模型的主要瓶颈是长程推理、决策与指令遵从。读完本节,你应能说出每个基准的构成、污染故事与盲区,并避免「单数字执念、污染式声明、把基准当开发目标」三种陷阱。
对应原课程:Phase 14 · Lesson 19 ·
benchmarks-swebench-gaia(原英文phases/14-agent-engineering/19-benchmarks-swebench-gaia/docs/en.md)。前置:第 06 节(工具使用)。
阅读完本节,你应当能够:
排行榜告诉你哪个模型在一个基准上赢了。但它不告诉你:
在引用任何数字前,先吃透这三个锚定基准及其失败模式。否则,「SWE-bench 50%」这句话比不说还危险——它制造了虚假的信心。
SWE-agent(Yang 等人,2024)发布时达到 12.5%,靠的是强调Agent-计算机接口(Agent-Computer Interface)——文件编辑器命令、模型能理解的搜索语法。这是第 06 节「工具描述是承重的」在基准层的回响:给模型好用的接口,能力就涨。
OpenAI,2024 年 8 月。人工策展的 500 题子集。清除了歧义 issue、不可靠测试、修复不明确的任务。这是「你的 Agent 真能交付真实补丁吗」的首选基准。
实战含义:一个在 SWE-bench 上得 50% 的模型,在 SWE-bench+ 上可能只有 35%。声称 SWE-bench 性能时,永远同时报告两者。
GAIA 是你用来测「通才能力」的基准。别和代码专用基准混淆。
⚠️ 三种基准陷阱:① 单数字执念——SWE-bench 50% 告诉你的,远不如 P50/P75/P95 成本 + 步数分布。② 污染式声明——报告 SWE-bench 却不提 Verified 或 SWE-bench+,是误导。③ 把基准当开发目标——为基准优化会偏离生产有用性(goodhart 定律:当一个指标成为目标,它就不再是好指标)。
原课程 code/main.py 实现了一个玩具版 SWE-bench 式测试装置:
@dataclass class Task: codebase: str # 修前提交点的代码 issue: str # 自然语言描述 fail_to_pass: list # 此前失败的测试,补丁后必须通过 pass_to_pass: list # 此前通过的测试,补丁后不得破 @dataclass class Verdict: resolved: bool # FAIL_TO_PASS 全翻 + PASS_TO_PASS 全保 no_regression: bool
def evaluate(task: Task, patch: str) -> Verdict: apply(task.codebase, patch) # 应用补丁 ftp_ok = all(run(t).passed for t in task.fail_to_pass) # 修复门 ptp_ok = all(run(t).passed for t in task.pass_to_pass) # 无回归门 return Verdict(resolved=ftp_ok and ptp_ok, no_regression=ptp_ok)
def difficulty(question): depth = count_decomposition_steps(question) # 需要拆几步 if depth <= 2: return 1 if depth <= 5: return 2 return 3 # Level 3 需跨模态长工具链
运行 python3 code/main.py 会展示每个任务与每个难度的解决率,把评估规则具体化。
💡 设计要点:SWE-bench 的评估器之所以可信,是因为它检查测试的实际状态(修没修好、有没有回归),而不是去匹配补丁的 AST。这正是第 06 节提到的 BFCL V3「基于状态的评估」思想——查状态,不查形状。
| 基准 | 测什么 | 门控 | 污染风险 |
|---|---|---|---|
| SWE-bench | 代码补丁 | FAIL_TO_PASS + PASS_TO_PASS | 高(94% 早于截止;SWE-bench+ 查出 32.67% 泄露) |
| SWE-bench Verified | 代码补丁(策展) | 同上 | 中(更干净但非无污染) |
| GAIA | 通才工具使用 | 私有排行榜答案匹配 | 中 |
| AgentBench | 多环境长程推理 | 各环境特定 | 低 |
| 自定义评估(第 30 节) | 你的产品形态 | 你定义 | 由你控制 |
原课程 outputs/skill-benchmark-harness.md:为任意「代码库-任务」对搭建 SWE-bench 式测试装置,带 FAIL_TO_PASS / PASS_TO_PASS 门控、步数与成本度量、解法泄露检查。
下一节,我们继续基准话题,聚焦网页与桌面环境——WebArena 与 OSWorld 如何在真实浏览器与操作系统里度量 Agent,以及 Computer Use(第 21 节)所依赖的评估地基。