微软SkillOpt开源:像训练神经网络一样优化AI技能,评测准确率暴涨39分
训练神经网络早已拥有一套成熟的流程,从 epoch、batch size 到学习率,每一步都有章可循,结果也可稳定复现。但当我们要训练一个 AI Agent 的“技能”(skill)时,情况就截然不同:调整一下 prompt,跑一遍看看效果,效果不理想就再改,既没有验证集,也几乎全凭手感。
微软研究院近日开源了一个名为 SkillOpt 的项目,首次将训练神经网络的方法论完整迁移到了 skill 优化中。同一个模型,在不微调、不更换任何参数的前提下,仅靠优化一份 Skill.md 文件,就能将技能准确率最高拉升近 39 分。项目在 GitHub 上线不到一个月,已收获超过 5000 星。

把 Skill 当作神经网络来训练
SkillOpt 的核心思路非常直觉:将 Skill 的 Markdown 文件视为神经网络中的可训练权重,然后运用训练神经网络的整套纪律去优化它。

具体对应关系如下:
- 神经网络的权重 → Skill.md 文件内容
- 梯度 → 基于任务执行轨迹的反思分析
- 学习率 → 每次文本编辑的幅度预算
- 验证集 → held‑out 数据集上的评分门控
- epoch → 多轮迭代优化
整个优化由一个名为 ReflACT 的六阶段管线驱动,每一步都在做同一件事:让 skill 文档变得更好,并且有据可查。

开源地址: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 等不同规模,3 种执行方式分别为直接对话、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 场景中也表现出一定的泛化性。这意味着,你不必为每个模型、每个场景都跑一轮完整训练,一次优化的产出可以在多处复用。
快速上手:SkillOpt 使用指南
安装过程非常简单:
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,这就是最终的技能文档。
如果只想评估已有的技能,无需重新训练:
python scripts/eval_only.py \
--config configs/searchqa/default.yaml \
--skill ckpt/searchqa/gpt5.5_skill.md \
--split valid_unseen \
--split_dir /path/to/searchqa_split \
--azure_openai_endpoint https://your-resource.openai.azure.com/
项目在 ckpt/ 目录下还预置了部分 GPT‑5.5 的优化技能文件,可以直接拿来使用。
SkillOpt 还自带了一个 WebUI 监控面板,用于实时观察训练过程:
pip install -e ".[webui]"
python -m skillopt_webui.app
项目的架构设计十分清晰,若你要接入自己的 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/