AREXOpen in interactive Feed

AREX Feed Article

vLLM 账号称赞 Clement 的 harness 开源工作:10 个执行框架经代理接入 vLLM,称同一模型工具调用减少 31%

October 7, 2026

10 月 7 日,vLLM 项目的 X 账号 @vllm_project 发帖称赞一项开源工作:把 10 个 harness(代理执行框架,组织模型上下文、执行工具调用并校验输出)——包括 Claude Code 和 Codex——转换为 RL(强化学习)环境,经由一个代理接入 vLLM,以实现灵活的奖励设计;帖文称,同一模型在多个 harness 上获得提升,其中工具调用减少 31%。

帖文里的“Clement”对应 Hugging Face 联合创始人兼 CEO Clement Delangue:10 月 5 日,他的账号发布了与该描述逐项吻合的说明。 更完整的技术细节来自这项工作公开发布的指南《The ultimate guide to multi-harness RL》,署名作者八人,机构署名包括 Hugging Face 与 Liquid AI。 指南给出的口径是:多 harness RL 训练后,LFM2.5-2.6B 在四个 harness 上的平均通过率从 42% 升到 54%,在基础模型与训练模型都解出的测试任务上,工具调用减少 31%。这些数字全部出自项目方自己的运行。

帖文全文、短链指向与一条追问

帖文全文的译文如下:“来自 Clement 的出色开源工作:把 10 个 harness——包括 Claude Code 和 Codex——转换为 RL 环境,通过一个代理连接到 vLLM,以便灵活设计奖励。这套设置展示了同一模型在多个 harness 上的收益,包括工具调用减少 31%。”

帖文发布于 10 月 7 日 UTC 02:44。它附带的短链指向 @wakatchi_tech 在此前 41 分钟(UTC 02:03)发布的一条日语总结帖,而不是指南原文。

帖文下方,@asmirkn 写道:“工具调用减少 31% 是好事,但任务通过率还稳得住吗?更少的调用也可能只是更早放弃。” 这个问题的答案,写在指南的奖励设计里。

指南里验证过的 harness 名单与分数差异

Clement Delangue 在 10 月 5 日的帖文里这样介绍这项工作的由来:“我们把 Claude Code、Codex、Hermes、Pi、OpenCode 及其他编码 harness 变成了 RL 环境。没有改动 harness,也没有改动训练代码。任何开源模型、任何任务集,全部开源。”他同时写道:“今天有 10 个 harness 通过它运行,全部未经修改。”

指南把整套系统拆成三块:OpenEnv 提供环境接口与捕获代理(capture proxy),Harbor 提供任务与沙箱,TRL 提供训练器。指南称,已有十个 harness 通过捕获契约与轨迹校验,累计在 SmolDataEnvs 测试集上完成 16,000 次 rollout(一次完整的任务试跑):Claude Code、Gemini CLI、Codex、Mini-SWE-Agent、Qwen Code、Vibe、OpenHands SDK、OpenCode、Pi 和 Terminus 2;Harbor 0.22.0 还带有 40 多个 harness 的适配器。

这项工作针对的问题是:同一模型的成绩会随 harness 大幅波动。Hugging Face 官方账号 10 月 2 日介绍这份指南时说,同一份权重“在一个 harness 里得 62%、另一个里只有 33%”;在指南里,这指的是 LFM2.5-2.6B:Mini-SWE-Agent 下解出 62% 的测试任务,Claude Code 下只有 33%。 指南开篇还给了另一组:SWE-bench Pro 上,GLM-5.2 在一个 harness 里只解出 23%,换一个能到 52%;harness 的排名也不跟着模型走,Codex 在 GLM-5.2 的十个 harness 里排第二,在 Gemma 4 26B-A4B 里排第九。

代理:不改 harness 代码,兼容四种 API 方言

指南写道,捕获代理位于 harness 与模型之间,对 harness 来说它就是普通的模型 API 地址。Clement Delangue 的解释是:“harness 以为自己是在跟模型 API 说话,实际是在跟一台捕获代理说话——它懂编码代理使用的 4 种格式,转发给 @vllm_project,记录 vLLM 采样时的精确 token ID 和 logprob,再把可训练的序列交给 TRL。harness 本身成了环境。”

四种格式指 OpenAI Chat Completions、OpenAI Responses、Anthropic Messages 和 Gemini。代理按请求路径、请求头、请求体的形状判断方言,用取自 NVIDIA Polar 网关的转换器统一成 chat completions 转发;请求不做流式,代理等整段回复生成完再保存,按 harness 要的格式回放。

每个 rollout 的沙箱里,harness 只拿得到一枚 session id(会话标识)当作 API key,一个代理端口服务所有并发 rollout。代理记录 prompt 的 token(词元)ID、采样 token ID 和每个采样 token 的 logprob(对数概率),采样不截断(不用 top_p、top_k),以保持与策略一致。在 vLLM 上这需要两个启动参数:--return-tokens-as-token-ids 与 --logprobs-mode processed_logprobs;SGLang 也可以承担同样的角色。训练器与 vLLM 各占一张 H100;报告中的运行每次 rollout 用一个 E2B 沙箱。

奖励从 harness 另一端回流到训练。Harbor 的校验器可以返回多个命名分数,框架只取其中一项用于训练、不自行加权:只有一个分数时就用它,多个时取名为 reward 的那项,否则由调用方指定。LFM2.5-2.6B 用了两项:正确性,加上一项工具效率奖励。托管 API(OpenAI、Anthropic、Hugging Face Inference Providers)拿不到 token 级数据,只能用于评测,不能用于训练。

工具调用降幅的统计口径与两轮对照实验

指南做了两轮 LFM2.5-2.6B(Liquid AI 发布,26 亿参数)训练:一轮只在 OpenCode 里练,另一轮在多 harness 里练,即 OpenCode、Claude Code、Codex、Mini-SWE-Agent,每个 GRPO(分组相对策略优化)分组是一组 8 条 rollout,只用一个 harness。两轮都跑 1,000 步;训练任务 1,000 个,测试集是 250 个留出任务,每个任务在每个 harness 下跑一次,共 1,000 个评测单元。

多 harness 轮的平均通过率从 42% 升到 54%(第 1,000 步为 54.2%),只在 OpenCode 训练的那轮整体是 52.3%,两者总差距在噪声范围内。差别在于提升落在哪里:多 harness 模型在 Claude Code 下 49% 对 42%、Codex 下 54% 对 43%,而 OpenCode 单独训练的模型只在 OpenCode 下领先,58% 对 50%。

这个降幅的统计范围只包括基础模型与训练后模型都解出的任务:多 harness 模型在这些任务上少用了 31% 的工具调用,其中 Codex 下降幅最大,约为一半;对照之下,只在 OpenCode 训练的那轮是 11%。效率奖励最多 0.1 分,而且错误答案得 0 分,模型没法靠提前放弃拿奖励;同一批测试里,通过率是上升的。指南还记录过一次反面教训:更早的一轮运行给“提交任何答案”加了 0.2 分奖励,策略学会了立刻提交,留出集准确率从 74.0% 跌到 17.8%,而训练奖励看上去仍然健康。

作为对照,指南还用 Qwen3.8-27B 当教师,收集 3,189 条成功 rollout 做了监督微调:OpenCode 数据到 47.5%,四个 harness 的数据只有 43.1%,都低于两轮 RL 的结果。但指南同时提醒边界:两轮的对比是观察性的,看到的数据量也不同(多 harness 轮 626 个任务、1,870 万监督 token,OpenCode 轮 555 个、1,250 万);指南也说明没有跑过不含效率奖励的 LFM 对照,因此无法把降幅单独归因于奖励。早期用 Qwen3.5-2B 的多 harness 训练则先涨后跌:从 14.6% 升到 37.0%(第 500 步),第 1,000 步回落到约 26%。

已开源的组件、作者标出的边界与筹备中的更大运行

指南列出的开源清单包括几项已合并的集成:OpenEnv #1036(捕获代理与 Harbor)、OpenEnv #1280(类型化 TrainingTrace 接口)、TRL #6947(rollout worker);截至 10 月 1 日,TRL 的 worker 还只在 main 分支上,没进 v1.14.1 正式版。任务集、SFT 数据、训练代码与各检查点模型都放在 SmolDataEnvs 集合里,另有一个训练对比面板和配套教程。

工程边界也写在指南里:这个代理是单进程,作者记录它在大约 200 个并发会话时健康检查开始跟不上,320 个时进程崩溃。规模上的边界是:所有实验都停在 20 亿~26 亿参数的模型上,1,000 步、单一种子、每个设置只运行一次。

指南结尾写道,作者“正在同一套技术栈上筹备更大模型、更大规模的运行”,结果出来后补进同一篇指南。

参考链接