最近 Hugging Face 发布了 The Open Agent Leaderboard。这篇文章最值得看的,不是“谁排第一”,而是它把一个很关键的事实讲透了:Agent 的能力,不只取决于模型本身,还取决于它周围那套系统设计。
如果你只盯模型分数,很容易得出一个错误结论:换个更强的模型,Agent 就会自动变好。现实里不是这样。工具怎么选、上下文怎么管理、失败怎么恢复、成本怎么控制,都会显著影响最终效果。
这篇文章用更通俗的方式,把这个 leaderboard 的设计、评价方式和工程意义拆开讲清楚。
先看大图
flowchart LR U[任务输入] --> A[Agent 系统] A --> P[规划 / 记忆 / 工具选择] P --> E[统一评测协议] E --> B1[SWE-Bench Verified] E --> B2[BrowseComp+] E --> B3[AppWorld] E --> B4[tau2-Bench Airline & Retail] E --> B5[tau2-Bench Telecom] E --> B6[其他真实场景] B1 --> R[成功率 + 成本] B2 --> R B3 --> R B4 --> R B5 --> R B6 --> R
这套 leaderboard 的核心,不是简单跑分,而是把一个 Agent 拆成“系统”来评估。
它想回答的问题也很直接:
- 这个 Agent 在不同任务里到底能不能工作。
- 它是“真能做事”,还是只在单一 benchmark 上表现好看。
- 它的成功是不是靠堆成本换来的。
为什么要重新定义评测
传统模型榜单通常只看一个结果:模型在某个任务上的分数。
但 Agent 不一样。部署一个 Agent 时,你拿到的不是一个模型,而是一整套系统:
- 它能用哪些工具。
- 它如何规划步骤。
- 它如何保留和压缩上下文。
- 它出错后怎么恢复。
- 它每一步会花多少 token 和时间。
同一个模型,换一套 Agent 设计,表现可以差很多。
sequenceDiagram participant U as 用户 participant M as 模型 participant A as Agent 运行时 participant T as 工具/环境 U->>M: 提交任务 M->>A: 决定如何分解任务 A->>T: 调工具 / 查资料 / 执行动作 T-->>A: 返回结果 A->>M: 只保留关键中间态 M-->>U: 输出最终结果
这个图里,真正影响结果的,不止模型。
Agent 运行时才是很多性能差异的来源。它决定了:
- 任务会不会被切成合适的步骤。
- 工具调用会不会过多。
- 失败后会不会继续烧钱。
这套 leaderboard 到底测了什么
Hugging Face 这次把 6 个 benchmark 放到一起,试图覆盖更接近真实工作的场景:
- SWE-Bench Verified,真实代码仓库里的 bug 修复。
- BrowseComp+,复杂网页研究。
- AppWorld,跨应用的个人助理任务。
- tau2-Bench Airline & Retail,客服类、流程约束强的任务。
- tau2-Bench Telecom,技术支持类任务。
这里最重要的不是 benchmark 名字有多酷,而是它们被统一成了同一种协议。
原文把它抽象成三件事:
- task,要做什么。
- context,要知道什么。
- actions,允许做什么。
这样做的好处很现实:不同 benchmark 的交互方式被抹平了,Agent 不需要“学每个题库的方言”,而是面对同一种接口。
统一协议的意义
如果你做过多 Agent 集成,就会知道最烦的不是模型,而是接口不一致。
有的 benchmark 偏代码修复,有的偏网页研究,有的偏多轮对话,有的偏应用操作。每个系统都带着自己的假设、输入格式和动作空间。
统一协议的价值,就是让这些差异尽可能收敛成一层公共抽象。
flowchart TB T[任务 Task] --> S[统一协议] C[上下文 Context] --> S A[动作 Actions] --> S S --> B1[代码修复类 benchmark] S --> B2[研究检索类 benchmark] S --> B3[应用操作类 benchmark] S --> B4[客服对话类 benchmark]
这意味着两件事:
- benchmark 仍然保留自己的真实任务特征。
- Agent 只需要面对一套共同的输入输出结构。
对工程团队来说,这比“每个 benchmark 单独调一套 prompt”靠谱得多。
如何读 leaderboard
这篇文章最值得抄走的,不是榜单名字,而是读法。
每一行代表的不是“某个模型”,而是“某个 Agent 系统 + 某个模型”的组合。
所以你看到的是:
- 平均成功率。
- 平均成本。
- 每个 benchmark 的细分结果。
这就能看出一个经常被忽略的事实:
同一个模型,换不同 Agent 设计,分数和成本都可能完全不一样。
换句话说,模型只是底座,Agent 才是把底座变成产品的那层系统工程。
一个更直观的理解
flowchart LR M[同一个模型] --> A1[Agent 设计 A] M --> A2[Agent 设计 B] M --> A3[Agent 设计 C] A1 --> R1[高分 / 中成本] A2 --> R2[中分 / 低成本] A3 --> R3[高分 / 高成本]
这也是为什么只看模型榜单会误判:
- 你以为是模型强,其实是 Agent 管得好。
- 你以为是模型差,其实是工具选择和恢复策略差。
- 你以为成本高是模型贵,其实是失败路径太长。
这次公开了哪些结论
文章里有几个很关键的结论,值得直接记下来。
1. 通用 Agent 已经开始接近专用系统
在一些任务上,没做 benchmark 特化调优的通用 Agent,已经能追上甚至超过专用系统。
这件事的意义很大:Agent 不一定非要做成“一个任务一套逻辑”的碎片化形态,通用能力正在变得更可行。
2. 失败也要算成本
原文提到,失败的运行往往比成功运行贵 20% - 54%。
这句很扎心,但很真实。
很多团队只看成功率,不看失败时烧了多少 token、跑了多少步、试了多少次。结果就是:
- 表面上分数还行。
- 线上成本却失控。
3. 模型仍然重要,但 Agent 架构已经开始显著影响结果
文中一个很有价值的点是 tool shortlisting。简单说,就是让 Agent 先缩小可用工具范围,而不是面对一大坨工具自己慢慢翻。
这个优化在所有测试模型上都带来了收益,还把一些原本会失败的配置拉回了可用区间。
这说明一件事:
不是只有更大的模型能带来收益,Agent 架构本身也能改结果。
对工程实践有什么启发
如果你在做 Agent,这篇文章给出的其实是很明确的工程方向。
- 不要只做模型替换,先把 Agent 运行时拆清楚。
- 工具别一股脑全塞给模型,先做 shortlist。
- 成功率之外,一定加上失败成本指标。
- 评测不要只跑单 benchmark,要看跨场景稳定性。
- 要把 planning、memory、tool use、error recovery 当成独立模块看待。
如果再往前一步,真正值得落地的不是“更聪明的提示词”,而是这类能力:
- 让 Agent 的决策路径可观测。
- 让失败路径可分析。
- 让评测结果可复现。
我自己的判断
这篇文章最有价值的地方,不是它宣布了一个 leaderboard,而是它把 Agent 评测从“模型竞赛”拉回到了“系统工程”。
这很重要,因为 Agent 真正进入生产之后,用户不会问你“这个模型多强”,只会问:
- 任务能不能稳定完成。
- 失败时会不会乱花钱。
- 换一个场景还能不能用。
所以如果你现在在做 Agent 产品,我建议把这篇文章当成一条提醒:
模型分数只是入口,系统设计才决定最后能不能上线。