SkillOptby Microsoft ★ GitHub
微软研究院开源 · arXiv 2605.23904 · MIT License

像训练神经网络一样
训练智能体技能

epoch批大小学习率验证门控 来优化自然语言技能文档 —— 却不碰任何一个模型权重

SkillOpt 把「技能文档」当作一个冻结智能体的可训练状态,用使权重优化得以复现的那套纪律来训练它。优化器模型把打过分的轨迹转化为有界的「增 / 删 / 改」编辑,唯有当编辑严格提升留出验证分数时才会被接受 —— 在部署时新增 零次推理调用

52/52
评测单元全部最佳/并列最佳
+24.8
GPT-5.5 Codex 平均提分
0
部署时额外推理调用
300–2K
best_skill.md 典型 token 量
skill_training.py — 技能即权重
# 深度学习训练,只不过被训练的是一份 Markdown 技能文档 for epoch in range(num_epochs): for step in steps: traj, score = rollout(target_model, skill_doc) # 前向传播 patches = reflect(optimizer, traj, score) # 反向传播 → 编辑补丁 edits = select(patches, lr=4) # 梯度裁剪 candidate = apply(skill_doc, edits) # 参数更新 if gate(candidate) > gate(skill_doc): # 验证门控 skill_doc = candidate # ✓ 接受 skill_doc = slow_update(skill_doc, prev_epoch) # 跨 epoch 动量 save("best_skill.md") # 部署产物:紧凑、零推理开销
// 为什么需要 SkillOpt

现有技能进化方式,
都不像一个真正的优化器

现代智能体技能通常是手工编写、由强模型一次性生成,或在松散自我修订中演化 —— 没有哪一种像对技能本身做深度学习优化,也没有哪一种能在反馈下可靠地超越起点。

✍️

手工编写

依赖专家直觉,无法系统迭代,难以复现与扩展,质量随人而异。

一次性生成

强 LLM 单次生成,没有基于真实反馈的闭环,无法稳定改进起点。

🌀

松散自我修订

缺少验证门控与学习率约束,容易震荡、过拟合、灾难性遗忘

🔗 深度学习 ↔ SkillOpt 对照

把熟悉的训练范式逐项映射到技能文档优化上 —— 你已经懂的全部直觉都能直接复用。

深度学习SkillOpt
模型权重技能文档(Markdown)
前向传播Rollout(目标模型执行任务)
损失 / 梯度Reflect(优化器生成编辑补丁)
梯度裁剪编辑筛选(learning_rate = 最大编辑数)
SGD 单步把补丁应用到技能文档
验证集在 selection split 上的门控评测
学习率调度lr_scheduler:cosine / linear / constant
多轮 Epoch慢更新(slow update)+ 元技能记忆(meta skill)
// 训练循环

六阶段优化流水线

每一步都对应深度学习训练的一个环节:从执行任务、分析失败,到裁剪编辑、应用更新、门控验证 —— 形成一个稳定收敛的闭环。

01
🎯

Rollout

目标模型执行任务,产出轨迹与分数

forward pass
02
🔍

Reflect

优化器分析失败轨迹,生成编辑补丁

backward
03
🔗

Aggregate

语义相近的补丁分层合并去冗余

merge
04
✂️

Select

按相关度排序,按学习率裁剪编辑数

grad clip
05
📝

Update

把选中的补丁应用到技能文档

SGD step
06
🚦

Gate

在留出集验证,严格提升才接受

validation
Epoch 边界机制
🔄 慢更新 Slow Update · 纵向对比,注入高层指导,防遗忘
🧠 元技能 Meta Skill · 跨 epoch 累积策略记忆
🚦

验证门控:只接受真正的进步

更新后的技能在 selection split(类比验证集)上评估,只有当分数严格提升才被永久接受,否则进入「被拒编辑缓冲区」。这从根本上阻断了回退与过拟合。

✂️

文本学习率:约束每步改动

learning_rate 限制每步最多应用多少条编辑,等价于梯度裁剪,防止单步过冲。lr_scheduler 支持 cosine(先激进后收敛)、linear、constant。

🔄

慢更新:对抗灾难性遗忘

从第 2 个 epoch 起,对上一轮与当前技能在同一批样本上做纵向对比,将样本分为「改进 / 回退 / 持续失败 / 稳定成功」,进而生成注入文档的高层指导。

🧠

元技能记忆:跨轮策略沉淀

一份贯穿整个训练过程的元技能记忆,在每个 epoch 末反思轮次间的变化,凝练成紧凑记忆,作为后续 reflect 阶段的额外上下文。

// 实验结果

在每一个评测单元上都最强

横跨 6 个基准 · 7 个目标模型 · 3 种执行环境(直接对话、Codex CLI、Claude Code CLI),SkillOpt 在全部 52 个 (模型, 基准, 环境) 单元上取得最佳或并列最佳。

52/52
评测单元最佳 / 并列最佳
+23.5
直接对话平均提分
+24.8
Codex 智能体循环内
+19.1
Claude Code 环境内

以上提分为 GPT-5.5 相对「无技能」基线的平均准确率提升。优化后的技能产物可跨模型规模迁移、在 Codex 与 Claude Code 环境之间互换,并迁移到相邻基准而无需再次优化。

📄DocVQA
文档问答
configs/docvqa/
🏠ALFWorld
具身智能
configs/alfworld/
🏢OfficeQA
企业问答
configs/officeqa/
🔎SearchQA
开放域问答
configs/searchqa/
🧮LiveMathBench
数学推理
configs/livemathbench/
📊SpreadsheetBench
表格 / 软件工程
configs/spreadsheetbench/
// 部署时的伴侣

SkillOpt-Sleep:让本地编程智能体「夜间学习」

如果说 SkillOpt 是在基准上离线训练技能,那么 SkillOpt-Sleep 把同一套纪律用到你的日常使用上 —— 给本地编程智能体一个夜间「睡眠周期」,越用越聪明,且无需训练权重。

😴 Preview · 开源 · 与论文代码解耦

一个引擎,三个智能体外壳

它回顾你过去的会话,在你自己的 API 预算上重放高频任务,把学到的东西固化为经过验证的长期记忆与技能 —— 全部经过留出门控、暂存待你审核后采纳。它融合了 SkillOpt 的「门控有界文本编辑」、Claude Dreams 的「离线巩固、先审后用」,以及「短期经验 → 长期能力」的 agent sleep 思想。

📥 收集 Claude Code / Codex 会话记录 ⛏️ 挖掘高频任务 🔁 离线重放 🚦 门控(真实留出任务) 📋 暂存提案 ✅ 你来采纳
🤖Claude Code

作为插件市场安装,斜杠命令触发。

/plugin marketplace add ./plugins/claude-code
→ /skillopt-sleep
⚙️Codex

脚本一键安装为技能。

bash plugins/codex/install.sh
→ skillopt-sleep skill
🐙Copilot

注册为 MCP 服务器。

register plugins/copilot/
mcp_server.py as MCP server
🧪

在真实模型上验证,门控拦住回退

在公开的 gbrain-evals skillopt-v1 基准上,有缺陷的技能在留出集上从 0.00 → 1.00(Claude 与 Codex 全部 4 个种子,含真实工具调用循环),跨模型迁移为正,门控成功拦截回退。无需 API Key 的确定性证明:python -m skillopt_sleep.experiments.run_experiment --persona researcher --assert-improves

// 安装与使用

5 分钟跑通第一个实验

需要 Python ≥ 3.10,以及至少一个模型 API Key(Azure OpenAI / OpenAI / Anthropic / 本地 Qwen)。已发布到 PyPI,pip install skillopt 即可。

bash
# 直接从 PyPI 安装(v0.1.0)
pip install skillopt

# 验证安装
python -c "import skillopt; print('SkillOpt ready!')"
bash
# 克隆仓库
git clone https://github.com/microsoft/SkillOpt.git
cd SkillOpt

# 可编辑安装
pip install -e .
bash
# 按需安装基准 / 后端 / 工具的额外依赖
pip install -e ".[alfworld]"     # ALFWorld 具身基准
pip install -e ".[claude]"       # Claude 后端
pip install -e ".[qwen]"         # 本地 Qwen(vLLM)
pip install -e ".[webui]"        # WebUI 监控面板

# 一次装齐
pip install -e ".[alfworld,claude,qwen,webui,dev]"
bash · .env
# 复制示例并填入你的凭证
cp .env.example .env

# Azure OpenAI(默认后端)
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
AZURE_OPENAI_API_KEY=your-key

# 或者直接用 OpenAI / Anthropic
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
1

选择基准并查看配置

SkillOpt 内置多个开箱即用的配置。SearchQA 最快,约 30 分钟即可完成一次完整训练。配置里的关键超参都带有深度学习类比。

cat configs/searchqa/default.yaml # train.num_epochs=4(epochs) · batch_size=40(批大小) # optimizer.learning_rate=4(每步最大编辑) · lr_scheduler=cosine # optimizer.use_slow_update=true · use_meta_skill=true # evaluation.use_gate=true(验证门控)
2

开始训练

一条命令启动「rollout → reflect → aggregate → select → update → gate」的完整循环,训练产物保存到 outputs/<benchmark>/<run_id>/

python scripts/train.py --config configs/searchqa/default.yaml
3

评估最优技能

训练结束后得到紧凑的 best_skill.md,在测试集上评估它对未改动目标模型的提升。

python scripts/eval_only.py \ --config configs/searchqa/default.yaml \ --skill outputs/searchqa/<run_id>/skills/best_skill.md
$ python scripts/train.py --config configs/searchqa/default.yaml
[Step 1/8] Rollout: 20 items, 4 workers...
[Step 1/8] Score: 0.65 → Reflect...
[Step 1/8] 6 edit patches generated
[Step 1/8] Selected 4 edits (lr=8, cosine → 7.7)
[Step 1/8] Gate: val score 0.68 > 0.65 ✓ ACCEPT
[Step 2/8] Rollout: 20 items, 4 workers...
...
 best_skill.md saved (412 tokens, +23.5 over no-skill)
📊

WebUI 监控面板

偏好图形界面?pip install -e ".[webui]" 后运行 python -m skillopt_webui.app,浏览器打开 localhost:7860 即可配置参数、启动训练、实时监控。支持 --port / --host / --share

🧩

可扩展:新后端 & 新基准

新增后端只需写一个 <name>_backend.py 并注册路由(qwen / minimax 是好模板);新增基准只需一个含 dataloader.pyrollout.pyinitial.md 的环境包,约 100 行代码。已支持 OpenAI / Azure / Claude / Qwen / MiniMax 多后端。

📚 引用 · BibTeX
@misc{yang2026skillopt,
  title  = {SkillOpt: Executive Strategy for Self-Evolving Agent Skills},
  author = {Yifan Yang and Ziyang Gong and Weiquan Huang and others},
  year   = {2026},
  eprint = {2605.23904},
  archivePrefix = {arXiv},
  primaryClass  = {cs.AI},
  url    = {https://arxiv.org/abs/2605.23904}
}

把技能,当成可训练的参数

开源、MIT 协议、已上架 PyPI。给你的冻结智能体一份会自我进化、经过验证、零推理开销的技能文档。