2026-07-15
NVIDIA Polar:对任何 Agent Harness 做强化学习
问题:Agent RL 的工程瓶颈
给 LLM Agent 做强化学习,目前面临一个尴尬的工程问题:
Agent 的执行环境(harness)——比如 Codex CLI、Claude Code、Qwen Code——都有自己一套复杂的 system prompt、工具调用格式、状态管理逻辑。传统的 RL 框架要求把 harness 重写成
env.init()/env.step()/env.reset()接口,不仅工作量巨大,还会丢失 harness 特有的执行细节。
更麻烦的是,如果 harness 是闭源的(比如 Claude Code),你根本没法改它的代码。
Polar 的核心洞察
2026 年 5 月,NVIDIA NeMo 团队开源了 Polar(GitHub: NVIDIA-NeMo/ProRL-Agent-Server,Apache 2.0)。
Polar 的洞察非常简洁:
无论什么 agent,它必须调用 LLM API。这个 API 边界就是天然的拦截点。
代理(Proxy)模式
Polar 在 agent harness 和 inference server 之间插一个 API 代理:
Agent Harness ──→ [Polar Proxy] ──→ Inference Server (SGLang/vLLM)
│
▼
记录 token 级数据
(prompt、response、log probs)
│
▼
重建 RL trajectory
只需要把 harness 的 model base URL 指向 Polar 的 gateway,不需要改任何 harness 代码。
四个核心步骤
| 步骤 | 做什么 |
|---|---|
| 1. 检测提供方 API | 自动识别 Anthropic Messages、OpenAI Chat、Google generateContent |
| 2. 标准化请求 | 把不同格式统一转成 OpenAI Chat Completions |
| 3. 捕获 token 级数据 | 保存 prompt token IDs、sampled token IDs、log probabilities |
| 4. 还原响应格式 | 把结果转回 harness 期望的格式返回,对 harness 完全透明 |
关键技术
- Token-faithful 重建 — 直接用 inference server 返回的 token IDs 和 log probs 重建训练轨迹,不重新编码,避免 drift
- Prefix Merging — 多轮对话中复用公共前缀的 hidden states,训练速度提升 5.39×
- 异步解耦 — rollout 节点的 runtime 预热、agent 执行、轨迹重建、评估并行处理
- 支持流式 — 对期望 SSE 流式响应的 harness,Polar 先请求非流式结果再合成流式输出
实验结果
用简单的 GRPO 算法在 SWE-Bench Verified 上测试:
| Harness | Qwen3.5-4B 基线 | +Polar GRPO | 提升 |
|---|---|---|---|
| Codex CLI | — | +22.6 | 最大 |
| Claude Code | — | +4.8 | |
| Qwen Code | — | +0.6 | 已是 Qwen 亲儿子 |
| Pi | — | +6.2 |
+22.6 分 在 SWE-Bench 上是巨大的提升,说明 harness-native 的训练确实学到了原生执行路径上的细节。
对 Hermes Agent 的启示
你正在用的 Hermes Agent 本身就是个 agent harness(E-T-C-S-L-V 六元组)。Polar 的思路意味着:
理论上你可以把 Hermes 挂到 Polar proxy 后面,然后用 GRPO 训练一个 "Hermes-native" 的模型——模型学会在 Hermes 的工具调用格式、上下文管理方式下更高效地执行任务。
论文:arxiv.org/abs/2605.24220 代码:github.com/NVIDIA-NeMo/ProRL-Agent-Server