返回博客列表

4300+ Star 微软 SkillOpt:像训练神经网络一样训练 Agent Skill

2026-06-02T11:20:00+08:00
SkillOptMicrosoftAgentLLMSkill优化开源项目

4300+ Star 微软 SkillOpt:像训练神经网络一样训练 Agent Skill

先收藏,回头一定用得上。

如果你用过 Claude Code、Codex 这类 Agent 工具,你一定知道 Skill(技能文档) 的威力——一段精心编写的 best_skill.md,能让一个通用模型在特定任务上表现翻倍。但问题来了:Skill 怎么写?靠手写?靠让 GPT 一次性生成?靠反复自我修改?

微软联合上海交大、复旦、同济给出的答案是:像训练神经网络一样训练它

SkillOpt 把 Skill 文档视为 LLM Agent 的「可训练权重」,用一套完整的优化循环——Rollout、Reflect、Aggregate、Select、Update、Validate——在纯文本空间中进行迭代优化。不碰模型权重,不改 Agent 框架,不增加推理时任何额外调用。最终产物就是一个紧凑的 best_skill.md(300-2000 token),直接塞给你的 Agent 用就行。

上线不到一个月,4300+ Star,MIT 协议。论文发表在 arXiv(2605.23904),在 6 个 benchmark、7 个目标模型、3 种执行环境共 52 个评测单元中全部最优或并列最优

本文提纲

  1. 核心洞察:为什么 Skill 文档本身就是「权重」
  2. ReflACT 训练循环:六阶段流水线拆解
  3. 文本空间的「学习率」和「梯度裁剪」
  4. 验证门控:只接受严格更好的 Skill
  5. 实验结果:52 个评测单元全优
  6. 怎么用:30 秒上手

核心洞察:为什么 Skill 文档本身就是「权重」

SkillOpt 的出发点很反直觉:

模型权重冻结、Agent 框架冻结、执行环境冻结,唯一变量就是 Skill 文档本身。

在深度学习中,训练 = 更新权重矩阵。在 SkillOpt 中,训练 = 更新 Markdown 文档。这不是修辞类比,而是精确的工程对应:

深度学习 SkillOpt
模型权重(float 矩阵) Skill 文档(Markdown 文本)
前向传播 Target Model 执行任务(Rollout)
损失函数 任务评分(正确/错误)
反向传播(计算梯度) Optimizer Model 分析失败轨迹(Reflect)
梯度 = 权重更新方向 文本编辑 = Skill 修改建议
学习率 每步最大编辑数量(edit budget)
梯度裁剪 rank_and_select 排序筛选
验证集 held-out validation split
Early Stopping Validation Gate
Epoch 一轮完整训练数据遍历
Meta Learning 跨 Epoch 的 Slow Update

这个类比的精妙之处在于:每一个神经网络训练的概念,在 SkillOpt 里都有明确的文本空间对应物。这使得整个优化过程有理论依据,不是「随便改改 prompt」。

ReflACT 训练循环:六阶段流水线拆解

SkillOpt 的核心是 ReflACT(Reflect-Act)循环。每一步训练包含六个阶段:

┌──────────────────────────────────────────────────┐
│              ReflACT Training Loop                │
│                                                   │
│  ┌─────────┐    ┌─────────┐    ┌───────────┐     │
│  │ Rollout │───►│ Reflect │───►│ Aggregate │     │
│  │(Forward)│    │(Backprop)│    │ (Merge)   │     │
│  └─────────┘    └─────────┘    └─────┬─────┘     │
│                                      │            │
│  ┌──────────┐  ┌─────────┐  ┌───────▼──────┐    │
│  │ Validate │◄─┤ Update  │◄─┤   Select     │    │
│  │  (Gate)  │  │(Apply)  │  │  (LR Clip)   │    │
│  └────┬─────┘  └─────────┘  └──────────────┘    │
│       │                                          │
│       ▼                                          │
│  Pass? ──Yes──► best_skill.md updated            │
│       │                                          │
│       No──► reject, keep current skill            │
└──────────────────────────────────────────────────┘

Stage 1: Rollout(前向传播)

Target Model(被优化的 Agent)用当前 Skill 文档执行一批训练任务。产出是轨迹(trajectories)、预测结果和分数。这就是「前向传播」——模型带着当前「权重」(Skill)跑一遍任务。

Stage 2: Reflect(计算梯度)

Optimizer Model(独立的 LLM,可以是更强的模型)分析 Rollout 的结果。它逐条审看失败的轨迹,找出系统性错误模式,生成结构化的文本编辑建议。每个编辑建议就是一个「梯度」——指出 Skill 应该往什么方向改。

Stage 3: Aggregate(合并梯度)

多个并行 Reflect worker 产出的编辑建议可能有重复或冲突。Aggregate 阶段用层级合并(hierarchical merging)去重、整合、消解冲突。

Stage 4: Select(梯度裁剪)

这是「学习率」发挥作用的地方。如果候选编辑数量超过学习率(比如 edit budget = 4),系统会调用 LLM 对所有编辑按影响力排序,只保留 top-N。这就是文本空间的「梯度裁剪」。

Stage 5: Update(应用更新)

将选中的编辑应用到 Skill 文档上。SkillOpt 定义了四种原子编辑操作:

操作 含义
add 在文档末尾(或保护区之前)追加内容
insert_after 在指定锚点后插入新内容
replace 替换指定锚点的内容
delete 删除指定锚点的内容

这些编辑是有界的(bounded)——不会重写整个文档,而是精确地增删改特定段落。文档中还可以设置「保护区」(Protected Regions),防止关键内容被修改。

Stage 6: Validate(验证门控)

更新后的候选 Skill 会在 held-out 验证集上评估。只有当候选 Skill 的得分严格高于当前最佳 Skill 时,才接受这次更新。否则丢弃,保留原版。

这就是文本空间的 Early Stopping——防止「过拟合」到当前 batch 的噪声。

文本空间的「学习率」和「梯度裁剪」

SkillOpt 的「学习率」不是浮点数,而是一个整数:每步最大允许的编辑数量

默认学习率是 4,带余弦衰减(cosine decay)。随着训练推进,每步允许的修改越来越少——先快速探索,再精细调整,和神经网络训练完全一样的策略。

Scheduler 支持四种模式:

模式 机制
Cosine Decay 余弦退火,默认模式
Constant 固定 edit budget
Autonomous 让 Optimizer LLM 自己决定每步改多少
Step Decay 阶梯式衰减

当候选编辑数超过 budget 时,系统不是简单截断。它把所有编辑连同上下文送给 LLM,让 LLM 按「系统性影响、互补性、通用性、可操作性」四个维度排序,选出最有价值的前 N 个。这个排序过程本身就是一次 LLM 推理调用。

验证门控:只接受严格更好的 Skill

Validation Gate 是 SkillOpt 最关键的设计之一。

每一轮训练产出的候选 Skill 不会自动替换当前版本。它必须在验证集上通过「严格硬门控」:

  • Hard Gate(默认):精确匹配准确率必须严格大于当前最佳
  • Soft Gate:按 per-item 部分得分评估,适合小验证集
  • Mixed Gate:两者的加权混合

被拒绝的编辑不会直接丢弃,而是进入一个 rejected-edit buffer。后续步骤可以参考这些被拒绝的提案——避免反复提出同样的无效修改,也允许在新的上下文中重新评估之前的想法。

此外,每个 Epoch 结束时还有两个纵向机制:

  • Slow Update:类似 momentum,从相邻 Epoch 的学习中提取高层模式,注入到 Skill 中
  • Meta Skill:跨 Epoch 的元学习,提取通用的优化策略

实验结果:52 个评测单元全优

论文的实验数据很有说服力:

评测矩阵:6 个 benchmark × 7 个 target model × 3 种执行环境 = 52 个评测单元。SkillOpt 在全部 52 个单元中达到最优或并列最优

在 GPT-5.5 上的提升幅度:

执行环境 平均提升
Direct Chat(直接对话) +23.5 分
Codex Agentic Loop +24.8 分
Claude Code +19.1 分

更重要的是迁移性:优化出的 Skill 可以跨模型尺度、跨 Agent 框架、跨相近 benchmark 迁移,不需要重新训练。

支持的 6 个 benchmark:

Benchmark 类型
SearchQA 信息检索 QA
ALFWorld 具身 Agent
DocVQA 文档 QA
LiveMathematicianBench 数学推理
SpreadsheetBench 代码生成
OfficeQA 工具增强 QA

支持的 Target Model:GPT-5.5、Claude、Qwen(本地 vLLM)、MiniMax 等。Optimizer Model 和 Target Model 可以不同——用强模型做优化器,弱模型做执行者,完全支持。

怎么用:30 秒上手

# 克隆和安装
git clone https://github.com/microsoft/SkillOpt.git
cd SkillOpt
pip install -e .

# 配置 API Key
cp .env.example .env
# 编辑 .env 填入 API credentials
source .env

# 训练(以 SearchQA 为例)
python scripts/train.py \
    --config configs/searchqa/default.yaml \
    --split_dir /path/to/your/searchqa_split \
    --optimizer_model gpt-5.5 \
    --target_model gpt-5.5

# 纯评估
python scripts/eval_only.py \
    --config configs/searchqa/default.yaml \
    --skill ckpt/searchqa/gpt5.5_skill.md \
    --split valid_unseen \
    --split_dir /path/to/searchqa_split

训练产出目录结构清晰:

outputs/my_run/
├── best_skill.md            # 最终优化产物
├── skills/skill_vXXXX.md    # 每步快照
├── history.json             # 训练历史
└── steps/step_XXXX/         # 每步详细日志

还自带一个 Gradio WebUI 监控训练过程(pip install -e ".[webui]" && python -m skillopt_webui.app)。

对于已有 .md 体系(比如 Claude Code Skills、Hermes Agent Skills)的团队,接入几乎无缝——把 SkillOpt 跑出来的 best_skill.md 直接替换现有的 skill 文件即可。

DeepWiki 详细文档https://deepwiki.com/microsoft/SkillOpt,包含完整的代码架构解析、每个模块的源码映射、API 参考等。

试过了?评论区说说你的体验。还没试?收藏起来周末折腾。觉得有用点个赞让更多人看到。


作者: itech001
来源: 公众号:AI人工智能时代
网站: https://www.theaiera.cn/
每日分享最前沿的AI新闻资讯和技术研究。

本文首发于 AI人工智能时代,转载请注明出处。

觉得文章不错?分享给更多人!