批判地阅读智能体基准

E4
运维 · 评估与可观测性

批判地阅读智能体基准——排行榜实际在测量什么。

"在 SWE-bench 上达到 SOTA"是一句营销文案,而非关于你系统的工程事实。每个智能体基准都在某一套评估框架下、在可能被污染的任务上、用一个可能挺不过提示词改动的分数,测量能力的某一种狭窄操作化——并且几乎肯定不预测它在你任务上的表现。本文剖析主要基准实际测试什么、哪些失效模式让排行榜名次具有误导性,以及为什么唯一要紧的数字是来自你自己构建的那个小评估集。

STEP 1

每个主要基准实际测量什么。

  • SWE-bench——解决一个真实 GitHub issue,使仓库的隐藏测试套件通过。测量在测试覆盖充分的成熟 Python 仓库上的"定位并打补丁"。测量从零设计、缺乏良好测试框架的语言,或任何"测试通过"并非规格之物。SWE-bench Verified 剔除了含糊/损坏的任务——一个更干净但也更容易的子集。
  • GAIA——需要多跳网页浏览、文件处理与多模态推理的真实助理问题,带唯一无歧义答案。测量工具使用编排与检索,而非代码或长时程自主性。
  • τ-bench——在一个模拟领域(零售/航空)里、带一份策略文档与一个模拟用户的工具智能体,按数据库终态外加一个 pass^k 一致性指标打分。这是少有的测量可靠性而非仅峰值能力的基准——在别处看着很强的智能体在它的 pass^8 上崩掉。
  • WebArena——在自托管 web 应用(一个电商站、一个 CMS、一个论坛)里的长时程任务。用功能性成功检查测量真实的多步网页操作。这里的分数很低,而这正是诚实的信号:真正的网页自主很难。

读操作化,别读头条。每个基准回答一个被精确限定范围的问题;排行榜把它坍缩成一个数字,而新闻稿把范围整个丢掉。

STEP 2

污染:基准可能就在权重里。

用公开数据构建的公开基准会泄漏进预训练。SWE-bench 任务是带公开 PR 的 GitHub issue;GAIA 问题可被搜索到。一个前沿模型可能见过那个 issue、那个修复提交,以及那段讨论。从外部你并不总能分辨:一个高分是能力还是记忆。

可疑的启发式:恰好在模型训练截止边界处的陡然跳升;当实体被改名或任务被改写时表现暴跌;在别人都觉得难的基准上接近满分。污染恰恰在模型已背下来的任务上把数字抬得最高——而那正是它对泛化最少有所启示之处。

去污染的、留出的、新撰写的变体(以及按时间切片的"截止后创建的任务"划分)正是因此存在。优选它们,并把任何早于模型训练数据的基准视为记忆测试,直到被反证。

STEP 3

评估框架敏感性:同一模型,不同数字。

一个基准分数是模型与脚手架的属性,绝非模型单独的属性。同一个基座模型在 SWE-bench 上跨不同智能体框架可摆动 15 分以上——不同的提示词、检索、工具集、重试预算与解析。两点含义使大多数排行榜比较失效:

  • 跨行比较被混淆。除非框架被固定(而通常并非如此),A 行对 B 行可能是框架差异,而非模型差异。
  • 所报数字是作者在该基准上调过的优化脚手架下的一个偏上界。你的脚手架不同且未为它调优;预期一个下调。
  • 解析/格式失败假扮成推理失败。一批"错误"答案其实是框架未能抽取出来的正确解——是一个产物,而非能力天花板。
STEP 4

为什么排行榜名次 ≠ 你的任务。

即便一个完美干净、框架受控的基准,回答的也是它的问题,而非你的。SWE-bench 名次对一个针对你内部 API 分诊工单的智能体几乎不预测任何东西。分布偏移是彻底的:你的工具、你的领域、你的错误模式、你对成功的定义、你的延迟与成本上限。基准是某一能力类别的证据,对你具体部署是个弱先验。

把公开基准用于它擅长之处:模型分诊(哪 2–3 个模型值得你的评估预算)和能力健全性检查。绝不把它们当作发布的验收测试。排行榜收窄候选范围;它不替你选模型。

STEP 5

构建那个真正做决定的小型自定义评估集。

50–200 个取自你的流量、用你的工具与你的成功谓词的任务,对你的决定比任何公开排行榜都预测得更准。它不需要大——它需要有代表性、由构造去污染(是你写的、在截止之后),并按你真正见到的失效模式分层。

# a custom task: real env, executable check, frozen + dated
{
  "id": "sup-triage-014",
  "created": "2026-05-10",        # post-cutoff: contamination-safe
  "prompt": "Customer says webhook stopped firing after the v3 upgrade.",
  "tools": ["logs.search", "kb.lookup", "ticket.update"],
  "check": lambda e: e.ticket.tag == "webhook-v3-regression"
                    and "rotate secret" in e.ticket.reply,
  "forbidden": ["ticket.close", "refund.issue"]
}

按失效模式分层,而非按主题:含糊请求、工具错误恢复、多跳检索、"应当拒绝/升级"各设一个桶。二十个各自隔离一种已知失效模式的任务,胜过两百个全都走顺利路径、对你的数字毫无撼动的任务。

STEP 6

诚实的取舍。

公开基准可比、可复现、读起来便宜——而这份可比性是用狭窄操作化、污染风险,以及让名次对你成为弱信号的框架混淆换来的。自定义评估集恰好相反:跨组织不可比、维护昂贵,却是唯一真正预测你部署的数字。用排行榜在一个下午里筛出候选模型;只信任你从自己流量构建的那个小型、带日期、去污染的评估集来决定发布什么。