SkillOpt:自进化智能体技能的「执行级」优化策略 SkillOpt: Executive Strategy for Self-Evolving Agent Skills
把智能体技能文档当作可训练参数,用带学习率与验证门控的文本空间优化器迭代修订。
前置知识
智能体技能(Agent Skill)
Skill 是一段可插入到智能体上下文(系统提示或 SKILL.md)中的自然语言文档,封装了工具使用策略、领域启发式、输出格式约束、失败模式等可复用的过程性知识。它允许在不动模型权重的前提下,让一个冻结的智能体通过外部文本实现域适配。
本文的全部论述建立在「技能是适配层」这一前提上;不理解技能如何作为外部状态承载过程性知识,就无法理解为什么 SkillOpt 把它当作可训练对象。
文本空间优化(Text-Space Optimization)
把优化目标从连续参数空间搬到离散文本空间,用 LLM 作为「优化器」根据执行反馈去改写提示或技能文档。代表方法如 TextGrad 用「自然语言梯度」、GEPA 用 Pareto 反思式提示进化。本文把它形式化为一类新的「训练」过程。
SkillOpt 是首个把文本空间优化做得像深度学习那样系统、可控的方法;理解这个类比是读懂全文的关键。
验证门控与拒绝编辑缓冲(Validation Gate & Rejected-Edit Buffer)
借鉴深度学习中「保留验证集」和「梯度丢弃」的思路:每个候选技能只有在独立的 selection split 上严格高于当前分数才被接受(ties 拒绝),被拒绝的编辑连同失败原因一起被记录下来,作为后续反思的负反馈。
这两个机制是 SkillOpt 与「一次性 prompt 重写」最本质的区别:它们把优化从「不可控的自我改写」变成「可审计的提议-测试循环」。
推理时无调用(Zero Inference-Time Model Calls)
SkillOpt 部署时只输出一个约 300–2000 token 的静态技能文件 best_skill.md,目标模型在执行任务时不再调用任何「优化器」模型,仅在 prompt/system 层面接收这段技能。这意味着离线训练时花的高额 API 成本不会在推理时被重复计费。
这是 SkillOpt 相对 GEPA/Trace2Skill 等运行时仍需额外 LLM 调用的方法的工程优势,也是它能「训练一次、跨模型/跨环境复用」的前提。
跨 Harness 迁移(Cross-Harness Transfer)
Harness(执行外壳)指 Codex CLI、Claude Code CLI 这类把模型包在工具调用、文件系统、代码执行沙箱里的执行环境。SkillOpt 通过一个轻量 adapter 把同一份 best_skill.md 注入到不同 harness,验证其在更换工具栈后仍能保持增益。
这是论文最核心的工程价值主张——优化一次、可在多个生产环境复用,避免每个 harness 都要重新做 prompt 工程。
研究动机
前沿 LLM 越来越多地被部署为具备工具、文件、代码执行能力的智能体,单纯的「改 prompt」或「加 system message」已经不能覆盖这些场景下的过程性知识(怎么用工具、按什么顺序推理、输出格式约束)。现有做法大致有三类,但都有硬伤:(1) 人工手写技能既贵又脆,换一个模型或 harness 就得重写;(2) 一次性 LLM 生成技能(one-shot LLM skill)只是把「换种方式写 prompt」做了一遍,论文里它在 GPT-5.5 上 SpreadsheetBench 只拿到 43.2 分,比人类写的 72.9 还差 30 分,且没有任何纠错机制;(3) 自我改写(Trace2Skill、EvoSkill 等)则属于「松散控制的循环编辑」——既没有文本学习率的约束,也没有 held-out 验证集去卡住每一轮更新。直接后果是这些方法在 GPT-5.4-nano 这种弱模型上表现忽好忽坏,比如 Trace2Skill 在 OfficeQA 上甚至比无技能还差 1.2 分(20.9 vs 22.1),说明一次错误的改写就会被部署到目标模型。
本文的目标是论文要做一个「首个系统化、可控的文本空间优化器」:把技能文档当作外部可训练状态,用一个额外的前沿模型作为优化器,把带分数的 rollout 转成「有界」的 add/delete/replace 编辑,并通过独立的验证集严格门控每一轮更新是否被接受。最终产物是一个仅 300–2000 token 的 best_skill.md 文件,部署时不增加任何推理时模型调用。量化目标是:跨 6 个基准、7 个目标模型、3 种执行 harness,共 52 个 (模型, 基准, harness) 评测单元中,做到 52/52 单元都是最佳或并列最佳,并相对 no-skill 在 GPT-5.5 上平均提升 +23.5(直聊)、+24.8(Codex)、+19.1(Claude Code)个绝对百分点。
与已有工作不同的是,已有工作要么把优化对象当一次性 prompt(TextGrad、GEPA),只关心「下一次提问怎么写」;要么把优化对象当无限增长的 skill 库(Trace2Skill、EvoSkill 的 skill folder),让改写毫无节制。前者缺乏过程性知识的持久化能力,后者缺乏深度学习式的训练纪律。SkillOpt 切入的独特角度是把「技能」定位成与模型权重同构的「外部参数」:rollout 批次对应数据、reflection minibatch 对应梯度方向、文本学习率 $L_t$ 对应更新步长、验证集对应 held-out、拒绝编辑缓冲对应负反馈、epoch-wise slow/meta update 对应动量——一套完整的「文本空间训练」纪律。它填补的不是某个基准的数字,而是把 prompt 工程从「手艺」变成「可审计的训练流程」这个范式空白。
核心方法
SkillOpt 的核心直觉是把 LLM 智能体的技能文档当作一个可训练的张量,只不过这个「张量」是用自然语言写的、修改单位是 add/delete/replace 原子操作。给定一个冻结的目标模型 $M$、一个执行 harness $h$、一份初始技能 $S_0$ 和任务集 $D_{tr}/D_{sel}/D_{test}$,SkillOpt 在每一步先让 $M$ 用当前 $S_t$ 在训练集上跑出一个 rollout 批次(forward pass),把带分数的轨迹交给一个额外的前沿优化器模型,让它分 minibatch 反思成败并产出结构化的 add/delete/replace 提案(backward pass),然后按当前文本学习率 $L_t$ 排序并裁剪到 top-$L_t$ 条,把它们 patch 到技能上得到候选 $S_{t+1}'$,最后用 $D_{sel}$ 跑一次验证:严格高于当前 selection 分数才接受,否则把这次编辑连同失败原因写进 rejected-edit buffer,留给后续反思用。整个流程跑 4 个 epoch,每个 epoch 末尾再对「同任务在不同 epoch 技能下的差异」做一次 slow/meta update,把跨 epoch 的长程经验写进技能的一个受保护字段。这个循环里没有任何「神奇」的超能力——它就是「LLM 当优化器 + 严格验证门控 + 文本学习率」三件套的工程化实现,但纪律比以往任何 prompt 优化方法都更接近真实训练。
SkillOpt 相对所有已有方法的本质区别不在算法组件的新颖度,而在「纪律」。TextGrad 把 prompt 优化类比成梯度下降,但只有「梯度」没有「步长约束」「验证集」和「负反馈」;EvoSkill 让 skill folder 不断进化,但每次改写都是无界的;Trace2Skill 蒸馏轨迹里的「教训」,但没有 gate 阻止错误教训被部署。SkillOpt 的关键创新是把深度学习训练的六类工具——rollout batch size、reflection minibatch size、文本学习率 $L_t$ 及其 schedule、held-out 验证集、rejected-edit buffer、epoch-wise slow/meta update——一次性搬到文本空间,并用「严格大于当前 selection 分数(ties 拒绝)」这一条铁律把所有「看似合理的改写」挡在部署之外。结果是同样的优化器 + 同样的训练数据,SkillOpt 能在 GPT-5.5 SpreadsheetBench 上拿到 80.7(直聊),而 GEPA 73.6、Human skill 72.9、LLM skill 43.2、TextGrad 41.1,差距来自纪律而不是优化器容量——论文用 target-matched optimizer 实验证明即便优化器就是目标模型自己,SkillOpt 仍能恢复 56–74% 的强优化器增益,这说明「训练循环本身」是真正贡献者。
方法步骤详情
完整方法分七步,每一步的输入输出都可追溯。第一步是「问题形式化」:技能 $s$ 是一段自然语言策略,注入到 $M$ 的系统提示或作为 SKILL.md 在 harness 中加载;执行返回轨迹 $\tau(s)$ 和标量得分 $r(s) \in [0, 1]$;优化目标是在 selection split 上最大化 $\frac{1}{|D_{sel}|}\sum_{x\in D_{sel}} r(s)$,最终在 disjoint test split 上报告。第二步是「Rollout Forward」:从 $D_{tr}$ 抽一个大小为 $B$(默认 40)的 batch,让冻结的 $M$ 在当前 $S_t$ 下执行,记录消息、工具调用、观察、verifier 反馈等完整证据;支持 accumulation 把多个 rollout 合并成一个 update,把吞吐量与更新频率解耦。第三步是「Reflection Backward」:优化器先把轨迹分成败/胜两组,再把每组分进 reflection minibatch(默认 $B_m=8$),每个 minibatch 独立产出结构化的 add/delete/replace 提案;失败 minibatch 找缺失或错误的规则、成功 minibatch 保留已经管用的行为;局部提案再按「先合并失败/成功各自组,再以失败修正为优先级」的层级合并去重去冲突。第四步是「Bounded Text Update」:合并后的编辑池按预期效用排序,裁到 top-$L_t$ 条(默认 $L_t=4$,cosine 调度从大到小衰减,下限 2),用 patch 模式执行 append/insert/replace/delete;这一步是 SkillOpt 与「无界改写」最关键的隔离带,论文用 ablation 证明「without lr」在 SpreadsheetBench 上从 77.5 跌到 75.7、在 LiveMath 从 61.3 跌到 57.3。第五步是「Validation Gate & Rejected Buffer」:候选 $S_{t+1}'$ 在 $D_{sel}$ 上重跑,严格大于当前 selection 分数才接受,ties 拒绝;被拒的编辑连同分数差一起入 epoch-local buffer,后续反思会收到这份负反馈,让优化器不再重蹈覆辙。第六步是「Epoch-Wise Slow/Meta Update」:epoch 末尾用 20 个任务同时在「上一 epoch 技能」和「当前技能」下采样,按改进/退步/持续失败/稳定成功四类分组,由优化器写一段「长程指导块」到技能的一个 markup-fenced 保护区——这一区域 step 级 edit 改不到,epoch 改写后同样要过验证门。第七步是「Harness-Agnostic Deployment」:通过一个轻量 adapter,best_skill.md 可以在 direct chat(prepend 到 system)、Codex CLI(写入 SKILL.md)、Claude Code CLI(同样 SKILL.md 路径)三种 harness 中一致加载,使跨 harness 迁移成为可能。训练全程在离线阶段跑完,部署时只追加 300–2000 token 的纯文本,零额外模型调用。
技术新颖性
技术新颖性体现在三处。第一是「文本学习率 + schedule」的形式化:$L_t$ 不是超参而是优化器可控的「步长」,支持 constant/linear/cosine/autonomous 四种调度,论文 Table 2 panel e 证明 constant(87.3/80.7/62.1)、cosine(87.1/77.5/61.3)、linear(87.2/72.9/62.9)三种 schedule 表现几乎打平,说明「有界」本身就是创新点,与具体 schedule 形式无关。第二是「markup-fenced 保护区」:epoch 级的 slow update 写入技能文档的一个 fenced 区域,step 级 patch 改不到,这把「快局部学习」与「慢全局经验」在物理上隔离,避免两者互相覆盖——这种空间隔离在普通 prompt 优化里是不存在的。第三是「adapter-only harness 抽象」:所有 harness-specific 差异(system prompt 注入、SKILL.md 路径、tool/trace 抓取)都封装在 adapter 里,optimizer 完全不知道自己在为哪个 harness 优化,这使得同一份 best_skill.md 可以零修改地在 Codex 和 Claude Code 间互换,并在 SpreadsheetBench 上拿到 +59.7 和 +43.6 的跨 harness 增益(Table 4b)。
实验结果
主结果(Table 1)覆盖 6 个基准(SearchQA、SpreadsheetBench、OfficeQA、DocVQA、LiveMathematicianBench、ALFWorld)×7 个目标模型(GPT-5.5/5.4/5.4-mini/5.4-nano/5.2、Qwen3.5-4B、Qwen3.6-35B-A3B)×3 种 harness(direct chat、Codex、Claude Code),共 52 个评测单元,SkillOpt 在全部 52 个单元上都是最佳或并列最佳。GPT-5.5 直聊场景下,6 个基准从 no-skill 平均 58.8 提升到 SkillOpt 82.3(+23.5),相对「每单元 oracle 选最佳基线」的 76.9 还高 +5.4 个百分点——这是同时压过 human、LLM、Trace2Skill、TextGrad、GEPA 五类对手的统计上限。过程性基准涨幅最大:SpreadsheetBench 41.8→80.7(+38.9)、OfficeQA 33.1→72.1(+39.0)、LiveMath 37.6→66.9(+29.3),因为这些任务对工具使用和输出格式约束最敏感。弱模型受益最显著:GPT-5.4-nano 6 基准平均 +26.7、Qwen3.5-4B 上 ALFWorld 从 30.6 跃升到 81.3(+50.7、×2.66),说明「过程性知识能补足小模型权重里没有的程序性 gap」。工具 harness 同样有效:GPT-5.5 在 Codex 上 5 基准平均 +24.8,超过 EvoSkill 14.0;在 Claude Code 上 +19.1,超过 EvoSkill 3.2;EvoSkill 本身已经把 5 基准平均从 57.8 抬到 73.7,SkillOpt 又加了 9.4–17.5 个百分点。Ablation(Table 3)证明四个核心组件缺一不可:去掉 rejected buffer 在 SpreadsheetBench 上掉 4.6、去掉 meta skill 掉 1.8、同时去掉 meta skill 和 slow update 在 SpreadsheetBench 上骤降 22.5(77.5→55.0),是所有消融里最大的单点损失。Optimizer 强度(Table 5)显示 GPT-5.5 强优化器相对 target-matched 优化器在 GPT-5.4-nano SpreadsheetBench 上多拿 +7.1(19.0 vs 11.9),但 target-matched 仍能恢复 56–74% 的增益,证实「训练循环本身」就贡献了大部分价值。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| SearchQA (direct chat, GPT-5.5) | accuracy (%) | 87.3 (+9.6) | No skill 77.7;GEPA 84.8;Human 81.8 | +9.6 over no-skill;+2.5 over 最强基线 GEPA |
| SpreadsheetBench (direct chat, GPT-5.5) | exact-match (%) | 80.7 (+38.9) | No skill 41.8;GEPA 73.6;Human 72.9;LLM 43.2;TextGrad 41.1 | +38.9 over no-skill;+7.1 over GEPA;证明过程性基准涨幅最大 |
| OfficeQA (direct chat, GPT-5.5) | accuracy (%) | 72.1 (+39.0) | No skill 33.1;GEPA 63.9;Human 66.9;Trace2Skill 65.7 | +39.0 over no-skill;+5.2 over 最强基线 Human |
| DocVQA (direct chat, GPT-5.5) | accuracy (%) | 91.2 (+12.4) | No skill 78.8;Trace2Skill 90.6;LLM 89.6;Human 90.1 | +12.4 over no-skill;+0.6 over 最强基线 |
| LiveMathematicianBench (direct chat, GPT-5.5) | accuracy (%) | 66.9 (+29.3) | No skill 37.6;Trace2Skill 52.0;TextGrad 49.2;GEPA 43.2 | +29.3 over no-skill;+14.9 over Trace2Skill |
| ALFWorld (direct chat, GPT-5.5) | success rate (%) | 95.5 (+11.9) | No skill 83.6;LLM 93.3;GEPA 85.8;Human 91.8 | +11.9 over no-skill;+2.2 over LLM skill |
| SpreadsheetBench (Codex harness, GPT-5.5) | exact-match (%) | 85.0 (+57.5) | No skill 27.5;EvoSkill 67.5;Human 50.7;LLM 25.0 | +57.5 over no-skill;+17.5 over EvoSkill |
| SpreadsheetBench (Claude Code harness, GPT-5.5) | exact-match (%) | 80.4 (+58.3) | No skill 22.1;EvoSkill 75.0;Human 37.1;LLM 37.1 | +58.3 over no-skill;+5.4 over EvoSkill |
| SpreadsheetBench (Qwen3.5-4B direct chat) | exact-match (%) | 23.9 (+14.6) | No skill 9.3;Human 16.4;GEPA 16.9;LLM 10.4 | ×2.57 over no-skill;+7.5 over Human |
| ALFWorld (GPT-5.4-nano direct chat) | success rate (%) | 69.4 (+35.1) | No skill 34.3;LLM 65.7;GEPA 68.7;Human 29.9 | ×2.02 over no-skill;+0.7 over GEPA |
| DocVQA (GPT-5.4-nano direct chat) | accuracy (%) | 80.2 (+49.4) | No skill 30.8;Trace2Skill 77.3;Human 73.5;LLM 71.7 | ×2.60 over no-skill;+2.9 over Trace2Skill |
局限与改进
作者承认的局限包括:(1) 验证集大小与训练集强相关,对训练样本极少的基准(LiveMath 每 epoch 仅 35 个)需要专门调小 batch size;(2) ALFWorld 依赖持续具身交互,在 Codex/Claude Code harness 下没法直接跑,52 个 cell 里两个 ALFWorld 单元被留空;(3) 跨 benchmark 迁移在 OlympiadBench→Omni-MATH 上只剩 +1.3 到 +3.7 的小幅正增益,说明当任务格式也变时,过程性规则的复用有限。我自己观察到的额外限制:(4) SkillOpt 假设了「selection split 与 test split 同分布」,因为 gate 是用 selection 分数决定是否接受的,如果 test 分布漂移,gate 选出的「最佳」技能可能不是 test 上的最佳——论文 Figure 3 虽显示 validation 与 test 趋势大致一致,但跨 benchmark 迁移时这种假设明显更脆弱;(5) 强优化器(GPT-5.5)的 API 调用成本是普通 prompt 优化的若干倍,Table 6 显示 SearchQA 训练 213.8M tokens、DocVQA 188.2M tokens,单位点增益成本 37.9M/46.4M tokens,对中小团队是显著门槛;(6) 「文本学习率」目前仍是离散编辑数(默认 4 条),没有连续可微的「梯度大小」概念,因此类比深度学习的优化理论(如收敛性证明)暂时无法直接套用。
独立分析的弱点
独立分析几个值得改进的弱点。第一,**验证门控是「严格大于」但 selection 集合固定**,对多任务混合基准(如同时跑 QA 和 spreadsheet 的真实业务)容易在某个子任务上「过拟合 gate」——建议改成「分任务子集分别 gate」或采用多目标 Pareto 选择,类似 GEPA 的思路但加进 rejected buffer。第二,**rollout batch 来自 $D_{tr}$ 的均匀采样**,没有难度感知;对 OfficeQA 这种 24 步工具链任务,均匀采样会让简单样本稀释 gradient;可借鉴课程学习,按历史失败率上采样。第三,**「1–4 个 accepted edit」是结果而非约束**——这是验证集过滤后的「幸存者偏差」,并不能说明「只需要 4 个 edit」,实际 optimizer 每轮提出几十条;论文若能加一个「反事实:假如允许前 10 个 edit 全接受」实验,会更清楚验证 gate 究竟剪掉了多少有用更新。第四,**训练 token 成本随 benchmark 长度爆炸**(SearchQA 213.8M、DocVQA 188.2M tokens),可借鉴 active learning 让 reflection 只针对「模型不确定」的样本。第五,**adapter 抽象目前对 embodied 任务(ALFWorld)支持有限**,导致 harness 单元留空;可考虑把 ALFWorld 的 50 步 trajectory 也封装成统一 trace summary,让 harness-agnostic 真正落地。
未来方向
作者在 Outlook 段提出四个方向:skill 库跨域共享基础设施、optimizer 侧 meta skill 跨 benchmark 复用、无 reward 或基于偏好的 validation gate 用于开放式任务、把优化好的 skill 蒸馏回模型权重作为「权重级适配的跳板」。基于论文成果可延伸的方向还包括:(1) 把 rejected-edit buffer 从「epoch 局部」升级为「全局」,让长程负反馈在跨 epoch 训练中也起作用,可能解决 OlympiadBench→Omni-MATH 这类「换 benchmark 就丢失经验」的问题;(2) 引入多目标 Pareto gate,同时优化「准确率」「输出格式合规率」「工具调用次数」等,把单目标 $r(s) \in [0,1]$ 换成向量,进一步向 GEPA 的多目标思路靠拢;(3) 把 $L_t$ 从「编辑条数」升级为「token 数」或「embedding 距离」,得到更连续的「步长」概念,为未来的收敛性分析打开门;(4) 把 optimizer 换成 on-policy 训练的 RL agent,让优化器本身随训练进化(meta-learning 思路)。
复现评估
代码已开源在 https://aka.ms/SkillOpt,主要数据集(SearchQA、SpreadsheetBench、OfficeQA、DocVQA、LiveMathematicianBench、ALFWorld、OlympiadBench、Omni-MATH)均为公开可下载的学术基准,论文给出了 split_seed=42 的确定性 train/selection/test 切分。算力方面复现成本集中在 GPT-5.5 optimizer 的 API 调用上,按 Table 6 的 token 量粗估,单 benchmark 完整跑一次约 20M–200M tokens 量级,按前沿 API 定价折算 100–1000 美元/基准;6 基准 ×7 模型 ×3 harness = 126 个 cell 全跑一次需要数十万美元级 API 预算——这意味着中小团队难以完全复现 52/52 cell 的结果,但可以聚焦单 (基准, 模型) 对做 partial replication。复现难度低-中:adapter 接口定义清晰、best_skill.md 是纯文本可肉眼审计,但 optimizer 端的 reflection/merge/ranking prompt 模板论文里没完整给出,需要看代码;建议先用 Table 4 的 cross-harness transfer 实验(Codex→Claude Code SpreadsheetBench +59.7)做 sanity check,因为这是单一 benchmark 单一模型就能复现的最强信号。
论文图表
左半部分用参数空间→文本空间的类比展示 SkillOpt 的核心抽象:参数→技能文档、梯度→轨迹衍生编辑方向、学习率→编辑预算、验证集→held-out 门控、minibatch→批次/子批次/日程、动量→epoch 级 slow/meta update。右半部分是流程示意:目标模型用当前技能 $S_t$ 跑任务产生轨迹,前沿优化器把轨迹转成 bounded add/delete/replace,被验证门控接受的更新导出为可复用技能。
这是全文的「思想图」,把深度学习训练与文本空间优化逐项对应,是理解后文所有技术组件($L_t$、rejected buffer、slow update)的入口;没有它读者很难 get 到「SkillOpt 把 prompt 工程当训练做」这个核心范式。
六个基准各列出从 best_skill.md 抽取的一条代表性规则,verbatim 引用:SearchQA「从线索词推断期望答案类型再选最短规范实体」;SpreadsheetBench「先审 workbook 结构与公式,再写静态值覆盖完整目标范围」;OfficeQA「把 oracle 解析的页面当主证据,锁表/日期/单位上下文,按要求四舍五入输出」;DocVQA「表格/表单/图表先绑定到具体行/列/字段再复制对齐答案」;LiveMath「最强陈述 MCQ 按定理强度排序」;ALFWorld「维护 visited/frontier ledger,重复同类失败后分散搜索」。
这是 SkillOpt「可解释性」主张的最强证据——让读者亲眼看到一段自动学习出来的过程性规则长什么样,是否比手写技能更精炼、更有纪律。