← 科研空间 首页
Agent Skills / Text-Space Optimization Microsoft Research · arXiv 2605.23904

SkillOpt: Executive Strategy for Self-Evolving Agent Skills

这篇论文可以看作 SkillsBench 的下一步:如果 SkillsBench 问“Skill 到底有没有帮助”,SkillOpt 问“能不能像训练参数一样训练一个可部署的 skill 文档”。它把 skill 当成 frozen agent 的外部可训练状态,用 rollout、文本学习率、validation gate、rejected-edit buffer 和 slow/meta update 来训练 best_skill.md

原版 PDF
版本说明

本文基于公开 arXiv 论文/source、Microsoft 官方 GitHub 仓库与项目页整理,检索日期为 2026-05-27。论文中的 GPT-5.x、Qwen、Codex、Claude Code 等配置均按论文报告复述,不额外声明当前商业可用性。

Cheat Sheet

先给结论

52/52论文报告 SkillOpt 在所有 evaluated model/benchmark/harness cells 上 best or tied-best。
+23.5GPT-5.5 direct chat 六 benchmark 平均相对 no skill 的提升。
1-4六个案例中最终 best_skill.md 只来自 1 到 4 个 accepted edits。
<2000论文案例中最终技能均小于 2000 tokens,部署时无 optimizer 调用。
SkillOpt teaser overview
Figure 1. SkillOpt 的核心结构:target model 用当前 skill 执行任务,optimizer model 根据轨迹提出 bounded edits,held-out gate 只接受验证集提升的更新,最终导出可部署的 best_skill.md。

为什么这篇很火

它把“Skill 优化”从手写 prompt engineering 提升成了一个训练式框架:有 epoch、batch、minibatch、learning rate、schedule、validation gate、rejected updates、slow/meta state。这个类比不是装饰,而是真的对应到 skill 文本的更新控制。

最重要的边界

SkillOpt 的 gate 依赖可评分轨迹和 held-out selection split。它很适合有自动 verifier / exact metric / executable check 的任务;对前端审美、写作质量、研究品味这类主观任务,gate 必须升级成更强的人类或模型偏好 evaluator。

Why

研究动机:Skill 应该被训练,而不是只被写出来

传统路线里,skills 往往是人工写、LLM 一次性生成,或在失败后松散自我修订。SkillOpt 的观点是:如果 skill 是 agent 的程序性适配层,那么它本身就应该像外部状态一样被系统训练。

这个动机和 SkillsBench 直接衔接。SkillsBench 证明 curated Skills 在许多 deterministic tasks 上明显有用,但 self-generated Skills 平均不可靠;SkillOpt 接着问:能不能让一个强 optimizer model 离线训练 skill,并让 frozen target model 在部署时只吃一个 compact skill artifact?

对象 普通 prompt/skill 改写 SkillOpt 的训练式控制
训练状态 一次性文本或自由 rewrite 一个持久 skill document,当前 skill / best skill / rejected buffer / meta state
更新步长 通常不受控 文本 learning rate:每步最多应用 L_t 个 edits
训练信号 单条失败反馈或人工直觉 rollout batch + failure/success minibatch reflection
接受标准 常常直接采纳 held-out selection score 严格提升才接受;ties rejected
部署成本 可能需要持续反思 只部署 best_skill.md,无 optimizer inference call
Modeling

数学表示及建模

论文把 skill 记为自然语言策略 s,它被插入 agent context 或作为 persistent procedural memory。给定 frozen target model M、harness h、任务 x 和 skill s,执行产生轨迹和分数:

$$(\tau(s), r(s)) = h(M, x, s), \qquad r(s) \in [0,1].$$

训练 split 用来生成 candidate skills,selection split 用来选择/接受,test split 只做最终报告:

$$s^\star_{\mathrm{sel}} = \arg\max_{s \in \mathcal{C}(D_{\mathrm{tr}})} \frac{1}{|D_{\mathrm{sel}}|}\sum_{x \in D_{\mathrm{sel}}} r(s).$$
$$\mathrm{Test}(s^\star_{\mathrm{sel}}) = \frac{1}{|D_{\mathrm{test}}|}\sum_{x \in D_{\mathrm{test}}} r(s^\star_{\mathrm{sel}}).$$

这里最重要的是 selection/test 的分离:SkillOpt 不是在训练集上看起来更好就发布,而是候选 skill 要先过 held-out selection gate,然后最终只在 disjoint test split 上报告。

Method

算法流程/方法

SkillOpt pipeline
Figure 2. SkillOpt pipeline:rollout evidence、failure/success minibatch reflection、bounded add/delete/replace edits、ranking、selection gate、rejected buffer、slow/meta update。

一个优化 step 做什么

  1. Forward pass:target model 用当前 skill 在训练 batch 上执行任务,记录 messages、tool calls、observations、command outputs、final answer、verifier feedback 等轨迹。
  2. Minibatch reflection:optimizer model 分别分析失败轨迹和成功轨迹。失败分析补缺口,成功分析保留有效行为。
  3. Patch proposals:输出结构化 edits,包括 append、insert_after、replace、delete。
  4. Merge and rank:先合并 failure edits 和 success edits,再做 failure-prioritized final merge;按系统性影响、互补性、泛化性、可执行性排序。
  5. Textual learning rate:每步最多保留前 L_t 个 edits,相当于文本空间步长控制。
  6. Validation gate:candidate skill 在 selection split 上严格超过当前分数才接受;如果也是历史最佳,就导出为 best_skill.md
  7. Rejected buffer:被拒绝的 edits 不白费,会作为负反馈帮助后续 optimizer 避免重复错误。
  8. Slow/meta update:epoch 边界比较同一批任务在前后 skill 下的表现,把跨 epoch 稳定经验写入 protected slow update;optimizer-side meta skill 只给训练时的 optimizer 看,不部署。
target model M: frozen, only executes tasks
optimizer model O: offline, edits skill
train split: produces rollout evidence
selection split: accepts/rejects candidate skills
test split: final reporting only
output: compact best_skill.md
Setup

实验设计

Benchmarks

SearchQA、SpreadsheetBench、OfficeQA、DocVQA、LiveMathematicianBench、ALFWorld。

Target models

GPT-5.5、GPT-5.4、GPT-5.4-mini、GPT-5.4-nano、GPT-5.2、Qwen3.5-4B、Qwen3.6-35B-A3B。

Harnesses

Direct chat、Codex harness、Claude Code harness。三者消费同一种 best_skill.md 格式。

Baselines

论文比较 no skill、human skill、one-shot LLM skill、Trace2Skill、TextGrad、GEPA、EvoSkill。关键是所有方法在同一 target model、同一 held-out test split、同一 scorer 下比较,尽量隔离 adaptation procedure 的影响。

默认优化设置

参数 默认值 / 机制
Epochs 4
Rollout batch size 40
Reflection minibatch size 8
Textual learning rate L_t = 4,cosine decay,floor = 2
Gate selection score 严格提升才接受,tie rejected
Slow/meta 每 epoch 20 sampled tasks,meta skill optimizer-side only
Edit mode 默认 patch;可选 rewrite_from_suggestions
Evidence

实验结果:从有用到“可训练”

GPT-5.5 direct chat 主结果

Benchmark No skill SkillOpt Delta 解释
SearchQA 77.7 87.3 +9.6 baseline 已高,提升相对温和。
SpreadsheetBench 41.8 80.7 +38.9 强程序性、格式和工具使用要求,Skill 最有价值。
OfficeQA 33.1 72.1 +39.0 文档/工具/格式约束可被 skill 规则稳定化。
DocVQA 78.8 91.2 +12.4 接近高基线,但 visual evidence binding 仍有帮助。
LiveMath 37.6 66.9 +29.3 规则可编码“最强陈述”“答案格式”等程序性判断。
ALFWorld 83.6 95.5 +11.9 状态管理、visited/frontier ledger、loop breaker。
Average 58.8 82.3 +23.5 比 per-cell oracle baseline 平均高 +5.4。

跨模型和跨 harness

Direct-chat model average

论文报告 SkillOpt 相对 no skill 的平均提升:GPT-5.4 +12.7、GPT-5.4-mini +15.4、GPT-5.4-nano +26.7、GPT-5.2 +16.6、Qwen3.5-4B +19.2、Qwen3.6-35B-A3B +9.1。

Codex harness

GPT-5.5 在五个可评估 benchmark 上平均 +24.8 over no skill,且比 EvoSkill 高 +14.0。

Claude Code harness

GPT-5.5 平均 +19.1 over no skill,比 EvoSkill 高 +3.2;EvoSkill 本身已经是强 baseline。

训练曲线与 ablation

SkillOpt epoch trends
Figure 3. 三个 benchmark 上 epoch checkpoints 的 train / selection / test trend。它展示 validation gate 选择的 checkpoint 如何与 held-out test generalization 对齐。
Component Default Ablation SearchQA Spreadsheet LiveMath
Learning-rate form lr=4 without lr 87.1 vs 84.6 77.5 vs 75.7 61.3 vs 57.3
Rejected buffer with buffer without buffer 87.1 vs 85.5 77.5 vs 72.9 61.3 vs 58.9
Slow/meta update with both without both 87.1 vs 86.3 77.5 vs 55.0 61.3 vs 59.7

这个 ablation 对你关心的 Drift Monitor 很重要:rejected buffer 和 slow/meta update 已经不是普通 prompt optimization 里的“改完就扔”,而是在训练过程中记录哪些编辑伤害了性能、哪些跨 epoch 经验应该被保护。

Transfer & Cost

可迁移性、成本与学到的规则

Transfer 证据

类型 例子 结果 含义
Cross-model GPT-5.4 Spreadsheet skill -> GPT-5.4-mini +9.4 同类任务上的程序性规则能跨模型尺度迁移。
Cross-model GPT-5.4 LiveMath skill -> GPT-5.4-nano +5.6 小模型也能消费更大模型训练出的 skill。
Cross-harness Codex-trained Spreadsheet skill -> Claude Code 22.1 -> 81.8, +59.7 强信号:skill 不是只绑定某个 CLI 命令路径。
Cross-harness Claude Code-trained Spreadsheet skill -> Codex 27.5 -> 71.1, +43.6 workbook-level procedure 能跨执行环境复用。
Cross-benchmark OlympiadBench skill -> Omni-MATH +3.7 / +1.8 / +1.3 邻近 math benchmark 上正迁移,但幅度小于 in-domain。

最终 skill 很小,但训练成本不是零

Benchmark Initial tokens Final tokens Accepted edits Train tokens Cost / point
SearchQA 16 857 4 213.8M 37.9M
SpreadsheetBench 224 1995 4 21.4M 0.6M
OfficeQA 145 883 1 20.8M 1.1M
DocVQA 81 959 3 188.2M 46.4M
LiveMath 154 379 1 23.2M 3.6M
ALFWorld 516 1321 2 59.3M 15.9M

这张表说明两个方向都要看:部署 artifact 很轻,但训练时 rollout + optimizer calls 可能很贵。它适合被复用、被审计、被发布到 skill library;如果是一次性任务,成本未必划算。

学到的规则长什么样

  • SpreadsheetBench:先检查 workbook structure 和 formulas,再把 evaluated static values 写入完整目标范围,而不是依赖 Excel 自动重算。
  • DocVQA:对 tables/forms/charts/legends,先把问题绑定到确切 visual row/header/field,再复制 aligned answer span。
  • ALFWorld:维护 horizon-aware visited/frontier ledger;重复同类失败后改变搜索策略;未持有目标物前不要反复回 destination。
My Review

我的评论:SkillOpt 很强,但 verifier 决定它优化成什么

我认为最强的点

  • 把 skill update 从“自由改写”变成 bounded, validation-gated optimization。
  • 部署物是静态文本 skill,不需要在线反思,不改 target model 权重。
  • 跨模型、跨 harness、邻近 benchmark 的迁移证据让它更像“程序性知识”,而不是单点 prompt。
  • rejected-edit buffer 和 slow/meta update 提供了最早期的 anti-drift 机制雏形。

需要谨慎的点

  • 所有训练都依赖 scorer / verifier。如果 scorer 粗,optimizer 会朝粗指标优化。
  • 52/52 是很强的表述,但仍要看 benchmark 是否覆盖真实任务体感。
  • 训练成本不低,尤其 SearchQA / DocVQA 的 tokens per point 较高。
  • 论文优化的是单个 skill,不是大型 skill library 的检索、组合、冲突管理。

和 prompt optimization 的关系

你说 skill optimization 很像 prompt optimization,这篇论文其实给了更准确的边界:它确实是在文本空间优化,但优化对象不是一次性 prompt,而是可部署、可迁移、可审计的 persistent skill artifact。它相比普通 prompt optimization 多了几个状态面:skill history、accepted/rejected edits、selection gate、slow protected section、optimizer-side meta skill、跨 harness artifact。

和 SkillsBench 的阅读关系

SkillsBench: 证明 curated Skills 能显著提升,但 self-generated Skills 平均不可靠。
SkillOpt: 给出一个训练式方法,试图稳定地产生更好的 reusable Skills。
下一步问题: 如何证明 optimizer 没有过拟合 verifier,且人的体感/真实工作流没有变差?
One More Thing

对 Drift Monitor 的启发

SkillOpt 自带 validation gate,但它主要是 score gate。真正的 Drift Monitor 要比“selection score 提升了吗”更宽,因为 skill update 修改的是 agent 的未来行为分布。

Verifier Overfit

如果 gate 只是 pytest/exact match,optimizer 可能学到测试投机,而不是人真正要的质量。

Semantic Drift

新 skill 是否从 general procedure 漂成某个 benchmark-specific shortcut?

Regression Memory

rejected-edit buffer 是起点,但还要维护旧任务、邻近任务、人工偏好样例的 regression suite。

Invocation Drift

如果部署到 skill library,description/frontmatter 变化会影响何时被调用,这不是 score gate 自动覆盖的。

Context Bloat

即使这篇案例 < 2000 tokens,真实长期优化可能导致 skill 增肥、冲突和过拟合。

Human Feel Gap

前端、写作、研究品味这类任务,需要 preference/rubric/VLM/human evaluator,否则 optimizer 会追逐粗指标。

可以形成一个很清晰的研究问题

SkillOpt 给了 training loop;SkillsBench 给了 benchmark substrate;你的 Drift Monitor 可以问:当一个 optimizer 提议 skill_old -> skill_new 时,除了 held-out score,怎样判断这个更新不会让 agent 的真实行为、调用边界、审美体感、跨任务鲁棒性发生不可接受漂移?

Sources

Reference / Evidence

arXiv abstract: SkillOpt

论文公开页面,版本与摘要。

arXiv PDF

正文、图表、附录和实验表。

GitHub: microsoft/SkillOpt

官方代码仓库和 README。

Project page

项目主页。

Project video

官方 demo video。