SkillOpt:微软联合上交同济复旦让技能文档自进化,SpreadsheetBench技能从Codex迁移到Claude Code涨59.7分
52个测试格全部最佳或并列最佳。这不是某家厂商在跑分榜上刷了一个数字而是微软联合上海交通大学、同济大学和复旦大学做的一件事把agent技能的训练过程从「写提示词」变成了「像训练神经网络一样优化文本」。论文链接https://arxiv.org/pdf/2605.23904v2这篇论文叫SkillOpt2026年5月发在arXiv上代码已经开源。先说成绩52/52格全胜SkillOpt测了6个基准覆盖搜索问答、电子表格、办公文档、多模态文档、数学推理和具身决策。跑了7个目标模型从前沿的GPT-5.5到小型的Qwen3.5-4B。用了3种执行框架直聊模式、Codex框架和Claude Code框架。一共52个「模型×基准×框架」测试格SkillOpt在每一个格子上都是最佳或并列最佳。不是大部分最佳是52个里面52个最佳。在GPT-5.5直聊模式下六个基准的平均分从58.8拉到82.3涨了23.5分。在Codex框架里涨24.8分在Claude Code里涨19.1分。你说这不是某一个基准碰巧运气好它同时打过了七个对手包括人类专家手写技能、LLM一次性生成技能、Trace2Skill轨迹蒸馏、TextGrad梯度式提示优化、GEPA帕累托反思进化、还有最强的框架端对手EvoSkill。就算你每个格子里从这七个对手里挑最强的来比SkillOpt平均还是高出5.4分。说实话我看到这个数据的时候愣了一下一个不改模型权重的方法能做到这种程度。这篇论文到底在干什么现在agent要用得好光有模型权重不够还得有一套「技能文档」。你可以把它理解成给模型的一份操作手册里面写着怎么调用工具、按什么格式输出、遇到什么情况怎么处理。但这个技能文档现在怎么来的三种方式手写、让LLM一次性生成、或者让它自己改着改着看。问题是这三种都不像「训练」都不保证会变好。手写靠专家经验碰上不熟悉的领域就抓瞎。一次性生成就是抽卡好就是好不好就是不好。自己改着改着看更不靠谱改歪了也没人管。SkillOpt说别这样搞技能文档应该被「训练」而且要用训练神经网络那套纪律来训练。这就是论文的核心主张把技能文档当作冻结模型的可训练外部状态。模型不动技能来动但技能的训练过程要像训练模型一样有学习率、有验证集、有梯度方向。深度学习类比这不是装饰论文里有一组类比我觉得特别关键理解了这组类比就理解了整个方法。参数对应技能文档。你训练神经网络是在调参数SkillOpt是在改技能文档的文本。梯度对应编辑方向。神经网络通过反向传播算梯度SkillOpt通过分析成功和失败的轨迹来决定往哪个方向改技能。学习率对应编辑预算。训练网络时学习率控制每步走多大SkillOpt的编辑预算控制每步最多改几条规则。验证集对应选择门控。训练时用验证集决定要不要接受这次更新SkillOpt用选择集决定这次改的技能要不要留下来。epoch间的动量对应慢/meta更新。神经网络训练有动量项把历史梯度方向带过来SkillOpt有epoch间的慢更新把跨epoch的经验教训写进受保护区。这套类比不是硬凑的它真的在指导方法设计。后面的每一步机制都能在这张映射表上找到对应。前向传播和反向传播怎么从轨迹中学习前向传播就是rollout。目标模型拿着当前技能去跑一批任务把整个过程记录下来包括任务元数据、消息、工具调用、观察结果、最终答案、验证反馈。这些轨迹就是训练数据。批量大小有讲究。小批量更新快但噪声大大批量能暴露更多反复出现的模式。论文还支持accumulation几个rollout批量分别反思再合并成一次更新把执行吞吐和更新频率解耦。反向传播就是minibatch反思。优化器模型拿到轨迹后先把成功和失败分开再各自分成minibatch。为什么要分minibatch因为单条轨迹只能给出个案修法minibatch才能暴露反复出现的程序性错误比如agent总是搜错来源、总是写错输出格式、总是不验证工具结果。失败组提出纠正性规则成功组提出保护性规则。然后层次合并先把失败和成功的编辑各自去重合并再按失败优先的原则合到一起。这步会过滤掉重复的、矛盾的、只针对个案的建议。有界更新、验证门控、慢更新拿到合并后的编辑池之后不是一股脑全改上去。编辑预算L_t是学习率的等价物每步最多只应用L_t条编辑。优化器先对编辑池排序按预期效用排然后只取前L_t条。这是跟ad hoc重写的关键区别无界重写会擦掉有用规则、引入矛盾指令、过拟合局部失败。有界更新保持连续性同时还能学到新东西。论文支持四种调度策略constant、linear、cosine和autonomous。默认用cosine开头改大一点后面慢慢收小。改完之后上验证门控。每个候选技能都要在选择集上跑一遍只有严格超过当前分数才被接受打平也不行。这个门控把反思变成了「提出再测试」的优化过程而不是无条件自编辑。因为看起来合理的文本诊断也可能害到目标模型你光看说得好不好不行得跑一下看分数。被拒绝的编辑也不会白费。拒绝缓冲区会记录失败模式和被拒绝的编辑同一epoch内后面的反思调用能看到这些记录避免重复踩坑。这就是训练中的负反馈而且不增加部署时成本。epoch慢更新是跨epoch的动量。每个epoch结束时用相同任务在上一版技能和当前技能上各跑一遍分成进步、退步、持续失败、稳定成功四类。优化器据此写一段纵向指导放进受保护的慢更新区。这个区步级编辑改不了只有epoch边界的慢更新流程能重写。meta技能是优化器端的总结哪类编辑有帮助、哪类被拒、哪些失败持续存在。它只出现在优化器的反思上下文里不随部署的技能一起走。这样部署技能保持紧凑训练时还能享受更丰富的编辑历史。主结果每一格都赢这张表是论文最硬的证据。我挑几个关键数字说一下。GPT-5.5直聊模式下SpreadsheetBench从41.8拉到80.7涨了38.9分。OfficeQA从33.1到72.1涨了39.0分。LiveMath从37.6到66.9涨了29.3分。SearchQA从77.7到87.3涨了9.6分这个涨幅小是因为无技能基线已经接近天花板了。小模型受益更大。GPT-5.4-nano在DocVQA上几乎翻倍在ALFWorld上翻了三倍。Qwen3.5-4B在SpreadsheetBench上从9.3到23.9翻了2.6倍。这说明紧凑的技能制品能补上小模型在权重里还没存好的程序性知识。在Codex框架里GPT-5.5的SpreadsheetBench从27.5到85.0涨了57.5分。Claude Code里从22.1到80.4涨了58.3分。这两个数字太离谱了。平均下来七个直聊目标模型的平均提升约17.6分。六个基准覆盖面够不够你可能会问这六个基准能不能说明问题我看了下覆盖面确实够宽。SearchQA测的是搜索式问答。SpreadsheetBench测的是电子表格代码和工具使用默认模式要多轮codegen最多30轮跑真实的openpyxl和pandas。OfficeQA测办公文档推理最多24轮工具调用。DocVQA测多模态文档问答。LiveMathematicianBench测数学多选题推理。ALFWorld测的是具身决策每个episode最多50步。从单轮QA到多轮工具循环从代码执行到多模态理解从数学推理到具身交互覆盖面是够的。数据集类的基准用确定的训练/选择/测试分割默认2:1:7。选择集只用来决定接受还是拒绝技能编辑所有报告的分数都在不相交的测试集上算。Table 2和Table 5方法鲁不鲁棒Table 2做了六个面板的超参分析分别变训练集大小、反思minibatch大小、rollout批量大小、学习率、学习率调度和慢更新采样数。整体结论是SearchQA因为天花板效应在大部分设置下波动不超过正负1.5分。SpreadsheetBench和LiveMath对训练证据量更敏感SpreadsheetBench从1个样本的47.5涨到100%训练集的78.0LiveMath从59.1涨到70.5。但minibatch大小从1到32变化时三个基准都在很窄的区间内波动默认B_m8在所有基准上都接近最优。学习率方面L_t在1到16之间都能用L_t4在SearchQA和SpreadsheetBench上最优L_t8在LiveMath上最优。调度策略方面constant、cosine、linear都差不多。Table 5问的是另一个问题SkillOpt的成功到底靠的是强优化器在蒸馏弱学生还是优化循环本身在起作用Table 5用了两种优化器强前沿优化器GPT-5.5和跟目标模型同规模的优化器。结果很清楚强优化器在每个格子上增益都更大。但同规模优化器也不差在四个格子里恢复了56%到74%的增益。这说明SkillOpt不是蒸馏管道优化循环本身贡献了实质价值。强优化器是更好的默认选择因为它只花训练时的API调用不增加部署成本。但如果预算有限用同规模优化器方法依然有效。Table 3去掉每个组件会怎样Table 3做了三组组件消融。第一组看学习率形式。默认lr4拿到87.1/77.5/61.3动态lr降到85.8/71.8/54.0完全不要lr即无界重写只有84.6/75.7/57.3。有界文本学习明显优于无界重写。第二组看拒绝缓冲区。有缓冲区87.1/77.5/61.3去掉降到85.5/72.9/58.9。SearchQA跌1.6分SpreadsheetBench跌4.6分LiveMath跌2.4分。缓冲区起的是稳定器作用。第三组最狠。去掉meta技能但保留慢更新87.1降到85.1SearchQA77.5降到75.7SpreadsheetBench。两个都去掉SpreadsheetBench从77.5直接跌到55.0跌了22.5分。这是整个消融实验里最大的退步。为什么去掉慢/meta更新对SpreadsheetBench伤害这么大因为SpreadsheetBench是程序性最强的基准最需要跨epoch积累的程序性教训。去掉慢更新就等于去掉了长视野证据流和受保护区契约局部编辑就能覆盖掉持久的程序性规则。Table 4训练一次能不能到处用这是我觉得论文最有应用价值的部分。Table 4做了三轴迁移实验。跨模型迁移。在GPT-5.4上训练的SpreadsheetBench技能直接放到GPT-5.4-mini上用涨了9.4分。放到GPT-5.4-nano上涨了3.0分。LiveMath的技能迁移到mini涨4.5分迁移到nano涨5.6分。有一个案例里迁移版甚至超过了原地训练版LiveMath在GPT-5.4-nano上迁移得分28.8原地训练只有27.2。这说明有些学到的程序性规则跟目标模型无关。跨框架迁移是最强的部署信号。在Codex框架里训练的SpreadsheetBench技能直接放到Claude Code里用从22.1拉到81.8涨了59.7分。还略微超过了原地训练的80.4。反过来Claude Code训练的技能放到Codex里从27.5到71.1涨了43.6分。两个框架的工具和文件API完全不同能迁移说明学到的不是框架特定的命令配方而是工作簿层面的程序性知识比如先检查结构、用公式验证、把静态值写进去。LiveMath的跨框架迁移增益小一些但也是正的。Codex到Claude Code涨1.6分Claude Code到Codex涨12.8分。跨基准迁移是最严格的一轴。源基准和目标基准只共享大类数学。OlympiadBench上训练的技能放到Omni-MATH上用GPT-5.4涨3.7分GPT-5.4-mini涨1.8分GPT-5.4-nano涨1.3分。增益比前两轴小但全部为正说明学到的技能编码的是可复用的数学程序不是记住了特定基准的格式。Table 4三个子表的每一行迁移结果都超过了目标方的无技能基线没有一行掉到基线以下。Table 6训练要花多少产物多大Table 6回答了两个实践问题训练花多少产物长什么样。产物大小方面最终best_skill.md从379个tokenLiveMath到1995个tokenSpreadsheetBench中位数大约920个token。最长的也远低于现代前沿模型的系统提示预算最短的连一屏都放不满。领域专家几分钟就能读完、审计、编辑这个部署制品。编辑次数方面六个基准里实际被接受的编辑只有1到4次中位数2.5次。LiveMath涨29.3分只靠一次被接受的编辑。OfficeQA涨39.0分也只靠一次。这是验证门控在起作用的直接证据优化器每个epoch提出的编辑远不止这些但只有少数通过了选择集检查进入了部署技能。训练成本方面程序性强的基准SpreadsheetBench、OfficeQA、LiveMath轨迹短成本低每提升一个测试分需要0.6到3.6百万训练token。SearchQA和DocVQA因为轨迹长或多模态上下文丰富每分成本37.9和46.4百万token。但这个成本只在训练时付一次部署后best_skill.md不增加任何优化器调用。学到的技能到底说了什么Figure 4摘录了六个基准各一条代表性规则都是从最终best_skill.md里原文引用的。SearchQA学到了「从线索措辞推断期望的答案类型然后选择最短的标准实体该实体由共现的区分性证据支持」。SpreadsheetBench学到了「检查工作簿结构和公式然后在整个请求的目标范围内写入评估后的静态值而不是依赖Excel重新计算」。OfficeQA学到了「将oracle解析页面作为主要证据锁定表格/日期/单位上下文输出恰好是请求的舍入值不加额外标签」。LiveMath学到了「在最强陈述的多选题中按定理强度排序选项优先选择有依据的更强结果选项而非正确但较弱的推论」。这些规则有三个共同特点。第一都是程序性的没有一条提到具体的题目、文件或实体。第二都编码了前沿模型零样本缺乏的纪律答案格式约束、证据绑定、搜索前沿管理。第三读起来像一个有经验的人类从业者在基准上泡了一天后会写的规则但它们是优化器自动产生并逐条在held-out数据上验证的。论文还给了一个定性演化的例子。ALFWorld的初始技能是一个通用的「搜索-变换-放置」策略优化后变成了一个有状态的执行策略学到了精确物体名匹配杯子和锅不能互换、已访问位置记忆别反复检查已经搜过的地方、目的地记忆和进度锁一旦能完成下一个子目标就直接做别再检查了。在这个案例里held-out测试从49.3提到74.6。SpreadsheetBench的初始技能只是「用Python电子表格库保留无关内容」优化后变成了工作簿取证策略学到了检查实际工作簿而非依赖预览、跨多个工作表定位表头和目标范围、在查找或聚合前规范化键和单元格类型还有一条关键规则当评分器读取单元格值时即使提示提到INDEX/MATCH或XLOOKUP等公式也要计算并写入评估后的静态值。这个案例的held-out测试从40.4提到78.9。这一切到底改变了什么我把全文的核心数字再过一遍。52个测试格全部最佳或并列。七个直聊目标模型平均提升约17.6分。GPT-5.5在直聊、Codex、Claude Code三种框架下分别提升23.5、24.8、19.1分。比最强的逐格基线还高5.4分。移除慢/meta更新SpreadsheetBench跌22.5分。跨框架迁移Codex到Claude Code涨59.7分。最终技能1到4次编辑不超过2000个token。同规模优化器恢复56%到74%的增益。这些数字指向一个判断。文本空间优化是一个完整的、可控的、可验证的范式。它有学习率控制步长有验证门控保证安全有拒绝缓冲区提供负反馈有慢更新积累跨epoch经验。产出的技能制品紧凑、可审计、可跨模型跨框架跨基准迁移。而且整个过程不改变模型权重。你想想看这意味着什么。你有一个GPT-5.5你不能改它的权重但你想让它在你的领域里表现更好。以前你能做的只有写prompt写得好不好全凭经验。现在你可以用SkillOpt训练一份技能文档像训练模型一样有验证有门控有学习率训练完拿到一个几百到两千token的文本文件塞进系统提示就行。训练时你用了强优化器部署时只需要那个文本文件。训练在Codex里做的部署可以放到Claude Code里。训练在GPT-5.4上做的部署可以放到更小的mini或nano上。技能本身变成了一个可训练、可审计、可迁移的适配层。论文最后提了几个自然延伸方向技能库跨域共享、优化器meta技能跨基准复用、无奖励或偏好驱动的验证门控、把优化后的技能蒸馏回模型权重作为迈向权重级适配的跳板。我觉得这个方向想得很远把技能当成可优化对象而不是提示词的附属品确实能打开很多可能性。