一个 benchmark 数字背后,藏着十个你需要知道的假设
你一定见过这类新闻:"XX Agent 在 SWE-bench 上达到 65%,超越人类水平。"然后你去试,Agent 在你自己的任务上一塌糊涂。
这不是 benchmark 骗人,是你在用错误的方式读数字。这一篇把主流 Agent benchmark 逐一拆开:测的是什么、怎么测、数字意味着什么、又有什么它测不到的。
为什么 Agent 的 eval 比一般 LLM 难得多
一般 LLM eval 很简单——给一个 prompt,比较输出和 gold answer,准确率搞定。Agent eval 复杂在:
路径不唯一。完成同一个任务,Agent 可以走不同路径,中间步骤完全不同,但最终结果一样好。只评最终结果会漏掉效率差异;评中间步骤又太死板。
任务有副作用。Agent 可以真的修改文件、发 PR、点按钮。eval 环境必须隔离,不然 Agent "成功通过测试"的方式可能是作弊——比如直接修改测试文件让它 pass。
非确定性。同一个 Agent 跑两次,结果可能不同。benchmark 数字是多次采样的平均,但单次部署的方差可能很大。
分布外泛化。benchmark 的任务分布和你真实任务的分布很可能不一样。在 benchmark 上 70% 的 Agent,在你的业务场景上可能 30%。
带着这四个问题,去读每一个 benchmark 数字。
SWE-bench:Agent 能修复真实 GitHub issue 吗
SWE-bench 是目前最有影响力的编程 Agent benchmark,也是 Agent 领域里工程质量最高的评测。
它测什么:从 GitHub 上爬取 2294 个已修复的 bug issue(主要来自 Django、Flask、Scikit-learn 等知名 Python 项目)。给 Agent 看 issue 描述和仓库代码,让 Agent 生成 patch,然后跑官方测试套件,用测试通过来判断 patch 是否正确。
为什么这个设计好:
- 任务来自真实项目,不是人工构造的
- 用测试通过作为判断标准,客观、可重复
- 有人工 patch 对比,可以验证 Agent 的方法
SWE-bench Verified 是精选的 500 个子集,经过人工核验任务描述清晰、测试覆盖充分。看这 500 个的数字比看全量更有参考价值——全量里有相当比例任务本身就描述不清楚。
怎么读数字:截至 2025 年底,顶级系统(Claude + 专门工程)在 Verified 上达到 65% 左右,开源系统大约 30~50%。这个数字是"所有 issue 中能正确修复的比例"。
数字背后的假设:
- 测试套件是诚实的。如果测试覆盖不全,Agent 可以生成一个通过测试但破坏其他功能的 patch。
- 任务有完整的仓库上下文。实际项目里你可能还要先找到哪个文件、哪个函数,这步的难度没有在数字里体现。
- Harness 把很多工程细节处理好了。生产 Agent 没有这么干净的环境。
SWE-bench Pro 是 2025 年发布的更难版本,任务来自更近的时间,刻意选了那些当前最强系统都解决不了的 issue,用来测试 Agent 的真实上限。
AgentBench:跨任务类型的通用 Agent 测试
AgentBench(清华 KEG Lab)的定位是"在一批不同任务上测 Agent 的通用能力",而不只是编程。
包含的任务:
- OS(命令行任务,操作虚拟 Linux 环境)
- DB(SQL 操作,完成数据库任务)
- KG(知识图谱查询和推理)
- WebArena 子集(网页操作)
- Card(卡牌游戏策略)
- ALFWorld(家庭环境文本游戏)
- Mind2Web(网页导航任务)
评分方式:每类任务有自己的 success metric,综合得一个总分。
怎么读:AgentBench 的价值在于横向对比——同一模型在 OS 任务上很强但在 WebArena 上很弱,说明什么?对你的任务类型有启示。
局限:任务设计年代稍早(2023),顶级模型现在大多数任务都能到很高准确率,区分度下降。2024 年后更关注 SWE-bench 的原因之一就是这个。
τ-bench:工具调用的现实压力测试
τ-bench(tau-bench,Princeton)专门测 Agent 在真实工具调用场景下的表现,更贴近实际业务 Agent。
核心设计:模拟用户和 Agent 多轮对话 + 工具调用。任务来自两个领域:零售(处理订单、退款、查询)和航空(改签、升舱、查航班)。Agent 必须调用一批 API 完成任务,同时不能做出错误操作(比如给不该退款的订单退款)。
评测重点:
- 工具调用准确率(参数正确吗)
- 业务逻辑遵从(不违反规定)
- 多轮对话一致性(前面说了不改的不能后来改)
为什么这个视角重要:大多数业务 Agent 不是写代码,是通过 API 完成任务。τ-bench 比 SWE-bench 更接近这类场景。
数字参考:当前顶级模型在 τ-bench 上的通过率约 40~60%,说明真实业务 Agent 还有很大提升空间。
WebArena 和 OSWorld:UI 交互的基准
这两个 benchmark 测的是"让 Agent 操作 UI 完成任务"。
WebArena:在真实网站(GitLab、Reddit、Wikipedia、商城)上完成自然语言任务。"在 GitLab 上创建一个新 issue,标题 XX,标签 YY"之类的。成功标准是检查网页状态是否符合预期。
OSWorld:让 Agent 控制桌面操作系统(Ubuntu、Windows、macOS),完成跨应用任务。"用 LibreOffice 打开 XX 文件,把第三列的总和填入 Cell B5"。难点在于需要看截图、操作真实 GUI,测视觉 Agent 能力。
数字参考:
- WebArena:顶级系统约 40~55% 成功率
- OSWorld:较难,约 20~40%,说明桌面 GUI 操作还远未解决
局限:两者的任务都相对简单、独立,不反映真实工作流里的跨任务依赖和长序列操作。
这些 benchmark 都测不到什么
这是读 benchmark 时最该注意的部分:
鲁棒性。benchmark 任务通常描述清晰,而真实用户输入模糊、歧义、甚至语法错误。在 benchmark 上 70% 的 Agent,面对真实用户输入可能只有 40%。
长任务稳定性。多数 benchmark 任务 10~30 步就结束。真实业务 Agent 可能要跑几百步。长任务里的目标漂移、上下文累积、错误放大,这些 benchmark 看不到。
分布外泛化。benchmark 任务是固定的。Agent 可能通过"记住"某类任务特征来提升分数,而不是真正会推理。换一批任务就掉一大截。
成本和延迟。benchmark 不管你花了多少钱跑出来。同样 70% 的两个 Agent,一个花 $0.05/task,另一个花 $5/task,实用性天差地别。
工具真实性。很多 benchmark 的工具是 mock 的,不会真的失败、超时、返回脏数据。真实工具更难对付。
如何建自己的 eval
Benchmark 的数字有参考价值,但最重要的是你自己任务分布上的数字。
最小可行 eval 的构建方法:
# 1. 从线上失败日志里挖 50 个真实任务
eval_set = load_from_traces(status="failed", limit=50) + \
load_from_traces(status="success", limit=50)
# 2. 每个任务定义 success_fn
def success_fn(task, agent_output, trace):
# 对于不同任务类型用不同判断逻辑
if task.type == "data_query":
return task.expected_answer in agent_output
elif task.type == "file_edit":
return file_matches_expected(task.expected_file)
else:
return llm_judge(task, agent_output) # fallback 到 LLM judge
# 3. 跑评测
results = []
for task in eval_set:
output, trace = run_agent(task)
results.append({
"task_id": task.id,
"success": success_fn(task, output, trace),
"steps": len(trace.spans),
"cost": trace.total_cost,
"latency": trace.total_time,
})
# 4. 聚合
success_rate = mean([r["success"] for r in results])
avg_cost = mean([r["cost"] for r in results])
print(f"Success: {success_rate:.1%}, Avg cost: ${avg_cost:.4f}")
几个实操经验:
- 50~100 个任务就够开始。不需要千级。先有一个能跑的数字,比数字准确更重要。
- 从失败案例补充。每次 Agent 出 bug,把那个任务加进测试集。测试集越来越接近真实痛点。
- 分类聚合。按任务类型、用户类型、工具类型分别看成功率。"总体 60%"可能掩盖了某类任务 20% 的严重问题。
- 跑两遍取平均。Agent 非确定,单次跑结果不稳。重要决策前跑 3~5 次取中位数。
小结
读 benchmark 的正确姿势:看方法论,不只看数字。SWE-bench 测编程 Agent 修 bug 的能力,AgentBench 测跨任务泛化,τ-bench 测业务工具调用,WebArena/OSWorld 测 UI 操作。每个都有它覆盖的范围和覆盖不到的角落。
最实用的 eval 永远是你自己的任务分布上的数字。公开 benchmark 用来横向对比模型和系统选型,自己的 eval 用来驱动迭代。两个都要有。
这篇是 Agent 工程篇的收官之一。下一篇深入安全边界——Prompt Injection、权限最小化、沙箱逃逸,这是第 17 篇生产化章节点到为止、但值得专门展开的话题。
相关阅读
- SWE-bench 官方 — 排行榜 + 论文
- SWE-bench Verified 论文
- AgentBench 论文 (Tsinghua)
- τ-bench 论文 (Princeton)
- WebArena 论文
- OSWorld 论文
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:21. Benchmark 全景:SWE-bench、AgentBench、τ-bench 怎么读
本文链接:https://www.sshipanoo.com/blog/ai/ai-agent/21-Benchmark全景/
本文最后一次更新为 天前,文章中的某些内容可能已过时!