评测标准为什么是一个极简 agent?
本课一问:第 2 课说「比模型,先统一 harness」。那统一成哪一个?为什么公认的标准偏偏是一个极简 agent,而不是功能最全的那个?
这一课先不碰:mini-SWE-agent 的源码(它不在本课钉住的源码副本里,这一课只引官方文档与 README);SWE-bench 的任务怎么构造(见原论文)。
从已有出发
为什么这一课换例子。要比较「当尺子用的 harness」,需要多个 harness 上的公开成绩,本课项目没有。回扣 A1:本课 miniagent 的起点就是一个最小循环——发请求、模型要调工具就执行、结果塞回历史、没有调用就停。后面八章在它上面一层层加东西。这一课看到的评测尺子,基本就停在那个起点上。
先自己设计:统一 harness,随便挑一个
最省事的做法:选一个 harness,让所有模型都用它跑,就算「统一」了。
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
| 模型(effort) | mini-SWE-agent(TB 4.0 官方榜) | Terminus 2(Vals) |
|---|---|---|
| Gemini 3.8 Flash(high) | 19.09% | 13.13% |
| Gemini 3.7 Flash(high) | 11.21% | 6.06% |
两把都叫「极简」的尺子,量同一个模型,读数差 6.0 和 5.1 个点。(两边的重复方式与沙箱也不同,见第 2 课。)
「统一」不是随便挑一个,而是挑一把能当公共尺子的:
- 固定、公开:谁都能拿到同一份代码和配置,别人能复现;
- 带版本号:尺子一改,读数就不再可比(mini-SWE-agent 1.x 与 2.x 就是例子);
- 任何模型都跑得起来:不依赖某一家的专有工具格式;
- 尽量少替模型做事:harness 做得越多,分数里 harness 的份量越大。
满足这些的,自然就是极简的那一类。
改进:极简到什么程度
| mini-SWE-agent | Terminus 2 | 本课 miniagent(Harbor 适配器版) | |
|---|---|---|---|
| 谁在用它当尺子 | SWE-bench 官方 bash-only 榜;Vals 的 SWE-bench(已归档) | Vals 的 TB 4.0;Harbor 自带的参考 agent | 只有本课项目 |
| 给模型的工具 | 只有 bash;README:「Does not have any tools other than bash」 | 一个 tmux 会话:每轮发键盘输入、读回屏幕 | 6 个:read_file、write_file、edit_file、bash、list_dir、grep |
| 历史 | 完全线性:每一步只往 messages 里追加,轨迹就是 messages | —(Vals 的方法说明没写) | 线性 messages[];上下文策略在 TB 上设为不压缩 |
| 模型怎么发动作 | v2 默认用原生工具调用;v1 是从回复文字里用正则抽命令 | 回复 JSON,不用结构化输出;JSON 不合法或缺失就带警告重试(Vals 方法说明) | 原生工具调用(OpenAI 兼容的 tool_calls) |
| 动作怎么执行 | 每个动作一次独立的 subprocess.run,没有常驻的 shell | 常驻 tmux 会话 | 每次 bash 新开一个 shell,经 Harbor 的 environment.exec 进容器 |
| 规模 | README:agent 类大约 100 行 Python | —(本课没有读它的源码) | 循环 + 工具 + 适配器,见项目 miniagent/ |
出处:mini-SWE-agent 的 README 与 v2 迁移指南(v2.4.6 是最新 release,2026-07-23);Terminus 2 的描述取自 Vals 方法说明;本课 miniagent 取自项目代码 证据等级 · 有理论动机 有数学或机制上的理由说明它可能有效,但没有证明它一定更好。最后是否采用,仍然要看实验。 本条官方一手文档与 README 的自述;本课没有读 mini-SWE-agent 与 Terminus 2 的源码(不在钉住的副本里),表中不含任何行号。 出处待补 。
SWE-bench 官方页说明了用它的理由:「To make an apples-to-apples comparison of LMs easier, we evaluate all LMs using mini-SWE-agent in a minimal bash environment.」。统一的极简 harness 把「harness 做了什么」压到最少,剩下的差异更多来自模型——但不是全部:第 2 课里 GPT-5.6 Terra 在 Terminus 2 上反而比在自家 Codex 上高 4.7 个点。
极小真数字:换一把尺子,排名变了多少
第 2 课的 15 组配对,各按两把尺子排一次名,数一数有多少对模型的先后顺序颠倒了:
它量的是「在同一个极简 harness 里」的相对差。一个模型在产品级 harness 里可能强得多(第 2 课 GLM-5.3 差 16 个点),也可能反过来(GPT-5.6 Terra)。尺子上的读数,只和同一把尺子上的其他读数比。
SWE-bench 官方页原话:「Results of release 1.x and 2.x are not necessarily comparable to each other, as 2.x uses tool calling to invoke actions, whereas 1.x parses action from the output strings.」v2 默认改成了原生工具调用,v1 是从文字里用正则抽命令。尺子换了版本,就是换了尺子。
想自己跑 SWE-bench 的话:官方评测 harness 的资源要求是至少 120GB 空闲存储、建议 16GB 以上内存与 8 核以上 CPU、推荐 x86_64(arm64 支持是实验性的)。官方页称 Lite 旨在降低评测成本(「designed to: Reduce evaluation costs while maintaining benchmark quality」)。本课没有做这一项(大纲里的选做);Harbor 0.23.0 的安装包里已经带了 mini_swe_agent、pi、hermes、claude_code、codex、opencode 等预集成 agent,在 TB 上换 harness 对照只要换 -a。
证据三问
| 问 | 本课的回答 |
|---|---|
| ① 它解决什么问题? | 给「比模型」一把公共的、可复现的尺子 |
| ② 为什么选极简? | harness 做的事越少,分数里 harness 的份量越小;极简也最容易让任何模型跑起来、让别人复现 证据等级 · 有理论动机 有数学或机制上的理由说明它可能有效,但没有证明它一定更好。最后是否采用,仍然要看实验。 本条控制变量的论证;它不保证对每个模型都公平(Terra 的反例)。 出处待补 |
| ③ 实验上呢? | 两个极简 harness 之间也有差:Gemini 3.8 Flash 19.09% 对 13.13%;15 个模型换尺子后 12 / 105 对先后颠倒 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条官方榜(自跑性质未核实)对 Vals(第三方);口径不完全相同。 出处待补 |
演进地图:你在这里
- 起点 跑一次,看成败最直觉的做法:一个任务、一次运行、一个布尔值解决了最省事:修好了就说「会修」,没修好就说「不会」。卡在同一套配置只换 seed:pd-v2-unlimited 的 s1 / s2 / s3 是 ✗ ✓ ✓;同为 seed 1、只多了一个没碰到的轮数上限的 pd-v2-cap20-s1 又是 ✓。只跑一次,结论取决于你碰上了哪一次。
- Anthropic《Demystifying evals for AI agents》· Harbor 的 -k 与 pass_at_k.py解决了同配置的 7 次运行过了 6 次:p̂ = 0.857,pass@3 = 99.7%,pass^3 = 63.0%;T6 的 3 次重复全过。卡在拿全体平均成功率套公式:TB 4.0 官方榜第一行(Codex + GPT-6 Astra,max)pass@1 为 58.18%,公式给 pass@5 = 98.7%,榜单实测 71.2%:每个任务的成功率不一样。而且重复再多次,也分不出分数里哪部分是 harness。
- Vals 统一用 Terminus 2 复测 TB 4.0 · SWE-bench 官方 bash-only 榜统一用 mini-SWE-agent解决了同一个模型换 harness 的差距摆上桌:Fable 5.1 在 Claude Code 上 57.88%、在 Terminus 2 上 49.49%;GLM-5.3 41.82% → 25.25%。卡在分数只告诉你成没成:本课 agent 在 TB 2.0 上 0 / 15,15 次失败各是各的样子,一个数看不出为什么。
- 第三步 读轨迹,给失败打带步号的标签Harbor 的 ATIF 轨迹 · Anthropic 工程博客的四类失败 · 本章写明的标签规则解决了15 次失败都落到了带步号的标签上:改完 / 跑完不回头查 7 次,撞上输出上限 4 次,明确声称完成 5 次、5 次没过。卡在标签分不清是 agent 错还是环境错:第一次 oracle 冒烟 0 / 5,原因是容器里的 DNS;arm64 探测里 qemu-startup 连参考解也拿 0 分(verifier 现装 curl 时 404)。
- Harbor v0.23.0:-a oracle 冒烟 → -a module:Class -k解决了参考解 5 / 5 通过、环境就绪之后,再跑自家 agent:5 个任务 × 3 次。卡在k = 3、单一 8B 本地模型、5 个任务、amd64 镜像靠 qemu 模拟:结论只在这个规模成立。(→ 课程终点:回到 A0,哪些任务值得用 agent?)
数字口径:本课项目 T6(Harbor 0.23.0 + Terminal-Bench 2.0,本机 Qwen3-8B-MLX-4bit,录制于 2026-09-26)与 A1 的同配置运行;TB 4.0 官方榜(更新于 2026-09-21)与 Vals(更新于 9/22/2026),均于 2026-09-27 抓取;由 a09-eval.json 与 a09-public-2026-09-27.json 构建时现算。
一句话
回主线
分数告诉你成没成,为什么失败要看什么? → 第 3 课:它失败了,失败在哪一步、属于哪一类?
你可能会问
- 「那本课的 miniagent 算极简吗?」 比 mini-SWE-agent 多了专门的读、写、编辑、搜索工具,多了权限、沙箱、上下文、记忆这些层(在 TB 上关掉了一部分)。它是一个「教学用的完整 harness」,不是评测尺子。
- 「为什么不直接用最强的产品 harness 当标准?」 它们为自家模型调过,也不公开全部配置;第 2 课的数据显示,产品 harness 与模型之间的配合本身就是分数的一部分。