ClawGym II 研究的是一件很实用、也很容易被系统细节弄坏的事:如果训练对象要在 Claude Code 或 OpenClaw 里工作,能否保留这套 harness 原有的工具调用、上下文压缩和错误恢复逻辑,只在模型 API 边界收集 trajectory,再用 PPO 或 GRPO 更新模型?论文给出的答案是可以,但必须先解决分叉轨迹、token 对齐和终局 reward 的归因。
Q1. 为什么要绕过 harness 内部逻辑做 RL?
部署时用哪套 harness,训练时最好让模型经历同一套交互。 Claude Code 和 OpenClaw 会自己决定怎样组织工具 schema、怎样把 tool result 写回 prompt、什么时候重试、什么时候压缩上下文。把这些行为重写成训练框架内部的 agent loop,虽然方便拿 trajectory,却也换掉了模型真正要适应的环境。
黑盒接入的麻烦在于,一次任务不会自然留下“一条干净序列”。Serving proxy 看到的是多次彼此相关的 model calls。OpenClaw 遇到 malformed tool call 可能重新生成;上下文压缩会从短历史重新开始;subagent 也会形成另一条调用链。训练器如果把每个 call 当成独立样本,共享历史会被重复计算,终局 reward 还可能错误地广播给辅助分支。
另一个风险更隐蔽。Harness 可能把模型输出重新序列化后再放回上下文,例如规范化 tool call。如果训练器事后从 transcript 重新 tokenize,得到的 token IDs 未必是 rollout 时真实采样的序列。即使 tokens 相同,inference engine 与 training engine 的精度、kernel 和并行方式不同,重算的概率也可能漂移。这篇论文的核心工程目标是:保留原生 harness,同时让 reward、token 与 log-prob 仍能组成可用的 policy-gradient 样本。
Q2. 它和 ClawGym、POLAR、LEGO-RL 等工作到底差在哪里?
ClawGym II 的辨识度在 prefix-tree reconstruction 和 fork-aware PPO/GRPO,而不是“第一次把现成 Agent 接入 RL”。 与它同期的多项工作也把 model API 当作接入点。比较时要把任务来源、harness 控制权、轨迹表示和 reward 隔离分开看。
| 工作 | 任务 / 环境 | Harness 是否原样运行 | 训练信号怎样接入 | 与 ClawGym II 的主要区别 |
|---|---|---|---|---|
| ClawGym | 合成 workspace tasks;code checker + rubric | 面向 OpenClaw | 构造 SynData、Bench 与 cold-start models | 提供数据和初始模型;ClawGym II 在其上增加 black-box online RL。 |
| POLAR | 多类 agentic tasks | 是 | model-serving boundary | 同属 any-harness 路线;ClawGym II 详细处理 forked calls 与 tree loss。 |
| Dressage | 多 Agent / 多 sandbox | 是 | 通用 rollout infrastructure | 偏系统扩展性;ClawGym II 聚焦从黑盒 traces 恢复训练轨迹。 |
| OpenForgeRL | 可插拔环境 | 是 | harness-native RL | 目标接近;ClawGym II 额外给出 OpenClaw / Claude Code 的分叉处理与 cross-harness 实验。 |
| LEGO-RL | 2,699 个 coding tasks;Harbor verifier | Claude Code、OpenHands、OpenCode | in-process proxy、token capture、routing replay | 工程闭环和 reward 防作弊更完整;ClawGym II 对 prefix tree、PPO 与 mix-harness 讲得更细。 |
| White-box AgentLoop | ClawGym tasks | 否,训练器定义 loop | 直接拿完整 state/action trajectory | credit assignment 更直接;部署到 OpenClaw 时存在 harness distribution shift。 |
这张表不是独立复现排名。POLAR、Dressage 与 OpenForgeRL 的位置来自各自论文或官方仓库,ClawGym II 对相关工作的描述也带有作者视角。真正可比的实验是论文自己的 white-box / OpenClaw transfer matrix:同一 WhiteBox-30A3B 在训练用的 AgentLoop 下为 59.90,放进 OpenClaw 后降到 50.33;直接在 OpenClaw 内训练的 ClawII-OC-30A3B 为 62.62。
Q3. 从一次 model call 到 reward,完整流程怎样工作?
3.1 Proxy 先保存事实,prefix tree 再恢复结构
每个 rollout 在独立临时 sandbox 中运行。OpenClaw 或 Claude Code 仍然负责工具执行与 control flow;serving proxy 作为模型 endpoint,保存每次请求的 input tokens、output tokens、rollout log-prob 和 task metadata。
对第 (i) 次 model call,论文记输入 context 为 (x_i),输出 response 为 (y_i)。树构造器把该 call 接到“累计历史是 (x_i) 最长前缀”的已有节点上。父节点的历史与子调用输入之间多出的内容,就是 harness 插入的 tool output 或环境反馈。Root-to-leaf path 因而恢复出一条候选 trajectory。
同一 rollout 的所有保留分支共享最终 workspace reward。训练时,branch-specific tokens 正常参与 loss,共享 prefix 在该 rollout 内只计一次,避免分支越多权重越大。
3.2 GRPO 与 PPO 怎样把一个 reward 写回树
GRPO 以同一道任务的 n 个 rollout 为一组,先对 rollout reward 做标准化:
同一 rollout 的所有保留节点拿到同一个 advantage Âᵢ。PPO 则把每个 branch 当作独立 trajectory,设 γ = 1、λ = 1,在自己的末 token 接收 reward Rᵢ:
优势不会跨 branch point 传播给 sibling。作者也承认这是一种简化:critic 要从很早的 state 预测长程回报,而且没有时间折扣,advantage variance 可能更大。
3.3 Token-in-token-out 解决什么
Training engine 只使用 inference engine 当时生成并保存的 token,不把 harness 重写后的文本重新 encode。Harness 看到的 decoded text 和 trainer 看到的 token record 是两条用途不同的数据流。概率仍可能因 engine 实现不同而偏移,论文在每个训练 token 上乘一个截断 importance weight:
Sequence-level correction 理论上更接近无偏,但长 trajectory 容易出现高方差;论文选择 token-level correction,在 bias 与 variance 之间折中。截断阈值 c̄ 没有披露。
3.4 Mix-harness 为什么按 task-harness pair 分组
同一道 task 在 OpenClaw 与 Claude Code 中可能呈现不同工具协议、上下文管理和 reward 分布。ClawGym II 会把 (task, OpenClaw) 与 (task, Claude Code) 当成两个组,分别计算组内 advantage,再让两组梯度共同更新一个 policy。这样避免把 harness 差异混入 relative reward,同时仍能学习跨 harness 的共享行为。
3.5 训练任务和 benchmark 是谁做的
ClawGym-SynData 约有 13.5K 题,来自两条合成路线。
作者从 50 个训练任务做人工抽样,四个质量维度均分 4.06 / 5。论文没有给多标注者一致性,也没有说明全量数据经过人工复核。
ClawGym-Bench 从未用于训练的合成题中筛选 200 题。候选题由一个 strong agent 和一个 small agent 各跑 4 次;入选条件是 strong average ≥ 0.2、small average ≤ 0.6,并且 strong > small。GPT-5.4 先诊断,human reviewer 最终 accept、revise 或 reject。论文没有披露 strong/small 的具体模型。最终 156 题只有 code checker,44 题同时有 code checker 与 rubric。
3.6 一条真实任务怎样从 workspace 走到分数
下面这条 case 来自官方 benchmark_data.jsonl 第一行,类别是 Messaging and Collaboration。任务内容是为志愿者污染修复团队准备周报。它不是我编造的例子,也不是现实组织贡献的人工任务;它来自前述合成与复核流程。
Agent-visible brief
- Agent 能读取
data/tasks.csv、data/updates.jsonl、input/draft_announcement.txt、tools/summarize.py和两个公开 pytest 文件。 - Agent 要在
build/下生成summary.json、test_results.txt、status_report.md和announcement_rewrite.txt。 - 周报必须复现 CSV 统计,选出按时间倒序的 3 条最新 update,列出 blocked 与 in-progress 任务;公告要少于 120 词,包含
thank you、let's coordinate和四种状态。
Hidden evaluation
- Agent 看不到
reward/test.py、两条 rubric 和 judge prompt。Rollout 结束后,runner 才在最终 workspace 上执行 checker。 - Python checker 返回 15 个等权 0/1 metrics,包括文件存在、JSON 与计算一致、pytest 全过、周报各段准确,以及公告长度和必需短语。
- GPT-5.4 只评两件代码不容易判断的事:语气是否 constructive / collaborative,以及“请回复状态”的 actionability。每条 rubric 只能取 0、0.25、0.5、0.75 或 1。
0.7 × 1 + 0.3 × 1 = 1。0.7 × 14/15 + 0.3 = 0.9533。这是依据公开规则推导的例子,不是论文中的模型日志。# 官方 reward/test.py 的核心结构,省略其余同类字段
scores = {
"summary_json_exists": 0.0,
"summary_json_valid_and_matches_computation": 0.0,
"tests_all_passed": 0.0,
"status_report_highlights_top3_correct": 0.0,
"announcement_under_120_words": 0.0,
# ... 共 15 项
}
ann_text = _read_text(announcement_path) or “”
if _word_count(ann_text) < 120:
scores[“announcement_under_120_words”] = 1.0
return scores
代码里还有一个小但真实的 blind spot:公告文件不存在时,ann_text 会变成空字符串,word count 等于 0,因此 announcement_under_120_words 仍得 1。缺文件的 announcement_exists 会得 0,所以总分不会满分,但“少于 120 词”这一项没有先检查文件存在。
对 hybrid task,公开 runner 的公式是:
其中 (s_{code}) 是 checker 返回数值的均值,(s_{rubric}) 是 rubric 分值总和除以满分总和。若某一侧没有得到数值,公开实现会只使用另一侧并重新归一化,而不是自动判 0。
最后要把指标名称说准确。论文把 Table 1 的结果称为 Pass@1;公开 runner 的 save_run_summary() 却直接对每次 rollout 的连续 final_score 求 mean_score,没有发现“满分才算 pass”的二值阈值。因此,下面的数字最好理解为论文报告的 Pass@1,同时注明公开实现更像单次 rollout 的平均完成度分数。
Q4. 实验结果支持了哪些结论?
4.1 主结果:两个 harness 内都能学到提升
论文训练 Qwen3-8B 与 Qwen3-30A3B。OpenClaw runs 从 ClawII-Cold 初始化,Claude Code runs 直接从 Qwen3 base 初始化。30A3B 的主结果如下:
| Model / harness | ClawGym-Bench baseline | RL 后 | 增益 | PinchBench baseline | RL 后 | 增益 |
|---|---|---|---|---|---|---|
| ClawII-OC-8B / OpenClaw | 47.06 | 54.98 | +7.92 | 71.29 | 77.44 | +6.15 |
| ClawII-OC-30A3B / OpenClaw | 52.64 | 62.62 | +9.98 | 75.61 | 87.32 | +11.71 |
| ClawII-CC-8B / Claude Code | 18.54 | 42.05 | +23.51 | 27.40 | 61.21 | +33.81 |
| ClawII-CC-30A3B / Claude Code | 37.06 | 51.87 | +14.81 | 54.14 | 71.42 | +17.28 |
这些数值支持“同一套 black-box RL 接口能在两种 harness 中工作”。它们不能证明 Claude Code 比 OpenClaw 更适合训练,因为两边的初始模型不同,base score 也不同。
4.2 PPO、GRPO 与 256-rollout budget
GRPO 每次 update 使用 32 tasks × 8 rollouts;PPO 使用 256 tasks × 1 rollout,所以两者同为 256 rollouts。PPO 每次覆盖更多不同任务,但要额外训练 value model;GRPO 能用同题多次采样计算相对 advantage。OpenClaw 与 Claude Code 的曲线在约 200–400 steps 内总体上升。作者观察到 PPO entropy 较平滑,GRPO 在 OpenClaw 后期出现更明显的 entropy 下降。
这部分没有重复 runs,也没有置信区间。曲线说明单次训练没有明显崩溃,不能回答 seed 变化后的均值与方差。
4.3 更难任务与 mix-harness
使用 Claude Code 生成 rollout 时,JobBench-Easy 从 20.46 提高到 27.20,OfficeQA-Full 从 8.53 提高到 21.54。论文只说明训练题是 JobBench-style / OfficeQA-style,没有披露各自的训练任务数量、完整构造细节或 task-level results。
Mix-harness 模型在 OpenClaw 与 Claude Code 上都达到“与 single-harness 相当或略高”的水平。证据来自训练曲线和作者描述,没有完整结果表,也没有重复 run。因此它更像一项可行性结果,还不足以证明跨 harness 训练稳定优于单 harness。
4.4 White-box 能迁移,但没有抹平 harness 差异
White-box policy 的确学到一部分通用 agent 能力,因为它在 OpenClaw 上仍比原始 Qwen3-30A3B 高 5.22 分。但 50.33 与 62.62 的差距说明,工具协议、prompt 组织和 context management 带来的 harness-specific behavior 没有消失。
Q5. 对 Claude Code、Codex harness 研究有什么直接启发?
第一,model API boundary 可以成为训练接口,但必须记录 token-level 事实。 只保存最终 transcript 不够。至少要保存原始 input/output tokens、rollout log-prob、task identity、model version、termination reason 和最终 workspace 的 verifier result。
第二,trajectory store 应该原生支持树,而不是把每个 call 塞进线性日志。 重试、context compaction、parallel tool execution 和 subagent 都会产生非线性结构。研究 Codex 或 Claude Code 时,最好先定义“哪个 actor 的哪些 tokens 接受哪个 reward”,再决定怎样落盘。
第三,跨 harness 训练要有严格的 transfer matrix。 一个更有说服力的实验是固定 task pool、initial weights、rollout budget、sampling temperature 和 verifier,分别在 Harness A、Harness B 以及 A+B 中训练,再把三个 policy 都放回 A 与 B 评测。这样才能区分通用能力、harness specialization 和简单的数据量收益。
第四,judge 应该像训练代码一样接受单元测试。 本文真实 case 里的“缺文件仍通过 under-120-words”说明,一个看似合理的 binary metric 也会漏掉 prerequisite。可以为每个 checker 自动生成 minimally failing workspaces,检查每条 metric 是否真的在预期条件下翻转。
第五,subagent 与 compaction 不一定永远该丢掉。 ClawGym II 先排除它们,避免错误 credit,这是稳妥的第一版。下一步可以给不同 actor 分开记 reward,或者只在有局部 verifier 时训练辅助轨迹。直接继承主任务终局 reward 仍然缺乏归因依据。
Q6. 最后怎样评价这篇论文?
我给 9.8 / 10 的作者兴趣度。 它和 Claude Code、Codex 这类完整 harness 的研究问题高度重合,而且把“外部 Agent 怎么接 RL”推进到了一组可实现的机制:serving proxy、prefix-tree reconstruction、fork filtering、token-in-token-out、importance correction 和 task-harness grouping。论文也做了 OpenClaw、Claude Code、white-box AgentLoop、JobBench、OfficeQA 与 PinchBench 的多角度实验。
需要保留六个限制:
这篇论文最值得带走的结论很具体:黑盒 harness 不是不能做 RL,难点是把 harness 产生的非线性调用记录恢复成可归因、可对齐、可验证的训练样本。 它已经证明这条路径能带来明显提升;要把结论推进到 harness-general learning,还需要公开实现、统一初始条件和更完整的跨 harness 因果对照。
证据说明:论文采用 arXiv non-exclusive distribution license,本文没有直接复制原图。Figure 1、Table 1 与 Table 2 以数据和机制重绘;Figures 2–8 的信息在文字与图表中总结。官方 ClawGym II 代码页截至核查时为空;case 与 judge 依据 ClawGym-Bench revision c8cbd1d0df033af24fc14064d40d6964ca8f611f,数据生成流程依据 ClawGym-SynData revision 98d0478ca2a0fbda22fcbba5da3e5e03da95f20d。
留言