跳到主要内容

第 3 章:三段式课程训练

前两章讲的「会一边想一边写代码执行」这套本能不是天生的,是训出来的。本章按 scripts/ 下三个脚本和 DataScience-Instruct-500K 数据的分桶,讲这条课程线。

3.1 总览:从基本功到 agent

加词表(add_vocab.py)注入 5 个标签 token


① 单能力 SFT scripts/single.sh
短上下文(max_length 8192)、大 batch、lr 5e-5
打「会推理 / 会写 SQL / 会读各类文件」的基本功


② 多能力冷启动 SFT scripts/multi_coldstart.sh
长上下文(max_length 32768)、小 batch、lr 5e-6
学「交错的 <Analyze><Code><Execute>」完整 agent 轨迹


③ GRPO 强化学习 scripts/multi_rl.sh
真执行代码、多分量奖励、在线 rollout(见 04 章)


DeepAnalyze-8B

直觉:先在简单短任务上学会「字」,再在长任务上学会「连成段落的 agent 轨迹」,最后用 RL 让它在真执行反馈下把策略磨好。这是典型的由易到难课程学习(curriculum learning)。

3.2 阶段 ①:单能力 SFT(打基本功)

脚本 scripts/single.shms-swiftswift sft 做全参数微调。关键超参:

超参含义
max_length8192短上下文,单步任务够用
per_device_train_batch_size8batch 较大
learning_rate5e-5较大学习率,快速打基础
num_train_epochs3三轮

数据是 reasoning/ 桶(single.sh 列了 13 个文件),按能力切分:

  • 表格推理:SKGInstruct_199989.json(近 20 万条,最大头)、TableQA_distillation/refinementTableGPT
  • 按文件类型读数据:file_databasefile_csvfile_xlsxfile_any
  • 通用底子:math_20000code_20000science_20000instruction_following_20000other

这一阶段还没有 agent 循环,是教模型分别会「读 CSV」「写 SQL」「做表格 QA」「跟指令」。

3.3 阶段 ②:多能力 agentic 冷启动 SFT

脚本 scripts/multi_coldstart.sh,同样 swift sft,但超参明显转向「长、慢、稳」:

超参① 单能力② 冷启动为什么变
max_length819232768agent 轨迹很长(多轮 Code/Execute)
per_device_train_batch_size81长序列吃显存
gradient_accumulation_steps432用累积补回有效 batch
learning_rate5e-55e-6小步精修,别破坏已有能力

数据换成 interation/ 桶(注:目录名拼写如此),都是完整 agent 轨迹——名字直接对应能力:data_pipelinedata_preparationdata_cleaningdata_analysisdata_insight,以及一批 research_*(research_database / research_xlsx / research_other / research_report_generation 等)。

「冷启动(cold start)」这个词是 RL 行话:在跑昂贵的 RL 之前,先用 SFT 让模型已经会按格式产出像样的 agent 轨迹,这样 RL 起步时 rollout 不至于全是垃圾、奖励信号才有意义。

3.4 阶段 ③:GRPO 强化学习

脚本 scripts/multi_rl.sh,跑的是 SkyRL 里的 examples.deepanalyze.main_deepanalyze。核心配置:

  • 算法:trainer.algorithm.advantage_estimator="grpo" —— GRPO(Group Relative Policy Optimization,组内相对优势,DeepSeek 系常用,省掉 critic)。
  • 每个 prompt 采样:generator.n_samples_per_prompt=5 —— 一题采 5 条轨迹,组内比相对好坏算优势,这正是 GRPO 的做法。
  • 真执行:generator.max_turns=30,在线让模型 rollout、真跑代码、按结果给奖励。
  • 采样:temperature=0.0top_p=0.95stop_token_ids=[151676, 151645](对应某个闭标签 + <|im_end|>)。
  • 数据:RL/qa.parquetRL/datatask.parquetRL/reseach.parquet(reseach 拼写如此)——对应三类奖励方式(见 04 章)。

奖励怎么算是 RL 阶段最有料的部分,单独放在下一章。

3.5 数据三桶一览

DataScience-Instruct-500K(50 万条)按训练阶段分三桶:

用在哪内容形态
reasoning/① 单能力 SFT单步问答 / 单能力样本
interation/② 冷启动 SFT完整 agent 轨迹(交错标签)
RL/(parquet + data.zip)③ GRPO题目 + ground truth + 工作目录数据

3.6 关键细节 / 坑

  • 训练框架是两个 vendored 仓库:SFT 用 ms-swift(modelscope),RL 用 SkyRL(NovaSky-AI),都整包塞进 deepanalyze/ 下。DeepAnalyze 自己只写了 SkyRL 的一个自定义 env(examples/deepanalyze/),其余是上游框架。
  • 建议推理/训练环境分开:README 明说两套依赖会冲突,推理只需 torch/transformers/vllm
  • 可跳过加词表直接基于 8B 微调:若直接拿已发布的 DeepAnalyze-8B 继续训,标签已在词表里,不必再跑 add_vocab.py

3.7 代码地图

主题文件锚点
单能力 SFTscripts/single.shswift sft + reasoning/*.json
冷启动 SFTscripts/multi_coldstart.shinteration/*.jsonmax_length 32768
GRPO RLscripts/multi_rl.shadvantage_estimator=grpon_samples_per_prompt=5
RL 入口deepanalyze/SkyRL/skyrl-train/examples/deepanalyze/main_deepanalyze.pyskyrl_entrypointregister(id="deepanalyze")
加词表deepanalyze/add_vocab.pymain