微软开源SkillOpt,AI Agent技能优化准确率暴涨39分
- 免费干货
- 1小时前
- 7热度
- 0评论
训练神经网络的时候,你会关注 epoch、batch size、学习率——整套流程跑下来,结果是可以复现的。
但训练 AI Agent 的 skill 呢?
改改 prompt,跑一下看看。好的话就算了,不好的话……再改呗。没有验证集,全凭手感。
说实话,微软研究院开源的 SkillOpt,算是第一次把训练神经网络的那套方法论搬到了优化 skill 上。

同一个模型,不微调参数,就优化了一个 Skill.md 文件。
Skill 的准确率最高涨了近 39 分。
GitHub 上线不到一个月,已经 5000+ Star 了。
像训练神经网络一样训练 Skill
SkillOpt 的核心想法其实很直觉:
把 Skill 的 md 文件当成神经网络里的可训练参数,然后用训练神经网络的那套纪律去优化它。
具体的对应关系:
- 神经网络的权重 → Skill.md
- 梯度 → 基于任务轨迹的反思分析
- 学习率 → 每次文本编辑的幅度预算
- 验证集 → held-out 数据上的评分门控
- epoch → 多轮迭代优化
整个优化过程由一个叫 ReflACT 的六阶段管线驱动。

开源地址:https://github.com/microsoft/SkillOpt
第一步:Rollout。
用当前的 skill 文档让目标模型跑一批任务,收集每条任务的执行轨迹和得分。没啥花活,就是跑起来再说。
第二步:反思分析。
一个单独的优化器模型(Optimizer Model)分析这些轨迹,找出 skill 文档里哪些地方导致了错误,哪些地方做得好。

第三步:生成补丁。
优化器模型根据分析结果,生成针对性的文本编辑——添加、删除、替换 skill 文档中的具体段落。每次编辑的幅度受文本学习率控制,不会一口气大改,而是小步迭代。

第四步:合并。
把多条补丁合并成一个候选 skill 文档。
第五步:排序筛选。
如果合并后的补丁包含的编辑数量超过预算,就按优先级排序,只保留最重要的几条。
第六步:验证门控。
这是最关键的一步。候选 skill 文档不会直接生效,必须先在验证集上跑一轮评分。
只有得分严格优于当前 skill 文档,才会被接受。否则这次修改直接丢弃。

这六步循环往复,多个 epoch 跑下来,skill 文档就从一个粗糙的初版逐渐进化成一个经过多轮验证的最优版本。
还有两个 epoch 级别的全局机制:Slow Update(慢更新):每个 epoch 结束时,对整个训练过程中的经验做一次纵向回顾,提炼出全局性的改进建议,注入到技能文档中。老实讲,这个设计有点像人晚上躺在床上复盘一天的经验。
Meta Skill(元技能):在慢更新的基础上,进一步总结出一套更高层次的策略性指导,帮助 skill 文档在后续 epoch 中更有效地优化。
最终产物是一个通常只有 300 到 2000 token 的 best_skill.md 文件。
部署的时候,直接把这个文件作为系统指令喂给模型就行了,不需要任何额外的模型调用,推理成本为零。
没错,你花了好几轮 epoch 训练出来的东西,部署的时候就是一个小小的 Markdown 文件。
52项评测全部领先
SkillOpt 的实验规模是真的大。6 个 benchmark、7 个目标模型、3 种执行方式,加起来一共 52 个评测单元,说实话这个覆盖面挺吓人的。
6 个 benchmark 涵盖了不同类型的任务:
- SearchQA:基于搜索的问答
- ALFWorld:具身智能体任务
- DocVQA:文档问答
- LiveMathematicianBench:数学推理
- SpreadsheetBench:电子表格代码生成
- OfficeQA:工具增强型问答
7 个目标模型涵盖了 GPT-5.5、GPT-5.4、GPT-5.4-nano 等不同规模,执行方式的话,直接对话、Codex CLI 代理循环、Claude Code CLI 代理循环三种都上了。
结果嘛……SkillOpt 在全部 52 个评测单元上都是最佳或并列最佳。
在 GPT-5.5 上的提升尤为夸张:
- 直接对话模式:平均准确率提升 +23.5 分
- Codex 代理循环:+24.8 分
- Claude Code 代理循环:+19.1 分
部分场景最高甚至飙到了 +39.0 分。
不过话说回来,SkillOpt 的对手可都不弱。TextGrad、GEPA 这类 prompt 优化方法,Trace2Skill、EvoSkill 这类技能演化方法,还有人类专家手写的技能和强模型一次性生成的技能——结果 SkillOpt 把它们全部压了下去。
我倒是觉得后面这个发现更实用一些:优化后的 skill 文档居然能迁移。
一个模型上训练出来的技能,直接拿去另一个模型用,虽然效果有损但依然显著。
在 Codex 上优化的技能,拿到 Claude Code CLI 上也能跑。甚至跨 benchmark 都有一定的泛化性。
这意味着你不用每个模型每个场景都跑一轮完整训练了,一次优化的产出可以复用到多个地方。对吧,这对实际部署来说省了多少事。
怎么用
安装很简单:
git clone https://github.com/microsoft/SkillOpt.git
cd SkillOpt
pip install -e .
然后配置 API 密钥。SkillOpt 支持多种后端:
# Azure OpenAI(推荐)
export AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com/"
export AZURE_OPENAI_API_KEY="your-key"
# Anthropic Claude
export ANTHROPIC_API_KEY="sk-ant-..."
# Qwen(本地 vLLM)
export QWEN_CHAT_BASE_URL="http://localhost:8000/v1"
export QWEN_CHAT_MODEL="Qwen/Qwen3.5-4B"
一条命令启动训练:
python scripts/train.py
--config configs/searchqa/default.yaml
--split_dir /path/to/your/searchqa_split
--azure_openai_endpoint https://your-resource.openai.azure.com/
--optimizer_model gpt-5.5
--target_model gpt-5.5
这里有两个模型角色:optimizer_model 是负责分析轨迹、生成补丁的优化器模型,target_model 是实际执行任务的目标模型。
你可以用强模型做优化器,弱模型做目标——说白了就是用前者的智慧去带后者。我觉得这个设计挺巧妙的,有点像师傅带徒弟。
训练完之后,输出目录下会生成 best_skill.md,这就是你最终的技能文档了。
如果你不想从头训练只想评估的话,项目在 ckpt/ 目录下预置了一部分 GPT-5.5 的优化技能文件,直接拿来用就行,挺方便的。
SkillOpt 还自带了一个 WebUI 监控面板,训练过程中可以实时看进度。话说回来,有可视化面板的项目体验确实好不少。
项目架构设计得比较干净,如果你想接入自己的 benchmark 或者自己的模型后端,都有清晰的扩展接口。
加一个新 benchmark 就是写一个 dataloader、一个 rollout 函数和一个初始技能种子文件。
加一个新后端就是写一个 backend 模块然后注册到路由里。项目里已经有 Azure OpenAI、Claude、Qwen、MiniMax、Codex CLI、Claude Code CLI 六个后端的实现可以参考。
开源地址:https://github.com/microsoft/SkillOpt
论文地址:https://arxiv.org/abs/2605.23904
项目主页:https://microsoft.github.io/SkillOpt/
SkillOpt 和直接调 prompt 有什么区别?
直接调 prompt 没有验证集也没有迭代标准,全靠人感觉判断好坏。SkillOpt 引入了类似神经网络训练的验证集门控和 epoch 迭代机制,每次修改都有评分兜底,不达标直接丢弃,优化过程可复现。老实讲,这才是正经的工程化做法。
优化出来的 skill 文档能不能跨模型使用?
可以。实验表明在 Codex 上优化的技能拿到 Claude Code CLI 上也能用,跨 benchmark 也有一定泛化性,一次训练多处复用。
部署优化后的 skill 会增加推理成本吗?
不会。最终产物就是一个 300 到 2000 token 的 best_skill.md 文件,直接当系统指令喂给模型,不需要额外的模型调用,推理成本为零。你猜怎么着?这点真的很关键。