Reinforcement Learning(强化学习) 即从试错中学习。您不再提供输入-输出对,而是提供提示词和奖励函数,由算法自行发现好的输出。
架构
RLDataset├── get_batch(index) → list[EnvGroupBuilder]└── __len__() → number of batchesEnvGroupBuilder├── make_envs() → list[Env] create environments for this group├── compute_group_rewards(trajs, envs) final reward using the whole group├── cleanup() release resources (sandboxes, etc.)└── logging_tags() tags for metric aggregationEnv (stateful, one per episode)├── initial_observation() → (Observation, StopCondition)└── step(action, extra) → StepResult├── reward: float├── episode_done: bool├── next_observation└── metrics / logsTrajectory = list[Transition(ob, ac, reward, episode_done)]TrajectoryGroup = list[Trajectory] + final_rewards + metrics
核心组件
Env
面向单个 episode 的有状态环境。用完即弃。
from tinker_cookbook.rl.types import Env, StepResultclass MyEnv(Env):async def initial_observation(self):prompt = renderer.build_generation_prompt([{"role": "user", "content": self.question}])return prompt, renderer.get_stop_sequences()async def step(self, action, *, extra=None):response = renderer.parse_response(action)reward = 1.0 if check_correct(response) else 0.0return StepResult(reward=reward, episode_done=True, ...)
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
EnvGroupBuilder
构建一组环境。分组可以支持奖励中心化(GRPO)与多智能体配置。
from tinker_cookbook.rl.types import EnvGroupBuilderclass MyGroupBuilder(EnvGroupBuilder):async def make_envs(self) -> list[Env]:return [MyEnv(q) for q in self.questions]# Optional: compute group-level rewards (default: 0)async def compute_group_rewards(self, trajs, envs):return [(0.0, {}) for _ in trajs]
内置:
ProblemGroupBuilder 通过工厂函数构建由 ProblemEnv 实例组成的组。RLDataset / RLDatasetBuilder
为训练循环产出成批的
EnvGroupBuilder。from tinker_cookbook.rl.types import RLDataset, RLDatasetBuilder
数据处理
rollout 之后,把轨迹转换成训练数据:
from tinker_cookbook.rl.data_processing import compute_advantages, trajectory_to_data, assemble_training_data# Compute GRPO-style advantagesadvantages = compute_advantages(trajectory_groups, loss_fn="cispo")# Convert to Datum objects for forward_backwardtraining_data = assemble_training_data(trajectory_groups, advantages, ...)
Rollout 策略
控制 rollout 期间的错误处理:
策略 | 行为 |
FailFast | 遇到第一个错误就停止 |
RetryOnFailure | 重试失败的轨迹,部分成功也继续 |
训练循环
RL 训练循环:
1. 从
RLDataset 采样一批 EnvGroupBuilder2. Rollout:对每个组创建环境、采样补全、收集奖励
3. 计算优势:在组内对奖励做归一化(GRPO)
4. 训练更新:用 rollout 数据执行
forward_backward + optim_step5. 评测并保存检查点
后续步骤
RL 训练循环:最小化的 GRPO 循环实现
RL 环境:构建自定义环境
RL 超参数:KL 惩罚、优势、奖励 shaping
教程:第一个 RL:交互式演练