从0打造编码Agent 阅读 + 实验 ≈ 30 分钟 页内实验 ×2
A9 评测:怎么知道它好不好? 第 2 课

分数高,是模型强还是 harness 强?

模型强还是 harness 强
Terminal-Bench 4.0 官方榜前两名是 Codex + GPT-6 Astra 58.18% 与 Claude Code + Fable 5.1 57.88%,看起来平手;第三方 Vals 统一用 Harbor 自带的极简 agent Terminus 2 复测,两者成了 57.07% 与 49.49%。同一个模型、同一个 effort 档,换 harness 后通过率变化 −21.8 到 +4.7 个点(15 组),GLM-5.3 从 41.82% 掉到 25.25%。分数 = 模型 × harness;要比模型,先把 harness 统一,再按「第三方独立 / 官方榜 / 自报」三层看它能信几分。本课项目自己的数据也在说同一件事:同一个 8B 模型,harness v1 换 v2,贯穿任务通过数从 1 变成 5。
❓

本课一问:榜单上两个 agent 的分数差不多,是两个模型差不多吗?一个分数高,是模型强,还是它用的 harness 强?

这一课先不碰:能力随时间增长多快(岔路 B1);为什么公认的「标准 harness」是一个极简 agent(岔路 B2);失败在哪一步(第 3 课)。

从已有出发

从已有出发 · 累计数据流 点已学环节看它回答什么
每一轮循环都经过

为什么这一课换例子。要看「换 harness、不换模型」和「换模型、不换 harness」,需要多个模型在多个 harness 上的成绩;本课项目只有一个本机模型,所以这一课读公开榜单。但本课项目自己已经给过一个信号:A0 岔路 B1 里,同一个 Qwen3-8B,harness 从 v1 换成 v2(主要是加了一条完成规则),贯穿任务 10 种配置的通过从 1 次变成 5 次。上一课 T6 的 15 次 TB 运行里,还有 4 次一个工具都没调就被 harness 的输出上限停下。harness 不是透明的管道,它本身就在分数里。

先自己设计:直接比榜单

最省事的做法:打开排行榜,谁的分数高,谁的模型强。

  1. ① 朴素方案
  2. ② 它在哪失败
  3. ③ 改进方案
朴素方案直接比排行榜:分数高 = 模型强
榜单harness模型(effort)通过率每 trial 成本
TB 4.0 官方榜(更新于 2026-09-21)CodexGPT-6 Astra(max)58.18% ± 2.79$9.90
同上Claude CodeFable 5.1(max)57.88% ± 3.76$18.92

两行的差是 0.30 个点,远小于各自的 95% 置信半宽。按这张表,两个模型「一样强」。

改进一:同一个模型,换 harness

把两张榜里「同一个模型、同一个 effort 档」都出现的行连起来:一端是它在自家(或榜单指定)harness 上的成绩,一端是它在 Terminus 2 上的成绩。线越长,harness 在分数里的份量越大。

公开数据 · TB 4.0 官方榜 × Vals 复测(2026-09-27 抓取,按页面原数转录)
同一个模型,换一个 harness:TB 4.0 官方榜(各家自带 harness) vs Vals(统一 Terminus 2)

数据:tbench.ai 官方榜(更新于 2026-09-21)与 vals.ai/benchmarks/terminal-bench-4(更新于 9/22/2026),均于 2026-09-27 抓取、按页面原数转录。可信度:官方榜 = 各家自带 harness、每行自跑性质未核实;Vals = 第三方独立、统一 harness。口径不同:官方榜每任务 5 次,Vals 为 3 轮平均;两边的沙箱与计价方式也不同。和本课在本机跑的 TB 2.0 不是同一个版本,不能直接比。

🎯

试三件事:① 先在下拉框里猜一个「换到 Terminus 2 后掉得最多」的模型,再点「揭示连线」;② 看表里唯一一条绿线:GPT-5.6 Terra 在 Terminus 2 上反而高了 +4.7 个点——harness 不总是帮自家模型;③ 切到线性轴,看成本那一维:同一个模型换 harness,每个 trial 的成本变成原来的 0.38 到 3.68 倍。

15 组配对里,换到 Terminus 2 后通过率变化 -21.8 到 +4.7 个点 。降得最多、又没有回退问题的是 GLM-5.3:Claude Code 上 41.82%,Terminus 2 上 25.25%。

极小真数字:一组配对自己算一遍

GLM-5.3(max):同一个模型,两个 harness
👆 公式里带下划线的每一项都可以点——点哪项,讲哪项。
同一个模型能差十几个点,所以「GLM-5.3 有多强」这个问题,离开 harness 就没有答案。

改进二:要比模型,先统一 harness

Vals 的做法写在方法说明里:所有模型都用 Terminus 2,配置与上游实现相同;每个模型完整跑 3 轮取平均,没有部分分 。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」。两把尺子都是极简的 agent——为什么是极简的,见岔路 B2。

统一了 harness 之后,还要问这个分数是谁测的。LLM 课 C14 岔路 B1 的三层可信度在这里一样适用:

层本课用到的例子能信到什么程度
第三方独立Vals 的 TB 4.0 复测(统一 Terminus 2,标出回退与拒答)最高;但它也有口径:它用 Daytona 沙箱、3 轮平均,Opus 5.5 有 30 / 198 次回退,回退记失败则从 61.62% 降到 53.54%
官方榜 · harness 各异tbench.ai 的 TB 4.0 榜任务、评分器是公开统一的;每行用的 harness 各不相同,由谁跑页面没写(本课标「自跑性质未核实」)
纯自报Databricks 内部基准(私有代码库)没人能复现;只能按原文口径引用
公开数据 · Databricks 博客 2026-07-08 图 3 的文字标注(2026-09-27 转录;厂商自报、不可复现)
Databricks 内部基准:同模型同 effort,原生 harness 换成 Pi

数据:Databricks 博客《Benchmarking Coding Agents on Databricks’ Multi-Million Line Codebase》(2026-07-08)图 3 上印着的文字,2026-09-27 下载原图转录。厂商自报、私有代码库、不可复现;原文正文另说「quality remained the same」。只能按限定口径引用(大纲红线 1)。

按大纲红线 1 的限定口径:Databricks 内部基准(自报、不可复现)里,同模型同 effort 把原生 harness 换成 Pi,单任务成本降低 1.20–2.08 倍,通过率变化 -7 到 +3 个点 。它和 TB 4.0 的两张榜说的是同一件事:harness 同时改变分数和成本。

⚠
常见误解一:「SWE-bench Verified 仍是比较前沿模型的尺子。」

Vals 的 SWE-bench 页已经标为归档:「Since performance on this benchmark has saturated, we no longer run this benchmark on new model releases.」(更新于 9/1/2026),榜首 97%。SWE-bench 官方 Verified 榜共 180 条,最新一条的日期是 2026-02-26。饱和的尺子区分不出前沿模型的差异;引用时要换未饱和的集合,并写清版本。

⚠
常见误解二:「SWE-bench Lite 是为教学设计的。」

官方页的原话是 Lite「designed to: Reduce evaluation costs while maintaining benchmark quality」等三条目的:降低评测成本、加快迭代、给研究团队更容易的入口。可以说「官方称 Lite 旨在降低评测成本」;「为教学设计」官方没有这么说。

⚠
常见误解三:「Pi 比 Claude Code 和 Codex 都便宜。」

Databricks 的对照是同模型同 effort:Opus 4.8 的原生 harness 是 Claude Code,GPT-5.5 的原生 harness 是 Codex;没有「Opus 4.8 在 Codex 上」这一组,所以不能说 Pi 在同一个模型上比 Codex 便宜。能说的只有上面那句限定口径的话。

证据三问

问本课的回答
① 它解决什么问题?把分数里的两个变量拆开:同 harness 比模型,同模型比 harness
② 为什么会这样?模型在 harness 里行动:工具、提示词、上下文管理、输出上限、重试,都在决定它能看到什么、能做什么
③ 实验上呢?公开数据:同模型换 harness,15 组里变化 -21.8 到 +4.7 个点 ;本课项目:同模型 harness v1 → v2,1 → 5

演进地图:你在这里

评测的演进:每一步都被上一步的真数字逼出来
  1. 最直觉的做法:一个任务、一次运行、一个布尔值
    解决了最省事:修好了就说「会修」,没修好就说「不会」。
    卡在同一套配置只换 seed:pd-v2-unlimited 的 s1 / s2 / s3 是 ✗ ✓ ✓;同为 seed 1、只多了一个没碰到的轮数上限的 pd-v2-cap20-s1 又是 ✓。只跑一次,结论取决于你碰上了哪一次。
  2. 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。
  3. 第二步 统一 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 次失败各是各的样子,一个数看不出为什么。
  4. Harbor 的 ATIF 轨迹 · Anthropic 工程博客的四类失败 · 本章写明的标签规则
    解决了15 次失败都落到了带步号的标签上:改完 / 跑完不回头查 7 次,撞上输出上限 4 次,明确声称完成 5 次、5 次没过。
    卡在标签分不清是 agent 错还是环境错:第一次 oracle 冒烟 0 / 5,原因是容器里的 DNS;arm64 探测里 qemu-startup 连参考解也拿 0 分(verifier 现装 curl 时 404)。
  5. 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 构建时现算。

一句话

📌
分数 = 模型 × harness;比模型,先把 harness 统一。
🚦

先停在这里:记住一组数——同一个 GLM-5.3,41.82% 与 25.25%。
再深一层:两条岔路。B1:能力在按什么速度增长——METR 把成功率换成「能做多长的活」;B2:评测标准为什么是一个极简 agent——mini-SWE-agent 与 Terminus 2。

下一个缺口

分数告诉你成没成,为什么失败要看什么? → 第 3 课:它失败了,失败在哪一步、属于哪一类?

统一了 harness、重复了 k 次,本课的 agent 在 TB 2.0 上是 0 / 15。这个 0 里有 15 次各不相同的失败——哪一次是模型不会,哪一次是 harness 先撞了墙?

你可能会问