SkillOpt:像训练神经网络一样训练AI Agent的技能

12次阅读

训练神经网络的时候,你会给模型喂数据、开几个 epoch、跑梯度下降,最后得到一组权重文件。

但如果问题是「这个 AI Agent 不会处理某类任务」,你的解法是什么?再训练一个模型?换一个大模型?写更多 Prompt?

Microsoft SkillOpt(GitHub 2,525 ⭐)给出了一个不同的思路:不去动模型的权重,而是训练一段自然语言——一段可以反复使用的技能文档(best_skill.md)

SkillOpt 是微软开源的「文字空间优化器」,核心思想是:

像训练神经网络一样训练 AI Agent 的技能——有 epoch、有 mini-batch、有验证门——但 不改动任何模型权重

训练的结果不是一个新模型,而是一段文字。把这段文字接到任何 QA agent 的 system prompt 前面,这个 agent 处理特定任务的能力就会变强。

种子技能(Seed Skill)↓
Agent 带技能跑一个 batch
      ↓
收集轨迹(答对 / 答错)↓
Optimizer LLM 分析轨迹,提出编辑建议
      ↓
验证门(只有 val 准确率提升才接受)↓
接受 → 成为新的最佳技能
拒绝 → 反馈给 Optimizer,下次不再提同样的建议

这是 SkillOpt 最关键的设计。

每一轮编辑建议提交后,会先在一个 held-out 验证集上测试。只有当验证集准确率 确实提升,这次编辑才会被接受成为新的最佳技能。

这个机制解决了一个核心问题:模型可能会「拟合」训练集,而没有学到真正可泛化的策略。验证门保证了只有真正提升的策略才能沉淀下来。

每个训练步只做一次编辑建议,且必须通过验证门。没有「整篇重写」,只有小而精准的编辑。

如果一个编辑建议被拒绝,Optimizer 会记住这个版本,下次不再提同样的建议。这避免了无意义的反复试错。

SkillOpt 支持多种 benchmark 配置:

Benchmark 类型
SearchQA 问答
ALFWorld 具身智能
DocVQA 文档问答
LiveMathematicianBench 数学
SpreadsheetBench 代码生成
OfficeQA 工具增强问答

用 Qwen3.6-27B 在 HotpotQA 上跑了一轮:

技能 val F1 test EM test F1
种子技能(baseline) 0.8465 0.700 0.8424
优化后 0.8822 0.710 0.8524
提升 +0.0357 +0.010 +0.010

这个提升幅度相对小,是因为 Qwen3.6-27B 在 HotpotQA 上本身就非常强(种子 F1 已经 0.84)。论文里提到,在较弱的模型上,提升可以达到 +20 分级别

关键是:全程未改动任何模型权重,只修改了一段文字。这种方法的潜力在于,同样的 skill 文档可以跨模型复用。

训练出来的 best_skill.md 只需要接到 agent 的 system prompt 前面即可:

[best_skill.md 的内容]
[原有 system prompt]

甚至可以换一个新模型,直接用这段 skill——不需要重新训练。

git clone https://github.com/microsoft/SkillOpt.git
cd SkillOpt
pip install -e .

export AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com/"
export AZURE_OPENAI_API_KEY="your-key"

python scripts/train.py \
  --config configs/searchqa/default.yaml \
  --split_dir /path/to/your/split \
  --optimizer_model gpt-5.5 \
  --target_model gpt-5.5 \
  --num_epochs 4 \
  --batch_size 40
  • 计算成本:Optimizer LLM 和 Target LLM 通常是两个模型,成本翻倍

  • 任务适配性:SkillOpt 在需要推理和多步搜索的任务上效果更明显,简单任务提升空间有限

  • 调优周期:需要多次 epoch 和验证门迭代,比单纯写 Prompt 耗时更长

  • Benchmark 准备:需要提前准备好 train/val/test 数据格式

  • 需要给特定任务优化 Agent 能力的开发者:不想换模型,又想提升某个场景的表现

  • 多模型部署场景:训练一次 skill,多个模型共用

  • AI 研究者:探索「文字空间优化」这个新范式的上限在哪里

传统的方法是:任务效果不好 → 换一个更大的模型,或者写更复杂的 Prompt。

SkillOpt 打开了一个新的方向:训练一段文字来提升 Agent 能力,而不是训练权重。这意味着:

  1. 可移植:一段 skill.md 可以跨模型使用,不绑定任何 Provider
  2. 成本低:不需要 GPU,不需要微调,Optimizer 可以用小模型
  3. 可积累:每次训练的结果都有版本记录(skills/skill_vXXXX.md)

这个方向和 OpenSpace 的自进化思路有相似之处——都在探索「如何让 AI Agent 自主改进自己」。OpenSpace 改进的是经验记忆,SkillOpt 改进的是技能文档。

相关链接:

END

如果你在考虑「这个任务 AI Agent 处理得不好,是不是该换模型」,先看一下 SkillOpt——也许不需要换模型,换一段技能文字就够了。

正文完