SPT: Skills as Pre-Training Data for Agentic Language Models —— 精读

论文链接:https://arxiv.org/abs/2608.26563

发表时间:2026 年 8 月 27 日(arXiv:2608.26563v1)

发表机构:北京邮电大学、清华大学(通讯作者为清华大学的李雨东)

代码:论文承诺公开发布语料构建、清洗、去污染与 Reference Insert 的全部代码及各阶段 checkpoint(截至发稿暂未放出 URL)

备注:第一作者孙宇飞(北邮)与李雨东(清华)为共同一作,纯高校合作,无企业参与。


一、论文背景

1.1 Agent 模型的"数据从哪来"困境

大语言模型(LLM)越来越多地以 Agent(智能体) 的形态工作:它们需要调用外部工具、执行多步任务,比如查询 API、操作浏览器、写代码并运行。但一个尴尬的事实是——完整的工具使用过程几乎不会出现在自然收集的语料里。网页、书籍、论坛里很少有人把"我调用了某个 API、传了什么参数、返回了什么结果、然后我又做了什么"这种完整过程写下来。

因此,现有的 Agent 模型几乎都把工具使用能力的培养放在后训练(post-training)阶段:用监督微调(SFT)喂函数调用样例,或者用强化学习(RL)在任务环境中优化。这条路线的典型数据是函数调用对和Agent 轨迹——即模型与环境交互的完整执行记录。

1.2 轨迹数据的两难:贵且"一次性"

论文指出了轨迹范式的两个深层问题:

第一,生产成本随覆盖度爆炸。 要产生一条有效的轨迹,你需要:搭建任务环境(可能是一个真实的操作系统、浏览器或第三方 API 服务)、真正执行一遍动作、再验证结果是否正确。工具和任务的覆盖面越广,成本越高。这决定了轨迹数据很难达到预训练所需的规模。

第二,轨迹记录的是"一次执行"而非"可复用工作流"。 一条轨迹只说明"在这个特定情境下做了这些动作",它不显式声明这个工具适合什么条件、有哪些约束、完整的标准流程是什么。模型想从轨迹学到通用工作流,得自己从大量单次执行中去归纳——这恰恰是低效的。

1.3 被忽视的宝藏:技能包

与此同时,一种新型数据正在快速积累:技能。技能是人类为 AI Agent 撰写的可复用指令,通常以多文件包的形式发布——一个主指令文件(通常是 SKILL.md),配上引用文档、脚本、模板、配置文件等。一个技能会说明:这个能力什么时候适用、完成任务的步骤是什么、要遵守哪些约束、用哪些配套资源。

这类数据的规模增长极快。论文统计了 npm 注册表的快照:公开可用的技能数量从 2026 年 2 月的 170,226 个增长到 6 月的 1,640,440 个,四个月增长了 9.6 倍。这个量级让它有了作为预训练数据的可能性。

但现状是,技能包几乎只被当作推理时上下文使用——Agent 执行任务时临时加载某个技能的说明。论文的核心问题是:能不能把技能包直接当成训练数据,在预训练中段"喂"给模型,让它在后训练之前就掌握工作流级知识?


二、论文定位和关联工作

论文把自己放在三条研究线的交汇处(以下关联工作梳理自论文的 Related Work 章节):

训练流程与 Agentic 中段训练。 现代 LLM 开发普遍区分大规模预训练与后期的适配阶段。中段训练在预训练 checkpoint 上用精选或领域加权的语料继续训练(包括退火阶段),后训练则用 SFT、偏好优化或 RL 教模型遵循指令。近期开源模型(Tulu 3、OLMo 系列、SmolLM 等)大量使用晚期数据选择、领域混合、元数据条件化与精选退火语料来定向强化能力。已有工作也把工具调用、验证过的函数调用样例、搜索轨迹、交互轨迹纳入语言建模语料——在这类数据上做下一 token 预测确实能提升工具调用能力。SPT 的差异在于换掉了训练单元:不是暴露"调用"或"已实现的执行路径",而是可复用的多文件工作流规范,显式声明工具语义、流程约束与资源关系。

技能为中心的系统。 SkillNet 为 20 多万个技能提供创建、评估、连接的基础设施;SkillCenter 构建了 216,938 个技能的来源可溯库。这些工作的重心是技能的构建、组织与 Agent 侧复用;SPT 则把多文件技能包当作中段训练数据,在固定 token 预算下研究语料混合与跨文件序列化。

Agent 微调与评测。 函数调用语料(Gorilla、ToolLLM、xLAM 等)训练 API 选择、参数生成与调用组合;Agent 微调数据集扩展到多轮"推理-行动-观察"轨迹;RL 方法用任务奖励优化工具使用策略。近期研究还发现 SFT 的泛化受"接口模式记忆"限制、RL 效果依赖初始策略与奖励设计。SPT 的定位是在后训练之前就让模型接触工作流级知识,检验这种准备是否改善下游 Agent 表现。评测侧则借助 API-Bank、MetaTool、APT-Bench、ToolEyes 等基准细粒度测量工具感知、工具选择、参数合法性、函数链式调用等能力。

一句话概括定位:前人把技能当作"外挂"(推理时加载),把轨迹当作"教材"(后训练监督);这篇论文反过来,把技能当作"教材",且用在更早的训练阶段。


三、问题定义

论文要回答的核心问题可以拆成四个可检验的子问题:

  1. 有效性:在同等 token 预算下,用技能包做中段训练,是否比通用数据(Dolmino)或 Agent 轨迹(AgentBank)更能提升下游 Agent 能力?
  2. 无损性:这种 Agent 能力的提升,是否以牺牲通用能力(问答、常识推理等)为代价?
  3. 组织方式:技能包是多文件结构,文件之间有引用关系。不同的文件排列/序列化方式是否影响训练价值?
  4. 鲁棒性:SPT 的收益在换了模型规模、换了后训练配方(通用指令微调 vs 函数调用 SFT vs SFT+RL)之后还成立吗?

问题的形式化设定是:给定一个已预训练但未退火未后训练的基座模型,在固定的中段训练 token 预算 B 下,从技能分布与通用数据分布的混合 p_α(x) = α·p_skill(x) + (1-α)·p_gen(x) 中采样语料继续做因果语言建模(causal LM),α=1 是纯技能,α=0 是纯通用数据的对照组。之后接标准后训练流程,比较各条件下的 Agent 基准成绩。


四、问题解法

SPT(Skill Pre-Training)的方法链条分四步:构建语料 → 序列化打包 → 混合配比 → 接后训练。它没有发明新的训练目标——始终是最普通的因果语言建模,全部创新都在数据侧。

4.1 SkillCorpus 构建:清洗与去污染

数据来自 ClawHub(一个公开技能仓库,类似"技能界的 npm")2026 年 5 月 1 日的快照,只保留来自通过身份验证和第三方审计的可信发布者的完整包。清洗管线包括:

  • 包级质量筛选:通过迭代式人工审计归纳启发式规则,去重、检测近重复包和自动生成内容、剔除错误工作流、划分质量层级,移除约 2% 的包;
  • 文件级清洗:丢弃依赖目录、锁文件、二进制/媒体/字体等资源、超长编码块(本次移除 818 个锁文件和 170 个编码块);脱敏 API 密钥、token、密码等敏感字段(23,973 处脱敏);移除数据 URI(256 处);
  • 基准去污染:这是训练语料工作的关键环节。用人工审计加 DeepSeek-V4-Flash 判断,只要包内任何文件含有基准特定的工具格式、任务模板、改写变体或衍生内容,就整包移除(约 0.3%)。另用归一化 13-gram 精确重叠做词法诊断——1.24B 字符的候选池中只有 163 个基准 13-gram 重叠,量级极低。

最终语料:38,040 个技能包、218,277 个文件(平均每包 5.74 个),覆盖文档处理、代码执行、浏览器操作、表格分析、数据转换、多模态生成等领域。

4.2 Reference Insert:让引用关系"局部化"

技能包是多文件的,而主指令文件往往在正文里引用其他文件(比如"样本量计算参见 refs/size.md")。如果简单按目录顺序拼接,指令和它引用的文件可能相距上万 token——超出 4096 token 训练块的窗口,跨文件依赖关系就在因果上下文里"断裂"了。

Reference Insert(引用插入) 的做法:写一个包头(名称+描述),然后按原始顺序逐行扫描 SKILL.md,一旦某行出现对某个支撑文件的无歧义引用,就紧跟该行插入一个 <referenced_file_sep> 标记和被引用文件的完整内容(每个文件最多在首次被提及时插入一次)。扫描结束后,剩余未被引用的文件用 <unreferenced_file_sep> 标记追加在后面。最后把整个流打包成 4096-token 的训练块。

效果:解析并插入了 70,655 处引用(涉及 17,957 个包),引用行到被引文件内容的平均距离从 14,519 token 降到 737 token,缩短 94.92%。注意文件内容本身一个字都没改——变的只是排列顺序。

论文还对比了五种序列化策略(后面实验部分会看到数据):DeepSeek-Coder 打包(保序拼接)、Random File(包内随机打乱)、Metadata Packing(加元数据标签)、Skill-FIM(填空中间变换)、Reference Insert。

4.3 与通用数据混合

纯技能数据可能偏科(工具与工作流密集,但语言覆盖面窄),SPT 允许按 α 比例混合通用数据(Dolmino 或 SmolLM),在固定 token 预算下联合训练。实验扫描了 0% 到 100% 的完整配比区间。

4.4 实验配置概览

  • 基座模型三档:MeCo-1.6B、Instella-3B、OLMo-3-7B(都是纯预训练、未退火未后训练的 checkpoint);
  • 中段训练对照:无中段训练 / Dolmino(通用数据)/ AgentBank(轨迹数据)/ SkillCorpus,token 预算严格对齐(均为 347,770,880 token);
  • 后训练两种:Tulu 3(通用指令微调)或 xLAM-FC(函数调用 SFT);
  • 另有 360M 小模型的 SFT+GRPO(强化学习)实验。所有结果为 5 个随机种子的均值。

五、评估指标与实验证据

评估用 4 个 Agent 基准(API-Bank 测 API 调用、MetaTool 测工具选择、APT-Bench 测多步 Agent 任务、ToolEyes 测工具相关推理)加 6 个通用基准(OLMES 标准下的 ARC、BoolQ、HellaSwag、PIQA、WinoGrande、MMLU),分数均为 0-100。

5.1 主结果:技能数据全面领先

六组"基座×后训练"设置下,四基准 Agent 平均分排序完全一致:Dolmino < AgentBank < SkillCorpus,且 SkillCorpus 在 24 项单项对比中拿下 23 项最佳。摘取代表性数据:

模型/设置(xLAM-FC 后训练)API-BankMetaToolAPT-BenchToolEyesAgent 平均通用平均
OLMo-3-7B 无中段训练28.1520.9325.2739.6428.5075.31
7B + Dolmino(通用)36.4522.8730.0743.9233.3375.16
7B + AgentBank(轨迹)48.8249.2431.8046.3444.0574.38
7B + SkillCorpus(技能)53.2353.1039.9667.5453.4675.07

关键读数:

  • 相对直接 SFT,SPT 把四基准 Agent 分提升 9.11~24.96 分(规模越大提升越大:1.6B +11.55、3B +16.99、7B +24.96),而六基准通用分变化仅 −0.85~+0.51——几乎无损;
  • Dolmino 相比无中段训练只带来 2.62~4.83 的提升,说明"多一个训练阶段"本身有贡献但有限;SkillCorpus 在此之上再贡献 6.49~20.13 分,证明主要增益来自语料内容本身;
  • 同预算下 SkillCorpus 比 AgentBank 高 4.07~9.91 分——技能比轨迹更有效。

5.2 混合配比:30% 是甜蜜点

1.6B + Tulu 3 的配比扫描(两个通用语料源结论一致):

配比(SkillCorpus : 通用)Agent 平均分(混 Dolmino)Agent 平均分(混 SmolLM)
0 : 100(纯通用)15.569.07
20 : 80约 30.0约 27.5
30 : 7038.6037.58
50 : 5035.7334.72
100 : 0(纯技能)22.0622.06

30% 配比时通用分 58.64/58.83,与纯通用端点(59.29/59.26)几乎持平。20%–50% 区间全面优于两个端点;超过 50% 后 Agent 分快速下滑。结论:技能应作为中段训练的定向组件掺入通用数据,而不是整体替换——通用数据的广泛语言与任务覆盖反而帮助技能工作流迁移到多样化任务上。

5.3 序列化消融:排列本身就有贡献

同样是那些文件、同样 token 预算,只变排列方式(1.6B + Tulu 3):

策略API-BankMetaToolAPT-BenchToolEyesAgent 均分通用均分
DeepSeek-Coder(保序)24.4015.2216.1425.0120.1957.30
Random File(随机)17.7610.5514.7221.3416.0957.34
Metadata(元数据)11.4615.0313.6425.8616.5057.35
Skill-FIM(填空)15.4317.0613.3726.0617.9857.33
Reference Insert(本文)26.4717.3917.9726.3922.0658.20

Reference Insert 比最强的替代方案(DeepSeek-Coder)高 1.87 分,比 Random File 高 5.96 分。由于 Reference Insert 与 Random File 看到的文件完全相同,这 5.96 分纯粹来自排列方式。加元数据标签或 FIM 变换这类"通用结构增强"则不能稳定复现收益。

5.4 RL 阶段后收益仍在

SmolLM2-360M 上做相同的 Tulu 3 SFT + GRPO(数学与指令遵循任务,不含工具监督):SkillCorpus 的四基准 Agent 分 11.94,Dolmino 7.25,无中段训练 4.95;通用分同样最高(41.49)。RL 目标里没有任何工具使用信号,但技能中段训练的优势保留了下来。


六、效果优势的根源解释

为什么"说明书"比"录像"更好?建立完整的因果链:

方法差异一:知识形态——显式工作流 vs 单次执行记录。 技能显式声明工具适用条件、约束与可复用流程;轨迹只记录特定情境下的动作与观察序列。 → 机制变化:因果语言建模在学技能文本时,直接吸收的是"工作流级知识"本身(什么时候用、怎么用、注意什么);学轨迹时,模型必须从一次次具体执行中自行归纳工作流,归纳不充分就难以迁移。 → 指标提升:同预算下 SkillCorpus 比 AgentBank 高 4.07~9.91 分,且六组实验排序一致——知识形态的差异稳定转化为下游迁移差距。

方法差异二:Reference Insert 让跨文件依赖进入局部因果上下文。 指令行与被引用资源从平均相距 14,519 token 缩到 737 token(−94.92%),落在同一个 4096-token 训练块内。 → 机制变化:因果 LM 预测某个指令行之后的 token 时,被引用文件的内容就在它的"上文"里——模型实际上在练习"读指令时结合引用资源理解语义",这正是下游 Agent 任务(读工具文档、按说明调工具)所需的能力。随机排列则把这种共现关系打碎。 → 指标提升:与内容完全相同的 Random File 相比高 5.96 分——排列方式单独贡献了这一增益。

方法差异三:与函数调用 SFT 的阶段互补。 工具 SFT 教的是"调用格式与接口模式",技能中段训练给的是"工作流知识",两者在不同阶段提供互补信号。 → 机制变化:xLAM-FC 后训练时模型已有格式先验,能更充分利用 SPT 阶段存下的工作流知识,把"知道怎么做"转化为"按格式做对"。 → 指标提升:xLAM-FC 后训练下的 SPT 增益(11.55/16.99/24.96)系统性地大于 Tulu 3 下的增益(9.11/13.28/19.33)。

方法差异四:混合训练避免分布过窄。 30% 技能 + 70% 通用数据。 → 机制变化:通用数据提供广泛的语言与任务覆盖,充当技能工作流向多样化任务迁移的"桥梁";纯技能训练则让模型困在工具文档分布里。 → 指标提升:混合 38.60 分 vs 纯技能 22.06 vs 纯通用 15.56。

RL 阶段的因果链:GRPO 用的奖励不含工具监督,但技能阶段塑造的工作流知识已写进权重,RL 只是在其上继续优化策略——11.94 vs 7.25 的差距证明中段训练的收益不依赖特定后训练形式。


七、必要知识反推

读懂这篇论文需要(或能帮读者建立)以下知识点:

  1. 训练流程分层:预训练(大规模通用语料)→ 中段训练(精选/领域语料继续训练,含退火)→ 后训练(SFT/偏好优化/RL 教行为)。SPT 之所以选择中段而非直接 SFT,是因为中段训练用因果语言建模目标、无指令格式约束,适合吸收知识性内容。
  2. 因果语言建模:从左到右预测下一个 token。关键性质是"上文可见、下文不可见"——所以两个相关内容在序列中的距离直接决定它们能否在同一个预测窗口里互相影响,这是理解 Reference Insert 价值的前提。
  3. Agent/工具学习的数据形态:函数调用对、交互轨迹、技能说明三类的区别;轨迹生产需要环境+执行+验证,技能只需要人写。
  4. 基准去污染:训练数据里若混入评测基准的内容(哪怕改写),会造成虚高。13-gram 重叠检测 + LLM 判断是标准做法;本文剔除率 0.3% 说明结果干净。
  5. 受控对比实验设计:token 预算对齐(三个语料都精确到 347,770,880 token)、多随机种子(5 个)、多规模(1.6B/3B/7B)、多后训练配方交叉验证——这是"增益归因于数据内容而非训练量"的方法论保障。
  6. 相关基准:API-Bank(三级 API 调用评测)、MetaTool(工具选择四子任务)、APT-Bench(软件工程+深度研究两类 Agent 任务)、ToolEyes(七场景五维度交互评测)、OLMES(标准化通用能力评测协议)。

八、通用性灵感

跳出论文本身,这套思路有很广的辐射面:

  1. “人类为 AI 写的文档"是一类被低估的训练数据。 技能包、MCP 服务器的 README、API 文档、运行手册、SOP——这些是互联网上少有的"显式描述工作流"的文本。任何"人写给机器看的使用说明"都可能复用 SPT 的路线:收集→清洗→按引用关系序列化→中段训练掺入。
  2. 序列化即数据增强。 Reference Insert 的核心洞察是:多文件数据的训练价值取决于排列是否让"相关的部分"共处一个因果窗口。这个原则适用于一切多文件语料(代码仓库、文档站、数据集+描述文件):先建引用图,再按图重排。改排列零成本(内容不变),却带来 5.96 分的收益。
  3. 知识型数据放中段、行为型数据放后段。 论文证明了阶段分工的价值:中段用因果 LM 吸收"知道什么”,后训练用 SFT/RL 学"怎么做"。如果你手里有一批领域知识文档(法律条文、医学指南、公司规章),比起直接做 SFT,先做一轮领域中段训练再 SFT 可能收益更大且更抗遗忘。
  4. 配比实验提示"佐料思维"。 30% 这个甜蜜点说明定向能力数据不需要垄断训练预算——它是配方式的存在。这为"在不重训基座的前提下给现有模型加一个能力"提供了直接的操作模板。
  5. 可扩展性论证值得借鉴。 论文用 npm 技能数四个月 9.6 倍的增长论证数据供给的可持续性——做数据驱动研究时,论证"这个数据源不会枯竭"与论证"它有效"同样重要。
  6. 对"轨迹 vs 规范"的再思考。 这一结论与机器人学习中"演示 vs 语言化策略描述"的争论同构:当执行数据昂贵且低复用时,人类总结的规范可能是更便宜、更可迁移的监督源。甚至可以设想两者混训(技能做中段、轨迹做后段)的最优组合。

一句话总结:SPT 用一套干净利落的受控实验证明——把人类写给 Agent 的"使用说明书"当成预训练中段数据,配合让引用关系局部化的序列化策略,能以几乎零通用能力代价换来自 9 到 25 分的 Agent 能力提升;“说明书比录像更好教”,这是对 Agent 训练数据观的一次有力修正。