先给结论
为什么这篇很火
它把“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。
研究动机: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 |
数学表示及建模
论文把 skill 记为自然语言策略 s,它被插入 agent context
或作为 persistent procedural memory。给定 frozen target model
M、harness h、任务 x 和 skill
s,执行产生轨迹和分数:
训练 split 用来生成 candidate skills,selection split 用来选择/接受,test split 只做最终报告:
这里最重要的是 selection/test 的分离:SkillOpt 不是在训练集上看起来更好就发布,而是候选 skill 要先过 held-out selection gate,然后最终只在 disjoint test split 上报告。
算法流程/方法
一个优化 step 做什么
- Forward pass:target model 用当前 skill 在训练 batch 上执行任务,记录 messages、tool calls、observations、command outputs、final answer、verifier feedback 等轨迹。
- Minibatch reflection:optimizer model 分别分析失败轨迹和成功轨迹。失败分析补缺口,成功分析保留有效行为。
- Patch proposals:输出结构化 edits,包括 append、insert_after、replace、delete。
- Merge and rank:先合并 failure edits 和 success edits,再做 failure-prioritized final merge;按系统性影响、互补性、泛化性、可执行性排序。
- Textual learning rate:每步最多保留前 L_t 个 edits,相当于文本空间步长控制。
-
Validation gate:candidate skill 在 selection split
上严格超过当前分数才接受;如果也是历史最佳,就导出为
best_skill.md。 - Rejected buffer:被拒绝的 edits 不白费,会作为负反馈帮助后续 optimizer 避免重复错误。
- 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
实验设计
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 |
实验结果:从有用到“可训练”
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
| 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 证据
| 类型 | 例子 | 结果 | 含义 |
|---|---|---|---|
| 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。
我的评论: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,且人的体感/真实工作流没有变差?
对 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
的真实行为、调用边界、审美体感、跨任务鲁棒性发生不可接受漂移?
Reference / Evidence
论文公开页面,版本与摘要。
正文、图表、附录和实验表。
官方代码仓库和 README。
项目主页。
官方 demo video。