同一模型,两种 Harness:三轮 A/B 实验怎么做的
控制变量、冻结评分器、隐藏测试,以及为什么三轮总分不能相加。
为什么要比较 Harness
编码 Agent 的产品差异不只在模型。工具怎么调、权限怎么给、上下文怎么裁、失败怎么恢复,都由外面那层 Harness 决定。两个产品用同一个模型,行为仍可能完全不同。
所以这组实验固定模型,只换外壳:Codex Desktop 和 Claude Code,同一台 Windows 主机、同一 Python 3.12、同一底层模型 gpt-6-luna、同为 high effort。这样轮内的差异才可能归因于 Harness、环境或单次随机性,而不是模型能力。
实验约束
比多跑几轮更重要的是不事后改规则:
- 评分器、隐藏测试和 reference 在实验期间冻结;
- 分析者不参与任何一轮的实现;
- 每一轮的正式评分以交付代码和会话日志为准,不以实现者的自述为准。
三轮任务
三轮任务性质不同,也因此不能互相换算分数。
| 轮次 | 任务 | 验收 |
|---|---|---|
| HB-01 | 从零开发单页前端看板(localStorage、导出、移动端) | Playwright 真实浏览器,10 项 × 10 分 |
| HB-02 | 修复 Python 包中 3 个不同根因的缺陷 | 隐藏单测 10 项 × 10 分 |
| HB-03 | 工单批量更新:状态机、乐观锁、原子性、幂等、审计一致性 | 隐藏单测 7 项,权重合计 100 |
结果
| 轮次 | Codex Desktop | Claude Code |
|---|---|---|
| HB-01 | 70 | 100 |
| HB-02 | 100 | 100 |
| HB-03 | 100 | 100 |
时间上,HB-02 是 83.7 秒对 161.3 秒,HB-03 是 79.2 秒对 355.3 秒;HB-01 的 B 侧官方计时因权限拒绝没有落盘,不能拿来比较。
读结果时容易忽略的三件事
规范字面保真度会先于功能能力决定分数。 HB-01 中 A 把规范逐字给定的简体文案写成了繁体,评分器按文案定位元素,状态切换和移动端两项随之失败。功能本身完整可用,但「任一断言失败即 0 分」的规则把一次失误放大成 30 分差。更准确的结论是功能完整度相当,规范保真度 B 更好。
时间是单样本。 每轮各只跑一次,且 HB-01 两侧计时口径不齐。可以说「这两轮里 A 更快」,不能说 Harness 普遍更高效。
Token 不是现成的成本指标。 历史报告中 B 的数字存在重复计数,按同一基准重算后,两侧口径才勉强可比。工具调用次数也一样:A 是 33/10/10,B 是 36/45/47,但两边工具粒度不同,次数不能直接当效率。
为什么不排名
三轮任务和评分规则完全不同,总分相加没有意义。每轮 n = 1,也不能证明哪种 Harness 更好。两侧模型相同,这个实验更回答不了「哪个模型更强」。
能留下的是方法:冻结评分器、隐藏测试、保留原生会话日志,并把「不可比」直接写进结论,而不是留给读者猜。