这是个很值得分析清楚的问题。任务分解能力并不是某一天突然"装进"模型的,它来自预训练埋下的种子、后训练的显式塑造、推理时脚手架的放大三个层次的叠加。可以把它理解为一条"形成链条":
1. 预训练:能力的原材料(潜伏来源)
任务分解的"底料"是预训练语料里海量存在的分解性文本结构:
- 代码:程序本身就是分层的------函数调用子函数、模块组合成系统。模型在学代码时反复看到"大目标被拆成小步骤再组合"的模式,这被认为是分解能力最重要的来源之一;
- 教程/文档/书籍:操作手册、"步骤 1、2、3"、数学证明的分步推导、论文的章节结构;
- 问答社区:Stack Overflow 里"先做这个、再做那个"的回答模式。
预训练阶段模型只是学会了模仿这种文本模式 ------它能续写出"看起来像在分解"的文字,但此时还没有"为了达成目标而规划"的意图。这一步形成的是潜在能力(latent capability):模型内部已经编码了"目标 → 子目标序列"的映射统计规律,只是没被激活为可控行为。
2. 后训练:把潜伏能力变成可用行为
1. 指令微调(SFT) :用人工或合成的"任务 → 分解方案"配对数据训练,比如"策划一场活动 → ①定预算 ②选场地 ③发邀请......"。这一步教会模型在收到指令时主动输出分解,而不是等文本自然流出来。开源社区的 self-instruct / evol-instruct 类合成数据里大量包含这种多步任务样本。
2. 思维链(CoT)类数据的训练 :把"先一步步想、再给答案"的推理轨迹直接放进 SFT 数据,模型学会的不仅是格式,更是"先拆解、再执行"的行为先验。
3. 可验证奖励的强化学习(RLVR) :这是近几年最关键的一步。当分解方案的对错可以通过环境验证(代码跑通、数学答案正确、游戏通关)时,RL 会直接奖励有效的分解路径 、惩罚无效分解。模型因此学到的不只是"像分解",而是"什么样的分解真的有用"------比如"先定位相关文件、再改代码"比"直接改代码"成功率高,这个策略就会被强化。长链推理模型(o 系列、R1 类)的"自我规划、自我纠错"行为主要就是这一步训出来的。
4. Agent 轨迹 SFT :用完整的"目标 → 子任务 → 工具调用 → 观察 → 调整"轨迹微调,让分解和行动绑定------分解出来的每一步必须是可执行、可验证的,而不是空话。
3. 推理时脚手架:能力的放大器
即使模型本身能力固定,外部框架也能显著放大分解表现:
- 提示工程:few-shot 示例、"Let's think step by step"、least-to-most prompting------本质是把预训练里的分解模式"钓"出来;
- 规划模块:Planner-Executor 架构、tree-of-thought、任务队列(如 BabyAGI 模式),把分解外化成显式结构;
- 工具反馈闭环 :每步执行结果回流给模型,使分解可以动态修正------这是 ReAct 式循环相对静态 CoT 的核心优势:计划不再是一次性的,而是滚动更新的。
4. 几个关键机制小结
| 层次 | 形成机制 | 贡献 |
|---|---|---|
| 预训练 | 代码+分步文档的模式学习 | 潜伏的分解"模板库" |
| SFT | 指令→分解 配对数据 | 让分解成为主动行为 |
| RLVR | 分解路径的成败可验证 | 学会"有用"的分解而非"像样"的分解 |
| 轨迹训练 | 分解与工具调用绑定 | 分解产出可执行步骤 |
| 推理脚手架 | 提示、规划器、反馈闭环 | 放大与修正 |
5. 值得注意的两个认知
-
规模阈值:分解能力有明显的涌现特征------小模型给同样的 CoT 提示几乎不受益,参数过某个规模后分解质量才陡增。这不是玄学,而是因为长距离依赖(总目标约束第 7 步的子动作)需要足够的模型容量来建模。
-
"分解"和"推理"是同一枚硬币 :CoT 是事后解说式 的分解(把答案的推导拆碎),agent 的任务分解是事前规划式的分解(把目标的执行拆碎)。两者共享同一套底层能力,所以能看到强推理模型的 agent 表现普遍更好------o1/R1 类模型出现之后,各家的 agent 基准分数普遍跳涨,就是这个因果关系的直接体现。
6. 总结
预训练提供了"见过无数种分解方式"的经验库,SFT 把它变成习惯,RL 用成败反馈把它磨砺成策略,agent 框架则在运行时给它配上手和眼睛。 少了任何一环,分解能力都会打折扣------只有底座没有 RL,分解是花架子;只有框架没有强底座,分解出来的步骤根本执行不动。
7. 扩展:LLM 的 SFT
SFT(Supervised Fine-Tuning,监督微调)。这里会按"是什么 → 数据怎么造 → 怎么训 → 在 agent 场景下的特殊形态 → 常见坑"的顺序展开。
7.1. SFT 在做什么:本质
预训练模型(base model)只会一件事:续写。你给它"如何泡一杯咖啡",它可能续写出另一个问题"如何泡一杯茶"------因为它只是在模仿网页文本的分布。
SFT 的目的就是行为改造 :用"指令 → 理想回答"的配对数据继续训练,把"续写器"变成"执行者"。技术上它和预训练没有任何区别------同样的交叉熵损失、同样的下一个 token 预测------唯一的差别在数据 :不再是整段无结构文本,而是精心构造的 <输入, 目标输出> 对。
7.2. 训练流程的技术细节
1. 数据格式(chat template)
每条样本被组织成多轮对话,套上特殊 token:
<|system|>你是一个编程助手<|user|>帮我拆分这个任务:......<|assistant|>第一步......第二步......
2. Loss masking(最关键的工程细节)
训练时只在 assistant 的输出部分计算损失,system 和 user 部分的 token 被 mask 掉(loss 权重设为 0)。原因很直觉:你不想训练模型去"学会提问",只想让它学会"给定问题如何回答"。漏掉这一步是新手最常犯的错误,会导致模型学会自言自语地编造用户问题。
3. 训练超参的惯例
- 全参数 SFT 通常用很小的学习率(1e-5 ~ 2e-5 量级,比预训练小一个数量级),1-3 个 epoch;
- 数据量层面存在著名的少即是多 现象(LIMA 论文):几千条高质量样本就能让底座模型行为大幅对齐,但多样性比数量重要------任务类型覆盖越广越好;
- 参数高效方案:LoRA/QLoRA 只训低秩矩阵,成本低但容量有限,做 agent 能力注入时够用,做深层能力改造时不如全参。
7.3. 数据从哪来(决定上限的环节)
SFT 的配方 90% 是数据工程。主要来源:
1. 人工标注:质量最高、最贵。OpenAI 早期 InstructGPT 的 SFT 阶段大约用了 1.3 万条人工写的示范。
2. 模型合成(当前主流):
- Self-Instruct:让一个强模型自己生成指令和回答,冷启动出数据集;
- Evol-Instruct:对已有指令不断"加深复杂度"演化(加约束、加步骤、加推理深度);
- OSS-Instruct(代码领域):从真实开源代码片段反向生成题目和解答,保证分布贴近真实。
3. 蒸馏强模型:用 GPT-4 级模型的输出去训小模型。便宜高效,但有天花板------学生很难超过老师,且会继承老师的错误风格。
4. 拒绝采样(Rejection Sampling / RFT) :让模型对同一任务采样多个回答,用可验证标准(单测通过、答案正确)筛出好的,再拿这些"模型自己产出的好样本"回去 SFT。这一步已经是 SFT 和 RL 的过渡地带------Llama、DeepSeek 的做法里都有它。
7.4. Agent 场景下的 SFT:轨迹微调
回到你上一个问题的语境------要训出"会分解任务"的 agent,SFT 的数据不是单轮问答,而是完整的多轮轨迹:
系统: 你可以使用 search/lookup/finish 三个工具
用户: 科罗拉多造山运动东部延伸区域的海拔范围?
助手: 思考: 我需要先搜索科罗拉多造山运动......
动作: search[Colorado orogeny]
环境: 观察: 科罗拉多造山运动是......(工具返回)
助手: 思考: 没提到东部区域,我要 lookup......
动作: lookup[eastern sector]
环境: 观察: 东部区域延伸进入高平原......
助手: ......
动作: finish[1800到7000英尺]
这就是 ReAct 论文里那种轨迹。训练要点:
- 环境返回部分也要 mask 掉损失------只学 assistant 的思考与动作,不学环境输出;
- 轨迹必须端到端成功才入库(或至少用结果加权),否则模型学到的是"失败的动作序列";
- 数据来源通常是:强模型 + 真实环境交互 + 结果过滤(STaR / 自举思路------模型先生成轨迹,只保留任务成功的那部分,再微调自己),SWE-Gym、SWE-smith 这类流水线就是干这个的;
- 轨迹 SFT 教给模型的核心不是知识,而是行为模式:先分解目标、每步行动前显式思考、根据观察修正计划、知道何时收手。
7.5. SFT 的边界和常见坑
| 问题 | 表现 | 对策 |
|---|---|---|
| 模仿上限 | 学生超不过数据质量,"学形不学神" | 拒绝采样筛数据;后接 RL |
| 灾难性遗忘 | 行为对齐了,通用能力下降 | 混入通用数据、控制学习率和 epoch |
| 分布外脆弱 | 换个工具格式/环境就崩 | 数据里覆盖多环境、多工具、多格式 |
| 幻觉式分解 | 分解出"看起来合理但无法执行"的步骤 | 用真实执行结果过滤轨迹,而非只看文本合理性 |
| 过拟合表面格式 | 学会"思考:"的壳,内容空洞 | 检查轨迹中思考与实际动作的一致性 |
最核心的认知 :SFT 本质是行为克隆------它能把"好的行为模式"高效率地复制给模型,但它没有自己的判断力。数据里分解得好,它就分解得好;数据里有系统性错误,它会放大这些错误。所以现代 pipeline 几乎都是"SFT 打底(学会格式和基本行为)→ RL 增强(用可验证奖励学会真正的策略)":SFT 解决"会不会",RL 解决"好不好"。
7.6. 总结
SFT 是用"标准答案的示范"做行为克隆,工程成败几乎全在数据质量、loss masking 和轨迹真实性上;它能把潜伏能力快速激活成可用行为,但要让行为真正"聪明",还得靠后面的 RL 用成败反馈来磨。