【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (2)--- On-Policy Distillation
本系列专题自开篇以来,核心主线始终是一条清晰线索:借助对 OpenClaw-RL 源码的深入拆解,将强化学习中的关键概念与设计思想阐释透彻。因此,文章中会频繁穿插基础知识的延伸与发散,而 OpenClaw-RL 本身仅是作为切入载体。此外,考虑到整个系列具有较强的连贯性,同一个概念可能在不同篇目中反复出现——这并非刻意凑数,而是希望从多个维度帮助读者深入理解。还望各位读者海涵。
OpenClaw-RL 是一个面向在线强化学习的训练框架,专为解决智能体工具使用场景下的训练难题而设计。其核心思路是从环境反馈中提取过程奖励信号,用以训练语言模型,并支持以下三种主要模式:
- openclaw-rl:基于二元奖励的强化学习(Binary RL / GRPO)
- openclaw-opd:基于后见之明提示的在线策略蒸馏(On-Policy Distillation, OPD)
- openclaw-combine:联合方法,在同一 PPO 更新中同时利用 RL 奖励和 OPD 教师信号
闲言少叙,我们直接进入正题。
0x01 On-Policy Distillation
在整个架构体系中,OPD 是最深入、最具辨识度的核心设计。想要理解该框架为何有效,从它入手是最直截了当的途径。
On-Policy Distillation(策略内蒸馏 / 同策略蒸馏)本质上是强化学习与知识蒸馏相融合的训练范式。其核心思路是:让学生模型在自己实际生成的轨迹上进行学习,同时由教师模型提供逐步骤的密集监督信号。这样一来,既保留了传统 RL “贴合自身分布” 的优势,又吸收了监督蒸馏 “高效学习” 的长处。
1.1 核心定位:解决传统方法的两难困境
传统 RL 和离线知识蒸馏各自存在硬伤,而 OPD 的出现正是为了打破这一困境。下表清晰呈现了各方法的特点:
| 方法 | 样本来源 | 反馈信号 | 核心优势 | 致命缺陷 |
|---|---|---|---|---|
| 标准 RL(PPO) | On-Policy(学生自生成) | 稀疏(最终奖励) | 贴合自身策略、探索有效 | 反馈稀疏、训练极慢、成本高 |
| 离线蒸馏(SFT) | Off-Policy(教师生成) | 密集(逐 token) | 学习高效、收敛快 | 分布偏移、学生易“纸上谈兵”、难泛化 |
| On-Policy Distillation | On-Policy(学生自生成) | 密集(逐 token) | 兼顾贴合自身 + 高效学习 | 需维护教师模型、计算成本略增 |
1.2 通俗类比
用学棋来打比方或许更直观:
- RL:自己下棋,只知道最终输赢,并不清楚哪步出错,全靠自己摸索。
- 离线蒸馏:只看大师棋谱,照搬套路,却并未真正理解自己所面对的棋局。
- OPD:自己下棋的同时,大师在一旁实时点评,每步棋都给出具体建议。错了立刻指正,还能提供正确示范。学习效率自然大幅提升。
拿做题来说:普通 RL 就像老师只给出“对”或“错”的判断,面对错题只能自己琢磨错误点。而 OPD 就像老师不仅告知“5-2=3”才是正确答案,还会额外提醒一句:“记住,吃了东西要用减法,下次遇到‘用了、花了’这类词,第一时间想到减法。”——这种“事后聪明”的提示,正是所谓的“后见之明”。
1.3 持续学习中的知识注入与能力保持困境
构建能持续进化的智能系统,核心挑战在于平衡“可塑性”与“稳定性”。模型既要吸收新知识,又不能遗忘原有能力。而 SFT 和 RL 在这条路上各自存在短板。
SFT 的激进制与灾难性遗忘。监督微调本质上是离策略学习——强迫模型去拟合由外部数据定义的分布。这相当于将模型参数强行拉向一个全新的局部最优解,极易破坏先前习得的通用知识结构。结果是:新知识得以注入,旧能力却随之丧失。经典的“学新忘旧”现象。
RL 的保守性与样本效率瓶颈。相比之下,RL 通常更为稳定。因为它在自己认知边界内探索优化,天然限制了行为偏离原始能力的范围。但问题在于 RL 依赖稀疏奖励信号,训练过程计算成本高、样本效率低。面对大量新知识需快速注入的场景,显得力不从心。
SFT 倾向于改写模型,RL 则更善于唤醒模型。改写需要谨慎小心,而唤醒则天然安全。
| 维度 | SFT | RL |
|---|---|---|
| 学什么 | 每 token 模仿固定 y | 在自己的输出空间里挑好答案 |
| 泛化机制 | 靠数据多样性外推 | 靠信息瓶颈 + 流形采样内推 |
| 遗忘控制 | 无显式机制 | KL 锚点 + clip + on-policy |
| 失败模式 | 过拟合、暴力位移 | reward hacking、采不到目标解 |
训练分布不同:off-policy VS on-policy。SFT 属于 off-policy,模型从未自己生成过训练轨迹,这直接导致两个问题:Exposure bias(训练时前缀永远是 ground truth,推理时前缀却是自己的输出——分布偏移)和 Catastrophic forgetting(强行拟合外来分布,权重大幅偏移,已有能力被挤压消失)。而 RL 是 on-policy,模型只在自己当前能产出的轨迹中挑选数据,权重不会被拽离原始流形。换言之,RL 的更新本质上是重新加权已有能力,而非注入新映射。
目标函数本质不同:模仿 VS 偏好。SFT 的目标是强匹配,要求模型在每个 token 上复刻训练数据。但问题在于数据集中的只是众多可行解中的一条特定路径,SFT 不区分“答案正确”和“表达方式”,任何与标准答案不同的输出都被视为错误。因此它本质上是行为克隆,必然倾向记忆而非抽象。RL 的目标则弱得多:模型可以采用任何路径到达高 reward,区别只在于路径之间的相对优劣。
KL 约束 + 重要性采样:天然的“防遗忘锚点”。PPO/GRPO 等 on-policy RL 算法都带有 clip 和 KL 惩罚,这两个机制天然抑制遗忘。clip 限制单步更新幅度,KL 惩罚直接将策略拉回参考模型。但 SFT 没有任何与原分布的距离约束,loss 为零时它仍然可能偏离原始分布十万八千里。这就是为什么 SFT 上一个新领域会导致老领域大幅退化,而 RL 上一个新任务,老能力基本保留。
OPD:一种融合稳定与高效的协同范式。理解了上述矛盾,就能明白 OPD 的价值所在。它将 RL 的稳定性与 SFT 的高效性拼接在一起。具体做法是:先让学生用自己的策略生成轨迹,然后教师并非在一个静态数据集上指导,而是在学生实际访问到的状态上提供逐 token 的监督信号。这样既继承了 RL 的稳定性(因为监督信号基于学生自身的在线策略,参数空间不会剧烈偏移),又提升了效率(教师提供密集信号,避免盲目探索)。
简单而言,OPD 通过将对齐过程锚定在学生实时策略上,找到了知识吸收效率与能力保持之间的更优平衡点。这不仅是技术改进,更代表了一种新思路:与其强行施加外部标准,不如引导模型在自己能力边界内进行自我修正与扩展。
1.4 核心原理与数学形式
核心流程分为三步闭环:
- On-Policy 采样:学生模型基于输入 x 生成完整序列 y。
- 教师密集评估:教师模型对生成的每一步输出概率分布。
- 反向 KL 优化:学生最小化与教师在自身生成轨迹上的反向 KL 散度。
这里有一个关键点:反向 KL 优化侧重让学生在自己容易犯错的地方贴近教师,抑制低概率错误,稳定性更强。
与 RL 的理论等价性。实际上,OPD 本质上就是一个带密集隐式奖励的 KL 正则化 RL。奖励就是教师对每一步的 log 概率,标准 OPD 约束将奖励和 KL 正则项权重固定为 1:1。
1.5 关键技术变体与演进
G-OPD(广义 On-Policy Distillation)。突破了标准 OPD 的 1:1 约束,引入奖励缩放因子和灵活参考模型。当奖励缩放因子大于 1 时,学生甚至可能超越教师性能。以教师预训练基模型作为参考,可进一步提升蒸馏稳定性。
OPCD(On-Policy Context Distillation)。面向大模型上下文学习,让学生内化上下文知识。学生不带上下文生成输出,教师带上下文评估,然后学生匹配上下文感知的教师分布。
SDPO(Self-Distilled Policy Optimization)。自我蒸馏,不需要外部教师,而是用模型自身历史上的优策略作为教师,实现闭环自我迭代。
1.6 核心优势
- 效率革命:训练成本降至传统 RL 的 1/10,收敛速度提升 10 倍。
- 分布对齐:在学生自身分布上学习,无分布偏移,泛化性强。
- 稠密反馈:逐 token 监督,精准定位错误,信用分配难题被直接绕过。
- 稳定可靠:Reverse KL 与 On-Policy 采样相结合,训练过程极其稳定,不掉点。
- 小模型利器:8B 小模型可高效继承 70B 大模型能力,低成本部署不再是梦想。
1.7 与 DPO/PPO/KD 的核心区别
- VS PPO:OPD 提供密集奖励,PPO 则是稀疏奖励;OPD 收敛更快更稳。
- VS 离线 KD:OPD 是 On-Policy(学生自生成),KD 是 Off-Policy(教师数据);OPD 无分布偏移。
- VS DPO:DPO 基于偏好排序,OPD 基于教师完整分布;OPD 监督更密集,信息更丰富。
为更直观地对比,下表从 7 个维度进行梳理,训练效率以 ★ 表示:
| 对比维度 | OPD | PPO | DPO | 离线 KD |
|---|---|---|---|---|
| 核心定位 | RL+KD 融合,学生自实践 + 教师实时指导 | 经典 On-Policy RL,纯策略自我迭代 | 偏好对齐 RL,用偏好替代奖励 | 纯监督蒸馏,照搬经验 |
| 样本来源 | On-Policy | On-Policy | Mix-Policy | Off-Policy |
| 监督信号 | 密集逐步 | 稀疏最终 | 成对偏好 | 密集逐步 |
| 损失核心 | Reverse KL,聚焦纠正自身错误 | 裁剪优势 + KL 正则 | 偏好损失,最大化优选 | KL 散度 / MSE |
| 关键优势 | 兼顾对齐 + 效率,无分布偏移 | 稳定性最优,纯自主探索 | 免手动设计奖励,易落地 | 训练效率最高 |
| 核心缺陷 | 需维护教师,计算成本略增 | 奖励稀疏,周期长 | 监督信息稀疏,粒度粗 | 分布偏移,泛化性差 |
| 训练效率 | ★★★★ | ★★ | ★★★ | ★★★★★ |
| 适配场景 | LLM 精细对齐,小模型高效训练 | 复杂动态环境,纯策略探索 | 大模型人类偏好对齐 | 小模型冷启动,静态任务 |
1.8 小结
On-Policy Distillation 已成为当前大模型与强化学习融合的主流高效范式。其核心在于“学生自主实践 + 教师实时点评”,完美解决了效率与性能的平衡问题,是训练高性能低成本小模型的首选技术。
0x02 Hindsight-Guided On-Policy Distillation
本节内容部分参考了普林斯顿那篇思路文章。
2.1 理解难点识别
要理解这篇论文,关键在于弄清楚:如何将自然语言反馈转化为模型能处理的梯度更新信号。其中最具挑战的部分是后见之明引导的同策略蒸馏(Hindsight-Guided OPD)。传统 RLHF 只能给出标量总分,但 OPD 能精确到每一个 token 的修改方向。这也是为什么 OPD 机制是整个文章中最需要重点阐释的概念。
2.2 实际信号
OpenClaw-RL 关注的是一个非常贴近真实部署的问题:agent 在线运行时,每一步交互后自然产生的 next-state signal,能否直接回收用作训练信号?这里的 next state 可以是多种形式:用户下一句回复、工具执行结果、终端输出、GUI 状态变化、SWE 环境中的测试结果或报错 trace。传统系统通常只把这些信息作为下一轮推理的上下文,但 OpenClaw-RL 的核心观察是:它们天然包含对上一步动作的监督信息,而且是“免费”的。
具体而言,OpenClaw-RL 将 next-state signal 拆分为两类:
- Evaluative signal:评价“这一步做得好不好”。例如,用户重新追问意味着上一轮回答未解决问题,测试通过表示修改有效,命令报错则预示失败。
- Directive signal:指导“这一步应该怎么改”。例如,用户说“你应该先检查文件再编辑”,或者环境返回的错误信息暴露了 bug 类型和位置。
前者最适合转化为标量 reward 供 RL 使用,后者更适合转化为 token-level 的方向性监督供 OPD 使用。因此,OpenClaw-RL 的意义不仅在于提出了一个 OPD 变体,更在于同时回收了 next-state 中原本混杂的两类监督信息。
2.3 具体实现
目标。将指导性下一状态信号转化为 token 级方向性监督信号。OPD 的核心洞察是:如果将原始提示与从 next state 中提取的文本提示相结合,同一模型将产生不同的 token 分布——这个分布“知道”响应应该是什么样的。由此可计算得到 token 级优势。
深入技术细节。传统 RL 只能给出全局打分,但 OPD 通过对比两种状态下的输出概率,提供了每个词的修改方向。核心数学公式并不复杂:某个词的优势值等于教师模型在增强状态下生成该词的对数概率减去学生模型在原始状态下生成该词的对数概率。差值越大,说明学生与教师的差距越大,越需要优化。
如果 teacher 概率高而 student 概率低,优势为正,训练将推动 student 提高该 token 的概率。反之亦然。这正是 On-Policy Distillation 能避免知识遗忘的核心原因——模型在自己的轨迹上学习,教师提供密集的逐步骤纠错信号。
提取 Hint。从 OPD 的角度看,OpenClaw-RL 的 teacher 构造方式非常接近 self-distillation,而非经典的“外部强教师蒸馏”。它不是固定使用一个大模型为学生打分,而是先让学生在原始上下文中生成动作,等环境返回 next state 后,从 next state 中抽取简洁的 hindsight hint,拼回原始上下文形成增强后的 teacher context。然后,用同一个模型在这个增强上下文中对原来的响应做 forced scoring,得到 teacher logprobs,再与 student 原来的 logprobs 做差。因此,这里的 teacher 并非“另一个模型”,而是一个 hindsight-informed self-teacher。
但需要注意,OpenClaw-RL 并非直接拿 next-state 原文回填。真实交互中的 next state 往往充满噪声——用户回复里可能既包含纠错又引入新问题,终端日志可能很长但大部分是冗余信息。因此它专门增加了 hint extraction 步骤:先让 judge 判断该 next state 中是否含有值得利用的 hindsight 信息,若有,则提炼成 1–3 句简短明确的 hint。只保留那些确实具备纠偏价值的样本。
这一设计至关重要——表明 OpenClaw-RL 对 OPD 的定位并非“覆盖一切交互”,而是“仅在 next-state 中存在高质量指导信号时,提供高分辨率纠偏”。
比喻。想象考驾照时面对陌生路口:学生凭直觉打方向盘,结果压线了。副驾驶的考官指出“你应该提前看后视镜,早点打半圈方向盘”。假设存在一个平行宇宙,那个宇宙里的学生提前听到了考官的提示。开了上帝视角的学生打方向时动作一定极其精准。优化过程就是对比两个宇宙的学生在握方向盘那一瞬间的细微肌肉发力概率,将上帝视角的做法作为标准答案,硬生生将现实中的肌肉记忆掰过来。
每个元素对应的技术概念:陌生路口对应原始提示词,现实中的方向盘对应策略模型的回复,考官的事后提示对应从 next state 中提取的 hint,开了上帝视角的学生对应拼接了 hint 后的同一个大模型,纠正肌肉发力点对应计算 teacher 和 student 在每个 token 上的对数概率差。
流程。整个流程可划分为几个阶段:初始化阶段配置 PRM 端点和并发控制;评估阶段做 hint 提取、构建增强 prompt、查询 teacher logprobs;提交阶段格式化样本并提交训练队列。
具体流程伪代码。若画出流程,大致如下:
学生生成回复 → 等待反馈 → judge 投票提取 hint → 判断是否有 hint ↓
┌─────────┴─────────┐
▼ ▼
有 hint: 拼接 无 hint: 丢弃
到 prompt 该样本
│
▼
教师模型计算 log-probs
│
▼
组装训练样本
│
▼
送入训练
2.4 小结
OPD 巧妙地利用了事后反馈,构建了一个虚拟的 Teacher 上下文。它将原本只能粗犷打分的评估信号,降维打击为 token 级别、极具方向性的监督信号。优化的终极目标是让模型在不知情时的本能反应,无限逼近提前获取提示后的完美表现。
0x03 对比
接下来分析 OPD 中几个重要的对比关系。
3.1 标准 OPD vs OpenClaw OPD
标准 OPD(来自 Thinking Machines 博客 + Agarwal et al. 2023 + Qwen3 报告):Student rollout → Teacher 评估每个 token → Reverse KL 蒸馏。Teacher 通常是大模型(例如 32B→8B),知识差源于模型容量差。Student 主动从数据集采样 prompt 生成 response,Teacher 输入为 prompt + student_response(无额外信息)。目标在于让 Student 模仿 Teacher 的固有能力。
OpenClaw OPD:包含两种变体。标准 OPD(advantage-based)使用同一模型加 Hint 增强作为 Teacher,知识差源于信息差。Student 被动等待真实用户对话,Teacher 输入为 prompt + hint + student_response。目标是将 hint 信息蒸馏到 student,使其不依赖 hint 也能正确执行。Top-K OPD 变体则在 K+1 个类别上执行显式 Reverse KL 蒸馏,采用 Teacher Top-K 选择,信息传输效率从传统方式的约 300MB/sample 降至约 200KB/sample——差距相当惊人。
核心区别。标准 OPD 是“站在巨人肩膀上”,假设更大等于更好;OpenClaw OPD 是“开卷考试的降维打击”,假设有信息大于无信息,不需要大模型,只需“作弊信息”。独特优势:无需部署额外大模型作为 Teacher,仅需 PRM judge 能生成有效 hint,同一模型复用,资源效率极高。
3.2 正向 KL vs 反向 KL
OPD 使用的是反向 KL,这里值得专门讲解两者的区别。
正向 KL = “不要遗漏”(mode-covering),反向 KL = “不要瞎说”(mode-seeking)。正向 KL 倾向于高 entropy 全面覆盖,反向 KL 倾向于低 entropy 精准集中。
| 正向 KL | 反向 KL | |
|---|---|---|
| 谁的视角 | Teacher 视角 | Student 视角 |
| 问的问题 | Teacher 认为重要的,Student 覆盖了吗? | Student 说的,Teacher 同意吗? |
| 惩罚什么 | Student 遗漏 Teacher 的内容 | Student 编造 Teacher 不认可的内容 |
| 倾向 | Mode-covering | Mode-seeking |
| Entropy | 倾向高 entropy(平) | 倾向低 entropy(尖) |
一个具体例子会更容易理解。假设 teacher 分布中“你好”和“嗨”的概率各占 0.4,“哈喽”0.1,“其他”0.1。用正向 KL 训练,student 会变成“什么都会一点但什么都不确定”的状态。用反向 KL 训练,student 大概率会集中选一个最确定的答案,几乎放弃其他所有可能性。
在 LLM 蒸馏中应用:正向 KL 适合让 student 全面学习 teacher 的能力,但风险是 student 可能变得犹豫不决。反向 KL 适合让 student 精准、不产生 teacher 不支持的输出,但风险是可能丢失某些能力(mode collapse)。
这里需要澄清一个判断标准。判断 KL 方向的关键并非看“谁减谁”,而是看“token 从谁采样的”。OPD 的 token 来自 student rollout,即是在 student 分布下取期望,最终最小化的是 D_KL(student||teacher),也就是反向 KL。虽然 teacher_lp - student_lp 看起来像是正向 KL 的形式,但它只是差值,完整的 KL 散度还需要期望操作。所有 token 都是从 student 分布中采样的,因此该差值的期望最终指向的是反向 KL。
要记住这个结论:判断 KL 方向的关键,不是看减号两边谁减谁,而是看期望在谁的分布下取值。token 从谁那里采样,就是谁的分布。
总结。正向 KL:teacher 会说的,student 都要会,全面但可能犹豫。反向 KL:student 说的,teacher 都得认可,精准但可能片面。
