← 返回 2026-08-26

AutoSaddler:基于智能体执行轨迹的持久化自动Harness优化框架 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 📅 2026-08-24 👍 62 2026-08-30 18:30
Harness优化 LLM智能体 执行轨迹诊断 自动提示优化 进化搜索

将Harness优化建模为离线学习,用失败轨迹驱动诊断、修补与进化,产出持久更新

前置知识

Agent Harness(智能体外框架)

harness 指包裹在 LLM 之外、决定智能体实际行为的一切系统层:系统提示词与行为规范($\theta_{\text{prompt}}$)、可用工具及其接口($\theta_{\text{tool}}$)、以及 hooks、agent-loop 等运行时控制逻辑($\theta_{\text{middleware}}$)。同一个模型配上不同的 harness,长程任务成功率可以相差十几个百分点;LangChain 等社区的 harness 工程实践表明它是提升智能体可靠性最有效的杠杆之一。

本文的优化对象就是 harness 本身,$\theta = (\theta_{\text{prompt}}, \theta_{\text{tool}}, \theta_{\text{middleware}})$ 三元组是全文的搜索空间定义,不懂 harness 就无法理解论文到底在优化什么。

Mini-batch 离线学习

机器学习的标准训练范式:把数据切成小批(mini-batch),每批做一次前向、计算损失、更新参数,循环多个 epoch,并用独立验证集防止过拟合。AutoSaddler 把这套流程搬到文本空间:任务集划分 train/dev/test,每个 mini-batch 的失败轨迹充当损失信号,harness 补丁相当于参数更新 $\Delta\theta$,dev 集评估相当于模型选择与早停。

论文的整个迭代循环、rollout 预算 $K$、返回 dev 最优候选的协议都是 mini-batch 学习的直接类比,理解它才能看懂 Figure 2 的流程与文本梯度反向传播的对应关系。

Pass@1

智能体评测的常用指标:每个任务只执行一次(不多次采样取最佳),按最终输出是否匹配标准答案判定成败,成功任务占总任务数的比例即 Pass@1。由于 LLM 采样与环境交互存在随机性,同一 harness 多次运行结果会波动,所以论文在每个测试集上重复 3 次并报告均值±标准差。

论文所有主表(Table 2、Table 3)报告的都是 Pass@1,目标函数 $J(\theta)$ 的期望也正是围绕这类任务级成败指标 $\mu(\hat{y}, y^*)$ 定义的。

Claude Agent SDK(CA-SDK)

Anthropic 提供的智能体开发框架,内置文件系统访问、上下文管理与 hooks 等能力。AutoSaddler 的三个优化器代理(诊断-补丁、反思、进化)都构建在 CA-SDK 上:正因为有文件访问与上下文管理能力,它们才能分块检索超长执行轨迹、读写 harness 源码库,而不要求整条轨迹塞进 LLM 的上下文窗口。

CA-SDK 是深度诊断可扩展到超长轨迹和 mini-batch 批量诊断的基础设施,也是消融中深度诊断带来 +4.2pp 的技术前提,同时是复现本文的主要外部依赖。

EvoDAG(演化有向无环图)

AutoSaddler 的过程记忆:一个有向无环图 $G=(V,E)$,节点是历史上探索过的每个 harness,携带该次更新的教训、补丁描述与评估分数;边表示父子版本之间的补丁 diff $\Delta\theta$。进化代理可查阅全图、从任意祖先分支重组成功组件生成新候选 $H_{n+1}$,类似进化搜索的种群记忆,用于跳出单线条贪心优化的局部最优。

EvoDAG 是泛化感知选择的载体,消融中去掉反思+EvoDAG 会让 GAIA2 从 60.7% 崩到 44.9%,理解它才能理解框架如何积累与复用历史经验。

Capability 补丁 vs Steering 补丁

论文对补丁的高层分组:Capability 补丁修改可执行代码或编排逻辑(新增工具、参数修改、实现修复、基础设施变更、agent-loop 变更),改变智能体能做什么;Steering 补丁是纯文本编辑(提示词规则、工具描述、hook 提醒语),只改变倾向做什么。实验显示 Capability 补丁修复率与 Steering 相当(55% vs 58%)但回归显著更少(8% vs 17%),是更持久的更新。

这一分组催生了类似学习率调度的相位补丁调度(先 Capability 后 Steering),也是 Figure 3 与结构化干预消融(62.0% vs 56.9%)的分析主轴。

研究动机

尽管 LLM 能力快速提升,智能体在长程多步任务上仍呈现参差不齐的智能(jagged intelligence):相邻甚至更简单任务的表现差异巨大,局部小失误会在多轮交互中复利放大为整体任务失败。一条被验证的路径是在 LLM 外围加一层 harness(提示词规范、工具配置、运行时控制逻辑),但人工调优代价高昂:设计空间横跨 prompt、工具接口与 agent-loop 控制流,每个候选 harness 都要实际执行大量 rollout 才能看出成败,事后阅读冗长的执行轨迹又需要大量人力。现有自动化尝试各有短板:GEPA 一类方法只迭代优化系统提示词,覆盖不了工具与中间件层,在 GAIA2 上仅达 54.6%;Meta-Harness 虽把优化目标扩展到整个 harness,但补丁完全无结构约束,论文分析显示无约束设置下 91.5% 的补丁退化为低风险的文本编辑,高价值的代码级补丁只占 4%,且其流程不原生支持训练/验证集划分,无法感知泛化、容易过拟合单条轨迹。

本文的目标是本文目标是把 harness 优化形式化为预算受限的离线学习问题:优化空间定义为 $\theta = (\theta_{\text{prompt}}, \theta_{\text{tool}}, \theta_{\text{middleware}})$,在 rollout 预算 $K$ 内最大化任务分布上的期望性能 $J(\theta) = \mathbb{E}_{(x,y^*)\sim\mathcal{T}}\;\mathbb{E}_{(\tau,\hat{y})\sim P_\theta(\cdot|x)}[\mu(\hat{y}, y^*)]$,$\mu$ 为 Pass@1 等任务级指标。具体目标是构建 AutoSaddler 框架,从 mini-batch 的失败执行轨迹中自动提取信号,迭代产出持久的 harness 更新——改进未来所有任务的行为,而非对单条失败轨迹打临时补丁;并要求更新在验证集以及更换底层模型(Opus 4.6 到 Haiku 4.5)场景下依然有效,最终在 GAIA2、SWE-Bench Pro、Terminal-Bench 2.0 上分别超过基线 harness 9.0、9.6、10.0 个百分点。

与已有工作不同的是,本文的独特之处在于把三个此前分散的洞察组合成一个完整的训练循环。第一,诊断必须深:不同于自动 prompt 优化中常见的单次 LLM 反思(把轨迹和评测结果塞给模型问一句失败原因),AutoSaddler 借助 Claude Agent SDK 的文件访问与上下文管理能力,让诊断代理同时主动探索执行轨迹和 harness 源码库,平均每个优化步多执行 6.2 次工具调用、5.8 次文件访问。第二,干预必须结构化:论文提出 Prompt/Tool/Middleware 三类别八子类的补丁分类法,并按修改可执行代码还是纯文本分为 Capability/Steering 两组,再用类似学习率调度的相位补丁调度先探索 Capability 后转向 Steering。第三,选择必须泛化感知:mini-batch 验证、dev 集评估、以及记录全部演化历史的 EvoDAG 有向无环图共同过滤过拟合单轨迹的补丁。与 Darwin-Gödel Machines 等自指式方法不同,它不要求优化器与任务代理同一,而是专注有限预算下的外部 harness 演化。

核心方法

直觉上,AutoSaddler 把改进智能体外框架当成训练一个模型:任务集划分成 $\mathcal{D}_{\text{train}}$、$\mathcal{D}_{\text{dev}}$、$\mathcal{D}_{\text{test}}$,每个迭代 $n$ 先在 mini-batch $\mathcal{B}_n$ 上评估当前 harness $H_n$,失败轨迹相当于损失信号。Diagnosis–Patch Session 生成结构化补丁 $\Delta\theta_n$ 得到 $H'_n = H_n + \Delta\theta_n$,在同一 mini-batch 上验证,仅当 $\hat{J}_{\mathcal{B}_n}(H'_n) > \hat{J}_{\mathcal{B}_n}(H_n)$ 才算改进,再视情况在 dev 集上检验泛化。Reflection Session 对比补丁前后轨迹,把任务归为 fixed/regressed/still-failing/still-passing 四类并提炼教训;Evolution Session 依据存有全部历史的 EvoDAG 提议下一个候选 $H_{n+1}$。论文把 Diagnosis–Patch–Verification 比作文本梯度下的反向传播:文本误差信号不像数值梯度可自动校验,每次更新都要显式走生成假设、干预、实证验证的闭环。预算 $K$ 用尽后返回 dev 分数最高的候选 $\hat{\theta}_{\text{AS}} = \arg\max_{\theta \in V_{K,\text{dev}}} \hat{J}_{\mathcal{D}_{\text{dev}}}(\theta)$,测试集只评估一次,不再用测试反馈修改。

核心创新是三个相互咬合的设计原则,每条针对一个已知失败模式。其一,深度调试式诊断:长程失败很少能用看一遍轨迹就反思来定位,AutoSaddler 不把诊断与补丁生成分开,让 CA-SDK 代理带着 harness 代码库在轨迹中渐进检索证据、列出候选根因再生成补丁;消融显示去掉它 GAIA2 从 62.0% 掉到 57.8%,训练中已接受补丁数在 Epoch 1 结束时为 13 对 5。其二,结构化干预:无约束编辑会让优化坍缩到改提示词的舒适区(91.5% 为 Steering 补丁),分类法加相位调度把高价值 Capability 补丁(新增工具、agent-loop、基础设施变更)占比从 4% 拉到 25% 以上,这类补丁接受率高达 83%、71%、67%。其三,泛化感知选择:只看训练集会保留过宽的补丁——消融版在 Iteration 20 给高频工具挂了过宽 hook,dev 回归率从 8% 飙到 22%,而 AutoSaddler 在 Iteration 4 遇到同样模式时被反思机制拦下;其回归率以每迭代 -0.24pp 下降,消融版反而 +0.16pp 上升。本质区别在于:它产出的是对任务分布生效的持久更新,而非轨迹级热修复。

方法步骤详情

流程是一个七步循环。(1) 评估:当前 harness $H_n$ 在 mini-batch $\mathcal{B}_n$ 上执行,得到成败轨迹与指标。(2) 诊断:Diagnosis–Patch Agent 收到轨迹、评测结果与 harness 代码库 $\theta_n$,通过工具调用渐进检索轨迹细节,识别疑似根因并考虑替代假设;三个代理均基于 Claude Agent SDK,底层 LLM 为 Claude Opus 4.6。(3) 补丁生成:产出结构化补丁 $\Delta\theta_n$,只能改功能逻辑源文件、禁止接触评测与基准数据代码,补丁限于八个子类(Prompt 规则新增/修改、新增工具、参数修改、实现修复、工具描述修复、PreToolUse hook、基础设施变更、agent-loop 变更),并按相位调度先 Capability 后 Steering。(4) 验证:$H'_n$ 在同一 $\mathcal{B}_n$ 上重跑,仅当 mini-batch 分数提升才算改进,再决定是否触发 dev 集扩展评估。(5) 反思:Reflection Agent 按 fixed/regressed/still-failing/still-passing 四类回答定向反思问题(为何有效、为何回归、为何不够、是否有影响),触发 dev 评估时额外反思泛化性。(6) 记忆:教训、补丁描述、mini-batch 结果与指标 $\mu(H'_n)$ 存入 EvoDAG 节点,边表示父子 harness 间的 diff。(7) 进化:Evolution Agent 查阅全图,可从任意祖先重组成功组件合成 $H_{n+1}$,在下一批新 mini-batch 上继续。

技术新颖性

与最近邻工作的差异可以逐条看清。对比 GEPA:那是 prompt 中心的迭代优化,失败信号只用于改系统提示词,而 AutoSaddler 的搜索空间覆盖 prompt、工具与运行时控制逻辑,且长程轨迹需要比浅层反思更深的证据检索。对比 Meta-Harness:同样用编码代理做端到端 harness 优化,但其补丁无结构边界、也不原生支持 train/dev 划分(论文为公平比较喂给它训练加验证并集),AutoSaddler 的分类法与相位调度直接对应消融中 62.0% 对 56.9% 的差距。对比单轨迹失败诊断方法:它们假设轨迹能装进 LLM 上下文窗口,AutoSaddler 借 CA-SDK 的文件访问与上下文管理支持超长轨迹和 mini-batch 批量诊断。对比轨迹级修复:那是任务特定的热修复,本文目标是影响未来行为的持久修复。对比自指系统(Darwin-Gödel、Huxley-Gödel Machines):本文不要求元代理与任务代理同一,聚焦有限 rollout 预算下的外层优化。EvoDAG 驱动的候选选择也是 LLM 增强进化算法在 harness 场景的具体实例化,专门的进化算子留给未来工作。

Overview of AutoSaddler
Figure 2: Overview of AutoSaddler

实验结果

三个基准一致大幅领先。GAIA2(Universe 21/22/27 共 300 任务,3 次运行均值):AutoSaddler 62.0±1.2%,超过手工 Default Agent 53.0±1.5% 达 +9.0pp,也高于最强自动基线 GEPA 54.6±2.5% 与 Meta-Harness 53.2±2.2%。SWE-Bench Pro(Ansible/Flipt/Element-web 共 237 任务):46.9±1.8% 对 SWE-agent 37.3±4.8%(+9.6pp),对 GEPA 42.5% 领先 4.4pp。Terminal-Bench 2.0(40 任务测试集):50.0% 对 Terminus 2 40.0%(+10.0pp),并超过人工专家调优的 Terminus KIRA 47.5% 达 +2.5pp。效率上(Figure 1),AutoSaddler 用约 1,000 次 rollout 达到 72.3% dev 准确率,GEPA、Meta-Harness 消耗约 2,800 次也只饱和在 64.6% 和 61.5%;按用于学习的轨迹数计只需 147 条即达最佳,比 Meta-Harness 的 1,400 条少约 10 倍;选择性评估策略用 391 次 rollout 即达 67.7%。消融(GAIA2):去深度诊断降到 57.8%,去结构化干预降到 56.9%,去泛化感知选择跌得最狠至 50.6%;细粒度上,去相位调度使 60.7% 跌至 54.8%,去 dev 过滤跌至 50.0%,叠加去反思与 EvoDAG 进一步跌到 44.9%。鲁棒性:独立复跑 58.6%,换训练 Universe 得 57.4%(仍 +5.9pp),迁移到 Haiku 4.5 仍有 +5.6pp。

Adopted patch categories, with subtypes labeled as Capability (C) or Steering (S) Patch.
Table 1: Adopted patch categories, with subtypes labeled as Capability (C) or Steering (S) Patch.
Test-set Pass@1 results on GAIA2, reported as mean ± standard deviation over three runs.
Table 2: Test-set Pass@1 results on GAIA2, reported as mean ± standard deviation over three runs.
Test-set Pass@1 results on SWE-Bench Pro and Terminal-Bench 2.0.
Table 3: Test-set Pass@1 results on SWE-Bench Pro and Terminal-Bench 2.0.
Comparison of optimization performance and efficiency on GAIA2. (a) Compute Efficiency (b) Learning Efficiency
Figure 1: Comparison of optimization performance and efficiency on GAIA2. (a) Compute Efficiency (b) Learning Efficiency
Patch type distribution and acceptance: AutoSaddler vs. w/o Structured Intervention. (a) Capability vs. Steering. (b) Patch subtype distribution. (c) Acceptance rate by subtype.
Figure 3: Patch type distribution and acceptance: AutoSaddler vs. w/o Structured Intervention. (a) Capability vs. Steering. (b) Patch subtype distribution. (c) Acceptance rate by subtype.
Performance comparison on the dev-set across iterations. (a) Fix Rate (Base-Failed). (b) Regression Rate (Base-Passed). (c) Dev-Set Net Gain.
Figure 4: Performance comparison on the dev-set across iterations. (a) Fix Rate (Base-Failed). (b) Regression Rate (Base-Passed). (c) Dev-Set Net Gain.
查看结构化数据
任务指标本文基线提升
GAIA2 通用助手任务(Universe 21/22/27,共 300 题) Pass@1(3 次运行均值±标准差) 62.0±1.2% Default Agent(手工)53.0±1.5%;GEPA 54.6±2.5%;Meta-Harness 53.2±2.2% +9.0pp(对手工基线);+7.4pp(对最强自动基线 GEPA)
SWE-Bench Pro 企业级软件工程(Ansible 96 / Flipt 85 / Element-web 56,共 237 题) Pass@1 46.9±1.8% SWE-agent 37.3±4.8%;GEPA 42.5±1.2%;Meta-Harness 35.3±2.0% +9.6pp(对 SWE-agent);+4.4pp(对最强自动基线 GEPA)
Terminal-Bench 2.0 真实终端任务(测试集 40 题) Pass@1 50.0±0.0% Terminus 2 40.0±0.0%;Terminus KIRA(人工专家)47.5±2.5%;GEPA 42.5±2.5%;Meta-Harness 43.3±5.8% +10.0pp(对 Terminus 2);+2.5pp(对人工专家调优的 KIRA)

局限与改进

作者承认与本人观察到的局限。第一,优化器成本不低:论文承认每个补丁的优化器侧货币成本适度偏高,三个代理都是 Opus 4.6 级模型的 CA-SDK 会话,诊断步平均多 6.2 次工具调用与 5.8 次文件访问;且 train/dev/test 划分且任务组互斥这一前提,对没有现成评测集的新领域本身就重。第二,方差与统计功效:TB2 测试集仅 40 题,Pass@1 步长 2.5pp,而 GAIA2 独立复跑从 62.0% 降到 58.6%,单次进化的随机性不可忽视。第三,生态绑定:全部实验基于 Claude Opus 4.6/Haiku 4.5 加 CA-SDK,未验证开源模型或非 Anthropic 工具链;EvoDAG 全图阅读也可能随迭代数增加挤压进化代理的上下文。第四,任务模型假设无状态且独立,明确排除 memory、skill curation 等 harness 组件,多智能体与有状态场景未覆盖。第五,泛化证据限于同一基准内部的跨仓库/跨 Universe 划分,换训练 Universe 后 57.4% 比 62.0% 低 4.6pp,真正的跨域迁移只有初步迹象;自动生成代码补丁的长期安全性(隐性 bug、回归的持续监控)也缺少系统讨论。

独立分析的弱点

独立弱点分析。1) 优化器对 LLM 的依赖是双刃剑:诊断、补丁、反思全由 Opus 4.6 完成,优化器误诊会直接变成坏补丁,mini-batch 验证与 dev 过滤能兜底,但每条坏路径都烧掉昂贵 rollout;改进方向是引入更便宜的先验过滤(静态分析、单测式快速验证)或小模型预筛、大模型精诊。2) 评估瓶颈依旧:即使选择性评估,达到 67.7% dev 也要 391 次任务执行,每个补丁验证至少重跑一整批任务;改进方向是复用历史轨迹做离线策略评估,或按任务难度分层抽样。3) 补丁分类法与相位调度是人工设计的先验,八个子类的边界可能随 harness 形态变化而失效;改进方向是让分类法可学习或按目标代码库结构自适应。4) EvoDAG 节点随迭代线性增长,进化代理需读全图,长时优化的上下文压力限制可扩展性;改进方向是图摘要、节点聚类或层次化记忆。5) 回归率虽被压低(-0.24pp/迭代)但非零,优化结束后 harness 被冻结,缺少部署后的持续监控与回滚;改进方向是把循环延伸为线上持续适应,配影子评估与自动回滚。

未来方向

作者明确留下的方向:其一,把 EvoDAG 上的候选选择换成专门的 LLM 驱动进化算法(显式变异算子、种群管理、多目标选择),目前只是用 CA-SDK 简单实例化;其二,扩展优化空间到 memory、skill curation 等 harness 组件,覆盖有状态与多智能体任务;其三,harness 与模型权重的联合优化(相关工作已出现此类尝试,本文与之正交)。基于成果可延伸的方向:把离线优化循环改造成部署期持续适应,用线上流量做 mini-batch 并配回滚;研究补丁可迁移性的理论刻画——为什么 Opus 上学到的更新能带给 Haiku +5.6pp,能否提炼模型无关的 harness 不变量;将深度诊断代理与可观测性工具(trace 分析、metrics 面板)结合,进一步压低每补丁的优化器成本;以及反向问题——用 AutoSaddler 的失败诊断自动归纳新基准的失败模式分类,辅助基准与评测集设计。

复现评估

复现友好度中上。代码与项目网站承诺开源(https://aka.ms/AutoSaddler-website,论文写作时标注 will be available);三个基准(GAIA2、SWE-Bench Pro、Terminal-Bench 2.0)与全部基线(SWE-agent、Terminus 2、GEPA、Meta-Harness)公开可得;Appendix B 给出 EvoDAG 实现与数据划分细节(如 SBP 训练集用 qutebrowser、验证集 Vuls+NodeBB、测试集 Ansible/Flipt/Element-web),Appendix P 提供三个代理的完整指令,附录还含补丁案例、成本分析与搜索轨迹可视化。主要门槛是算力与费用:底层 LLM 为 Claude Opus 4.6(迁移实验用 Haiku 4.5),一次完整优化需数千次任务 rollout 外加三个优化器代理的 CA-SDK 会话;GAIA2 模拟手机 Universe 与 SBP 企业级 repo 的环境搭建也有工程量。有 Anthropic API 预算且熟悉 agent SDK 的团队预计数周可复现主表;个人复现成本偏高,建议先从任务最少、基线最简单的 TB2 入手。