【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (3)--- 总体思考
- 【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (3)--- 总体思考
- 0x00 概要
- 0x01 四个要点
- 1.1 三大不变量
- 1.2 扩展
- 1.3 总览矩阵
- 1.4 不变量①
- 可探索空间 讨论
- OpenClaw-RL
- 1.5 不变量②
- 梯度非退化讨论
- OpenClaw-RL
- 1.6 不变量③
- Off-Policy Gap讨论
- OpenClaw-RL
- 1.7 不变量④
- 有效样本率讨论
- OpenClaw-RL
- 1.8 设计哲学小结
- 0x02 第一不变量理解
- 2.1 直觉理解
- 2.2 深入思考
- 2.2.1 多样性
- 支撑集
- 行为级支撑集崩塌(Support Collapse):
- 策略层面的多样性
- 范式
- 2.2.2 真实可行
- 2.2.3 "给定状态下"(per-state,而非全局)
- 2.2.4 为什么"过早"最危险
- 具体场景
- "过早"与"收敛"的区别
- 2.2.5 塌缩如何引发其他三个不变量的连锁失效
- 2.2.1 多样性
- 2.3 维护可探索行为空间的难点
- 难点 1:SFT的单向压缩性
- 难点 2:RL奖励的方向性偏压
- 难点 3:Long Trajectory的早期锁定效应
- 难点 4:Agent Scaffold的隐性偏好
- 难点 5:GRPO组退化(全成功/全失败)
- 难点 6:支撑集崩塌的不可观测性
- 2.4 可能的解法
- 类别A:在进入RL之前保宽支撑集
- 类别 B:RL 训练中主动维护
- 类别 C:防止 Verifier 引入系统性偏压
- 2.5 OpenClaw-RL 三种方法对第一不变量的隐性保障
- 细节举例
- 缺陷不足
- 小结
- 0x03 第二变量理解
- 3.1 什么叫"退化的学习信号"
- "持续"的含义
- 信息论视角:信号 = 方差
- 3.2 退化机制
- 机制一:稀疏终端奖励的梯度消失
- 机制二:"成功悬崖"一学会之前几乎无信号
- 机制三:批次级别的全成功/全失败"塌缩
- 机制四:长Episode下信号的"相关性污染"
- 机制五:探索-退化的死亡螺旋
- 机制六 噪声 / 梯度对消退化(下游崩溃)
- 3.3 OpenClaw的应对
- 3.4 结论
- 3.1 什么叫"退化的学习信号"
- 0xEE 广告
- 购买链接
- 0xFF 参考
0x00 概要
本系列的目的是:借着对 OpenClaw-RL 源码的学习,来梳理强化学习的一些相关概念和思想。所以,会有一些基础概念、扩展和发散,OpenClaw-RL 只是一个切入点。而且,因为整篇系列是一个整体,所以有些概念的解读/学习会在不同的文章中出现,还请大家谅解。
OpenClaw-RL 是一个用于在线强化学习(Online RL)的框架,专门针对智能体工具使用场景。它通过从环境反馈中提取过程奖励信号来训练语言模型,支持三种主要模式:
- openclaw-rl:基于二元奖励的强化学习(Binary RL / GRPO)
- openclaw-opd:基于后见之明提示的在线策略蒸馏(On-Policy Distillation, OPD)
- openclaw-combine:联合方法,在同一 PPO 更新中同时利用 RL reward 和 OPD teacher signal

本篇是在一篇好文基础上的进一步思考,若有错误,还请读者不吝指出。
0x01 四个要点
1.1 三大不变量
Agentic RL 训练:它不是单一 RL 算 法,而是一整套环境建模、学习信号、异步数据流、策略优化和基础设施的协同系统文中提到,Agentic RL 的三个不变量:
- 第一不变量:策略可探索空间不能过早塌缩
- 第二不变量:学习信号必须持续非退化
- 第三不变量:训练采样、参数更新和真实部署之间的偏移必须可控
如果把 Agentic RL 理解成一个在真实环境里持续交互、持续采样、持续更新的策略学习系统,那么最重要的就不再是这一步用哪种 RL 算法,而是训练闭环能否长期守住三个更底层的条件。这里的不变量,不是指某个量在数学上严格恒定,而是指它们虽然会天然漂移,却必须在整个训练过程中被不断拉回到一个仍然可学习和可优化的区间里。更准确地说,前两个是不应跌破的下限:策略探索空间不能塌缩,学习信号不能退化。第三个是不应越过的上限:Rollout 分布、更新分布与部署分布之间的偏移不能失控。
这三个不变量并不是彼此独立的三条要素,而是同一个训练系统的三个耦合边界。第一不变量决定策略空间是否还足够宽,第二不变量决定这个空间里的差异能否转成有效梯度,第三不变量决定这些梯度是否仍然作用在正确的分布上。
1.2 扩展
我们结合 OpenClaw-RL,再扩展出四个要点。
- 保护探索多样性(温度 + KL约束)
- 维持advantage的方差(归一化 + rejection sampling)
- 控制off-policy 偏移(staleness上限 + 解耦PPO)
- 解决long-horizon 信用分配(turn discount + dense reward shaping)
因此,Agentic RL 训练可以围绕着四个要点来理解:
- Policy Entropy守护:防止输出分布缩小,保持policy对多样输入的响应弹性。
- 梯度信号非退化:从奖励源头开始,保证奖励非全零(reward层),且每批次内 advantage 有足够方差(advantage 层)
- On-Policy Gap 约束:数据生成策略与当前更新策略的 KL散度须在 clip ratio 有效范围内,防止重要性采样失效。
- 有效样本率维持:确保进入训练的样本中,有足够比例携带真实梯度信号(loss_mask=1),而非被中性样本稀释。
我们接下来看看OpenClaw-RL如何处理这几个不变量的。
1.3 总览矩阵
不变量① 不变量② 不变量③ 不变量④Policy 梯度信号 On-Policy 有效样本Entropy 非退化 Gap 约束 率维持───────────────────────────────────────────────────────────────────────────────────────
Binary RL ● 无正则 ● at-least-one ✓ PPO clip ● at-least-one依赖用户多样性 majority vote kl_coef=0 但 loss_mask=0样本仍入队───────────────────────────────────────────────────────────────────────────────────────
OPD ● 无正则 ● hint-reject ✓ PPO clip ✓ force-drop依赖用户多样性 = drop样本 teacher拉力 只有高质量hint≈ 软KL约束 才进队───────────────────────────────────────────────────────────────────────────────────────
Combine ● 无正则 ✓ 3-way dispatch ✓ PPO clip ✓ 最严格依赖用户多样性 互补两信号 双信号对冲 OPD+RL才入队最高风险 最强保障 On-Policy Gap 最低比例
注:
- at-least-one是指 当一个session的所有turn评分都是(中性)时,强制将第一条被评估的turn的loss_mask设为[1]。
- at-least-one 解决的问题:防止reward全零导致的训练信号完全消失(信号缺失/奖励真空问题)。
我们具体解读下。
1.4 不变量①
面对第一不变量:策略可探索空间不能过早塌缩,我们看看如何保护探索多样性(温度 + KL约束)。
可探索空间 讨论
我们先看看可探索空间的相关信息。
单轮RL:
- 探索空间 =
{不同回复风格丨同一个prompt} - 扁平的、单层的
- 维护方式:保持response 多样性
Agentic RL:
-
探索空间 = {不同轨迹|同一个初始状态} = 指数级树
-
层级的、递归的
-
维护方式:在每个状态节点都保持行为多样性,否则后续子树整个丢失
关键差异:
- Agentic RL的探索空间"塌缩是传导的",Step1塌缩→Step2可能的状态减少→Step3可能的状态更少
- 单轮RL无此连锁反应
OpenClaw-RL
Policy Entropy(三方法一致:都未显式保障,只有隐形保证)
┌──────────┬─────────────────────┬─────────────────────────────┐
│ 方法 │ 实际依赖 │ 风险 │
├──────────┼─────────────────────┼─────────────────────────────┤
│ 全部三种 │ 用户输入自然多样性 │ 用户群分布 drift 时无护栏 │
├──────────┼─────────────────────┼─────────────────────────────┤
│ 全部三种 │ 短期训练窗口(未 overfit)│ 长时间运行可能熵崩 │
└──────────┴─────────────────────┴─────────────────────────────┘
三种方法没有区别 --- 这是OpenClaw框架层面的选择(--no-entropy-reg),不是各方法独立决定的。
1.5 不变量②
针对第二不变量:学习信号必须持续非退化,我们来讨论如何维持advantage的方差 。
梯度非退化讨论
根本原因:时间跨度越长,信号越稀疏。
单轮RL:
- 每条response 都直接对应一个reward,即 1 response→ 1 reward → 1 次梯度更新
- 梯度信号是密集的(dense reward),即信号密度=1/1=100%
Agentic RL:
- Episode结束才有reward,中间步骤无信号
- 梯度信号是稀疏的(sparse reward)
- “制造非退化梯度“的代价在Agentic RL里大得多:需要 Process Reward Model (PRM) 或 Step-Wise Reward,否则 T 步episode只有最后1步有梯度
- 比如20步episode:
- 20 steps→1 terminal reward → 20次梯度更新
- 有效信号密度=1/20=5%
- 其余19步:reward=0→advantage~0 → 梯度 ≈ 0
OpenClaw-RL
梯度信号非退化(三方法有显著差异)
-
Binary RL:
-
Reward 层:
- majority vote(m=3)降低None概率
- at-least-one保证:如果session中,全score =0 → 强制第一条loss_mask=1
-
Advantage 层:无 baseline,方差未约束。→ 一批全+1或全-1时advantage无对比,梯度退化
-
- OPD:
- Reward层:N/A(无整体reward,用teacher log-prob)
- Advantage层:
- teacher_lp - rollout_lp 天然有正有负(不同token 教师偏好各异)→ 单条样本内advantage 自然不退化!
- hint-reject → drop(而非置零),保证进队的都是高信噪比样本
- Combine:
- 两路信号互补 = 最强的梯度非退化保障:
- 当GRPO全为+1→OPD的per-token差值仍有正负→总advantage未退化
- 当OPD级联噪声→GRPO的全局均值拉回→方向不完全消失
- 两路信号互补 = 最强的梯度非退化保障:
1.6 不变量③
针对第三不变量:训练采样、参数更新和真实部署之间的偏移必须可控,我们来讨论如何控制off-policy 偏移。
Off-Policy Gap讨论
单轮RL:
- 一条response=一个训练单元
- 生成后立即训练,off-policy gap很小
Agentic RL:
- 一个episode=T步
- Episode开始时用的是policy_old
- T步后policy可能已更新多次
- → 前面步骤的数据相对policy_T更加off-policy
- → Off-Policy Gap = f(episode_length)。episode越长,gap越大,PPO clip假设越容易被违反
OpenClaw-RL
On-Policy Gap约束(三方法一致:PPO clip兜底)
统一依赖:
- PPO clip(e=0.2,e_high=0.28)
- ratio = t_0_new(a|s) / t_0_old(a/s)
- 超出 [0.8, 1.28] 的 ratio 被截断 → 隐式 KL 约束
OPD特有的额外保障:
-
teacher_lp - rollout_lp 的梯度方向 = "向 teacher 靠拢" = 隐式 KL 拉力
-
→ 防止 policy 漂离有 teacher 指导的区域
三种方法的 On-Policy Gap 风险都不大,因为 OpenClaw 是在线服务,数据实时产生,天然接近 on-policy。weight sync 暂停窗口是主要偏差来源,被 503 pause 机制控制。
1.7 不变量④
我们看看如何解决long-horizon 信用分配(turn discount + dense reward shaping)
有效样本率讨论
单轮RL:
- 每条response = 1个样本,有reward就有梯度
Agentic RL:
- 每个episode = T步,但可能只有1个terminal reward
- 前T-1步:reward=0 → 无梯度(用0填充)
- “有效样本率“的真正含义在Agentic RL里变成:"reward信号能有效反向传播到多少步的action?"
OpenClaw-RL
有效样本率
- Binary RL:
- loss_mask = 0 的样本仍进训练队列(Megatron 做零梯度forward)
- → 占用GPU计算资源但无学习信号
- → 有效样本率 =(score ≠ 0的turn 数) / (队列总turn数)
- at-least-one 保障下限:每 session ≥ 1个有效样本
- OPD:
- hint-reject→完全不进队→有效率最纯净
- 所有进入队列的样本loss_mask全为1
- 但:效率上限 ≤ hint accept rate(hint 拒绝率可能很高)
- Combine:
- OPD-only + RL-only + "OPD+RL" 都进队
- 但hint-rejected AND eval=0 → drop (最严格过滤)
- 结果:样本数最少,但信号质量最高(每条都有至少一路有效信号)
1.8 设计哲学小结
- Binary RL → 宁愿噪声多,不放弃任何数据(at-least-one + 全入队)
- OPD → 宁愿数据少,只要高纯度信号(hint-accept才入队)
- Combine → 精准门控,按信号类型分路,最大化信噪比
0x02 第一不变量理解
我们在本小节再仔细学习理解下 第一不变量:策略可探索空间不能过早塌缩。
2.1 直觉理解
塌缩 = 模型“认定“了某种回复模式,放弃探索其他可能性。具体如下:
训练前(高entropy,充分探索):
-
P("好的,我来帮你") =0.15
-
P("让我分析一下") =0.18
-
P("这个问题需要...") =0.20
-
P("首先...") =0.12
-
...(很多候选,均匀分布)
过早塌缩后(低entropy,退化):
- P("让我分析一下") =0.87
- P(“好的,我来帮你") =0.08
- P(其他所有)=0.05
2.2 深入思考
第一不变量不是说"模型要随机”,而是说:在每种情境下,模型必须仍然"知道"多种有意义的应对方式,并且真实地有能力选择它们。这是RL持续学习的前提条件一没有这个可探索空间,后续的奖励信号无论多精确,都无法引导模型走向更好的策略。
2.2.1 多样性
此处回答"为什么token级随机性不等于探索?”
支撑集
支撑集(Support)的数学含义:分布P的支撑集 = 所有概率 > 0 的事件集合
Token 级支撑集 ≠ 行为级支撑集。
示例:
- 模型在token 1选"Let"时,有("Let","First","To","I")都有高概率
- 但一旦选了"Let",之后的token高概率会走"直接推理"路径
结论:
token级很高,但行为级已经锁定成"直接推理"这一种策略。表面上”每个token位置的词表分布仍有多样性",但是”模型生成的所有回答都遵从同一种模式"。”直接推理"就是永远走”
行为级支撑集崩塌(Support Collapse):
训练前:
-
P(分解为子问题策略)=30%
-
P(直接推理策略)=40%
-
P(先搜索再答策略) =20%
-
P(反例验证策略)=10%
RL训练后(+1奖励集中在"直接推理"):
- P(分解为子问题策略) =2% 快崩塌了
- P(直接推理策略) =94% 支撑集过度收缩
- P(先搜索再答策略) =3%
- P(反例验证策略) =1%
此时token级熵可能依然很高(词语选择多样),但行为空间的支撑集已经崩塌了。这就是为什么ARLArena观察到"训练崩溃"往往在特定任务类型上(如 ALFWorld),而非所有任务一特定任务对行为多样性的要求更高。
策略层面的多样性
token级熵测试的是”用词多样性",行为级是”策略多样性",前者高不代表后者没有退化。
"彼此可区分、语义上不同” 不是token熵要高,比如:
"The catsaton themat" → 下-个词有很多候选(mat/floor/sofa...) → 虽然token熵不低,但语义上都是"猫坐在什么上”,差异微不足道。
而是策略层面的多样性。
比如给定"帮我解释量子纠缠”,模型应该保持:
- 路径A:类比直觉解释(面向普通用户)
- 路径B:数学形式化(面向专业用户)
- 路径C:先反问用户背景(主动澄清)
- 路径D:分层解释(先直觉后深入)
这四条路径语义上根本不同,是真正意义上的"不同行为”。
范式
因此,范式如下:
-
旧范式(错误方向):"提高token温度 → 增加随机性 → 更好的探索"
-
新范式(正确方向):"管理模型行为空间的支撑集 → 保持策略多样性 → 真正的探索"
2.2.2 真实可行
这是关键约束:不只是token序列上存在,而是模型真的能走到那条路。
# 比较:
π("类比解释")=1e-9 # 理论上可以,但概率极低→"真实不可行"
π("数学形式化")=0.45 # 模型真的可以走这条路→"真实可行”
π("逐步推导")=0.50 # 同上
π("先反问")=0.05 # 勉强可行的边缘
第一不变量要求:至少有若干条路径π(path_i) > e_threshold,而不仅仅是理论上存在。
2.2.3 "给定状态下"(per-state,而非全局)
全局token 熵高 ≈ 满足第一不变量,因为 模型可能:
- 对"数学题"→路径单一(只会GRPO强化后的解题格式)
- 对"闲聊”→路径多样
- → 在"数学题"这个state下,策略已塌缩
而 第一不变量要求:每个 state S,模型保有{path(s),path 2(s),... ,path k(s)} 这样的可区分路径集
2.2.4 为什么"过早"最危险
一组可行的语义路径 = 模型保留着"可以被学习的选择空间”。一旦某条路径被排除出可行集,RL 就永远无法知道它应该被强化或惩罚。
RL的策略梯度公式如下:
# Policy gradient.只能从被采样的路径学习:
∇L = E_{a ~ π(·|s)}[∇logπ(a|s)·A(s,a)]
采样期望:只有被采样的 action才会收到梯度。
# 如果某条路径π(a|s) → 0:
# 该action a 永远不会被采样,A(s,a)从不被计算。
# ∇log π(a|s) * A(s,a)=0 → 永远收不到梯度, 永久无法得知 a 是否更好
即,一旦π(als) → 0,该action永远不会被采样,永远收不到梯度。
这与监督学习根本不同:
- SFT:有显式label → 不管当前概率多小,label对应的token都有梯度
- RL:没有label → 只有实际采样到的action才有梯度 → 概率趋零的策略 = 死路,无法自我恢复
具体场景
我们再来看看OpenClaw-RL里的塌缩。
假设:Binary RL训练了一段时间后,模型学会了一种"高分模板",比如:
"这是个很好的问题。让我逐步分析:1)...2)...3)...总结:..." → 这种格式 PRM 经常打 + 1
问题:用户问技术代码题时,也用这个模板 → 代码题需要直接给代码,不是列条目。
这样带来的问题如下:→ PRM打0或-1(用户下一句表示没解决问题) → 但此时模型已经几乎不会生成"直接写代码"的回复了(概率→ 0) → 无法收到"应该直接写代码"的梯度信号 → 塌缩锁死
"过早"与"收敛"的区别
过早塌缩(坏):
- 模型还没学会区分好坏回复 → 随机采样到某种格式 → 偶然得+1 → 快速强化 → 锁死
正常收敛(好):
-
模型已经学会:技术问题→直接给代码;分析问题 → 逐步推理
-
→ 条件entropy依然高(不同类型问题差异大)
-
→ 同类问题内entropy可以低(已找到最优策略)
核心判断:entropy是否在有用的维度上降低了。
2.2.5 塌缩如何引发其他三个不变量的连锁失效
第一不变量是根基:它失败后,其余三个不变量同时承压,具体如下图。
① Entropy 塌缩↓所有输出趋向相同模式/ \
② 梯度退化 ③ On-Policy Gap 扩大
(reward 方差 → 0) (用户说 A,模型只生成 B)\ /④ 有效样本率崩溃(judge 全打 neutral)
2.3 维护可探索行为空间的难点
6个根本性挑战如下。
难点 1:SFT的单向压缩性
交叉SFT的目标是:maxP("正确答案"),其副作用是:所有alternative valid outputs的概率同时下降。
这种压缩是单向不可逆的:Training loss ↓→ P(gold output) ↑ → P(alternative paths) ↓ (很难再恢复)
结果:"Getting Your LLMs Ready for RL" 发现
- validation loss 最低的 checkpoint ≠ 最适合接RL 的 checkpoint
- 因为过拟合发生前就已经出现 distributional forgetting
难点 2:RL奖励的方向性偏压
RL天然把概率质量推向高回报模式:
-
Iteration 1:P(策略A) = 40%,P(策略B)= 35%,P(策略C) = 25%
-
Iteration 10:P(策略A)= 75%,P(策略B)= 20%,P(策略C) = 5%
-
Iteration 100:P(策略A) = 96%,P(策略B)= 3%,P(策略C) = 1%
这是 RL的设计目标,但同时也是探索空间崩塌的根源,一旦某策略在某类任务上占优,其他策略就被边缘化。
难点 3:Long Trajectory的早期锁定效应
一旦token 1-20确定了"我用分解策略": token 21-200的潜在高概率就会跟随分解策略进行,即使加高温度,也只是在"分解策略"内部扰动。
问题不在于采样温度,而在于策略分支选择发生在很早的位置,token级entropy再高,也不能恢复已锁定的策略方向。
难点 4:Agent Scaffold的隐性偏好
工具调用格式、上下文模板、终止逻辑都暗中偏好某类workflow。
示例:If scaffold="read_file → edit > test"(固定顺序)
模型会学到:test→edit 的顺序在scaffold里出错 →P(先test再edit策略)被系统性压低→即使这种策略有时更好,scaffold的奖励结构也不支持它
难点 5:GRPO组退化(全成功/全失败)
带来的问题如下:
-
当一组轨迹全成功(简单任务):所有advantage=0 → 零梯度 → 支撑集无变化但也无更新
-
当一组轨迹全失败(超难任务):所有advantage=0 → 零梯度 → 困难策略永远不被学到
-
还有第三种:模型学会 "永远打0分的安全回复" (不好不坏) 这种"安全中间态垄断"是最隐蔽的支撑集崩塌
难点 6:支撑集崩塌的不可观测性
可以监控的:token级entropy("模型输出还多样吗?")
不能监控的:策略级diversity("模型还能用几种不同方式解题?")
Token entropy 仍然高→看起来"多样",但Pass@k崩塌→实际上所有轨迹都在用同一种策略,只是措辞不同。
这导致很多系统有"虚假的多样性幻觉"。
2.4 可能的解法
类别A:在进入RL之前保宽支撑集
| 方法 | 来源 | 核心思路 |
|---|---|---|
| GEM | 论文 | SFT 时混合模型自己的输出,而非只学gold output,保留alternative paths |
| Continual Pretraining | MiniMax-M1 | RL前追加7.5Ttokens,确保支撑集足够宽 |
| Diverse Agent Synthesis | Kimi K2 | 合成多种工具组合和任务类型的 agent数据,提前做宽 action space |
| Staged RL | GLM-5 | Reasoning RL→ Agentic RL → General RL 顺序推进,每阶段不压缩前阶段的支撑集 |
类别 B:RL 训练中主动维护
| 方法 | 来源 | 核心思路 |
|---|---|---|
| DAPO Clip-Higher | DAPO | ε_high > ε_low,防止 token 级支撑集归零(token 级保护) |
| DIVPO | Diversity-Aware RL | 在 RL loss 中显式加入 diversity 项,平均提升 3.5% 数学推理 |
| Cross-Stage Distillation | GLM-5 | 阶段切换时用蒸馏保留前阶段已学到的行为模式 |
| Adaptive Task Difficulty | RLAnything | 保持任务难度在 [a_low=0.2, a_high=0.8] 区间,防止全成功/全失败组 |
| Teacher Hint / OPD | OpenClaw | Teacher 持续注入反事实策略,维持"另一条路"的梯度方向 |
类别 C:防止 Verifier 引入系统性偏压
| 方法 | 来源 | 核心思路 |
|---|---|---|
| Majority Vote | OpenClaw / SAMPO | 多次独立调用降低单一 verifier 偏差 |
| Hacking Detector | SWE-Universe | 检测 verifier 被 hack(防止捷径被奖励) |
| GRM Rubric(多维) | Kimi K2.5 | 多个 rubric 降低单一偏好信号过拟合 |
| Hybrid Reward | GLM-5 | rule-based + ORM + GRM 组合,相互制衡 |
2.5 OpenClaw-RL 三种方法对第一不变量的隐性保障
如何管理支撑集
| 机制 | 如何对抗塌缩 |
|---|---|
| 实时用户输入 | 用户自然多样性迫使模型回复多样化 |
| OPD hint | Teacher 每次提供 "更好的另一条路",显式注入替代策略的梯度 |
| majority vote | 避免极端 ±1 的稳定正反馈(多次投票才打分,降低偶然强化) |
| force-drop(OPD) | 低质量样本不进队,防止劣质模式被反复强化 |
细节举例
① OPD Teacher Hint:最强的支撑集维护机制,Teacher 强制注入"另一种策略"。
-
作用:当 Student 策略锁定在某种分解方式时,Teacher 提供 Hint
-
Hint = 你可以这样做:[HINT_START]...另一种方法...[HINT_END]
-
本质:teacher_log_prob -student_log_prob 产生的梯度方向 = "Teacher觉得这个token比你的更好" = 在 token 序列层面重新激活 Teacher 的策略路径
这是OpenClaw维护支撑集最直接的机制。Teacher 不断提供"另一种策略的参数方向",防止 Student 完全锁定在单一模式,保持了"Teacher认为可行的策略路径"的支撑集。
# openclaw_opd_api_server.py 核心逻辑:
# _select_best_hint(votes: list[dict[str, Any]]) -> dict | None
# 从多数投票结果中选出最长有效 hint (>10字符),无有效 hint 则返回 None
hint_vote = _select_best_hint(votes)# _append_hint_to_messages() 负责注入 hint:
# - deep-copy messages,找到最后一条 user 消息
# - 将 "\n\n[user's hint / instruction]\n{hint.strip()}" 追加到该消息 content 末尾
enhanced_messages = _append_hint_to_messages(messages, hint_text)# 效果:
# Student 当前策略 = Strategy A(已经被RL强化)
# Teacher hint = "考虑这样做:[HINT_START] Strategy B [HINT_END]"
# teacher_log_prob - student_log_prob 的梯度方向
# = 在 Strategy B的关键token 上给正信号
# = Strategy B 的参数路径不会归零
②真实用户多样性:外部压力维护支撑集
OpenClaw的关键优势:用户群体的自然多样性 = 天然的探索压力
- A 程序员用户→"给我写代码"→触发代码策略
- B 创意用户→激活创意写作策略
- C 分析用户→"帮我分析这篇文章"→触发分析推理策略
如果某策略支撑集崩塌:→ 对应类型用户体验下降 →Judge 评分降低 →梯度纠正。即,模型如果完全收缩到"代码策略": → 用户B、C会立刻不满意 → Judge 打分下降。这是 OpenClaw独有的优势:在线真实用户 = 持续多样化的外部约束 = 持续检验行为支撑集是否完整
③ At-Least-One Guarantee:防止"安全中间态垄断"
# openclaw-rl/openclaw_api_server.py:615-622
# 遍历 session 中所有 turn 的 record,维护 _session_effective 计数器
# 当发现某 turn 的 score != 0 时,_session_effective += 1
# 若最终 _session_effective == 0(全中性),则对第一条 record
# 设置 exclude=False 强制其参与训练,防止这种支撑集崩塌:
本质:防止Policy收缩到"score = 0安全带",这种模式是支撑集崩塌的一种特殊形式:
# 模型学会"打分的安全模式"(不好不坏的回复)
# → 所有 session score = 0
# → 所有 turn loss_mask = 0
# → 零梯度
# → 安全模式的概率持续上升(因为它永远不被惩罚)
# → 最终只会生成无聊的安全回复,即模型只会生成"不好不坏、Judge打0分"的安全回复,即P("产生任何可评分的行为") → 0
at-least-one 强制梯度流动,阻止这种"中间态垄断"。
缺陷不足
OpenClaw-RL依然存在如下缺陷。
① 无策略级entropy 监控
目前的情况:
- Binary RL + Majority Vote:结果驱动的行为级筛选;
- Judge评分的对象:整个回复的质量(行为级)
有几个子问题:
-
Judge 是冻结的 LLM,无法感知支撑集收缩 → OpenClaw 在这里是被动的,靠用户输入多样性维持行为支撑集
-
这意味着梯度方向与token序列无关,与"这种行为好不好"有关 → 不会因为某种token模式"好读"就升高 →直接筛选行为级质量
-
只能看token entropy,看不到"Pass@k是否在下降",没有主动检测支撑集收缩(无 entropy monitoring at strategy level)。支撑集崩塌时不会触发任何警报。
实际上,应该在检测到支撑集收缩时增加探索压力。
② KL coef = 0(--kl-coef 0.0)
没有显式约束"不要偏离参考策略的分布",只靠PPO c1ip (e=0.2,e_high=0.28)做软约束,这是token级约束,不是策略级约束
③ 无自适应任务难度
用户输入不可控,可能有时候全是简单问题(组全成功) →大量零梯度batch,支撑集悄悄收缩,at-least-one 是workaround,不是系统解决方案
④ Judge 是冻结 LLM, 无法联合优化
固定Judge的偏好方向固化→长期会系统性压低某类策略
与RLAnything的联合训练RM相比,OpenClaw的Judge是静态的
⑤ 无分阶段训练
所有类型对话混在一起训练→不同阶段的支撑集互相干扰。
GLM-5的Reasoning→Agentic→General分阶段是有道理的
⑥ 用户群体如果均质化(e.g.,都是程序员) →外部多样性压力减弱→非代码策略的支撑集可能悄悄收缩
小结
RL训练中最深层的一个稳定性问题一一一一一不是随机性不够,而是行为空间的支撑集在梯度优化下被逐渐" 蚕食",直到模型丧失面对新任务时分解问题的能力。
OpenClaw通过OPD(Teacher 注入) + 真实用户多样性 + at-least-one guarantee 在实践中部分地管理了支撑集,但没有形成主动监控机制。
0x03 第二变量理解
第二不变量就是训练系统必须持续制造非退化的学习信号:不同rollout之间要能被比较、被区分,并且
这种比较最终要能作用到参数更新上。
注:此处回答了 "为什么 Agentic RL 的奖励结构天然容易让信号塌缩”。
3.1 什么叫"退化的学习信号"
退化不等于信号为零,而是信号失去了判别力。比如,从梯度的角度看:
# 梯度更新公式
∂L/∂θ = ∑_tA(s_t,a_t).∇_θlogπ_θ(a_t|s_t)↑
advantage:这是"信号"# 信号退化 = advantage→0
# → ∂L/∂θ → 0
# → 参数不更新
# → 模型停止学习
"持续"的含义
不仅仅是"当前批次信号不退化",而是训练过程中的信号不退化:
- 第1000步:model很弱 → 很多 -1样本 → 信号强
- 第5000步:model变好 → 多数 +1样本 → 信号退化(层次B)、
- 第10000步:信号几乎全0 → 停止学习
理想的持续信号:模型改进后,judge 的标准也应该相应提高 → 总有足够比例的"更有价值的改进空间"被发现。
这是OpenClaw用真实用户数据的一个优势:用户的问题和期待会随时间演变,judge 不需要人为调高标准 → 用户天然提供持续的挑战。
信息论视角:信号 = 方差
训练信号的 "质量" = 梯度方向的置信度
置信度 ∝ Var(advantage) / E[advantage]²
具体解释如下:
# 退化的极端情况:
Var(advantage)→ 0 # 所有advantage相同(批次全+1或全0) → 梯度方向不确定(每个样本都指向一样的"平均"方向)→ 没有判别力# 健康的情况:
Var(advantage) > 0 # 批次内正负混合→ 梯度有判别力(能区分"这种回复好"和"那种回复差")
3.2 退化机制
为什么 Agentic RL 的奖励结构天然容易让信号塌缩,我们总结了6个退化机制。
| # | 名称 | 定义 | 信号失败类型 | OpenClaw 受影响程度 |
|---|---|---|---|---|
| ① | 稀疏奖励广播 (Credit Misattribution) | terminal reward 被广播到所有 step/token → 模型无法区分关键决策 vs 无关步骤 | 质(方向错) | ❌ 不受影响 turn-level 独立评分 |
| ② | 奖励真空 (Reward Vacuum) | reward 全为 0(judge 失效 / 任务太难 / 数据断流)→ advantage=0 | 量(信号=0) | ⚠️ 低风险 at-least-one 兜底 |
| ③ | 对比度坍缩 (Contrast Collapse) | batch 内 reward 全相同(全成功或全失败)→ A=R-μ=0 | 量(信号=0) | ⚠️ 低风险 用户多样性 + OPD per-token |
| ④ | 因果污染 (Causal Contamination) | 早期 step 犯错 → 后续 step 在"错误状态”下运行 → terminal reward 错误惩罚后续 step | 质(方向错) | ❌ 不受影响 无 episode 概念 |
| ⑤ | 熵死亡螺旋 (Entropy Death Spiral) | entropy↓ → 轨迹相似 → reward 方差↓ → advantage↓ → gradient↓ → entropy↓↓ | 量(正反馈环) | ⚠️ 中风险 依赖 PPO clip + 用户多样性 |
| ⑥ | 评分噪声 (Judge Noise) | judge 对相似 response 给出不一致评分 → 梯度方向随机化 → E[∇]≈0, Var(∇)>>0 | 质(方向随机) | ⚠️ 中风险 majority vote 缓解 |
其分类如下:
reward 有值?/ \No Yes| |①奖励真空 reward 有对比?/ \No Yes| |②对比度坍缩 judge 一致?/ \No Yes| |③评分噪声 多步 episode?/ \Yes No| |credit 正确? ⑥死亡螺旋/ \ (如果 entropy 在降)No No| |④广播/⑤因果 (训练正常!)
机制一:稀疏终端奖励的梯度消失
WebShop购物任务(20步):
step1:"搜索nike运动鞋" →reward=0
step2:"点击第一个结果" →reward=0
...
step19:"确认购买" →reward=0step20:"支付完成,购买成功" →reward=+1←唯一信号
GRPO广播后:所有20步的advantage=+1(或-1)
问题:
- step2如果选错了商品,为什么step2也是+1?
- 模型无法知道"step3才是关键决策,step1-2是无关紧要的"
机制二:"成功悬崖"一学会之前几乎无信号
假设任务非常难(如SWE修复复杂bug)
几乎所有episode都失败 → reward≈0
对所有样本 →advantage≈0 → 梯度≈0 →模型无法更新
这就是"成功悬崖"(Success Cliff):必须先随机探索到成功路径,才能有信号
但复杂任务的成功路径极稀少,随机探索几乎不可能找到 → 系统陷入"既无信号,又无法探索出信号"的死锁
机制三:批次级别的全成功/全失败"塌缩
场景A:模型已经学会了简单任务
一批32个episode,全部成功reward =[1,1,1, ... ,1]
baseline =mean =1
advantage = reward - baseline =[0,0,0, ..., 0]→ 信号消失!(模型做对了,但没有方向感了)
场景B:任务太难,全部失败
reward=[0,0,0,..., 0]
baseline = mean = 0
advantage =[0,0,0,..., 0]→ 同样消失!(模型做错了,但不知道怎么改)
信号只存在于批次中混合了成功和失败的那一刻。Agentic RL很难维持这个平衡点。
机制四:长Episode下信号的"相关性污染"
step3犯了一个错误(选错了商品类别)
→ steps 4-20都在"错误的状态下"运行
→ 这些步骤的行为都是"错误状态"下的合理选择
→ 但terminal reward=0会惩罚steps 4-20里的所有token
实际上:
- steps 4-20的action可能是局部最优的(在错误状态下),但GRPO给了它们和step3一样的惩罚
- → 模型学到了错误的因果关系:"step17的行为导致了失败"
- →而真正的原因是step3
机制五:探索-退化的死亡螺旋
entropy下降(不变量)↓
轨迹变得相似↓
相似轨迹 → 相似结果 → batch内reward方差 ↓↓
advantage方差 ↓(不变量塌缩)↓
梯度 → 参数几乎不更新↓
连维持entropy的梯度都没了↓
entropy进一步下降↓(循环加速)
一旦进入这个螺旋,不加干预就无法自行逃脱。
机制六 噪声 / 梯度对消退化(下游崩溃)
-
现象:+1和-1样本对半,但它们指向相反方向
- +1 样本推动 0 → 方向A
- -1 样本推动 0 → 方向B ≈ -A
- 净梯度 ≈ 0 →反复震荡,不收敛
-
原因:Reward信号噪声过大(judge对同类response给出相反评分)
3.3 OpenClaw的应对
OpenClaw用"用户多样性 + 密集turn-level评分"规避了大部分AgenticRL的信号塌缩问题。代价是:奖励信号更嘈杂(隐式的next_state反馈)。
| 机制 | 具体解法 | 解法类 |
|---|---|---|
| ①稀疏广播 | 架构规避 | turn-level 评分 (OpenClaw 天然免疫),即每轮都有 next_state 评分(密集) |
| ②奖励真空 | 信号注入 | at-least-one, force-drop, 3-way dispatch,即judge 有 0/±1 三档,不纯二值 |
| ③对比度坍缩 | 密集 advantage | OPD teacher_lp - rollout_lp / 用户多样性保证批次内混合 |
| ④因果污染 | 架构规避 | 每轮独立训练,无 episode 概念 (天然免疫) |
| ⑤死亡螺旋 | 梯度约束 | PPO clip 0.2/0.28, KL 监控,(CISPO 待集成) / 用户多样性天然提供 entropy 保障 |
| ⑥评分噪声 | 信号去噪 | majority vote (m=3), hint selection |
另外,此处对"信号缺失"和"信号噪声"做进一步阐释。其数学特征如下表所示。
区分方法:如果advantage方差也很小→信号缺失;如果advantage方差大但loss不降→信号噪声。
┌──────────┬─────────────────────────┬───────────────────────────────────────┐
│ │ 信号缺失 │ 信号噪声 │
├──────────┼─────────────────────────┼───────────────────────────────────────┤
│ 梯度幅度 │ ‖∇‖ → 0 │ ‖∇‖ 正常 │
├──────────┼─────────────────────────┼───────────────────────────────────────┤
│ 梯度方向 │ 无(幅度太小无所谓方向) │ 随机化(每 batch 方向不同) │
├──────────┼─────────────────────────┼───────────────────────────────────────┤
│ E[∇] │ ≈ 0 │ ≈ 0 │
├──────────┼─────────────────────────┼───────────────────────────────────────┤
│ Var(∇) │ ≈ 0 │ >> 0 │
├──────────┼─────────────────────────┼───────────────────────────────────────┤
│ 参数变化 │ 几乎不动 │ 随机游走(oscillation) │
├──────────┼─────────────────────────┼───────────────────────────────────────┤
│ 监控指标 │ advantage mean ≈ 0 │ advantage mean 可能 ≠ 0,但 loss 不下降 │
└──────────┴─────────────────────────┴───────────────────────────────────────┘
3.4 结论
第二不变量本质上是信息论的要求:每个训练步骤,梯度信号必须携带足够的信息量来推动参数更新。
与其他三个不变量的关系
- 不变量①(entropy):policy多样→reward方差大→advantage有判别力→②
- 不变量③(on-policy):ratio稳定→梯度估计准确→不因IS失效而退化→②
- 不变量④(有效样本率):足够mask=1→梯度来自真实信号而非零填充→②
→ 不变量②是"输出表现",①③④是"维持的机制";其余三个不变量失效 → ②随之退化;②退化是其他三个失效的外在症状
0xEE 广告
继续给第二本书打广告。

购买链接
0xFF 参考
Agentic RL 训练:它不是单一 RL 算 法,而是一整套环境建模、学习信号、异步数据流、策略优化和基础设施的协同系统
Agentic能力从哪里来?拆解基座大模型的训练过程
大语言模型中的强化学习问题综述
OpenClaw-RL: Train Any Agent Simply by Talking
神仙思路!普林斯顿提出OpenClaw-RL:Agent在线挨骂在线升级!
