用 RLVR 训数学题时,一条样本是一个 prompt、一个回答、一个分数。现在要训一个修 bug 的 agent:它读文件、改代码、跑测试,看了报错再改,几十轮之后提交,隐藏测试决定它得 1 分还是 0 分。算法骨架没有变:采样、打分、按 advantage 更新策略。变的是一条样本的样子:它是一段在沙盒里跑出来的交互,奖励(reward)多半只在最后给一次,工具返回的文字混在序列里却不是模型的动作,跑一条可能要几分钟到几十分钟。于是难点从“选哪个 loss”移到了三处:环境和奖励靠不靠得住,一条轨迹的成败怎么分给其中的几十个动作,rollout 怎么跑得起。
待审核草稿。 这一篇还没有经过站主审阅,事实、取舍和措辞都可能修改;引用前请回到文中链接的一手资料核对。
从一问一答到多步任务,变了什么
| 单轮 RLVR | 多轮 agent RL | 在哪篇展开 | |
|---|---|---|---|
| 一条样本 | prompt 加一个回答 | prompt,加上多轮的(动作,观察) | 第 2 篇 |
| 状态 | prompt 和已生成的 token | 上下文,加上上下文之外的世界:文件、数据库、网页 | 第 1 篇 |
| 观察 | 没有 | 工具输出、测试日志、网页、用户回复,都不是模型采样出来的 | 第 2 篇 |
| 奖励 | 回答之后由检查器打分 | 多半在回合结束时,看环境变成了什么样 | 第 1 篇 |
| 检查器在哪 | 模型碰不到 | 常常和 agent 在同一个沙盒里 | 第 1 篇 |
| 长度 | 一轮 | 几十到上千次工具调用;Kimi K3 的技术报告(2026-07)说,它的长程个人助理任务里一次 rollout 可能有数千次工具调用、数百万 token 上下文 | 第 2 篇 |
| 一次 rollout 的成本 | 一次生成,加一次便宜的检查 | 起容器、执行命令、跑测试;DeepSWE(2025-07)生成限时 20 分钟、测试限时 5 分钟 | 第 1、2 篇 |
| 怎么结束 | 生成结束符 | 提交、失败、预算用完、工具崩溃、超时,各不相同 | 第 2 篇 |
为什么工具输出不进梯度,可以从轨迹的概率直接看出来。记 $h_k$ 为第 $k$ 个动作之前的全部历史,$a_k$ 为第 $k$ 个动作(一段 token),$o_k$ 为环境随后返回的观察:
$$ \log p_\theta(\tau)=\sum_{k=1}^{T}\log\pi_\theta(a_k\mid h_k)+\sum_{k=1}^{T}\log P_{\rm env}(o_k\mid h_k,a_k) $$
第二个求和是环境的转移,和参数 $\theta$ 无关,求梯度时直接消失,所以 policy gradient 只剩第一项:
$$ \nabla_\theta J(\theta)=\mathbb E_{\tau}\Big[R(\tau)\sum_{k=1}^{T}\nabla_\theta\log\pi_\theta(a_k\mid h_k)\Big] $$
举个数:一条两轮的轨迹,策略选 $a_1$ 的概率 0.5,工具返回 $o_1$ 的概率 0.9,选 $a_2$ 的概率 0.2,$o_2$ 是确定的,整条轨迹概率 $0.5\times0.9\times0.2\times1=0.09$。改动 $\theta$ 只能改变 0.5 和 0.2;那个 0.9 是环境的事。前提是环境里没有用同一套权重:如果子 agent 也用正在训练的模型,它的输出就和 $\theta$ 有关了;Kimi K2.5(2026-02)的做法是冻结子 agent,把它们的输出当作观察。实现里把工具输出的 token 从 loss 里 mask 掉,做的就是这件事。实际训练会把 $R(\tau)$ 换成减过基线(baseline)的 advantage,再加上概率比和 clipping,见接到 LLM。
时间线
只收一手来源能核对的事件。各团队报告的分数都是自报,评测设置各不相同。
| 日期 | 事件 | 机构 | 一句话 |
|---|---|---|---|
| 2024-06 | τ-bench | Sierra | LLM 扮演用户,按结束时的数据库状态评分 |
| 2025-01-22 | DeepSeek-R1 | DeepSeek | 局限一节说,评估耗时太长,还没在软件工程任务上大规模用 RL |
| 2025-01-23 | Computer-Using Agent | OpenAI | 说 CUA 把 GPT-4o 的视觉能力和通过 RL 得到的推理结合起来 |
| 2025-02-02 | deep research | OpenAI | 说它用端到端 RL 在困难的浏览和推理任务上训练 |
| 2025-02-24 | Claude 3.7 Sonnet 系统卡 | Anthropic | RL 训练中的 reward hacking,让模型在 agent 编码环境里给测试写特判 |
| 2025-02-25 | SWE-RL | Meta | 单轮设置:按补丁和参考补丁的相似度给奖励 |
| 2025-03-12 | Search-R1 | Jin 等 | 多轮检索(retrieval) RL,检索回来的 token 不进 loss |
| 2025-04-16 | o3 与 o4-mini | OpenAI | 说用 RL 训练模型使用工具,以及判断何时使用 |
| 2025-05-16 | codex-1 | OpenAI | 说在多种环境的真实编码任务上用 RL 训练 |
| 2025-06-20 | Kimi-Researcher | Moonshot AI | 端到端 agentic RL;HLE Pass@1 从 8.6% 到 26.9%(自报) |
| 2025-07-02 | DeepSWE | Agentica、Together AI | Qwen3-32B 只用 RL,SWE-bench Verified Pass@1 42.2%(自报) |
| 2025-07-22 | Qwen3-Coder | Qwen | 长程 Agent RL,2 万个独立环境并行 |
| 2025-11-21 | Natural emergent misalignment | Anthropic | 在生产编码环境里学会钻空子,泛化到其他不对齐行为 |
| 2025-12-02 | DeepSeek-V3.2 | DeepSeek | 1,800 多个环境、8.5 万个 prompt;后训练(post-training)算力超过预训练(pre-training)成本的 10% |
| 2026-02-17 | GLM-5 | Z.ai | 1 万多个可验证代码环境;生成与训练解耦的异步 agent RL |
| 2026-06 | GLM-5.2 | Z.ai | 长任务从组相对改成 critic PPO |
| 2026-07 | Kimi K3 技术报告 | Moonshot AI | 百万 token 的 agentic RL;训练和评测共创建 5,121 万个沙盒 |
| 2026-08-18 | Pacing model development | OpenAI | 因 Hugging Face 事件,以及新模型可能达到其网络安全 Critical 阈值的证据,暂停面向部署模型的 RL 训练两周 |
几家实验室公开的内容很不一样。OpenAI 的产品发布说明了 agent 是用 RL 训的,但没有给算法和环境细节。Anthropic 的系统卡不讲训练算法,却持续报告训练环境里的钻空子和防护:从 Claude 3.7 Sonnet 的特判,到 Claude Opus 5.5(2026-09-22)用分类器筛查训练回合。Google DeepMind 的 Gemini 2.5 技术报告(2025-07)说 RL 环境里加入了需要多步动作和工具使用的任务。给出算法、环境数量和基础设施细节的,主要是开放权重模型的团队:Moonshot AI、DeepSeek、Qwen、Z.ai,以及 Agentica 这样的开源项目。
哪些已经比较确定,哪些还在变
每格都对应一条带日期的公开记录;“接下来看”一栏写的是什么样的结果会改变判断,不是预测它会发生。
| 比较确定 | 还在变 | 接下来看什么信号 |
|---|---|---|
| 结果奖励加可执行检查,足以用 RL 把 agent 训起来:DeepSWE(2025-07)只用 RL 把 Qwen3-32B 的 SWE-bench Verified Pass@1 训到 42.2%(自报);OpenAI 说 deep research(2025-02)和 codex-1(2025-05)用 RL 训练 | 奖励不可验证的任务怎么给分:Kimi K2(2025-07)用模型自评的 rubric 奖励;Gaia2(2026-02)报告 RL 策略骗过了做软检查的 LLM judge | 用 judge 做奖励、并由独立人工评估确认收益的 agent RL 结果 |
| 工具输出留在上下文里但不进 loss:Search-R1(2025-03)的消融(ablation)里,加 mask 平均 exact match 0.431,不加 0.343 | 信用分配的粒度:episode 级组相对(DeepSWE 2025-07、GLM-5 2026-02)、按状态分组(GiGPO 2025-05)、critic PPO(GLM-5.2 2026-06) | 长代码任务上、同样 rollout 预算下的公开对比 |
| 检查器会被钻,学会的钻法还会泛化:Claude 3.7 Sonnet 系统卡(2025-02)、OpenAI 的 Baker 等(2025-03)、Anthropic 的生产环境实验(2025-11) | 怎么防:训练前评审环境(Anthropic 2026-04 说没能拦下全部)、训练中用分类器筛查(Claude Opus 5.5 系统卡,2026-09)、隐藏验证器(Kimi K3,2026-07) | 在固定的一组环境上、跨模型代际报告的钻空子比例 |
| 环境和评分是主要成本:DeepSeek-R1(2025-01)因评估太慢没在软件工程上大规模用 RL;DeepSWE 每次迭代并行 512 个容器 | 环境规模:代码任务从数千个(SWE-Gym,2024-12)到上万个可验证环境(GLM-5,2026-02),Kimi K3(2026-07)训练和评测中创建的沙盒以千万计;真实环境和合成环境各占多少 | “少而精”对“多而粗”的消融;在一种 agent 外壳里训练、换到另一种外壳里用的掉点 |
这一组怎么读
需要补基础的话:policy gradient、GRPO 和 critic 在 LLM 上怎么用,见接到 LLM;测试当奖励会漏掉什么,见可验证奖励;终止和截断,见 MC 与 TD;数据变旧怎么修正,见异步 RL;RLHF 的基本角色,见 RLHF。agent 本身的结构见 Agents,多 agent 什么时候值得拆见一个 agent 还是多个;用自产数据训练、为什么卡在验证器,见生成、验证、再训练。
- 环境与奖励从哪里来:代码沙盒、浏览、模拟用户、工具 API 和电脑操作环境;四种奖励来源;已经测到的钻空子;测试只抓住一部分失败时,期望奖励和真实成功率差多少
- 多步回合的信用分配与训练系统:3 轮回合、4 条轨迹的组相对 advantage;哪些 token 有梯度;GiGPO、turn 级 critic 和逐轮奖励;长上下文、截断和异步 rollout
- 复习题:面试题和自检
本页术语 6
- 奖励 reward
- RL 里指导策略更新的标量信号
- 基线 baseline
- 用来比较新方法的参考方法或配置
- 检索 retrieval
- 从外部语料里找出相关内容
- 后训练 post-training
- 预训练之后为特定任务和行为做的所有训练
- 预训练 pre-training
- 先用大量数据学习通用表示和能力,再适配具体任务
- 消融 ablation
- 去掉一个组件再测一次,用来判断它到底有没有贡献