Back to Blog Polar:把任意 Agent 框架变成 RL 环境的黑盒方案

Polar:把任意 Agent 框架变成 RL 环境的黑盒方案

Paper
核心观点:不需要改造 agent 来适配 RL 框架,只需要在 LLM API 边界架代理捕获 token 级交互数据,就能对任意 agent harness 做 scalable RL 训练。

问题:Agent RL 的基础设施瓶颈

用 RL 训练 agent 越来越主流,但一个被忽视的系统问题是:你怎么把一个现成的 agent 框架(Claude Code、Codex、Qwen Code)接进 RL 训练管线?

传统做法是让 agent 适配 RL 框架——把 agent 的逻辑重写进框架的环境 API 里。这意味着每换一个 harness 就得写一套新的集成代码,而且重写过程中容易丢失原始执行路径里的训练信号(比如特殊的 context compaction、subagent spawn)。

NVIDIA 的 Polar 直接绕过了这个问题。

核心设计:模型 API 代理

Polar 的关键洞察:不需要改造 agent,只需要在 LLM API 边界 上架一个代理(proxy)。

具体做法:让 agent 正常运行,只是把它的模型 API base URL 指向 Polar 的 gateway。Gateway 对每个 LLM 请求做四件事:

  1. 识别 provider:根据请求路径和 header 区分 Anthropic / OpenAI / Google API 格式
  2. 归一化请求:转换成 OpenAI Chat Completions 格式发给本地推理服务器,同时加上 logprobs 等训练所需字段
  3. 记录 token 级数据:存储 prompt/response token IDs、log probabilities、finish reason
  4. 返回 provider 格式:把响应转回 agent 期望的格式(包括对 SSE streaming 的合成支持)

Agent 完全不知道被观察了。harness 内部的 context compaction、subagent spawn、tool schema ——这些原本需要特殊处理的信号,都自动被完整捕获。

polar_arch
图1: Polar 架构总览 — 在 agent harness 和推理服务器之间放置模型 API 代理
rollout_style_vs
图2: Polar 的代理边界 vs 传统 rollout 框架的集成方式

轨迹重建:per-request vs prefix merging

捕获到的 LLM 调用需要组装成可训练的轨迹。Polar 提供两种策略:

per-request(保守):每个 LLM 调用就是一个独立 trace。无损但碎片化——一个编码任务可能产生几百条短 trace。

prefix merging(推荐):通过 token prefix 匹配自动把多轮对话合并成长 trace。关键规则:只有当新请求的 prompt 是前一个请求 prompt 的精确前缀时才合并;遇到 context compaction 或 subagent spawn 则自然断链。合并后只把行为策略采样的 assistant token 标记为可训练,harness 插入的 interstitial token 标记为 mask。

效果:trace 数量从 1185 降到 218(5.4× 压缩),wall-clock 从 189.5 分钟降到 35.2 分钟,rollout GPU 利用率从 20.4% 提升到 87.7%。

traj_build
图4: 轨迹重建 — per-request vs prefix merging 策略对比

异步流水线

长程 agent rollout 混合了多种耗时操作:运行时启动、依赖安装、agent 执行、评估器运行、patch 应用。Polar 用阶段隔离的 worker pool 管理这些成本:

  • INIT pool:启动容器、安装依赖(CPU 密集)
  • READY buffer:预热好的运行时排队等待
  • RUNNING pool:执行 agent(GPU 密集)
  • POSTRUN pool:构建轨迹、运行评估、清理资源

评估器运行时所需的新容器在 agent 执行期间就开始预热。超时的 session 仍会进入 POSTRUN 以恢复部分 trace。

async_staging
图3: 异步 rollout staging — INIT/READY/RUNNING/POSTRUN 阶段隔离

实验结果

SWE-Bench Verified:同一个 Qwen3.5-4B 基座,用简单 GRPO + Polar 在四个 coding harness 上训练:

Harness基座Polar RL增益
Codex3.8%26.4%+22.6
Claude Code29.8%34.6%+4.8
Pi34.2%40.4%+6.2
Qwen Code34.6%35.2%+0.6

Codex 上 22.6 点增益最显著——因为 Codex 的 action protocol 对 Qwen 模型完全陌生,RL 有大量改进空间。Qwen Code 作为 native harness 增益最小(0.6),因为基座已经对齐。

swegym_grpo_training_curves
图6: 四个 coding harness 上的 GRPO 训练曲线

离线 SFT 数据生成

用 Qwen3.5-122B + Pi harness 对 1638 个 SWE-Gym 实例生成 SFT 数据,504 条通过验证(30.8% 接受率),平均每条轨迹 104 轮对话、51 个 assistant turn。已开源 Apache-2.0 许可。

工程意义

Polar 的价值不在算法创新,而在系统设计哲学的转变:把 agent 的测试时环境当作 RL 系统的一等公民,而不是需要移植进 trainer 的实现细节

这对 OpenClaw 类项目有直接参考意义——不需要为每个 agent 写环境适配代码,只需要在模型 API 层做代理捕获。rollout、训练、推理三者解耦,各自独立扩展。

Tags: #NVIDIA NeMo