AutoSaddler: Automatic Harness Optimization with Durable Updates from Agent Execution Traces
Sungho Park, Wonjoong Kim, Rongyuan Tan, Jue Zhang, Wook-Shin Han, Pengfei Gao, Chanyoung Park, Yongqiang Yao, Rao Fu, Elsie Nallipogu, Qingwei Lin, Saravan Rajmohan, Dongmei Zhang
cs.AI, cs.CL, cs.LG, cs.MA, cs.SE
2026-08-24
微软把agent外围harness当代码做离线优化:诊断失败轨迹、打结构化补丁、用验证集筛能泛化的改动。三套长程基准相对手工基线分别涨9.0、9.6、10.0个百分点。
长程 agent 的失败往往不是模型一次答错,而是十几步工具调用里局部小错叠起来。业界的应对是在模型外面加一层 harness:系统提示、工具接口、运行时钩子和循环控制。这层东西改对了,成绩会明显上去;但搜索空间大,每评一次都要跑完整轨迹,人工调既慢又贵。
现成的自动方案多半只改提示,或者让编码 agent 对整份代码库随便改。前者够不着工具和中间件,后者容易写成只修当前失败轨迹的热补丁。换模型、换任务域时,这套手工资产基本要重做一遍。
AutoSaddler 把 harness 优化写成离线小批量学习。优化空间只含三块:提示、工具、中间件(钩子和 agent 循环),不碰记忆或技能库,因为设定里任务彼此独立。
每轮在训练集小批量上跑当前 harness,然后进入诊断-补丁会话。诊断 agent 基于 Claude Agent SDK,可以翻失败轨迹和 harness 源码,而不是把整条轨迹塞进一次浅层反思。补丁按类型发出:提示规则增改、新工具/参数/实现修复、工具说明修改、PreToolUse 钩子、基础设施和循环逻辑。这些又分成 Capability 补丁(改可执行代码)和 Steering 补丁(只改文本)。调度上先改能力、再改文案,类似学习率从大到小。
小批量上分数提高后,再上开发集看是否泛化。无论是否采纳,反思会话会把结果分成修好、回退、仍失败、仍通过四类,连同分数写进 EvoDAG。演化会话可以跨谱系重组历史补丁,而不是只在当前版本上继续改。预算用尽后,取开发集分数最高的候选,测试集只评一次。
底层模型默认 Claude Opus 4.6。基线分别是 GAIA2 默认 ReAct、SWE-agent、Terminus 2;自动对照是提示进化的 GEPA 和同样用 CA-SDK 的 Meta-Harness。训练/开发/测试按任务组切开,例如 SWE-Bench Pro 训练集是 qutebrowser,测试是 Ansible、Flipt、Element-web。
| 基准 | 手工基线 | 最强自动基线 | AutoSaddler |
| GAIA2 Pass@1 | 53.0% | GEPA 54.6% | 62.0% |
| SWE-Bench Pro | 37.3% | GEPA 42.5% | 46.9% |
| Terminal-Bench 2.0 | 40.0% | Meta-Harness 43.3% | 50.0% |
Terminal-Bench 上还高过人工精调的 Terminus KIRA(47.5%)2.5 个百分点。独立再跑一次 GAIA2 得到 58.6%;换训练 Universe 得到 57.4%。把任务模型换成 Haiku 4.5、harness 仍用 Opus 优化出来的那份,还能比基线高 5.6 个百分点。
效率差更明显。GAIA2 开发集上,AutoSaddler 大约 1,000 次任务执行到 72.3%;GEPA 和 Meta-Harness 大约 2,800 次才停在 64.6% 和 61.5%。按用于学习的轨迹计,它 147 条就到峰值,约为 Meta-Harness 1,400 条的十分之一。
消融里,去掉泛化筛选伤害最大:GAIA2 从 62.0% 掉到 50.6%,已经低于手工基线。去掉深度诊断到 57.8%,去掉结构化干预到 56.9%。没有结构约束时,91.5% 的补丁塌成改文案;而新工具、循环改动、基础设施改动的小批量接受率分别是 83%、71%、67%,完整系统把这类补丁的占比拉到 25% 以上。Capability 补丁修好率和 Steering 接近(55% 对 58%),但回退更少(8% 对 17%)。
做 agent 产品的人大多把时间花在调提示和工具上。这篇给出一套可复用的离线流程:失败要深挖到代码,改动要分类,留下的补丁要能通过开发集。对已经有可评测集的内部 agent,这比再训一遍基座便宜,也比无限加上下文记忆更可控。
它不是在线自我进化,也不改模型权重。换一个能跑的基座、配上可执行的评测,这套流程可以直接套。
优化器和任务 agent 都是 Opus 4.6,算力不低;论文承认单次补丁的优化器侧花费更高,靠少评轨迹把总账打平。SWE-Bench Pro 的 Element-web 上 GEPA 仍略高(45.2% 对 43.5%),平均优势不能理解成每个仓库都赢。任务被假设成无状态、互相独立,记忆和技能库不在搜索空间里。测试集只评三次、优化只跑一轮,方差还在。正文把 SWE-Bench 增益写成 +8.4 个百分点,但 46.9 减 37.3 是 9.6,和摘要一致,应以表为准。