训练神经网络的时候,你会给模型喂数据、开几个 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 能力,而不是训练权重。这意味着:
- 可移植:一段 skill.md 可以跨模型使用,不绑定任何 Provider
- 成本低:不需要 GPU,不需要微调,Optimizer 可以用小模型
- 可积累:每次训练的结果都有版本记录(skills/skill_vXXXX.md)
这个方向和 OpenSpace 的自进化思路有相似之处——都在探索「如何让 AI Agent 自主改进自己」。OpenSpace 改进的是经验记忆,SkillOpt 改进的是技能文档。
相关链接:
- GitHub:https://github.com/microsoft/SkillOpt
- 官网:https://microsoft.github.io/SkillOpt/
- 论文:https://arxiv.org/abs/2605.23904
END
如果你在考虑「这个任务 AI Agent 处理得不好,是不是该换模型」,先看一下 SkillOpt——也许不需要换模型,换一段技能文字就够了。