SkillOpt:将 Agent 技能文档当作可训练外部状态
SkillOpt: Executive Strategy for Self-Evolving Agent Skills
来自 Microsoft 与上海交通大学的 SkillOpt 首次将深度学习优化范式系统性地迁移到 Agent 技能文档训练:一个冻结目标模型执行任务,一个独立优化器模型将轨迹反馈转化为有界的 add/delete/replace 文本编辑,验证门仅接受严格提升 held-out 分数的编辑。在 6 个基准、7 个模型、3 种执行框架的 52 个评测单元中全部最优或并列最优,GPT-5.5 平均提升 +23.5 分。
论文概览
当语言模型作为 Agent 执行多步任务时,领域适应不再仅仅是权重或提示词的问题——它还需要改进 Agent 收集证据、调用工具、遵循领域规范和格式化输出的过程。Agent 技能(skill)作为承载这些过程性知识的外部文本制品,为冻结模型提供了一种自然的适应接口。
然而,当前的技能改进方法要么依赖手工编写(脆弱),要么一次性生成(无法纠错),要么通过松散的自修订演化(不可控)。SkillOpt 提出了一个根本性的问题:如果技能是适应层,它应该如何被优化?
论文的核心思想是将技能编辑视为一个可控的领域适应过程:技能文档是外部状态,一个前沿优化器模型充当"优化器",而训练式的控制机制——证据采样、步长约束、验证门、拒绝缓冲——使技能训练变得像权重空间优化一样可复现。

核心创新
1. 文本空间优化器:深度学习类比的操作化
SkillOpt 最根本的贡献不是某个具体技术,而是将深度学习优化的全套工具箱——学习率、调度、验证、动量——映射到文本空间:
| 深度学习 | SkillOpt |
|---|---|
| 参数 (weights) | 技能文档 (best_skill.md) |
| 梯度 (gradient) | 轨迹衍生的编辑方向 |
| 学习率 (lr) | 编辑预算 L_t |
| 验证集 (val) | 选择集 (D_sel) 验证门 |
| 批大小 (batch) | Rollout batch / minibatch |
| 动量 (momentum) | Epoch 级慢/元更新 |
| 检查点 | 验证门选中的 best_skill |

这个类比不是装饰性的,而是可操作的。Rollout 和反思的批大小控制每步编辑所依据证据的噪声水平;文本学习率和调度控制技能版本间允许的移动距离;验证门扮演验证集的角色;epoch 级慢/元更新如同动量项,将稳定的编辑方向跨 epoch 传递。这种稳定性至关重要:如果连续的技能修订移动过远或方向不一致,拒绝编辑和已接受编辑就不再提供有意义的优化历史。
2. 六阶段优化循环
SkillOpt 的训练循环由六个阶段组成:
前向传播(Rollout Evidence):冻结目标模型使用当前技能在训练集上执行一批任务,记录完整的轨迹元数据、工具调用、观察和分数。小批量更新快但噪声大,大批量在技能变化前暴露更多复现模式。
反向传播(Minibatch Reflection):优化器模型将轨迹分为成功和失败两组,分别拆分为反思 minibatch。关键在于,单条轨迹往往产生轶事式修复,而 minibatch 暴露的是可复用的过程性错误——Agent 一贯搜索错误来源、写错答案格式、或忘记验证工具结果。失败 minibatch 提出缺失或修正规则,成功 minibatch 保留已有效的行为。
有界文本更新:编辑预算 L_t 限制每步最多应用的编辑数量。优化器将合并后的编辑池按预期效用排序,裁剪至 Top-L_t。这是与 ad hoc 提示重写的根本区别——无界重写可能抹去有用规则、引入不兼容指令、或过拟合局部失败。默认使用 cosine 调度,早期允许较大编辑,后期收敛为小的整合步骤。
验证门:每个候选技能在 D_sel 上用同一冻结模型和框架评估。仅当分数严格大于当前选择分数时才接受(平局被拒绝)。这将反思从无条件自我编辑转化为"提出-测试"式优化。
拒绝编辑缓冲区:被拒绝的编辑并非浪费。系统记录 epoch 局部缓冲区,包含观察到的失败模式和被尝试但被拒绝的编辑及其导致的分数下降。同一 epoch 内的后续反思调用可以读取此缓冲区,避免重复失败编辑。
Epoch 级慢/元更新:快速更新从当前批次学习,慢/元更新从相邻 epoch 学习。每个 epoch 结束时,系统对同一训练样本在上一 epoch 技能和当前技能下的表现进行配对比较,分为改进、退化、持续失败和稳定成功四类。优化器将纵向指导写入受保护的 slow-update 字段,该候选仍需通过验证门。
3. 框架无关部署
SkillOpt 通过轻量级适配器接口实现框架无关性:适配器构建训练/评估批次、将当前技能注入 Agent 上下文、运行原生框架、返回带分数的轨迹。同一个优化器因此适用于直接 QA、电子表格执行、文档推理、多模态 QA、具身环境,以及 Codex 式或 Claude Code 式执行循环。
部署输出是一个紧凑的 best_skill.md 文件(约 300-2,000 tokens),目标模型和执行框架保持不变。优化器模型仅在离线训练期间调用,部署时不增加任何推理时模型调用。
方法论
形式化定义
给定冻结目标模型 M、框架 h、任务 x 和技能 s,执行产生轨迹 τ 和标量分数 r:
给定训练集 D_tr、选择集 D_sel 和测试集 D_test,SkillOpt 在 D_tr 上生成候选技能集,在 D_sel 上选择最优技能,在 D_test 上报告最终性能:
编辑操作
patch 模式下,每次编辑是四种原子操作之一:append(追加到末尾)、insert_after(在指定标题后插入)、replace(替换指定文本)、delete(删除指定文本)。每个合并编辑还记录支持计数和来源类型(失败/成功),使排序优先选择在独立分析和层级合并中存活的编辑。
step 级编辑不能覆盖受保护的 slow-update 字段(由 <!-- SLOW_UPDATE_START --> 和 <!-- SLOW_UPDATE_END --> 标记),从而将快速局部变更与较慢的 epoch 级整合分离开来。
优化器 Prompt 契约
论文附录详细给出了优化器使用的 8 个 prompt 模板:失败分析、成功分析、失败合并、成功合并、最终合并、排名选择、慢更新、元技能。所有输出要求 JSON 格式,使编辑可被解析、过滤、应用和验证而无需人工干预。这种结构化设计是 SkillOpt 可控性的工程基础。
实验结果
RQ1: 主结果——52/52 全胜
在 6 个基准、7 个目标模型、3 种执行框架的 52 个评测单元中,SkillOpt 在所有单元上最优或并列最优。

GPT-5.5 Direct Chat 核心数据:
| Benchmark | No Skill | Human Skill | GEPA | SkillOpt | 增益 |
|---|---|---|---|---|---|
| SearchQA | 77.7 | 81.8 | 84.8 | 87.3 | +9.6 |
| SpreadsheetBench | 41.8 | 72.9 | 73.6 | 80.7 | +38.9 |
| OfficeQA | 33.1 | 66.9 | 63.9 | 72.1 | +39.0 |
| DocVQA | 78.8 | 90.1 | 89.1 | 91.2 | +12.4 |
| LiveMath | 37.6 | 38.4 | 43.2 | 66.9 | +29.3 |
| ALFWorld | 83.6 | 91.8 | 85.8 | 95.5 | +11.9 |
六基准平均从 58.8(无技能)提升到 82.3(SkillOpt),+23.5 分。即使是"oracle 基线"(每单元从 6 种竞争方法中选最优)也仅为 76.9,SkillOpt 领先 +5.4 分。
跨模型规模一致性:小模型在相对意义上获益更多。GPT-5.4-nano 在 DocVQA 上近乎翻倍,在 ALFWorld 上增至三倍。这符合一个直觉:紧凑的技能制品可以为小模型提供其权重中尚不具备的过程性知识。
跨框架一致性:Codex 框架下 +24.8 分(vs EvoSkill +14.0),Claude Code 框架下 +19.1 分(vs EvoSkill +3.2)。
RQ2: 消融实验
消融实验揭示了几个关键发现:
- 有界学习率至关重要:去除学习率约束(无界重写)在 SearchQA 上下降 2.5 分、SpreadsheetBench 下降 1.8 分。任何适度的有界编辑预算都已超过无界重写。
- 拒绝缓冲区提供负面反馈:去除后 SpreadsheetBench 下降 4.6 分。
- 慢/元更新捕获长程模式:同时去除元技能和慢更新后,SpreadsheetBench 从 77.5 暴跌至 55.0——失去了长程证据流和保护区契约。
- 验证集与测试集高度一致:验证门选中的 checkpoint 与测试集最优 checkpoint 对齐,确认门控选择的是泛化技能而非过拟合选择集的技能。
RQ3: 迁移实验
优化后的技能表现出可复用制品而非任务特定提示的特征:
- 跨模型:GPT-5.4 上训练的技能迁移到 5.4-mini(+9.4)和 5.4-nano(+3.0),所有迁移均为正向。
- 跨框架:Codex 上训练的 SpreadsheetBench 技能迁移到 Claude Code,增益 +59.7(22.1→81.8),甚至略微超过 Claude Code 域内 SkillOpt 参考(80.4)。这表明学到的规则编码的是工作簿级过程(结构优先检查、公式感知验证、静态值物化)而非框架特定命令。
- 跨基准:OlympiadBench 技能在 Omni-MATH 上正向迁移(+1.3 ~ +3.7),虽幅度较小,但支持技能编码的是可复用数学过程而非记忆的格式约定。
RQ4: 学到的技能是什么样的?
最终技能极度紧凑:379-1,995 tokens(中位数约 920),仅需 1-4 次接受编辑。LiveMath 的 +29.3 分增益仅来自一次接受编辑,OfficeQA 的 +39.0 分同样来自一次接受编辑。这直接证明验证门在做真正的工作:优化器提出大量编辑,但只有少数通过 held-out 检查。
学到的规则是过程性的而非实例特定的。例如:
SpreadsheetBench: "检查工作簿结构和公式,然后跨完整目标范围写入评估后的静态值,而非依赖 Excel 重新计算。"
ALFWorld: "维护感知地平线的已访问/前沿账本,在重复同类型失败后多样化搜索,在持有目标物前不重访目的地。"
这些规则读起来像一个经验丰富的从业者在花一天时间熟悉基准后写出的规则——但它们是由优化器自动产生并逐编辑验证的。
启示与思考
1. "训练"而非"编写"技能
SkillOpt 最深层的贡献是概念性的:它将 Agent 技能从"手写提示词"重新定义为"可训练的外部状态"。这意味着优化理论的全套工具箱——学习率、调度、正则化、课程学习、验证——都可以应用于 Agent 栈中此前一直被手工工程化的部分。这让我想起迁移学习的早期历史:一旦"预训练+微调"范式被确立,整个领域的研究效率就上了一个台阶。SkillOpt 可能在技能优化领域扮演类似的角色。
2. 优化器与目标模型的分离
优化器模型仅在训练时运行,部署时不增加推理成本。这意味着可以用更强的前沿模型(如 GPT-5.5)来优化较弱目标模型(如 Qwen3.5-4B)的技能,而不改变部署成本。论文验证了这一点:强优化器比目标匹配优化器平均多贡献约 5 分。这种"教师-学生"式的分离让我联想到知识蒸馏,但蒸馏的是过程性知识文本而非权重。
3. 与已有工作的定位
SkillOpt 与此前发布的几篇论文形成互补:
- AgentFlow(静态分析)从代码层面识别 Agent 程序的依赖风险路径,SkillOpt 从运行时反馈优化执行过程——一个发现问题,一个解决问题。
- Cognitive Firewall(对话层安全)通过多门控拦截恶意交互,SkillOpt 通过技能优化减少 Agent 的过程性错误——安全与能力的双轨提升。
- ActPlane(OS 层策略执行)在内核层拦截不安全操作,SkillOpt 在技能层预防操作错误——纵深防御的不同层次。
4. 局限性
论文坦率地承认了几个限制:依赖可评分轨迹和 held-out 选择集,对开放式任务需要更强的评估机制;训练成本虽可摊销但并非为零;单技能设计在高度异构领域可能不足。这些限制指向了自然扩展方向:技能库共享基础设施、奖励无关或偏好驱动的验证门、以及将优化技能自蒸馏回目标模型权重。
参考链接
- 论文: arXiv:2605.23904
- 代码: https://aka.ms/SkillOpt
- 相关论文: GEPA | TextGrad | EvoSkill