一个被忽视的问题:harness 到底能不能替模型扛事

搞智能体的人近几个月都在纠结同一件事:到底是 harness(那套提示、工具、检查的外壳)在决定能力,还是底模自己在决定。Stanford 这篇 arXiv 2610.11655 给了到目前为止最可操作的答案。它的办法很朴素——把每一次失败运行,按最早出现的失败信号贴上标签,再分成两类:一类是过程失败,比如调用被拦、陷入无意义循环、步数预算耗尽;另一类是内容失败,也就是交付出来的方案本身就比较糟。结论也干脆:过程失败靠演化 harness 去修,内容失败只有训练权重才救得回来。

先读失败信号,再决定动哪里过程失败卡死的调用、无意义的循环步数预算耗尽→ 交给 harness(提示/工具/检查)内容失败交付的方案本身就很糟光改外壳救不回来→ 交给权重(LoRA 微调)循环与停滞走 harness 杠杆;烂方案走权重杠杆论文来源:arXiv 2610.11655(Stanford)
图|Stanford 这篇把失败先分成过程与内容两类:卡死、循环、预算耗尽靠改 harness,方案本身差只能靠训权重——两条杠杆不要混。

在 DeepPlanning 上,一套自演化的 harness 把 Qwen3.5-4B 的留出率从 0.16 抬到 0.30(交付率从 55% 到 90%),9B 从 0.32 到 0.44。但注意,无论 harness 怎么演化,那些交付了烂方案的运行占比几乎纹丝不动。真正把 9B 的内容失败从大约四分之一砍到二十分之一的,是拿演化后的 harness 运行轨迹去训一个 LoRA 适配器——而且这个 LoRA 单靠自己,就追平了整轮 harness 演化的成绩。换句话说,harness 把下限抬上去了,却碰不到内容质量的天花板。

读失败信号,再决定动哪根杠杆

这张图的价值不在某个百分比,而在它把工程直觉变成了可执行的分工。卡死、循环、预算耗尽,这些交给 harness 去调提示、补工具、加检查;方案本身就是歪的,别指望改外壳能救,老老实实回去训权重。在 WebArena-Lite 上,演化循环对 117 个未见任务只带来 0.09 的提升,而且增益几乎都活在模型看到的东西里,适配器那边加不上去——这又反过来提醒,换环境时,harness 和权重各自的边界在哪,得重新量。

数据说了同一件事Qwen3.5-4B:0.16 → 0.30 留出Qwen3.5-9B:0.32 → 0.44LoRA 在演化轨迹上训练:9B 内容失败约 25% 降到 1/20,单独追平整轮WebArena-Lite:+0.09(117 个未见任务),增益在模型看到的东西上
图|自演化 harness 把 4B 的留出率从 0.16 抬到 0.30、9B 从 0.32 到 0.44,但内容失败的硬骨头只有 LoRA 啃得动。

对做 Agent 框架的团队,这篇等于给了一把尺子:先别急着堆更复杂的 harness,先把失败分分类。很多团队把大量精力花在调提示和加护栏上,确实能解决卡死和循环,但如果是模型本身想不出好方案,那部分投入基本是打水漂。该把资源挪到数据、轨迹和微调上,而不是无限加戏给外壳。harness 很重要,但它有自己的天花板,认清这根线,比盲目相信「调一调外壳就能更强」要实在得多。