微软开源SkillOpt,AI Agent技能优化准确率暴涨39分

训练神经网络的时候,你会关注 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 文件,直接当系统指令喂给模型,不需要额外的模型调用,推理成本为零。你猜怎么着?这点真的很关键。