← 返回 2026-05-25

SkillOpt:自进化智能体技能的「执行级」优化策略 SkillOpt: Executive Strategy for Self-Evolving Agent Skills

Yifan Yang, Ziyang Gong, Weiquan Huang, Qihao Yang, Ziwei Zhou, Zisu Huang, Yan Li, Xuemei Gao, Qi Dai, Bei Liu, Kai Qiu, Yuqing Yang, Dongdong Chen, Xue Yang, Chong Luo 📅 2026-05-22 👍 254 2026-07-13 08:36
LLM智能体 技能学习 提示优化 文本空间优化 无权重微调

把智能体技能文档当作可训练参数,用带学习率与验证门控的文本空间优化器迭代修订。

前置知识

智能体技能(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)。

Pipeline of SkillOpt.
Figure 2: Pipeline of SkillOpt.

实验结果

主结果(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% 的增益,证实「训练循环本身」就贡献了大部分价值。

Main results on held-out test splits.
Table 1: Main results on held-out test splits.
Hyperparameter analysis for the text optimizer.
Table 2: Hyperparameter analysis for the text optimizer.
Component ablations for learning-rate form, rejected buffer, and epoch-wise slow/meta update.
Table 3: Component ablations for learning-rate form, rejected buffer, and epoch-wise slow/meta update.
Transfer of optimized skills across three axes.
Table 4: Transfer of optimized skills across three axes.
Effect of optimizer strength.
Table 5: Effect of optimizer strength.
Cost and edit economy of the GPT-5.5 / GPT-5.5 skill runs.
Table 6: Cost and edit economy of the GPT-5.5 / GPT-5.5 skill runs.
Performance trends across epoch checkpoints on three benchmarks.
Figure 3: Performance trends across epoch checkpoints on three benchmarks.
查看结构化数据
任务指标本文基线提升
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 单一模型就能复现的最强信号。