帮你快速理解、总结文档立即下载

概述

最近更新时间:2026-10-19 21:18:03
我的收藏
Reinforcement Learning(强化学习) 即从试错中学习。您不再提供输入-输出对,而是提供提示词和奖励函数,由算法自行发现好的输出。

架构

RLDataset
├── get_batch(index) → list[EnvGroupBuilder]
└── __len__() → number of batches

EnvGroupBuilder
├── 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 aggregation

Env (stateful, one per episode)
├── initial_observation() → (Observation, StopCondition)
└── step(action, extra) → StepResult
├── reward: float
├── episode_done: bool
├── next_observation
└── metrics / logs

Trajectory = list[Transition(ob, ac, reward, episode_done)]
TrajectoryGroup = list[Trajectory] + final_rewards + metrics

核心组件

Env

面向单个 episode 的有状态环境。用完即弃。
from tinker_cookbook.rl.types import Env, StepResult

class 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.0
return StepResult(reward=reward, episode_done=True, ...)

ProblemEnv

面向单轮问答任务的便捷基类:
from tinker_cookbook.rl.problem_env import ProblemEnv

class 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 EnvGroupBuilder

class 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 advantages
advantages = compute_advantages(trajectory_groups, loss_fn="cispo")

# Convert to Datum objects for forward_backward
training_data = assemble_training_data(trajectory_groups, advantages, ...)

Rollout 策略

控制 rollout 期间的错误处理:
策略
行为
FailFast
遇到第一个错误就停止
RetryOnFailure
重试失败的轨迹,部分成功也继续

训练循环

RL 训练循环:
1. 从 RLDataset 采样一批 EnvGroupBuilder
2. Rollout:对每个组创建环境、采样补全、收集奖励
3. 计算优势:在组内对奖励做归一化(GRPO)
4. 训练更新:用 rollout 数据执行 forward_backward + optim_step
5. 评测并保存检查点

后续步骤

RL 训练循环:最小化的 GRPO 循环实现
RL 环境:构建自定义环境
RL 超参数:KL 惩罚、优势、奖励 shaping
教程:第一个 RL:交互式演练