Cookbook 在 TCRL SDK 之上提供了更高层的抽象——SDK 提供原始操作(
forward_backward、optim_step、sample),Cookbook 提供可配置的训练管线,自动处理流水线、checkpoint、评测和日志。SFT:通过
train.Config 一行配置即可运行完整的监督微调循环RL:通过
Env + EnvGroupBuilder + RLDataset 组合出完整的 RL 训练流程DPO:通过
Comparison / LabeledComparison 进行偏好学习Cookbook 安装
uv pip install tinker==0.12.0
注意:
export TINKER_API_KEY="your-api-key-here"export TINKER_BASE_URL="http://api.tencenttcrl.com/"
可选扩展:
[math-rl]、[modal]、[wandb]、[cloud]、[inspect]、[all]。
Cookbook 认证
tinker auth login
如需使用 nightly 构建版本:
uv pip install 'tinker-cookbook @ git+https://github.com/thinking-machines-lab/tinker-cookbook.git@nightly'
如需在本地开发,或按自己的需求定制方案:
git clone https://github.com/thinking-machines-lab/tinker-cookbook.gitcd tinker-cookbookuv pip install -e .
Cookbook 在 Tinker SDK 之上提供了更高层的抽象。SDK 提供的是底层操作(
forward_backward、optim_step、sample),而 Cookbook 提供的是可配置的训练流水线,会自动处理流水线并行、检查点保存、评测和日志记录。使用 Cookbook 做 SFT
使用 SDK 时,SFT 循环需要在循环中手动依次调用
forward_backward → optim_step → save_state。Cookbook 把这些封装进一个 train.Config:DatasetBuilder定义数据 → train.Config模型、学习率、rank → train.main()流水线化循环 → 检查点 + 指标
1. 定义数据:实现一个返回按批组织
Datum 对象的 SupervisedDatasetBuilder2. 配置训练:设置模型、学习率、LoRA rank、检查点保存计划
3. 运行:
train.main(config) 负责整个循环from tinker_cookbook.supervised import trainfrom tinker_cookbook.supervised.types import ChatDatasetBuilderconfig = train.Config(log_path="~/logs/my-sft-run",model_name="Qwen/Qwen3-8B",dataset_builder=my_dataset_builder,learning_rate=1e-4,lora_rank=32,save_every=20,eval_every=10,)asyncio.run(train.main(config))
在底层,
train.main 会创建 TrainingClient,将 forward_backward + optim_step 流水线化以提升吞吐,运行评测器并保存检查点。完整的组件图参见 SL 架构概览。使用 Cookbook 做 RL
RL 比 SFT 更复杂,因为它涉及一个 rollout 循环:从模型中采样,用奖励函数打分,然后在打分后的轨迹上训练。Cookbook 把这些抽象成可组合的类型:
RLDatasetget_batch() → EnvGroupBuildermake_envs() → Envrollout → 奖励 + 优势 → forward_backward 训练 → 重复
1. 定义环境:实现
Env(问答任务可用 ProblemEnv)来产生奖励2. 对环境分组:
EnvGroupBuilder 按批创建环境(GRPO 会在组内对奖励做中心化)3. 定义数据集 :
RLDataset 产生按批组织的 EnvGroupBuilder4. 运行:训练循环负责 rollout、优势计算和权重更新
最简单的起点是
ProblemEnv,一个单轮问答环境:from tinker_cookbook.rl.problem_env import ProblemEnvclass MathEnv(ProblemEnv):def get_question(self) -> str:return "What is 2 + 3?"def check_answer(self, response: str) -> float:return 1.0 if "5" in response else 0.0
偏好学习(DPO / RLHF)
偏好学习用成对比较而非标量奖励来训练模型:
1. 构造比较样本:
Comparison 对象包含同一提示词下的两个补全(A 和 B)2. 标注偏好:
LabeledComparison 增加人类偏好标注(A、B 或平局)3. 用 DPO 训练 :直接基于偏好数据优化策略
from tinker_cookbook.preference.types import Comparison, LabeledComparisoncomparison = Comparison(messages=messages, completion_a=resp_a, completion_b=resp_b)labeled = LabeledComparison(**comparison.__dict__, label=1) # B preferred
后续步骤
SL 架构:监督学习的完整组件图
RL 架构:强化学习的完整组件图
教程:交互式 Notebook