乐于分享
好东西不私藏

微软 SkillOpt:给 AI 助手装个「自我进化」引擎

微软 SkillOpt:给 AI 助手装个「自我进化」引擎

微软 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 文档」这件事搭一套完整的训练框架:

深度学习
SkillOpt 对应
含义
模型权重
SKILL.md
要被优化的对象
前向传播
Rollout
冻结 Agent 用当前 skill 干活
损失函数
任务评分
衡量执行质量
反向传播
Reflect
Optimizer 模型分析失败轨迹 → 生成编辑补丁
梯度
编辑补丁
对 skill 文档的 add/delete/replace 建议
梯度裁剪
编辑选择(learning rate)
每步最多应用 N 条编辑
LR 调度器
lr_scheduler
训练过程中 LR 衰减(cosine/linear/constant)
参数更新
Apply edits
把编辑补丁应用到 SKILL.md 上
验证集
Selection split(Gate)
通不过验证的更新拒绝采纳
早停
Gate patience
连续不提升就停止
动量/EMA
Slow update
跨 epoch 的纵向比较,防止遗忘
元学习
Meta skill
跨 epoch 的优化器记忆

这个类比不是修辞——每一个 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 Code 的 ~/.claude/history.jsonl 和 session transcripts
Codex 的 ~/.codex/ 归档会话
Copilot(通过 MCP server 接入)
OpenClaw 等第三方框架(已有现成插件)

在国内快速试用

# 从 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 种执行模式下完整验证:

维度
结果
覆盖度
52(model × benchmark × harness)组合,全部 best or tied-best
Direct Chat(GPT-5.5)
无 skill 基线 +23.5 分
Codex 循环+24.8 分
Claude Code+19.1 分
变差点种子 skill(0.00)
→ 1.00(所有 4 个种子稳定出这个效果)
跨模型迁移
GPT-5.5 训的 skill 给 GPT-5.4 用仍有效
跨 benchmark 迁移
SearchQA 训的技能 → SpreadsheetBench 也提升
Cross-harness 迁移
Codex 训的 skill → Claude Code 直接复用

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