📌 一句话讲明白 深度学习训练模型权重有一整套成熟范式,前向传播、算loss、反向求梯度、更新参数。Agent的技能(那些prompt/system message/技能文件)至今还是靠人手写手调。微软的SkillOpt做了一件事,把Markdown技能文件当作可训练的参数,用一个文本空间优化器来迭代更新它,跑出来的效果在6个benchmark的52个格子里全部best或tied-best。这篇主要分析它的机制和它为什么重要。
做agent的人都有一个体感,模型选好了、工具接好了、架构搭好了,最后效果好不好,往往取决于那份技能文件写得好不好。就是system prompt加上各种指令、约束、示例,那个你用自然语言写出来的markdown文档。
但这个文件的迭代方式,到今天为止还是手工活。跑一下看看效果,不行就改两句,改完再跑,又不行,再改。没有loss function,没有validation set,没有收敛保证,全凭经验和直觉。你不知道改了之后是不是全面变好了,还是拆了东墙补了西墙。
微软研究院5月份放出来的SkillOpt,试图把这件事从手工调参变成系统化训练。它的核心主张很干脆,agent的技能文件就是一种参数,跟神经网络的权重一样,应该能被自动优化。区别只是权重是浮点数,技能是自然语言文本,需要的是一个文本空间的优化器而不是SGD。
SkillOpt最值得理解的不是具体实现,是它背后那个类比。一旦这个类比建立起来,后面所有的设计都顺理成章。
深度学习 | SkillOpt |
|---|---|
模型权重(float tensor) | 技能文件(Markdown文本) |
前向传播(inference) | Agent执行任务(rollout) |
Loss / Score | 任务成功率 / 评分 |
梯度(gradient) | 编辑提案(add/delete/replace) |
学习率(learning rate) | 验证门控(只接受改善的编辑) |
训练完部署 | 优化完的技能直接丢进system prompt |
模型权重是数字空间的参数,用梯度下降来优化。技能文件是文本空间的参数,用有界编辑来优化。两者的位置是对称的。SkillOpt的关键洞察是,agent跑得好不好,相当大一部分方差来自技能文件的质量,但这个文件至今没有一套类似深度学习那样可复现、有反馈、能收敛的优化范式。它要做的就是补上这块。
💡 工程要点 这个类比里最重要的一环是「验证门控 = 学习率」。深度学习里学习率控制你每一步走多远,防止更新太猛导致发散。SkillOpt的验证门控干的是同样的事,每次编辑提出来之后,不是直接采纳,而是要在held-out的验证集上跑一遍,只有分数严格提升才接受。这保证了优化过程是单调改善的,不会出现改了prompt之后A任务好了B任务崩了这种拆东墙补西墙的事。
具体实现是一个四步的迭代循环,结构上跟深度学习的训练loop几乎是同构的。

Rollout,冻结的目标模型(可以是GPT-5.5、Claude、Qwen,任何一个)带着当前版本的技能文件去执行一批任务,每次执行产生一条带分数的轨迹。这步相当于前向传播。
Reflect,一个独立的优化器模型(注意是另一个模型,不是目标模型自己)去分析这批成功和失败的轨迹,找出规律,哪些情况下当前技能处理得好、哪些情况下不行、不行的原因是什么。这步相当于算loss和分析梯度方向。
Edit,优化器模型根据分析结果,对技能文件提出一组有界的编辑操作,添加一条规则、删除一条过时的约束、替换一个表述。操作是有界的(bounded),每一轮只能改有限的内容,防止一步跳太远。
Validate,把修改后的技能文件拿到一组held-out的验证任务上跑一遍,看分数是不是严格比修改前高。如果高了,接受这次编辑;如果没高,拒绝,而且把被拒的编辑存进一个负反馈缓冲区,告诉优化器下次别往这个方向走。
这个循环反复跑,技能文件一轮一轮变好,直到验证集上的分数收敛。
🎯 真正的takeaway 这个设计里最精妙的两处。一是优化器和目标模型是分开的(用一个模型去优化另一个模型的技能),这避免了自己改自己的循环引用。二是被拒绝的编辑会变成负反馈,下一轮优化器能学到「这个方向行不通」,等于给文本空间的优化加了一种momentum信号。这两处加起来,让文本空间的优化变得跟数值空间一样有记忆、有方向感。
SkillOpt跑了6个benchmark,覆盖搜索问答、具身任务、文档理解、数学、电子表格操作、办公场景。
Benchmark | 任务类型 |
|---|---|
SearchQA | 搜索问答 |
ALFWorld | 具身交互(agent在虚拟环境里操作) |
DocVQA | 文档视觉问答 |
LiveMathematicianBench | 数学推理 |
SpreadsheetBench | 电子表格操作 |
OfficeQA | 办公场景综合 |
每个benchmark在7个模型(包括GPT-5.5、GPT-5.4-nano、Qwen3.5-4B等)和3种执行环境(直接对话、Codex agent loop、Claude Code)下都跑了一遍,总共52个评测格。结果是全部best或tied-best,没有任何一格输给基线。
几个有代表性的提升数字。在GPT-5.5上,对话模式提了+23.5分,Codex环境提了+24.8分,Claude Code环境提了+19.1分。在小模型GPT-5.4-nano上提了+24.9%,在开源模型Qwen3.5-4B上提了+19.2%。
📅 同期对照 对比理解这些数字的大小。过去一年对agent提效的主流做法是换更强的模型(从GPT-4到GPT-5系列)、加更好的工具、做更复杂的多agent架构。这些手段一次性能带来10到20个点的提升就算很可观了。SkillOpt在不换模型不换工具不改架构的情况下,纯靠优化技能文件就拿到20多个点,这说明技能文件这个位置的方差远比大部分人以为的大,过去被严重低估了。
做过prompt优化的人会想到几个先行者,DSPy把prompt拆成模块化的签名来优化,TextGrad用LLM生成文本梯度来改prompt,OPRO让LLM自己迭代优化prompt。SkillOpt跟它们的核心区别在两个点。
第一个是严格验证门控。DSPy和TextGrad生成候选后不一定有严格的held-out验证步,它们可能会接受一些看起来好但实际上在分布外数据上退步的修改。SkillOpt每一步都卡验证,只接受严格提升,保证优化轨迹单调向上,不会振荡。
第二个是零推理时开销。优化的全部成本在训练阶段支付,训练完得到的就是一个纯文本的Markdown文件,部署时直接当system prompt丢进去就行,不需要额外的运行时调用、不需要特殊的框架、不加一行代码。这跟DSPy那种需要在运行时维持模块pipeline的做法有本质区别。
部署阶段 - 零额外开销
优化好的Markdown
直接放进system prompt
任何模型直接用
训练阶段 - 付优化成本
优化器模型
技能文件迭代
还有一个被低估的优势,技能跨模型迁移。一份在GPT-5.5上优化好的技能文件,可以直接给Qwen3.5或Claude用,效果也有明显提升,虽然不如专门针对那个模型优化的版本,但省掉了重头训练。这是因为好的技能文件本质是好的任务知识(该注意什么、常见坑在哪),这些知识不绑定特定模型。
⚠️ 限制 SkillOpt的训练需要相当量的任务执行数据来支撑,每一轮要跑一批rollout再验证,token成本不低。对于任务本身就很昂贵(比如跑一次几分钟的具身环境)或者数据很少的场景,优化循环可能跑不起来或者样本效率不够。它更适合那些有明确评测标准、能批量执行、数据成本可控的任务类型。
把视角从论文拉到产业。SkillOpt重要不是因为它是一个聪明的优化算法,是因为它指向了一个新的工程层。
目前agent生态里,模型层有一整套成熟的训练范式(预训练、SFT、RLHF),推理层也有一整套优化工具(vLLM、KV Cache压缩、量化)。但中间那个把模型能力转化为具体任务表现的技能层,至今还是手工作坊的状态。每家公司的agent好用不好用,很大程度取决于它的prompt engineers写得好不好、迭代得勤不勤,而这个过程没有工具化、没有可复现性、没有收敛保证。
SkillOpt给这个层提供了一个可能的答案,把技能文件的优化从手工经验活,变成一个有反馈、有验证、能收敛的系统工程。如果这条路走通,agent开发的瓶颈可能会从「找一个好的prompt engineer」变成「跑一个好的训练流程」,门槛降低、可复现性提升。
🔗 假设链 如果SkillOpt这种范式被广泛采用,会带来几个推论。一是agent的技能文件会像模型权重一样被当成资产来管理,有版本控制、有A/B test、有持续训练的pipeline。二是prompt engineering这个岗位可能会向「技能训练工程师」转型,核心能力从「写好prompt」变成「设计好的评测集和优化循环」。三是小模型+好技能可能在很多场景下打败大模型+差技能,毕竟SkillOpt在4B小模型上也能拿19%的提升。这条链的起点,就是技能层终于有了自己的训练范式。
6个benchmark都是可自动评分的任务,但很多真实场景的agent技能(比如写作风格、沟通策略、创意任务)没有清晰的自动评测标准。SkillOpt的优化循环能否迁移到这类主观评判的场景,论文没有涉及。
优化器模型本身需要多强,论文没有详细ablation。用GPT-5.5当优化器去优化GPT-5.5的技能,和用一个小模型当优化器,效果差多少,资源要求差多少,这些对实际落地很重要的问题还需要更多实验。
跟持续学习/在线学习的关系没有讲清楚。SkillOpt目前是离线优化然后部署,如果任务分布变了(用户需求变了、环境变了),技能文件要重新跑优化吗,能不能做增量更新,这些工程问题还在open状态。
❓ 留白 最大的开放问题是,文本空间优化的天花板在哪。SkillOpt证明了用文本编辑可以在6个benchmark上拿到20+点的提升,但一份技能文件能优化到多好、什么时候会饱和、是不是所有场景都能靠改prompt搞定而不需要改模型,这些还没有理论上的回答。有一种可能是,技能优化和模型微调最终会成为互补的两条腿,简单的靠优化技能解决,复杂的还是得动权重。但目前二者的边界在哪,还看不清。
SkillOpt做的事说起来很简单,给agent的技能文件加了一套训练范式。但它触及的是整个agent工程里一个长期被忽视的断层,模型有训练、推理有优化、唯独中间那个把能力翻译成任务表现的技能层还在靠手写手调。
它用深度学习的类比把这件事讲得很清楚。技能文件是参数,执行任务是前向传播,编辑是梯度,验证门控是学习率。整套范式是成立的,52个评测格全部best或tied-best也证明它work。如果只记一件事,记住那个洞察,agent效果的方差,远比你以为的更多来自技能文件的质量,而不是模型本身。写好一份技能,可能比换一个更贵的模型更管用。SkillOpt给了一条把这件事从经验变成工程的路。