微软 SkillOpt:给 AI 助手装个「自我进化」引擎
你手写过一个 SKILL.md 吗。
写了,发现它漏东西。让 AI 自己改一版,改好了;过两天觉得还差点意思,再改一次,偏了;再改,彻底跑歪。没有系统性的验证机制,改好改坏全凭运气。
这个场景,开发 AI Agent 的人应该都不陌生。不管你是写 CLAUDE.md 还是 SKILL.md,都是在用一段自然语言文本,把一个冻结的 LLM 往你想要的方向拧。但纯手工拧,就跟调参不设 validation set 一样——今天好了,明天崩了,你都不知道是哪次改动搞的。
微软在 2026 年 5 月开源的项目 SkillOpt,就是为了解决这个问题。
一句话定义
把 SKILL.md 当成神经网络权重来训练。
冻结目标 LLM 不动,用一条完整的训练流水线自动迭代你的技能文档,每一步都有验证门控把关。像极了模型训练里设 validation set 做 early stopping——只接受能通过验证的改进。
论文地址:arxiv.org/abs/2605.23904[1]
GitHub 仓库(国内镜像):atomgit.com/gh_mirrors/sk/SkillOpt[2]
核心洞察:文本空间也有优化器
SkillOpt 要做的事,就是给「写 skill 文档」这件事搭一套完整的训练框架:
这个类比不是修辞——每一个 DL 训练里你关心的机制,SkillOpt 在文本空间都有实现。
六步训练循环
1. Rollout — 让目标 Agent 干活
用当前 skill 文档作为 prompt,目标模型(冻结的)执行一批任务。每个任务生成一条轨迹和一个分数。
支持三种执行模式:
- Direct chat:直接模型对话调用
- Codex CLI:@openai/codex 的 agentic 循环
- Claude Code CLI:Anthropic 的 coding agent
2. Reflect — Optimizer 分析失败
更强(通常也更贵)的 optimizer 模型分析失败的轨迹,输出结构化的编辑补丁。不是"改好它"这种模糊指令,而是精确的:
{
"op": "add",
"target": "当用户问持仓诊断时",
"content": "先检查 baseline 数据有没有更新,再生成诊断"
}
支持两种分析模式:
- Shallow:每条轨迹独立分析
- Deep:跨轨迹交叉关联,找出系统性缺陷
3. Aggregate — 合并重复补丁
语义相似的编辑补丁会被合并。做个好的训练循环,冗余的 batch 不能浪费梯度——同理,十条"记住先查 baseline"的补丁合并成一条就够了。
4. Select — 梯度裁剪 + 学习率
编辑按相关度排序,只取 top-K 条应用。K 就是 learning rate。训练步数多了,LR 可以按 schedule 衰减——cosine、linear、constant 三种都支持。
这一步直接类比 DL 里的梯度裁剪:步子大了会扯到蛋,每步最多改 K 处,防止一次改太多把 skill 写崩。
5. Update — 应用补丁
三种更新模式:直接 patch(精准替换)、rewrite from suggestions(按建议改写)、full rewrite minibatch(整篇重写)。默认用 patch,改动最小、风险最低。
6. Gate — 验证门控
最关键的一步。更新后的 skill 先不对外发布,而是在一个 held-out 验证集上重新跑一遍,跟当前 skill 的分数对比。只有分数严格提升的更新才被接受。
门控支持三种指标:
- hard:严格精确匹配(默认,最保守)
- soft:F1 / 部分匹配(验证集小时更敏感)
- mixed:加权平均(两全其美)
被拒绝的编辑也不白费——进附录缓冲区,下次反思时作为负样本参考。
跨 epoch 机制
一个 epoch 跑完,系统做两件额外的事:
Slow update — 拿出上一个 epoch 的 skill,跟当前 epoch 的 skill 在同样的数据上各跑一次,纵向对比每一条出了什么问题。之前修好的 bug 这次又犯了?新 skill 解决了什么但引入的新问题?写出对比分析注入下一轮。
Meta skill — optimizer 写一段"跨 epoch 的学习笔记",供后续反思轮次参考。模型训练里你记录 learning curve,这里 optimizer 记录"我上次这么改效果不错,这次可以复用策略"。
SkillOpt-Sleep:最实用的部分
论文研究框架之外,项目还附带了一个可以直接用的产品化工具——SkillOpt-Sleep(代号 Sleep)。
设计理念:每天干活,晚上睡一觉,第二天变强一点。
一夜的流程
harvest(收今天的日志)
→ mine(挖出重复任务模式)
→ replay(离线回放,对比 baseline vs candidate)
→ consolidate(reflect → bounded edit → GATE)
→ stage(挂起等人审批)
→ adopt(确认后应用)
支持的 harvest 来源
~/.claude/history.jsonl 和 session transcripts~/.codex/ 归档会话在国内快速试用
# 从 AtomGit 镜像克隆(比 GitHub 快 10 倍)
git clone https://atomgit.com/gh_mirrors/sk/SkillOpt.git
cd SkillOpt
# 装依赖(零外部依赖,纯 stdlib)
pip install -e .
# 跑一次 dry run 看看效果
python -m skillopt_sleep run --backend mock --dry-run
--backend mock 模式不需要任何 API key,数据也是合成数据——就是让你看看流程长什么样的。
配成每晚 3 点自动跑(OpenClaw 插件方案参考,全流程已有人验证):
# 改 config 用真实后端
cat > ~/.skillopt-sleep/config.json <<EOF
{
"backend": "openclaw-deepseek",
"model": "deepseek-v4-pro",
"transcript_source": "claude",
"lookback_hours": 24,
"auto_adopt": false,
"gate_mode": "on"
}
EOF
# 设 cron(每晚 3 点)
echo "0 3 * * * cd /path/to/SkillOpt && python -m skillopt_sleep run >> ~/.skillopt-sleep/nightly.log 2>&1" | crontab -
实际成本:OpenClaw 插件的实测数据是 ~$0.02/晚,DeepSeek V4 Pro 跑 12 个任务。一年不到 $8。
验证结果
SkillOpt 论文在 6 个 benchmark、7 个 target 模型、3 种执行模式下完整验证:
| 覆盖度 | |
| Direct Chat(GPT-5.5) | |
| Codex 循环 | +24.8 分 |
| Claude Code | +19.1 分 |
| 变差点种子 skill(0.00) | |
| 跨模型迁移 | |
| 跨 benchmark 迁移 | |
| Cross-harness 迁移 |
52 个格子没有翻车的。
诚实清单
任何"自动化"都是有范围的。SkillOpt 再有用也不是银弹。
有效的前提:你的任务有可检查的正确性信号。代码跑不跑得过编译、SQL 查出来是不是预期结果、搜索匹配不匹配 ground truth——出题和判卷的基本要求是"有一份标准答案",然后才能 gate。没有 scoring 信号的场景(纯创意、开放聊天),SkillOpt 没法帮你。
饱和场景效果平坦:如果目标模型在自己熟悉的 benchmark 上已经接近天花板(GPT-5.5 跑它自己擅长的东西),SkillOpt 的 lift 降到 ±1-2 分,基本上是噪声波动。验证门控保证了"不后退",但不保证"一定能帮你突破天花板"。
需要更强的 optimizer 模型:optimizer(负责分析和改写 skill 的模型)需要比目标模型强。论文里默认 optimizer > target。如果你跳不出这个约束,可以用 DeepSeek V4 Pro 做 optimizer、V4 Flash 做 target——成本 0.02 刀/晚,经济上完全可行。
不是一劳永逸:技能优化收敛后是应该冻结用的。你不需要每晚都跑——跑 1-2 轮收敛了就可以停。持续跑是为了应对任务分布漂移(你用的工具变了、需求变了),不是让 skill 永远在"优化中"。
让 AI 助手帮你装好
如果你用的是 OpenClaw、Claude Code、Codex 这类 coding agent,直接把下面这段话丢给它,它会帮你把 SkillOpt-Sleep 装好配好:
帮我做几件事:
1. 从镜像克隆 SkillOpt 项目:
git clone https://atomgit.com/gh_mirrors/sk/SkillOpt.git ~/SkillOpt
2. 装依赖(纯 Python,没外部依赖)
cd ~/SkillOpt && pip install -e .
3. 创建配置文件 ~/.skillopt-sleep/config.json,内容:
{
"backend": "mock",
"lookback_hours": 24,
"gate_mode": "on",
"auto_adopt": false
}
4. 跑一次 dry run 验证:
cd ~/SkillOpt && python -m skillopt_sleep run --backend mock --dry-run
5. 把跑完的结果告诉我
跑通 dry run 后,再改 config 切真实后端就行。
怎么开始
项目已经上了 PyPI:pip install skillopt。
或者直接从源码跑(国内推荐镜像):
git clone https://atomgit.com/gh_mirrors/sk/SkillOpt.git
cd SkillOpt && pip install -e ".[all]"
python -m skillopt_sleep run --backend mock --dry-run
看了干跑,确认整个链路走通后,配 config 切真实后端,设 cron,睡一觉,第二天看看它给你提交了什么。
下载地址:atomgit.com/gh_mirrors/sk/SkillOpt[3]
参考来源:SkillOpt Executive Strategy for Self-Evolving Agent Skills (arXiv 2605.23904, Microsoft, May 2026)、SkillOpt GitHub (microsoft/SkillOpt)、SkillOpt-Sleep OpenClaw Plugin 文档
参考链接
[1] arxiv.org/abs/2605.23904: https://arxiv.org/abs/2605.23904
[2] atomgit.com/gh_mirrors/sk/SkillOpt: https://atomgit.com/gh_mirrors/sk/SkillOpt
[3] atomgit.com/gh_mirrors/sk/SkillOpt: https://atomgit.com/gh_mirrors/sk/SkillOpt
夜雨聆风