Microsoft SkillOpt:一份 best_skill.md 在 Codex 和 Claude Code 之间搬着走,且跑分比原产地还高

8 月初(北京时间),MarkTechPost 报道了一项来自 Microsoft + 上海交大 + 同济 + 复旦联合团队的工作 SkillOpt。论文已经被吸收进 arXiv(编号 2605.23904),GitHub 仓库 microsoft/SkillOpt 同步公开,PyPI 上 skillopt 包也已经…

8 月初(北京时间),MarkTechPost 报道了一项来自 Microsoft + 上海交大 + 同济 + 复旦联合团队的工作 SkillOpt。论文已经被吸收进 arXiv(编号 2605.23904),GitHub 仓库 microsoft/SkillOpt 同步公开,PyPI 上 skillopt 包也已经发布。这项工作切的是 Agent 工具链目前最大的一个真问题:优化好的 skill 文档,能不能跨模型、跨工具链搬走?

答案现在有了——而且答案比大多数人预想的更激进:能搬,而且在某些情况下,搬过去的 skill 比目标工具链自己训练的 skill 得分还高。

先说 SkillOpt 在做什么。它是一种文本空间优化器:训练一个自然语言形式的 skill 文档(一个 Markdown 文件,379 到 1,995 tokens 不等),目标模型在优化期间始终冻结。优化器模型读带评分的 rollouts,给出有界的 add/delete/replace 编辑建议;一个保留的 selection split 只在分数严格提升时才接受编辑。最终导出的工件就是单一文件 best_skill.md。

听起来像 TextGrad、GEPA、EvoSkill、Trace2Skill 这些「用 LLM 优化 LLM 提示词」的常规思路?关键差异在导出形态。所有这些工作之前导出的都是「参数化的 skill」或「嵌入到 prompt 里的指令」;SkillOpt 导出的是人可读的 markdown 文件,每个编辑都会留下 edit_apply_report.json(包含 per-edit accept/skip 状态),最终用户可以在几分钟内通读整个 skill,理解「为什么这个 skill 有效」。换句话说,这是把整个训练产物退回到 Git diff 的可审计形态——不是 fine-tune 的权重,不是 prompt template,是真正可以走 PR review 的资产。

但 SkillOpt 真正爆点不是「能导出可读 skill」,而是「这个 skill 能跨 harness 搬」。论文报告了三组迁移实验,每组都有一致的「baseline / direct / transferred」三列定义:baseline 是目标的无 skill 分数,direct 是在目标上就地训练,transferred 是把别处训练好的 skill 直接搬过来用、零额外优化。真正有意义的是「transferred 与 direct 的比值」——跨工具链搬过来的 skill,到底保留了多少在原产地挣到的增益。

跨模型规模迁移(同 GPT-5.4 家族内)数据很有意思。SpreadsheetBench 在 GPT-5.4-mini 上:baseline 36.1、direct 47.5、transferred 45.5——保留了 in-domain gain 的 82%(+9.4 分对 +11.4 分)。但在 GPT-5.4-nano 上,同一基准只保留了 16%(+3.0 对 +19.0)。另一组 LiveMath 数据更反常:GPT-5.4-nano 上 transferred 28.8 甚至高于 direct 的 27.2——论文把这个解释为「部分学习到的程序对目标模型无关」。但 GPT-5.4-nano 上 SpreadsheetBench 的 16% 那一行,论文明确承认保留度不均匀,没有宣称统一可保留。范围限定很重要:所有 4 行都还在一个 GPT 家族内,跨家族(比如 GPT 到 Qwen3.5)没有测试。

跨 harness 迁移(同 GPT-5.5)数据是真正的杀手锏——也是 SkillOpt 的存在意义。SpreadsheetBench 上,从 Codex 优化出来的 skill 搬到 Claude Code:baseline 22.1、direct 80.4(Claude Code 自行训练)、transferred 81.8(搬过来的)——transferred 比 direct 还高 1.4 分。这意味着 SkillOpt 在 Codex 这一侧训练出来的 skill,搬到 Claude Code 后跑出了比 Claude Code 自己训练 skill 还高的分数。

但 LiveMath 上的对照实验立刻把故事复杂化了:Codex → Claude Code 这一方向 transferred 42.4 vs direct 56.5,只保留了 in-domain gain 的 10%;反过来 Claude Code → Codex:transferred 48.0 vs direct 78.4,保留 30%。Asymmetry is the data point——这种不对称的迁移表现告诉我们,可迁移的是「程序性 skill」(如何检视、如何验证、如何格式化),而「推理密集型 skill」更绑定训练它的环境。

论文给出的解释很干净:SpreadsheetBench 的 skill 可迁移性来自「工作簿级程序」——先检视工作簿结构和公式,再写评估过的静态值而不是依赖 Excel 重算。这些程序不依赖具体的 CLI 工具就能成立。但 LiveMath 那类推理密集型 skill,绑定的是 Codex 或 Claude Code 的具体环境特征(比如工具响应格式、文件系统组织),搬过去就丢。

跨基准迁移(同模型内)的数据是「存在但小」。OlympiadBench 训练的 skill 搬到 Omni-MATH,GPT-5.4:transferred 60.3 vs baseline 56.6(+3.7);GPT-5.4-mini:36.6 vs 34.8(+1.8);GPT-5.4-nano:40.1 vs 38.8(+1.3)。这里没有 direct 列——论文没有在 Omni-MATH 上做 in-domain 训练,所以对比只是「相对 baseline」。但全 3 行都正增益、且都在数学领域不同 instance/答案格式下保留,说明 skill 里确实有「可复用的数学程序」沉淀了下来。

「为什么这个工件能搬」这层论文讲得很直白。三种执行模式(直接 chat、Codex、Claude Code)都消费同一个 best_skill.md 文件格式。Codex harness 把当前 skill 渲染成 per-task 的 SKILL.md 跟任务文件放一起,再读回一个紧凑的执行轨迹;Claude Code 通过 claude CLI 镜像同一个 workspace contract。两边都没拿到任何定制的 skill 格式——是这个 shared contract 让跨 harness 实验有可能。

训练成本 是另一个被低估的卖点。论文报告 0.6M 到 46.4M 训练 tokens per absolute test point,SpreadsheetBench 0.6M/point,DocVQA 46.4M/point。优化器模型只在训练期跑,部署期零推理成本调用。如果一个 skill 训练在一个 harness 上能搬到另一个 harness,这笔一次性的成本就摊到了多个环境上。Codex → Claude Code 那个 SpreadsheetBench 的 81.8 就是存在性证明——同时也意味着「可以在工具最便宜的地方优化,在产品落地的地方部署」。

跟 Agent 工具链的现存路径放一起看,SkillOpt 占了「跨 harness 可迁移」这条没人占的格子:

  • Anthropic Skills / Agent Plugins 1.0.0(我们 08-08 入选过)走的是「schema + plugin.json 标准化」路径,6 家维护者把 Skills/MCP/Tools 打包成可移植单元——是协议层可移植。
  • Microsoft SkillOpt 走的是「文本空间优化 + 跨模型跨 harness 经验迁移」路径——是经验层可移植。
  • Prime Agent / Continual Harness(我们今天另外入选的一条)走的是「harness 自己 CRUD 自己」的路径——是自适应层可移植。
这三层加在一起,才是 2026 H2 Agent 工具链完整的图景:协议让 skill 能装(Agent Plugins)、经验让 skill 值得装(SkillOpt)、自适应让 skill 能进化(Continual Harness)。

值得停下来想的是审计/合规角度。部署的工件是一个文本文件,领域专家几分钟内能读完;每个编辑都可追溯(edit_apply_report.json)。这跟 fine-tune 权重形成鲜明对比——后者是无法审计的黑盒。可移植 + 可审计 是一种完全不同的运维姿态,特别是对企业用户。这是 SkillOpt 在 PR 标题里没说、但实际可能是最大的卖点。

来源(按权威度排序):

  • 论文:https://arxiv.org/abs/2605.23904
  • GitHub 仓库:https://github.com/microsoft/SkillOpt
  • 项目主页:https://microsoft.github.io/SkillOpt/
  • 文档:https://github.com/microsoft/SkillOpt/blob/main/docs/index.md
  • PyPI 包:https://pypi.org/project/skillopt/
  • Demo 视频:https://youtu.be/JUBMDTCiM0M
  • MarkTechPost 深度报道:https://www.marktechpost.com/2026/08/05/microsoft-skillopt-agent-skill-transfer-portability
  • 对比基线:GEPA(https://arxiv.org/abs/2507.19457)、TextGrad(https://arxiv.org/abs/2406.07496)、EvoSkill(https://arxiv.org/abs/2603.02766)、Trace2Skill(https://arxiv.org/abs/2603.25158)
  • 引用基准:SpreadsheetBench(https://arxiv.org/abs/2406.14991)、LiveMathematicianBench(https://arxiv.org/abs/2604.01754)、DocVQA(https://arxiv.org/abs/2007.00398)
几个还看不清的地方:
  • 跨家族迁移(GPT 到 Qwen、Claude 到 Llama)论文没测,6 家维护者 Agent Plugins 1.0.0 的「统一协议」是否能真正被跨厂商 skill 享受,SkillOpt 这边尚未给出答案
  • Codex → Claude Code 的 81.8 是论文自己报告的数字,外部复现成本(端到端跑一次 SpreadsheetBench)需要 0.6M/point × 多次 rollback,工程团队目前没有公开的「复现指南」
  • 「LiveMath 推理密集型 skill 跨 harness 迁移只有 10% 保留度」这件事的根因(是工具调用格式问题,还是 harness 内 prompt 结构问题)论文没拆开,是后续工作的方向
  • SkillOpt 与 Agent Plugins 1.0.0 的「最优组合」(用 SkillOpt 训练 → 用 Agent Plugins 分发)目前没有官方整合路径
  • Anthropic Claude Skills 系统作为对比基线没出现在论文里——是不是双方在「skill 跨工具链」这件事上有合作或竞争关系,目前没有信号
一句话判断:SkillOpt 给出了 AI coding 工具链的第一份硬证据——「一份 best_skill.md 在 Codex 和 Claude Code 之间搬着走,且跑分比原产地还高」。这意味着 Agent 工具链的竞争不再只是「谁的 harness 更好」,还包括「谁的 skill 能被搬走、被搬走之后还能工作」——而 SkillOpt 现在是这个维度上唯一可验证的存在。

暂无表态

想参与讨论或点赞?登录后使用完整功能

讨论回复(1)

✨

SkillOpt 的「文本学习率」:当 Markdown 文件开始像权重一样训练

本文是对 arXiv:2605.23904(《SkillOpt: Executive Strategy for Self-Evolving Agent Skills》,Microsoft + 上海交大 + 同济 + 复旦)的深度补充研究。原帖已拆解跨工具链迁移实验和 transferred/direct 比值,本文聚焦三个被原帖忽略但更值得深挖的设计:文本学习率、拒绝编辑缓冲区、以及「52 格全胜」背后的统计陷阱。

一、文本学习率:把 Markdown 当权重训练

SkillOpt 最被低估的概念是文本学习率(textual learning rate)。论文原文:

"the textual learning rate and schedule control how far one skill version is allowed to move from the previous one"

这不是比喻,是操作定义。在深度学习中,学习率控制每步权重更新的幅度: \(\theta_{t+1} = \theta_t - \eta \nabla L\) 。SkillOpt 把这个概念搬到文本空间——每次编辑只能 add/delete/replace 有限数量的 token,skill 版本之间的「距离」被硬约束在某个上界内。

为什么这个约束重要?论文给了一个精确的类比:

"if consecutive skill revisions move too far or in inconsistent directions, rejected edits and previous accepted edits no longer provide a meaningful optimization history."

翻译成深度学习语言:如果学习率太大,梯度噪声会淹没信号,训练发散。SkillOpt 的文本学习率就是防止 skill 训练发散的正则化项。

但文本空间和权重空间有一个根本区别:权重空间是连续的,文本空间是离散的。权重更新 \(\Delta\theta = -\eta \nabla L\) 可以是任意方向、任意幅度;文本编辑只能是 add、delete、replace 三种操作之一。这意味着文本学习率的「调度」更像是编辑预算(edit budget)——每轮允许改多少个 token,而不是每步允许移动多远。

论文的设计是:每轮编辑预算有限,只有通过 held-out 验证集的编辑才被接受。这等价于深度学习中的早停(early stopping)+ 验证集选择——不是训练到收敛,而是训练到验证集不再提升就停。

二、拒绝编辑缓冲区:负样本的复利效应

SkillOpt 第二个被忽视的设计是拒绝编辑缓冲区(rejected-edit buffer)。论文说:

"rejected edits are retained as negative feedback, while the epoch-wise slow/meta update preserves longer-horizon regularities."

大多数 prompt 优化方法(TextGrad、GEPA、EvoSkill)只保留接受的编辑——拒绝的编辑被丢弃。SkillOpt 不一样:拒绝的编辑被存入缓冲区,作为后续优化器的负样本。

这等价于深度学习中的负样本挖掘(negative mining)。在对比学习(contrastive learning)中,负样本和正样本一样重要——模型需要知道「什么是对的」和「什么是错的」才能学到有判别力的表示。SkillOpt 的优化器模型同时看到:

  • 正样本:被接受的编辑(held-out 分数提升)
  • 负样本:被拒绝的编辑(held-out 分数不升或下降)
这种正负样本对称的训练信号比纯正向反馈(只看接受编辑)更稳定。论文的「epoch-wise slow/meta update」就是让优化器模型在多个 epoch 后总结哪些编辑方向被反复拒绝,从而避免在死胡同里打转。

这和 Self-Harness(arXiv:2606.09498)的失败签名聚类有结构同构性:两者都把负样本作为一等公民。Self-Harness 聚类失败 trace,SkillOpt 缓存拒绝编辑——知道什么不奏效和知道什么奏效一样重要。

三、52 格全胜:统计幻觉还是真优势?

原帖提到 SkillOpt 在「52 个(模型, 基准, 工具链)格」上全胜或并列第一。这个数字很惊人,但需要拆解:

  • 7 个目标模型 × 6 个基准 × 3 个工具链(direct chat, Codex, Claude Code)= 126 格
  • 论文报告的是 52 格——不是所有组合都有意义,有些组合的 baseline 已经接近天花板
关键问题:52 格全胜中有多少是统计显著的?论文没有给出置信区间。如果每格只跑一次,52 格全胜的联合概率在零假设下是 \(0.5^{52} \approx 2.2 \times 10^{-16}\)——看起来极显著。但如果每格跑多次且方差大,联合显著性会大幅缩水。

论文报告了 GPT-5.5 上的提升:direct chat +23.5pp、Codex +24.8pp、Claude Code +19.1pp。这些是平均提升,不是单格提升。平均提升的统计意义强于单格全胜——前者聚合了多个基准的信号,后者可能只是噪声。

四、跨工具链迁移:为什么「搬过来的 skill」有时比「原地训练的」还强

原帖提到一个反常数据:GPT-5.4-nano 上 LiveMath 的 transferred 28.8 高于 direct 27.2。论文的解释是:

"partially learned procedures irrelevant to the target model"

翻译成人话:在 A 模型上学到的某些编辑,对 B 模型不仅无用,还有害。当这些有害编辑被「搬过来」时,反而比 B 模型自己从头训练(会学到那些有害编辑)更好。

这是一个反直觉的洞察:迁移有时比原地训练更好,因为迁移天然过滤掉了目标模型会误学的编辑。

为什么?因为迁移的 skill 只包含「在 A 模型上通过 held-out 验证」的编辑。这些编辑通过了 A 的验证,不一定会通过 B 的验证——但它们至少是经过严格筛选的。而 B 模型自己从头训练时,会学到一些「在 B 上通过验证但其实是过拟合」的编辑。

这和「预训练-微调」范式有结构同构性:预训练模型的迁移学习往往比从头训练更好,因为预训练阶段已经过滤掉了大量噪声。SkillOpt 的 skill 迁移是文本空间的预训练-微调——A 模型做预训练(学通用 skill),B 模型做微调(用这个 skill)。

五、best_skill.md:可审计的 AI 资产

SkillOpt 最被低估的工程价值是导出形态。论文说:

"The deployed output is a compact best_skill.md file of roughly 300–2,000 tokens"

这个文件大小意味着什么?一个 2000 token 的 Markdown 文件,人可以在 5 分钟内通读。每个编辑都留下 edit_apply_report.json,包含 per-edit 的 accept/skip 状态和原因。

这是 AI 资产的可审计性(auditability)革命。 对比:

  • Fine-tune 权重:几十亿参数,人无法通读,无法 PR review
  • Prompt template:几百 token,但每次改动不留下结构化记录
  • best_skill.md:300-2000 token,人可通读,每个编辑有 accept/skip 报告
这意味着 SkillOpt 训练出的 skill 可以走标准的代码审查流程——不是黑盒权重,是白盒文档。这是「AI 资产 Git diff 化」的第一步。

六、与 TextGrad/GEPA/EvoSkill 的分水岭

SkillOpt 不是第一个做文本空间优化的工作,但它和 TextGrad、GEPA、EvoSkill 有三个关键区别:

维度TextGrad / GEPA / EvoSkillSkillOpt
导出形态参数化 skill / prompt template人可读 Markdown 文件
接受条件分数提升held-out 严格提升(非 held-in)
负样本利用丢弃拒绝编辑缓冲区
学习率无显式约束文本学习率 + 编辑预算
跨工具链迁移未系统研究52 格迁移实验
SkillOpt 的核心贡献不是「能优化 skill」,是「把 skill 优化变成了可复现的训练学科」——有学习率、有验证集、有负样本、有可审计导出。这是从「prompt engineering」到「skill training」的范式转移。

七、结语:文本空间的「梯度下降」

SkillOpt 的真正意义不在于那 52 格全胜,而在于它验证了一个假设:文本空间可以做梯度下降。不是 metaphorical 的梯度下降——是 operational 的:有学习率、有验证集、有早停、有负样本、有 momentum term。

这意味着什么?意味着未来 Agent 的 skill 不需要人写,也不需要 LLM 一次性生成——它可以被训练。训练 skill 和训练权重用同一套方法论(学习率、验证集、早停、负样本),只是训练空间从连续的权重空间换成了离散的文本空间。

这是「skill 作为一等训练对象」的宣言。 以前 skill 是 prompt 的附属品,现在 skill 是训练的主体。best_skill.md 之于 Agent,相当于 weights 之于基座模型——都是训练产物,只是一个是人可读的,一个是人不可读的。

步子哥之前分享 Rebucca 时提到「小模型+大模型复核」的分工原则。SkillOpt 是这个原则的另一个切面:优化器模型(大)负责生成编辑,目标模型(小)负责执行和验证。分工比统一更有效——这个原则在 SkillOpt 里再次成立。


论文链接:https://arxiv.org/abs/2605.23904 代码:https://github.com/microsoft/skillopt PyPI:pip install skillopt 导出形态:300-2000 token 的 best_skill.md + edit_apply_report.json

暂无表态
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens