论文精读 13|Beyond the Model:把 Harness 组件变成实验变量
证据级别提示: 本文解析的是 2026 年 9 月 26 日发布的 arXiv 预印本,尚未经过正式会议同行评审。它进入本专题是因为研究问题直接针对 Harness,而不是因为它已达到“顶会定论”的证据等级。结论需要等待独立复现。
论文档案
| 项目 | 内容 |
|---|---|
| 论文 | Beyond the Model: Demystifying Harness Effects in Software Engineering Agents |
| 作者 | Haichuan Hu 等 |
| 状态 | arXiv 预印本,2026-09-26 |
| 原文 | arXiv:2609.32459 |
| 研究对象 | mini-SWE-agent、OpenCode、Claude Code 与作者构造的 NanoHarness |
| 本文定位 | 固定模型与任务,把 Harness 及其组件作为一等实验变量 |
这篇论文终于直接问了什么
过去的 Agent 论文常同时改变模型、prompt、工具、预算和环境,然后把分数提升归因于“Agent 架构”。这篇预印本反过来问:
- 同一个模型装在不同 harness 中,差多少?
- 差异是否随模型能力和任务类型变化?
- 工具、上下文压缩、规划、子 Agent 和技能各自贡献什么?
- 更复杂 harness 的收益来自更多 token,还是更有结构的交互?
它把常被当作产品黑盒的 Harness 拆成可控制变量,这比单纯比较排行榜上的“模型+系统”组合更接近因果分析。
两阶段研究设计
Study 1:模型 × Harness × 任务
作者选择 Qwen 与 DeepSeek 两个开源权重模型家族,共 10 个从较弱到较强的模型,比较轻量 mini-SWE-agent 与更复杂 OpenCode。
三个 benchmark 覆盖不同软件工程形态:
| Benchmark | 任务 | 规模 | 论文实验用途 |
|---|---|---|---|
| SWE-bench Pro | 真实 issue repair | 731 | RQ1 抽样 300 |
| ProgramBench | 从需求生成完整 repository | 200 | RQ1 抽样 70;RQ2/3 全量 200 |
| GitTaskBench | 仓库中心的灵活真实任务 | 54 | 全量 54 |
SWE-bench Pro 工作流相对固定,通常修改少量文件;ProgramBench 要从头生成数万行级仓库;GitTaskBench 任务目标更灵活。任务形态被视为 Harness 效果的调节变量。
Study 2:NanoHarness 组件消融
作者在 mini-SWE-agent 上实现轻量、模块化 NanoHarness,五类能力可独立开关:
mini-SWE-agent
+ Tool Registry
+ Context Compression
+ Explicit Planning
+ General / Task-Specific Subagents
+ Lazy Skills
= NanoHarness在 ProgramBench 全量 200 题上,用 Qwen3.7-Max 与 DeepSeek-V4-Pro 测每个单项和全量组合,同时收集 step、tool call、prompt/response token 与轨迹失败模式。
五个组件到底实现了什么
Tool Registry
把 mini-SWE-agent 原本依赖 Bash 的交互升级为原生结构化工具:读文件、局部编辑、glob、shell 等。工具统一注册、描述和调用,减少模型拼命令与解析输出的负担。
这与 SWE-agent 的 ACI 结论一致:仓库操作的结构不是“外围 UI”,会直接改变模型能够稳定完成的行为。
Context Compression
超长工具输出先持久化,再生成压缩摘要;达到约 350k token 预算、手动触发或上下文报错时压缩,并保留最近 20 条消息。日志保留用于审计。
这实现了“完整事件存储”和“模型可见视图”的分离。但摘要可能丢失需求细节、接口约束和调试状态,正是论文后来观察到负效应的来源。
Explicit Planning
类似 TodoWrite 的计划工具允许 Agent 维护最多 10 个 todo;若多轮不更新,Harness 注入提醒。它是轻量外部状态,不是一次性让模型先生成完整大计划。
Subagents
父 Agent 保留任务控制、预算和最终提交,子 Agent 使用新上下文、共享 workspace 和受限工具 whitelist,完成后返回结构化报告。禁止嵌套委派,并记录子轨迹。
论文区分两类:
- 通用 SE 子 Agent:需求分析、架构、代码生成、测试、缺陷修复;
- 任务特定子 Agent:行为分析、差分测试、提交审查。
这个区分最后比“是否多 Agent”更重要。
Lazy Skills
主 prompt 只暴露技能名称与简述,需要时再加载完整流程知识,覆盖实现、调试、测试、fuzzing 与最终审查。目标是减少启动 prompt,同时提供可复用 procedure。
执行协议
所有模型温度设为 0。SWE-bench Pro、GitTaskBench 最多 250 步,ProgramBench 从原 benchmark 的 1,000 步降到 300 步;每题 6 小时 wall-clock、3 次重试上限。
容器任务禁网,分配 20 CPU、60GB 内存,容器最长 7 小时并禁用 SYS_PTRACE。GitTaskBench 在本地隔离工作目录并阻止越界操作。NanoHarness 子 Agent 最多 50 轮。
这些细节非常重要:Harness 结果依赖巨大的执行预算,不能只看最后百分点而忽略资源约束。
RQ1:复杂 Harness 是否总是更好
论文观察到交互效应,而非单调规律:
- 在 SWE-bench 类 issue repair 上,OpenCode 对弱/中等模型帮助较明显;模型越强,边际收益趋于缩小;
- 在 ProgramBench 与 GitTaskBench 这类开放、长程仓库任务上,复杂 harness 更像能力放大器,强模型更能利用额外机制;
- 较弱模型可能无法可靠使用复杂工具和工作流,反而承担额外提示与协调负担。
所以“先进 Harness 能提升任何模型”与“模型足够强后 Harness 不重要”都过于简单。效果取决于 model × task × harness。
RQ2:组件级结果
最稳定的正收益
| 单组件 | Qwen3.7-Max | DeepSeek-V4-Pro | 解读 |
|---|---|---|---|
| Tool Registry | +4.57 pt | +3.54 pt | 结构化仓库操作稳定有效 |
| Task-Specific Subagents | +5.91 pt | +4.46 pt | 定向探索与验证收益最大 |
Explicit Planning 只有小幅正收益;Lazy Skills 对 DeepSeek-V4-Pro 帮助比 Qwen 更明显,说明 procedure 能否被正确调用取决于模型。
两个重要负结果
Context Compression 让 Qwen3.7-Max 降 4.86 pt,DeepSeek-V4-Pro 降 3.85 pt。ProgramBench 需要长期保留细粒度需求、接口和实现状态,压缩节省 token,却可能抹掉后续调试仍需的信息。
General Subagents 对两种模型也都不利。泛化角色产生协调开销,返回产物未必对 repository generation 的细粒度约束有用。相比之下,行为分析、差分测试和提交审查等任务特定委派更可操作。
组合结果:非加法,但整体有效
| Harness | Qwen3.7-Max | DeepSeek-V4-Pro |
|---|---|---|
| mini-SWE-agent | 42.88 | 45.14 |
| NanoHarness | 50.25(+7.37) | 51.35(+6.21) |
| OpenCode | 51.68 | 52.48 |
| Claude Code | 52.33 | 52.76 |
全量 NanoHarness 接近产品级 Harness,但收益小于正向单组件简单相加。负组件在组合中仍存在,组件之间也会竞争上下文、预算和控制权。结论是“编排质量决定组合效果”,不是“功能越多越好”。
RQ3:收益是否只是多花 token
论文的行为统计提供更强证据:
- Task-specific subagents 让 tool calls 在 Qwen 上增加约 115.76%,DeepSeek 上增加约 73.10%;
- Context compression 把 prompt token 分别降低 54.29% 与 77.02%,但分数同时下降;
- 完整 NanoHarness 让 tool calls 增加 131.18% 与 83.58%,prompt token 只增加 16.37% 与 7.26%,同时分数提高 7.37/6.21 pt。
作者据此推断,收益更像是更有结构的 repository interaction,而不只是更大 prompt 预算。这个推断合理,但仍不是严格等成本因果实验:工具调用和 wall-clock 也属于额外计算。
对 Harness 设计最有价值的结论
组件要按任务做门控
不要默认全开。Issue repair、repository generation、web task 和客服政策任务需要不同机制。可把任务分类结果作为配置选择输入,并保留回退到轻量 loop 的能力。
压缩目标不能只是 token
上下文压缩应区分:不可丢的需求与接口、可重新获取的工具输出、已经失效的旧视图、需要保留的失败证据。应通过任务成功率和事实保留率评估,而不是只看压缩比。
子 Agent 要有窄契约
“你是通用软件工程专家”太宽。有效委派应规定输入、产物、工具、预算和验收,例如“用差分测试找出行为不一致,并返回最小复现与相关文件列表”。
结构化工具通常是首选投资
相对复杂多 Agent,工具 registry 边界清晰、易测试、收益更稳定。先改善搜索、读取、局部编辑和验证接口,再增加组织结构。
独立复现应怎样做
这篇论文很新,最重要的是复现而非转述:
- 固定一个公开权重模型、一个公开任务集和严格总预算;
- 从 mini harness 开始,每次只加一个组件;
- 每个配置至少运行多个种子,不能只用 temperature 0 当作无随机性;
- 报告成功、步数、tool calls、prompt/response token、wall-clock 和资源;
- 为 context compression 做事实保留测试;
- 为 subagent 比较 general、task-specific 与相同预算的单 Agent;
- 保存全部配置与轨迹,让组件效果可审计。
最好再换一个非 ProgramBench 任务验证单组件结论,尤其是压缩和子 Agent 的负结果是否迁移。
证据边界与威胁
作者自己列出两类主要威胁:只研究五个代表组件,可能漏掉重要机制;模型只覆盖 Qwen、DeepSeek 两个家族。组件实验主要集中在 ProgramBench,外部有效性有限。
还应额外注意:
- 论文是未同行评审的极新预印本;
- OpenCode、Claude Code 等产品级 Harness 快速变化,版本固定非常关键;
- 多个 benchmark 本身也在 2025–2026 年出现,训练污染尚难判断;
- 300/70 的抽样虽配对使用,仍有抽样方差;
- temperature 0 不保证 API、工具和环境确定;
- 组件实现质量会与组件概念混在一起;
- 预算没有完全归一为相同 wall-clock 或工具成本。
因此最稳妥的结论是:Harness 确实值得作为独立实验对象,组件效果高度异质且有交互;还不能把这组具体百分点当作跨模型、跨任务的普遍常数。
它在论文谱系中的位置
ReAct 给出最小循环,SWE-agent 证明 ACI 会改变表现,OpenHands 展示完整运行时,BrowserGym 统一实验接口。这篇预印本再向前一步:把产品中常见的 Harness 能力拆成开关,在固定模型与任务下做消融。
如果后续同行评审与独立复现成立,Harness 研究将从“系统实现经验”走向更成熟的问题:组件的主效应、交互效应、任务适配与成本前沿。