SkillOpt:把 Agent 的技能文件当作可训练参数

日期 :2026-07-04 主题 :SkillOpt:把 Agent 的技能文件当作可训练参数 原文SkillOpt:把 Agent 的技能文件当作可训练参数 来源 :Microsoft Research 领域:🧠 AI/ML


背景

2026 年的 AI Agent 开发者,大概率都经历过这种挫败感:你把 prompt 改了又改,A/B 测试做了一轮又一轮,某个任务的通过率就是死活提不上去。一次看似合理的微调,结果让 Agent 在另一个任务上忽然变笨;上周能跑通的链路上线之后就崩了;提示词越来越长,但没人能说清楚哪一行真的有用。

微软亚洲研究院在 2026 年 6 月底发布的 SkillOpt ,正面回应了这个问题。它提出一个看似简单却意味深长的视角转变:不要再去"修 prompt",而是去"训练 skill"。具体来说,就是把 Agent 的技能文件当作一个训练参数------一个存在于模型权重之外、可以用类似深度学习优化器的方式被训练、被验证、被版本管理的"参数"。本期我们就来拆解这篇论文为什么会让 Agent 工程社区兴奋,以及它对正在做 Agent 产品的团队意味着什么。

Agent 的"prompt 调优"为什么不是训练

在讨论 SkillOpt 之前,先看清楚它要替代的是什么。

今天的 Agent 技能文件(也就是我们通常说的"系统提示词"、"工具说明"、"任务 SOP"),大致来自三种渠道:

  • 专家手写:领域工程师根据经验写一段 prompt,往往起步能用,但能不能改进全靠人。
  • 前沿模型一次性生成:让 GPT-5.5 这类模型根据任务描述直接吐一份 skill,本质是一次性采样,没有任何反馈信号。
  • Agent 自己松散修订:跑完一批任务后,根据轨迹改一改,下次再跑。

这三种方式,没有一种具备训练的基本元素。

第一,没有步长控制。模型权重训练里,SGD/Adam 这些优化器之所以稳,是因为它们把更新幅度控制在一个可证明收敛的步长里。手工改 prompt 是"全文替换 + 人脑判断",一次性改动幅度可能很大,也可能很小,全凭运气。

第二,没有验证集。训练一个神经网络时,我们会留出一份 held-out 验证集来防止过拟合。改 prompt 时,工程师往往在几个示例上调好了,就上线了,结果在长尾任务上崩掉。

第三,没有失败记忆。一次失败的修订到底是因为哪一行写错了?下次再改的时候能不能避开?传统流程里这些信息全部丢掉了。

结果是 skill 文件越改越长,越改越像一锅大杂烩,**prompt drift(提示词漂移)**成了 Agent 从原型走向生产时最大的拦路虎之一。微软亚洲研究院的论文把这个问题总结为一句话:技能编辑从来没有像深度学习优化器那样工作过

把 skill 文件当成"模型外的参数"

SkillOpt 的核心洞察可以用一句话概括:训练不必只发生在权重里

传统训练范式里,我们要让模型行为改变,就要更新模型权重------成本高、风险大、不可逆。SkillOpt 的做法是:把目标模型的权重完全冻结,让另一件事变得可训练------那份跟着 Agent 跑的 skill 文件

具体架构是这样的:

  • 冻结的目标模型(target model):负责真正执行任务,可能是 GPT-5.5,可能是 Qwen3.5-4B,也可能就是用户自己的小模型。它在整轮训练里权重完全不动。
  • 一个独立的优化模型(optimizer model):负责"训练"skill 文件。它读 Agent 执行任务的轨迹,反思哪里做得好、哪里做错了,然后对 skill 文件提出小的修改建议。
  • skill 文件本身 :一份自然语言写的 Markdown(论文里通常是 best_skill.md),跟着 Agent 走、决定 Agent 的工作方式。

这个设定意味着:模型不变,但模型"如何工作"是可优化的 。这是一种介于"调 prompt"和"fine-tune"之间的中间形态------论文里叫它 textual training(文本训练)。

更妙的是,它产物是一个人看得懂、改得动、版本可追的 Markdown 文件,而不是一堆张量。这意味着工程团队可以把它当作普通代码一样 review、CI、AB 测试、回滚。

forward--backward--update:把训练循环搬到文本空间

SkillOpt 借鉴了深度学习的训练循环,把它"翻译"成了对文本的操作。整个 pipeline 由五个组件组成:

text 复制代码
┌──────────────────────────────────────────────────────┐
│  1. 轨迹收集(Forward)                              │
│     冻结的 target model 用当前 skill 跑一批训练任务  │
│                                                      │
│  2. minibatch 反思(Backward)                        │
│     optimizer model 读这些轨迹,抽出"成功模式"和     │
│     "失败模式"                                       │
│                                                      │
│  3. 受限文本编辑(Update)                           │
│     optimizer 提出 add / delete / replace 三类编辑   │
│     每个 skill 受一个"文本学习率"约束                │
│     ── 每轮最多改多少字、多大幅度                    │
│                                                      │
│  4. 验证门控(Validation Gate)                      │
│     候选 skill 必须在 held-out 验证集上               │
│     严格高于当前 skill 分数,才被采纳                │
│                                                      │
│  5. 慢速 / Meta 更新(Slow Update)                  │
│     epoch 级再额外做一轮更"长程"的反思               │
│     把单 batch 看不到的全局教训沉淀下来              │
└──────────────────────────────────────────────────────┘

其中最巧妙的设计有三处:

第一,rejected-edit 反馈缓冲区。 那些没通过验证门控的修改不会被丢弃,它们进入一个 rejected buffer,作为后续 optimizer 调用的负反馈。这相当于告诉优化器:"上次的改法已经试过了,行不通,别再绕回来。"这是绝大多数 prompt 调优流程里完全缺失的一环。

第二,文本学习率(textual learning rate)。 论文把神经网络里的 step size 概念映射到了"每轮允许编辑的字符数 / 编辑类型数"。这避免了 skill 文件被一次性推倒重写,让训练真正可控收敛。

第三,慢速 / Meta 更新。 深度学习里我们会用更慢的更新节奏(lower learning rate)来稳定收敛,SkillOpt 在 epoch 级别也做了类似的安排------单 batch 看不到的长程模式,等到 epoch 末尾再统一反思一次。

整套设计的关键不是哪一个组件多炫,而是它们组合起来第一次让"改 skill"这件事具备了训练的基本属性:有步长、有验证、有失败记忆、有慢节奏。

数据说话:52 个评测单元全部最佳

SkillOpt 的实验设计是相当硬核的:

  • 6 个 benchmark:SearchQA、SpreadsheetBench、OfficeQA、DocVQA、LiveMathematicianBench、ALFWorld。
  • 7 个目标模型:从 GPT-5.5 这种前沿模型一直到 Qwen3.5-4B 这种 40 亿参数的开源小模型。
  • 3 种执行模式:直接对话、Codex、Claude Code。

每个 (benchmark, model, mode) 组合算一个评测单元,总共 52 个。基线包括人工写的 skill、LLM 一次性生成的 skill、Trace2Skill、TextGrad、GEPA、EvoSkill 等当前主流方法。

结果是:SkillOpt 在全部 52 个评测单元上都做到了最佳或并列最佳

几个让人印象深刻的数字:

  • GPT-5.5 直接对话:六 benchmark 平均从 58.8 提升到 82.3 ,绝对提升 +23.5 分,比"oracle 选单格最佳基线"还高 5.4 分。
  • SpreadsheetBench:GPT-5.5 从 41.8 提升到 80.7
  • OfficeQA:从 33.1 提升到 72.1
  • LiveMathematicianBench:从 37.6 提升到 66.9
  • Agentic 执行模式下:GPT-5.5 在 Codex 里 +24.8 分 ,在 Claude Code 里 +19.1 分(相对"无 skill"基线)。

对一个"不改模型权重"的方法来说,这种提升幅度是不寻常的。它说明问题从来就不在模型本身------模型够强了,弱的是 skill 这层"操作手册"

小模型 + skill 跑赢大模型

这一节是 SkillOpt 最有产业信号价值的结果。

实验里有一个非常关键的对比:在同一个 benchmark 上,"小模型 + 优化过的 skill" vs "大模型 + 没有 skill"。结果:

  • 优化过的 GPT-5.4-mini (六 benchmark 平均 64.3)超过了 无 skill 的 GPT-5.4(59.7)。
  • 优化过的 GPT-5.4-nano (57.4)超过了 无 skill 的 GPT-5.2(51.3)。
  • 优化过的 Qwen3.5-4B(一个 40 亿参数的开源模型)也超过了 GPT-5.2 的无 skill 基线。

换句话说:一个本来需要更大模型才能跑出来的效果,现在用一个更小的模型 + 一份训练好的 skill 文件就能近似。而推理时不需要额外调用任何模型,token 成本直接按小模型的价目走。

对一个在意成本和延迟的团队来说,这是一个非常实际的杠杆:用 1/10 价格的模型 + 一份可复用 skill,比用旗舰模型裸跑便宜得多

跨模型、跨执行环境、跨任务的可迁移性

SkillOpt 让人惊喜的另一点是 skill 的可迁移性

训练 skill 时,target model 是冻结的、optimizer model 也未必是同一个。这意味着 skill 学到的不应该是"针对某个模型的过拟合 prompt",而应该是"对这项工作通用的流程知识"。论文通过三组迁移实验验证了这个直觉:

  • 跨模型规模:用 GPT-5.5 训练的 skill,喂给更小的模型依然有效。
  • 跨执行环境(harness) :在 Codex 里训练的 spreadsheet skill,直接丢进 Claude Code 用,不做任何再训练,no-skill 基线从 22.1 提升到 81.8(+59.7)------甚至略高于在 Claude Code 里直接训练得到的 80.4。
  • 跨相关任务:训练时针对的 benchmark 学到的 skill,迁移到相邻 benchmark 仍能提升。

这一点尤其重要 。它说明 SkillOpt 学到的不是"GPT-5.5 在 SpreadsheetBench 上的最佳 prompt",而是"处理电子表格这件事的通用工作流"。两个执行环境暴露的工具接口完全不同(Codex 和 Claude Code 的 tool surface 完全不同),skill 还能迁移,意味着它抓的是工作流逻辑,不是工具语法。

Compact、Readable、Auditable

最后一个值得划重点的设计哲学是:产物本身要可控

很多人对"prompt 优化"持保留态度,是因为历史上很多自动化方法会吐出又臭又长、谁也看不懂的巨型 prompt。SkillOpt 反其道而行:

  • 6 个 case study 的中位最终 skill 长度只有 约 920 tokens
  • 训练过程中虽然会生成很多候选编辑,但通过验证门控、被最终采纳的只有 1--4 处 。OfficeQA 上 +39 分的提升来自一处编辑
  • ablation 实验显示:去掉 rejected-edit buffer,所有三个 ablation benchmark 都掉点;去掉 meta skill 和 slow update,SpreadsheetBench 从 77.5 跌到 55.0。这证明控制组件不是装饰,是真的在做功。

读着像一句老法师的经验总结:

"先列所有能拿到的字段,按字段名分组再校验。"

"出现单位歧义时,优先保留原始数字串,下游再决定转换。"

"公式单元格先识别前 N 个 token 判断命名空间,再展开求值。"

它学到的不是 prompt,是领域工作的最佳实践,并且写下来人类读得懂、能复盘、能合并冲突、能在 PR 里讨论。

评价与思考

把 SkillOpt 放在更大的图景里看,有几件事值得说。

它是 AI Agent 时代的"轻量适配层"。 在生产里要 domain-adapt 一个 Agent,传统路径要么是 fine-tune 权重(贵、重、不可解释),要么是硬编码任务逻辑(脆、难演化),要么是手调 prompt(不收敛)。SkillOpt 给出的是第四条路:训练一个紧凑、可读、可版本化的自然语言 skill 层,前提是你有"自动评估或可靠验证器"。这条路径的迁移成本极低,因为它不动模型。

它和 Ep001 谈的 x402 形成一组对偶。 上一期我们讲 Cloudflare 的 Monetization Gateway 解决的是 Agent 在互联网上怎么付钱------属于 Agent 经济基础设施层 。这一期 SkillOpt 解决的是 Agent 自己怎么变得更可靠------属于 Agent 能力训练层。一个向外,一个向内;一个谈商业协议,一个谈训练范式。两者合起来看,能感觉到 AI Agent 这个新物种正在被一整套专门的基础设施层层托住。

训练范式的边界在松动。 过去十年,"训练"几乎等同于"更新模型权重"。SkillOpt 把这个隐含假设松动了:只要你能定义一个可优化的目标(task score、verifier、用户反馈)、一个可控的更新动作(bounded text edit)、一个独立的验证机制(held-out validation),"训练"这件事就可以发生在任何有状态的载体上------skill 文件、工具列表、检索索引、API 编排图谱。这是更宽泛意义上"程序自我进化"的起点。

当然也要看到它的局限。 SkillOpt 强依赖"可自动评估的奖励信号"。如果你的任务没有 verifier、没有自动评分、没有可计算的 ground truth,SkillOpt 的 validation gate 就无法工作。它不是 prompt 万灵药,而是 prompt 的训练器------前提是任务必须"可被打分"。

总结

SkillOpt 给出的真正信号,是"训练不必只发生在权重里"。

一个 Markdown 文件------best_skill.md------现在可以是版本控制里的一个文件、CI 流水线里的一个产物、PR review 里的一个 diff。它可以跨模型迁移、跨 harness 复用、跨任务扩展,并且它的提升幅度(+23.5 分)超过绝大多数 fine-tune 工作流能拿到的结果。

对于我们做 Agent 的工程师来说,这意味着几个可以开始思考的问题:

  • 你的任务能不能写出一个 verifier?如果能,SkillOpt 立刻就是一个候选路径。
  • 你团队的 skill 文件现在由谁维护?如果是"谁负责哪个 Agent 谁就改一下",你可能在做的事情恰恰是 SkillOpt 想替代的。
  • 你愿意把 skill 视为"代码"还是"自然语言注释"?SkillOpt 的回答很明确:它是前者------可读但要被训练、被验证、被版本管理。

HTTP 402 等待了三十四年才被用起来。skill 文件离它的训练器,还有多远?


本文基于 Microsoft Research Blog 于 2026 年 6 月 30 日发布的原文撰写,原文标题为 "SkillOpt: Agent skills as trainable parameters",作者团队来自微软亚洲研究院(Yifan Yang、Xuemei Gao、Qi Dai、Bei Liu、Kai Qiu、Dongdong Chen、Chong Luo)。论文全文与开源代码已发布在 aka.ms/skilloptgithub.com/microsoft/SkillOpt。

相关推荐
冬奇Lab1 小时前
Workflow 系列(07):工程化与版本管理——Workflow 的 CI/CD
人工智能·工作流引擎
两万五千个小时1 小时前
Claude Code 上下文管理(一):为什么 Agent 会"失忆"?
人工智能·架构·开源
两万五千个小时1 小时前
Claude Code 上下文管理(二):零 Token 消耗的压缩三板斧
人工智能·程序员·开源
冬奇Lab1 小时前
每日一个开源项目(第150篇):caveman - 为什么用很多 token,少 token 也行——给 AI Agent 装上穴居人嘴巴
人工智能·开源·资讯
贵慜_Derek2 小时前
MAI-04|干净数据在工程上意味着什么:MAI 预训练数据治理
人工智能·算法·llm
feelmylife592 小时前
Agent 记忆设计架构 — 分层记忆:什么时候该记住,什么时候该忘记
人工智能
阿黎梨梨2 小时前
揭秘大语言模型的底层逻辑:从文本分词到高维向量的计算之旅
javascript·人工智能
moMo2 小时前
AI工程化 03:给模型喂上下文
人工智能