Skip to content

SkillOpt - 微软文本空间 Agent 技能优化框架

本文拆解微软研究院 2026 年发表的 SkillOpt 框架:一种将自然语言技能文档(Skill.md)当作可训练参数的系统化文本空间优化方法。适合对 AI Agent 工程化落地、提示词优化、Agent 架构设计感兴趣的开发者阅读。

目录


核心问题:Agent 瓶颈在哪?

传统优化路径的困境

优化 Agent 通常只有两条路:

方法 成本 可控性 可解释性 可迁移性
微调模型(Fine-tuning) 高(GPU、数据标注、工程时间) 黑盒 绑定特定模型
手工调提示词(Prompt Engineering) 脆弱(场景 A 好用,场景 B 崩溃)
SkillOpt 中等(API token) 高(验证门控) 高(可读 Markdown) 高(跨模型)

关键洞察:Agent 的性能瓶颈不在模型权重,而在技能文档(Skill Document)——指导 Agent 如何执行任务的步骤、工具用法、输出格式、错误处理策略。

前置工作对比

社区已有的尝试:

TextGrad    → 梯度思想优化提示词(缺乏完整训练循环)
GPA         → 轨迹反馈改进提示(缺乏稳定性控制)
手工迭代     → 经验驱动(不可复现)

SkillOpt    → 首个系统化、可控的文本空间 Agent 优化器
               完整训练循环 + 稳定性保障 + 可复现

SkillOpt 是什么

一句话定义

SkillOpt 是一个文本空间优化器(Text-space Optimizer),它将一个紧凑的自然语言技能文档作为冻结 LLM Agent 的可训练状态,通过轨迹驱动的编辑和验证门控的更新来优化技能。

核心公式:Train the procedure, not the weights.

┌─────────────────────────────────────────┐
│          冻结的 LLM(不改动权重)          │
│                                         │
│  输入: 任务 + Skill.md + 工具            │
│  输出: 执行轨迹(消息、工具调用、结果)      │
└──────────────┬──────────────────────────┘
               │ 执行结果反馈
               ▼
┌─────────────────────────────────────────┐
│       优化器模型(独立 LLM)              │
│                                         │
│  分析成功/失败案例 → 生成文本编辑建议      │
│  增加/删除/替换 Skill.md 中的规则         │
└──────────────┬──────────────────────────┘
               │ 更新后的 Skill.md
               ▼
┌─────────────────────────────────────────┐
│       验证集(Held-out Validation)       │
│                                         │
│  性能提升 → 接受更新                      │
│  性能下降 → 回滚 + 记录到拒绝缓冲          │
└─────────────────────────────────────────┘

深度学习术语映射

深度学习概念 SkillOpt 对应 说明
前向传播(Forward Pass) Rollout Agent 用当前 Skill.md 执行任务,记录轨迹
反向传播(Backward Pass) Reflection 优化器分析成功/失败案例,生成编辑建议
学习率(Learning Rate) 文本学习率(Edit Budget) 每步最多修改 N 条规则
验证集(Validation Set) Selection Split 候选技能必须通过验证才被接受
早停(Early Stopping) 验证门控(Validation Gate) 性能下降时拒绝更新
正则化(Regularization) 拒绝缓冲(Rejected-edit Buffer) 记录被拒编辑,避免重复尝试

训练循环:深度学习的文本空间映射

完整训练流程

第 1 步:Rollout(前向传播)
  ┌────────────────────┐
  │ 冻结模型 + Skill.md │──→ 执行训练集任务 ──→ 收集轨迹 + 分数
  └────────────────────┘

第 2 步:Reflection(反向传播)
  ┌────────────────────┐
  │  优化器模型分析轨迹  │
  │                    │
  │  ✅ 成功案例        │──→ 保留行为,提取有效规则
  │  ❌ 失败案例        │──→ 诊断原因,生成修改建议
  └────────┬───────────┘
           │ 生成有界的文本编辑
           ▼
第 3 步:Bounded Edits(参数更新)
  ┌────────────────────┐
  │  增加一条规则:       │
  │  "搜索无结果时,     │
  │   换关键词重试"      │
  │                    │
  │  删除一条过时规则    │
  │  替换一条模糊描述    │
  └────────┬───────────┘
           │ 候选 Skill.md
           ▼
第 4 步:Validation Gate(验证)
  ┌────────────────────┐
  │  在验证集上评估     │
  │                    │
  │  分数提升 → ✅ 接受  │
  │  分数下降 → ❌ 回滚  │──→ 记录到拒绝缓冲
  └────────────────────┘

第 5 步:Memory(记忆反馈)
  ┌────────────────────┐
  │  告诉优化器:        │
  │  "这条路走过,不通,  │
  │   换个方向"          │
  └────────────────────┘

  重复 N 个 Epochs → 输出 best_skill.md

数据集拆分

任务数据集
  │
  ├── train/     → 用于 Rollout(执行任务收集轨迹)
  ├── val/       → 用于 Validation Gate(决定是否接受更新)
  └── test/      → 最终评估(训练过程中不可见)

稳定性设计:防止文本随机游走

核心问题:让大模型自己改文本,会不会今天加一条规则明天又删了,变成随机游走?

三重稳定性保障

1. 文本学习率(Edit Budget)

每步最多修改 N 条规则 → 精细的局部手术

❌ 不允许:推翻整个 Skill.md 重写
✅ 允许:增加一句、删除一句、替换一句

新旧规则和平共存,不会互相覆盖

2. 验证门控(Validation Gate)

候选 Skill.md → 验证集评分
  │
  ├── 分数 > 当前最佳 → ✅ 接受,更新 best_skill.md
  └── 分数 ≤ 当前最佳 → ❌ 拒绝,回滚到上一版本

3. 拒绝缓冲 + 慢更新 + Meta Skill

组件 功能
拒绝缓冲(Rejected-edit Buffer) 记录被拒编辑,避免优化器重复尝试同一条死路
慢更新(Slow Update) 维护一个长期视角的规则集合,防止训练震荡
Meta Skill 优化器侧的元技能,提供跨步骤的策略指导

消融实验:每个组件都有用

移除组件 SearchQA Spreadsheet LiveMath
完整系统(基线) 87.1 77.5 61.3
移除学习率边界 84.6 75.7 57.3
移除拒绝缓冲 85.5 72.9 58.9
移除 Meta Skill + 慢更新 86.3 55.0 59.7

移除更新记忆在 SpreadsheetBench 上导致最大跌幅(77.5 → 55.0),说明长期记忆组件对复杂任务至关重要。


实验数据:52 个测试单元全胜

主要结果(无技能基线 vs. SkillOpt)

目标模型 执行环境 SearchQA Spreadsheet Office DocVQA LiveMath ALFWorld 平均提升
GPT-5.5 Direct chat +9.6 +38.9 +39.0 +12.4 +29.3 +11.9 +23.5
GPT-5.4 Direct chat +6.2 +21.1 +12.8 +13.6 +7.2 +15.6 +12.8
GPT-5.4-mini Direct chat +4.3 +11.4 +26.7 +16.5 +4.8 +12.7 +12.7
GPT-5.4-nano Direct chat +19.0 +8.2 +33.7 +49.4 +4.0 +35.1 +24.9
GPT-5.2 Direct chat +11.2 +18.9 +21.5 +16.5 +15.2 +16.4 +16.6
Qwen3.5-4B Direct chat +3.1 +14.6 +15.2 +2.1 +29.6 +50.7 +19.2
Qwen3.6-35B Direct chat +7.6 +9.3 +1.2 +3.8 +10.4 +22.4 +9.1
GPT-5.5 Codex +5.5 +57.5 +12.8 +5.0 +28.0 N/A +21.8
GPT-5.5 Claude Code +4.0 +58.3 +13.9 +3.5 +13.3 N/A +18.6

关键发现: - 52 个测试单元全部达到最佳或并列最佳 - SpreadsheetBench 提升最显著:Codex 环境 +57.5,Claude Code 环境 +58.3 - 小模型(GPT-5.4-nano)反而获得最高平均提升 +24.9,说明技能文档对小模型的加成更大 - 开源模型 Qwen3.5-4B 也获得 +19.2 平均提升

执行环境对比

GPT-5.5 在不同执行环境下的平均提升:

Codex 环境    ████████████████████████████████████ +24.8
Direct chat   ██████████████████████████████████   +23.5
Claude Code   ███████████████████████████          +19.1

技能可迁移性:跨模型复用

迁移实验结果

技能迁移路径:

Codex 训练的 SpreadsheetBench 技能
  └─→ 迁移到 Claude Code
       相比无技能基线提升 +59.7 分点

GPT-5.4 训练的 LiveMath 技能
  └─→ 迁移到 GPT-5.4-nano
       仍有正向收益

GPT-5.4-nano 作为自己的优化器
  └─→ SpreadsheetBench 超过基线

为什么技能可迁移?

知识类型 编码位置 可迁移性 原因
程序性知识(Procedural) Skill.md "搜索失败时换关键词重试"——任何模型都适用
参数化知识(Parametric) 模型权重 深度绑定到特定模型架构

核心洞察:技能文档编码的是"怎么做"而非"怎么想",因此天然可跨模型迁移。微调改变的是模型内部参数,绑定特定模型;技能文档是外部状态,与模型无关。


实际应用场景与局限

适用场景判断树

SkillOpt 是否适合你的场景?

  Q1: 任务是否有明确可量化的评分标准?
    ├── ✅ 是(准确率、通过率、评分函数)→ 继续
    └── ❌ 否(开放式写作、主观评价)     → ⚠️ 需要先解决评价标准

  Q2: 是否可以冻结模型权重?
    ├── ✅ 是(使用 API 模型)          → 适合 SkillOpt
    └── ❌ 否(需要微调)              → 传统微调更适合

  Q3: 是否需要技能可解释和可审计?
    ├── ✅ 是(企业合规、安全要求)      → SkillOpt 优势明显
    └── ❌ 否                          → 微调可能更简单

  结论:
    ✅ 可评分 + 冻结模型 + 需要可解释性 → SkillOpt 最佳选择
    ⚠️ 可评分 + 冻结模型 + 不需解释性   → 手工 prompt 或 SkillOpt 均可
    ❌ 不可评分                         → SkillOpt 验证门控难以成立

实际应用示例

场景:电商客服 Agent 退货审批

第 0 周:GPT-5.5 + 无技能 → 准确率 60%

第 1 周:收集一周客服对话数据
  └─→ SkillOpt 分析失败案例
     发现:Agent 在"是否应退货"判断步骤频繁出错

第 2 周:优化器生成新规则
  ┌─────────────────────────────┐
  │ + 新增规则:                  │
  │ "如果用户购买超过 30 天,     │
  │  先检查商品是否有质量问题,    │
  │  再决定是否退货"             │
  └─────────────────────────────┘

结果:准确率 60% → 82%
成本:仅 API token 调用
产出:人类可读的 Markdown 技能文件

局限性

  • 强依赖可评分任务:在 SearchQA、SpreadsheetBench、OfficeQA 等有明确验证器(Verifier)的 benchmark 上表现强劲,开放式任务(客服对话、创意写作)需要先解决评价标准问题
  • 训练成本未完全量化:论文报告了训练 token 成本,但未给出与微调的美元级对比
  • 技能文档规模限制:最终产出是几百到 2000 个 token 的 Markdown 文件,复杂任务的技能可能需要更长的文档

底层逻辑与未来展望

两个核心洞察

1. 外部状态的力量

不是所有知识都需要塞进模型权重:

  通用知识(语言理解、代码能力)
    └─→ 交给冻结的模型权重

  特定领域知识(业务流程、工具用法)
    └─→ 作为外部状态写在 Skill.md

2. 程序性知识天然可迁移

微调改变模型内部参数 → 深度绑定特定模型 → 不可迁移 技能文档编码"怎么做" → 与模型无关 → 天然可跨模型复用

未来架构展望

短期:企业构建内部 Skill 库
  ├── 客服技能
  ├── 推荐技能
  ├── 内容审核技能
  └── 每个技能独立优化、可读、可共享

中期:Skill Marketplace
  └── 像 HuggingFace 下载模型一样下载 best_skill.md

长期:Agent 架构三明治
  ┌─────────────────────────────┐
  │  上层:执行环境和工具          │
  ├─────────────────────────────┤
  │  中层:可训练、可插拔的        │
  │        技能文档(Skill.md)    │
  ├─────────────────────────────┤
  │  下层:冻结的超大规模          │
  │        通用模型               │
  └─────────────────────────────┘

这种架构同时解决了成本、安全和可解释性三大问题——因为技能是文本、是可读的,可以清楚知道 Agent 按照什么规则做事。


参考资料

相关笔记

  • [[外部状态优化]] (与启发式学习的类比)
  • [[AI Agent 架构设计]]