论文:SkillOpt: Executive Strategy for Self-Evolving Agent Skills
作者:Yifan Yang, Ziyang Gong 等(Microsoft Research、上海交大、同济、复旦联合团队)
arXiv:https://arxiv.org/abs/2605.23904
开源:https://github.com/microsoft/SkillOpt (5.5k⭐)
写在前面
如果你正在做 AI Agent 开发,一定遇到过这样的痛点:
- Agent 在需要严格格式遵循的任务上表现很差,手写提示词怎么调都不行
- 换一个模型,之前精心调试的提示词就废了,又要重新来过
- 市面上的提示词优化方法要么效果不稳定,要么训练成本太高……
微软研究院的最新论文 SkillOpt 给出了一个系统性的解法——把 AI Agent 的"技能文档"当作神经网络的"权重"来优化,像训练深度学习模型一样,稳定、可控、可复现地提升 Agent 的能力。
更厉害的是:优化完的技能文档只有几百到两千个 token,部署时零额外成本,还能跨模型、跨框架、跨任务迁移。
这篇文章,我会用尽量通俗的语言,带你完整理解 SkillOpt 的核心思路、技术细节、实验结果,以及它对你日常开发工作的实际意义。
一、现有方法到底差在哪里?
要理解 SkillOpt 的价值,先得搞清楚:现在大家是怎么给 AI Agent 做"技能优化"的?
目前主流有三种方式,每种都有硬伤:
方式一:人工手写提示词
这是大多数团队的做法。让领域专家手工编写技能文档,然后人工调试。
问题在哪?
- 专家的知识是有限的,很难覆盖所有失败模式
- 无法基于执行反馈做系统化迭代
- 换一个领域、换一个模型,又要重新写
方式二:让 LLM 一次性生成提示词
输入任务描述,让 GPT/Claude 帮你生成一套提示词。
问题在哪?
- 生成完就结束了,没有迭代优化过程
- 生成结果不可控,质量看运气
- 在目标领域或执行框架下鲁棒性很差
方式三:让 Agent 自己"进化"
通过轨迹蒸馏、自我反思等方式,让 Agent 在运行过程中不断改进自己的提示词。代表工作如 Reflexion、Voyager 等。
问题在哪?
- 缺乏系统性,优化过程不可控
- 结果不可复现,这次跑出来好使,下次可能就不行了
- 容易过拟合到局部的失败模式
核心痛点
以上三种方式,都不具备深度学习"优化器"的特性——无法在获得反馈后,稳定、可靠、可复现地提升初始表现。
💡 SkillOpt 的核心洞察:
技能文档应该被视为冻结智能体的"外部参数",用与优化神经网络权重同样严谨的方式去训练它。
二、SkillOpt 的核心思路:把技能优化当作"文本空间的深度学习"
2.1 一个精妙的类比
| 对比维度 | 权重空间优化(深度学习) | 文本空间优化(SkillOpt) |
|---|---|---|
| 可训练状态 | 模型权重矩阵 | 技能文档(自然语言) |
| 优化器 | SGD/Adam 等 | 独立的优化器 LLM |
| 梯度信号 | 损失函数梯度 | 执行轨迹 + 评分 |
| 参数更新 | 权重加减 | 有界的增/删/改编辑 |
| 学习率 | 控制更新幅度 | 文本学习率预算(控制编辑数量) |
| 验证门控 | 验证集早停 | 留出验证集接受/拒绝 |
| 负反馈机制 | 梯度下降方向 | 被拒绝编辑缓冲区 |
| 长期记忆 | 动量、二阶矩 | 慢更新、元技能 |
这个类比非常深刻——SkillOpt 并不是简单地"让 LLM 改提示词",而是把深度学习中一整套优化逻辑,完整地移植到了文本空间。
2.2 技能是怎么定义的?
SkillOpt 里的"技能" \(s\),就是一个插入到 Agent 上下文中的自然语言策略文档:
- 在直接对话场景下,它就是系统提示前缀
- 在 Codex/Claude Code 这样的工具调用框架下,它就是持久化的过程记忆(如
SKILL.md文件)
执行逻辑很简单:
(执行轨迹, 评分) = 执行框架(模型, 任务, 技能)
SkillOpt 要做的,就是找到那个让验证集上平均评分最高的技能文档。
2.3 数据怎么划分?
这是 SkillOpt 设计上非常严谨的一点:
- 训练集 \(D_{tr}\):用来生成候选技能(相当于训练集)
- 选择集 \(D_{sel}\):用来决定是否接受候选技能(相当于验证集,门控在这里起作用)
- 测试集 \(D_{test}\):最终评估,全程不参与训练(防止作弊)
三、SkillOpt 的五大核心机制
这是整篇论文最精彩的部分。SkillOpt 设计了五个相互协作的机制,保障训练过程的稳定性和收敛性。
机制一:前向传播——收集轨迹证据
每个优化步,目标模型基于当前技能在训练集上执行一批任务,记录完整的执行轨迹:
- 任务元数据
- 消息序列
- 工具调用记录
- 观测结果
- 命令输出
- 最终答案
- 验证器反馈
关键设计:支持多批次轨迹累积后统一更新,把"执行吞吐量"和"更新频率"解耦。
机制二:反向传播——小批次反思
这是 SkillOpt "文本梯度下降"的核心。
为什么要用小批次,而不是单条轨迹?
单条轨迹容易生成偶发性的修复建议(过拟合到某个特定失败),小批次才能暴露可复用的过程性错误模式。
具体流程:
第1步:轨迹分组
- 失败组:执行失败的任务轨迹
- 成功组:执行成功的任务轨迹
第2步:小批次划分
- 失败组划分为若干小批次(默认大小 8)
- 成功组划分为若干小批次(默认大小 8)
第3步:失败驱动反思(每个失败小批次)
- 分析这个批次里共同的失败模式
- 提出缺失的/需要纠正的规则
- 生成"补丁"编辑建议(增/删/改)
第4步:成功驱动反思(每个成功小批次)
- 分析这个批次里共同的成功因素
- 保留已经生效的行为模式
- 生成"补丁"编辑建议
第5步:分层合并
- 先分别合并失败驱动和成功驱动的编辑
- 优先合并失败纠正类编辑
- 过滤掉重复、矛盾、任务特定的建议
- 输出结构化的增/删/改编辑列表
默认使用 16 个分析 worker 并行反思,加速这一过程。
机制三:有界文本更新(文本学习率)
深度学习里有学习率,SkillOpt 里对应的是什么?
答案是:文本学习率预算 \(L_t\)——每个优化步最多只应用 \(L_t\) 个技能编辑。
为什么要限制?
- 无界重写会直接擦除有用的规则
- 可能引入相互不兼容的指令
- 容易过拟合到局部失败
- 破坏迭代的连续性
优化器对合并后的编辑池按"预期效用"排序,截取前 \(L_t\) 个编辑,生成候选技能文档。
学习率调度策略(类似深度学习里的 learning rate schedule):
| 调度策略 | 特点 | 适用场景 |
|---|---|---|
| 常数 | \(L_t\) 恒定不变 | 简单任务 |
| 线性衰减 | \(L_t\) 线性减少 | 标准场景 |
| 余弦衰减(默认) | 初期 \(L_t\) 大,后期逐步衰减 | 复杂任务 |
| 自主 | 优化器自己决定编辑数量 | 探索性研究 |
还有一个巧妙的设计:某些字段是被"慢更新"保护的,普通编辑无法覆盖它们,实现了快速局部更新和慢速轮次级别更新的解耦。
机制四:验证门控 + 被拒绝编辑缓冲区
这是 SkillOpt 训练稳定性的另一大保障。
验证门控逻辑:
如果 候选技能 在验证集上的分数 > 当前技能的分数:
接受这个候选技能
更新当前最优技能
否则:
拒绝这个候选技能
把这次编辑的内容和失败模式写入缓冲区
为什么是"严格大于"才接受?
- 平局直接拒绝,避免无意义的等值震荡
- 确保整个优化是"提出→测试"的逻辑,而不是无条件的自编辑
- 防止"看起来合理的文本诊断"实际上损害模型性能
被拒绝编辑缓冲区 \(B\) 有什么用?
这是 SkillOpt 的"负反馈机制",类比深度学习里梯度下降的"方向修正":
- 记录:本轮次观测到的失败模式、被拒绝的编辑内容、对应的分数下降
- 作用:同轮次后续的反思过程会参考这个缓冲区
- 效果:避免重复尝试已经失败的编辑,聚焦还没解决的失败模式
- 成本:只在训练时利用,推理时不增加任何成本
机制五:轮次级慢更新 + 元更新
前面四个机制在每个优化步内起作用,而这两个机制在每个训练轮次结束后起作用,类比深度学习里的"动量"和"二阶矩估计"。
慢更新(Slow Update):
每个轮次结束后:
- 采样一批训练任务
- 分别用上一轮的技能和当前轮的技能执行这些任务
- 划分为四类结果:
- 提升:当前技能正确、上一轮技能错误(说明更新有效)
- 回退:当前技能错误、上一轮技能正确(说明更新有害)
- 持续失败:两个技能都错误(还需要继续优化)
- 稳定成功:两个技能都正确(已经学会了)
- 优化器将长期稳定的领域经验写入技能的"受保护慢更新字段"
- 候选技能仍需通过验证门控才能被接受
元更新(Meta Update):
优化器侧维护一个"元技能" \(m_{meta}\):
- 总结跨轮次的编辑模式
- 记录被拒绝编辑的规律
- 记录持续失败的模式
- 作为后续优化器反思、合并、排序的上下文
⚠️ 注意:元技能 \(m_{meta}\) 不会随技能一起导出部署。
这意味着:训练过程可以利用丰富的优化历史,但部署产物依然紧凑、可审计。这是一个非常优雅的关注点分离设计。
四、实验结果:全面领先
4.1 评估规模有多夸张?
- 6 个基准测试:SearchQA、SpreadsheetBench、OfficeQA、DocVQA、LiveMathematicianBench、ALFWorld
- 7 个目标模型:GPT-5.5、GPT-5.4、GPT-5.2、GPT-5.4-mini、GPT-5.4-nano、Qwen3.5-4B、Qwen3.6-35B-A3B
- 3 种执行框架:直接对话、Codex CLI、Claude Code CLI
共计 52 个评估单元——这个评估规模在同类工作中是相当罕见的,结论可信度很高。
4.2 GPT-5.5 上的绝对性能提升
| 基准测试 | 无技能基线 | SkillOpt | 绝对提升 |
|---|---|---|---|
| SearchQA | ~85 | ~87 | +2 |
| SpreadsheetBench | 41.8 | 80.7 | +38.9 |
| OfficeQA | 33.1 | 72.1 | +39.0 |
| DocVQA | ~45 | ~80 | +35 |
| LiveMathematicianBench | 37.6 | 66.9 | +29.3 |
| ALFWorld | ~35 | ~69 | +34 |
| 平均 | 58.8 | 82.3 | +23.5 |
两个关键观察:
-
过程类基准提升最大:SpreadsheetBench(+38.9)、OfficeQA(+39.0)、LiveMathematicianBench(+29.3)
- 原因:这些基准需要严格的过程遵循、格式约束、工具调用规范,而前沿模型在这些方面存在系统性缺陷
- 技能优化可以有效地给模型补充这些过程性知识
-
事实召回类基准提升较小:SearchQA 只有 +2
- 原因:无技能基线已经很高,技能主要优化的是"过程"而非"知识召回"
4.3 小模型收益更大
这是一个非常有意思的发现:模型越小,技能优化带来的提升越大。
| 模型 | 基准 | 无技能 | SkillOpt | 提升 |
|---|---|---|---|---|
| GPT-5.4-nano | DocVQA | 30.8 | 80.2 | 翻倍 |
| GPT-5.4-nano | ALFWorld | 34.3 | 69.4 | 翻倍 |
| Qwen3.5-4B | ALFWorld | 30.6 | 81.3 | +50.7 |
核心洞察:小模型的权重里缺失了更多过程性知识,而紧凑的技能文档可以有效地为小模型补充这些知识。这说明:技能优化是实现"小模型+技能"替代"大模型"的一条可行路径。
4.4 跨执行框架泛化
SkillOpt 在所有三种执行框架下都取得了最优结果:
- Codex 框架:GPT-5.5 平均提升 +24.8 点
- Claude Code 框架:GPT-5.5 平均提升 +19.1 点
这说明技能优化是真正"框架无关"的。
4.5 最惊人的结果:跨框架迁移
论文里有一个实验特别惊艳——
实验设置:在 Codex 框架下优化的 SpreadsheetBench 技能,直接迁移到 Claude Code 框架(完全不同的执行框架!)
| 框架 | 无技能 | 域内优化 | 跨框架迁移 | 迁移带来的提升 |
|---|---|---|---|---|
| Claude Code | ~20 | 80.4 | +59.7 | 甚至超过域内优化! |
反向迁移(Claude Code → Codex):同样带来了 +43.6 点的提升。
这意味着什么? 技能学习的是通用过程知识,而不是特定框架的命令细节。这个泛化能力是非常了不起的。
五、技能产物分析:紧凑、可审计、可编辑
5.1 紧凑性
优化后的技能文档大小:
- 范围:379 ~ 1995 token
- 中位数:约 920 token
这意味着什么?意味着领域专家可以在几分钟内完成阅读、审计和编辑。也意味着技能文档可以直接注入到几乎所有前沿模型的上下文窗口里。
5.2 编辑经济性
SkillOpt 的"编辑经济性"极高——
- 接受编辑数范围:1 ~ 4 次
- 中位数:2.5 次
也就是说,最高 +39 点的性能提升,仅来自 1 次接受的编辑。验证门控非常有效地过滤掉了无效编辑,最终部署的技能非常紧凑,每次接受编辑都是高质量的改进。
5.3 优化后的技能到底长什么样?
论文里给出了几个优化后技能的例子,它们都是过程性、通用性的规则:
SearchQA:
"从线索措辞推断预期答案类型,然后选择有共现独特证据支持的最短规范实体。"
SpreadsheetBench:
"检查工作簿结构和公式,然后在整个请求的目标范围写入计算后的静态值,而非依赖 Excel 重计算。"
OfficeQA:
"将原文解析页面作为主证据,锁定表格/日期/单位上下文,仅输出请求的四舍五入值,无额外标签。"
LiveMathematicianBench:
"在最强化语句的多项选择题中,按定理强度对选项排序,优先选择有依据的更强结果选项,而非真实但更弱的推论。"
共同特点非常清晰:
- 过程性:描述"如何做"而非"做什么"
- 通用性:不绑定到特定任务实例
- 可操作:可直接指导 Agent 的行为
- 紧凑:用最少的 token 表达核心规则
六、与现有方法的系统性对比
要真正理解 SkillOpt 的独特定位,需要和已有的提示词/技能优化方法做系统对比。
提示词优化的发展脉络
这个领域的研究在过去 5 年里经历了 4 个发展阶段:
| 阶段 | 时间 | 代表方法 | 核心特征 |
|---|---|---|---|
| 奠基期 | 2020-2021 | AutoPrompt, Prefix-Tuning | 依赖模型梯度,仅支持开源模型 |
| LLM作为优化器期 | 2022-2023 | APE, OPRO | 利用 LLM 自身能力,无需梯度 |
| 复杂算法期 | 2023-2024 | EvoPrompt, APO, DSPy, TextGrad | 引入进化算法、梯度下降、声明式框架 |
| 技能优化期 | 2024-2026 | EvoSkill, SkillOpt | 优化结构化技能模块,支持跨任务迁移 |
SkillOpt vs TextGrad
TextGrad 是另一个很有影响力的"文本空间优化"框架,两者的核心区别:
| 对比维度 | SkillOpt | TextGrad |
|---|---|---|
| 优化目标 | 持久化技能文档(可部署产物) | 任意计算图组件的提示/代码 |
| 部署产物 | 紧凑的 best_skill.md |
依赖框架,无独立产物 |
| 训练成本 | 一次性支付 | 每次推理都可能涉及优化循环 |
| 跨任务迁移 | 原生支持 | 需要重新优化 |
| 验证门控 | 严格的留出验证集门控 | 无明确门控机制 |
| 负反馈 | 被拒绝编辑缓冲区 | 无显式负反馈机制 |
一句话总结:TextGrad 是通用的文本空间自动微分框架;SkillOpt 是专门针对 Agent 技能的、可部署的优化器。
SkillOpt vs EvoSkill
EvoSkill 是另一个同期的工作,两者的定位有明显差异:
| 对比维度 | SkillOpt | EvoSkill |
|---|---|---|
| 优化抽象层级 | 单个技能文档(紧凑、统一) | 技能库(多个技能模块) |
| 优化逻辑 | 有界编辑 + 验证门控(高度可控) | 失败分析 + 帕累托前沿 |
| 部署产物 | 单个 best_skill.md,极简 |
技能库文件夹 |
| 训练稳定性 | 文本学习率 + 缓冲区 + 慢更新(极高) | 帕累托前沿筛选(中等) |
| 跨模型/框架迁移 | 实验验证支持 | 未明确验证 |
七、局限性与未来方向
没有任何一项研究是完美的,SkillOpt 也有其局限性。
论文中明确讨论的局限性
局限性一:依赖反馈信号
SkillOpt 的优化循环依赖带评分的执行轨迹和留出选择集。这让它最适合有自动验证器的任务(如问答有标准答案、代码执行有通过/失败信号等)。
对于以下场景,SkillOpt 不太适用:
- 成功标准主观的任务(如创意写作、开放式对话)
- 需要多维综合评估的任务
- 判断成本很高的任务(需要人工评估)
不过,论文也提到可以用强模型(如 GPT-5.5)作为评估器,或者用偏好反馈,来扩展 SkillOpt 到更开放的任务上。这是一个正在探索的方向。
局限性二:训练成本
训练技能需要额外的执行计算和优化器模型调用。对于一次性任务,训练成本可能超过收益。
但具体数字让人欣慰:
- 过程类基准:每提升 1 个测试点,成本约 0.6 ~ 3.6 M token
- 按 GPT-5.5 的 API 价格估算,每个测试点提升成本约 \(6 ~\)36
而且所有成本仅在技能训练时支付一次,部署后无任何额外成本。如果优化后的技能可以跨 10 个任务迁移,ROI 是非常高的。
局限性三:单技能的限制
SkillOpt 有意优化单个可移植技能。对于需要大量不相交过程的极异构领域,单个技能可能不够用。
未来的解决方向包括:扩展为技能库优化(类似 EvoSkill 但保留 SkillOpt 的优化机制)、技能组合使用、根据任务类型进行技能路由等。
未来值得关注的研究方向
- 跨领域技能库共享:构建一个社区共享的技能库,类似 PyPI 或 npm,但是为 AI Agent 技能服务的
- 优化器侧元技能的跨基准复用:让优化过程中学到的"怎么优化技能"的知识本身也能跨任务复用
- 开放任务的免奖励驱动验证门控:用偏好反馈或强模型评估作为验证信号,实现开放任务的技能优化
- 技能自蒸馏回目标模型:把优化后的技能通过蒸馏的方式注入回模型权重,进一步降低部署成本
八、这对你的实际工作有什么影响?
如果你是学生/研究者
这篇论文在方法设计上非常严谨,值得仔细研读:
- 问题形式化清晰,算法描述完整
- 消融实验非常充分(文本学习率、慢更新、被拒绝缓冲区、验证门控分别做了消融)
- 代码已经开源(MIT 协议),可以复现和扩展
推荐你重点看:第 3 节(与现有方法的系统性对比)、第 4.3 节(消融实验)、以及 GitHub 仓库里的 skillopt/optimizer.py(优化器核心逻辑的实现)。
如果你是 AI Agent 开发者
SkillOpt 目前已经可以实际使用——GitHub 仓库提供了完整的训练/评估脚本,支持 6 个内置基准,也支持扩展自定义基准。
最适合使用 SkillOpt 的场景:
- ✅ 过程类任务(需要严格格式遵循、工具调用规范)
- ✅ 多步骤推理任务(数学、代码生成)
- ✅ 具身决策任务(机器人、游戏 Agent)
- ✅ 需要跨模型/框架部署的场景
不太适合的场景:
- ❌ 创意生成类(缺乏自动反馈信号)
- ❌ 一次性任务(训练成本无法摊销)
如果你是企业 AI 团队的负责人
这里有一个简单的 ROI 计算:
假设你要为一个高价值的业务流程优化 Agent 技能:
- 使用 SkillOpt 训练技能的成本:约 \(360 ~\)3600(过程类任务,跨 10 个任务迁移)
- 但每个任务带来 +20 个点的性能提升
- 如果业务流程每天处理上万次请求,这 +20 个点的提升意味着每天多正确处理上千个请求
这个 ROI 是非常有说服力的。
实践建议:
- 先把 SkillOpt 用到过程类任务上(收益最大)
- 建立技能版本管理流程(技能文档纳入 Git)
- 建立技能的人工审计机制(毕竟优化器也可能生成有偏见的规则)
- 逐步积累组织内部的技能库
九、代码仓库结构速览
SkillOpt 的代码质量相当不错,模块化设计清晰:
SkillOpt/
├── skillopt/ # 核心训练逻辑
│ ├── optimizer.py # ⭐ 优化器核心(对应论文算法1)
│ ├── trainer.py # 训练循环
│ ├── envs/ # 各基准测试实现
│ └── model/ # 模型后端(OpenAI/Azure/Claude/Qwen等)
├── skillopt_sleep/ # 🆕 最新功能:部署阶段的离线技能迭代
├── scripts/ # 训练/评估脚本
├── configs/ # 配置文件
├── plugins/ # Claude Code / Codex / Copilot 插件
└── ckpt/ # 预训练技能产物(可以直接用!)
快速上手:
# 安装
pip install skillopt
# 训练技能
python scripts/train.py \
--config configs/searchqa/default.yaml \
--optimizer_model gpt-5.5 \
--target_model gpt-5.5
# 输出:best_skill.md(这就是你要部署的技能文档!)
十、总结
SkillOpt 是一项里程碑式的工作,其核心价值可以归纳为四点:
-
理论贡献:首次将技能文档形式化为冻结 Agent 的可训练外部状态,借鉴深度学习优化器的完整逻辑,实现了系统化、可控、稳定、可复现的文本空间技能优化。
-
技术贡献:提出了文本学习率预算、被拒绝编辑缓冲区、轮次级慢/元更新等多个创新机制,保障了训练过程的稳定性和收敛性。
-
实验贡献:在 52 个评估单元中全面领先,验证了方法的有效性和泛化性。
-
实践贡献:代码开源、文档完善、预训练技能可直接使用,大大降低了方法的使用门槛。
从更广阔的视角看,SkillOpt 可能正在推动一个范式转变——
提示词工程正在从"基于直觉的手工调优",走向"基于反馈的系统优化"。
技能文档正在从"一次性的提示词",走向"可训练、可审计、可复现、可迁移的 AI Agent 核心资产"。
这个方向才刚刚开始,未来几年一定会涌现出更多精彩的工作。
参考文献
- Yang, Y. et al. (2026). SkillOpt: Executive Strategy for Self-Evolving Agent Skills. arXiv:2605.23904.
- Alzubi, S. et al. (2026). EvoSkill: Automated Skill Discovery for Multi-Agent Systems. arXiv:2603.02766.
- Yuksekgonul, M. et al. (2024). TextGrad: Automatic Differentiation via Text. arXiv:2406.07496.
- Khattab, O. et al. (2023). DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines. arXiv:2310.03714.
如果你觉得这篇文章对你有帮助,欢迎点赞收藏。关于 SkillOpt 有任何问题,也欢迎在评论区讨论!
本文基于公开可获取的论文预印本和 GitHub 代码库撰写,不代表微软或论文作者的官方立场。
讨论回复
1 条回复推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。