跳到正文
北京时间
原文
Hugging Face:Blog·· 8 天前精选AI 评分60

Hugging Face Hub 上线 RL Environments 筛选与四个框架标签

Welcome RL Environments to the hub

AI 导读

Hugging Face Hub 为强化学习环境新增 rl-environment 筛选和框架标签,环境以数据集仓库形式托管,无需新增仓库类型、注册表或注册。

推荐理由

原文解释了用 Hub 数据集仓库托管 RL 环境的思路,并给出 Harbor、Verifiers、OpenEnv、NeMo Gym 四个框架的具体运行命令。

正文 · AI 翻译

强化学习环境为智能体 AI 系统赋予了新的能力,也是衡量和改进智能体性能的绝佳方式。因此,Hugging Face Hub 现在为 RL 环境设立了一个专门的区域。

环境为智能体分配任务,用观测结果回应其动作,并对结果打分。由此产生的奖励可以在评估期间衡量智能体的性能,或在训练期间提供学习信号。关于这一交互循环的介绍,请参阅我们关于环境的博客文章。在环境中,智能体会执行一组以数据集形式表示的任务。因此,环境大致可以分为两部分:任务集和运行时。在本次发布中,我们重点关注任务集。

Browsing the RL Environments filter on the Hugging Face Hub

Hub 上的 RL 环境是一个数据集仓库,会出现在新的RL Environments 筛选器中。Use this dataset 按钮会给出在该框架中运行它的命令。没有新的仓库类型,没有注册表,也无需注册。Harbor、Verifiers 和 NVIDIA NeMo Gym 中已经有环境了。

别再构建环境注册表了

每一篇 RL 论文或每一个框架都用自己的方式来查找环境。自定义 hub、运行时注册表、独立的任务数据集,或者 GitHub 上带自定义加载器的任务列表。这意味着许多已发布的环境是孤立的:如果你为一个框架发布了一个环境,其他三个框架的用户就无法加载它。如果你想用另一个框架或一篇新论文中的环境进行训练,就需要手动移植。

我们认为这是错误的形态。一个环境就是任务、测试、容器和奖励规则,它们是数据,上面叠加一个运行时。Hub 已经能够存储数据、对其进行版本管理、门控、预览,并将其提供给数百万人。它不需要第二个系统来承载环境。它需要的是一种方式来说明“这些数据是一个环境,下面是运行它的方法”。

任务数据存放在 Hub 上。运行时配置和验证器代码可以放在仓库或框架中。

框架继续做它们擅长的事。Hub 做它擅长的事,即托管、发现和版本管理。没有人必须拥有这个目录。事实上,目录也可以在其他平台上运行,由 Hub 提供支持。

数据集仓库托管你的环境文件。框架在本地或受支持的云后端上运行它们。Hugging Face Jobs 可以运行云端工作负载,而基于 Jobs 构建的 Hugging Face Sandboxes 提供交互式命令执行。标签描述兼容性并生成加载命令;添加标签不会启动作业或沙箱。

本次发布的内容

RL Environments 筛选器。前往 huggingface.co/datasets?other=rl-environment。每个带有 rl-environment 标签的数据集都会出现在那里,无论它适用于哪个框架。

框架标签。四个环境框架被注册为数据集库:

标签 框架
harbor Harbor
verifiers Verifiers
openenv OpenEnv
nemo-gym NeMo Gym

每个框架标签都会在数据集页面上显示该框架的图标,并在 Use this dataset 中添加一段生成的代码片段。

一个数据集可以带有多个框架标签。这正是关键所在。标签描述的是兼容性,而兼容性不是排他的。每个列出的框架都必须支持仓库中的文件;添加标签并不会转换它们。

运行环境并检查其奖励

选择适用于你的框架的示例,并在一个单独的 Python 环境中使用下面列出的先决条件运行它。

Harbor:运行参考解决方案

Harbor 可以从 Hub 仓库加载任务目录。oracle agent 运行任务的参考解决方案,然后由 verifier 对结果进行评分。它不会调用模型。

uv tool install --python 3.13 'harbor==0.21.0'
harbor run \
    --repo https://huggingface.co/datasets/harborframework/terminal-bench-2.1 \
    --dataset terminal-bench-2.1@2.1.0 \
    --include-task-name '*regex-log' \
    --agent oracle --env docker --jobs-dir results/harbor
harbor view results/harbor

viewer 会显示任务的奖励、verifier 输出和日志。这可以在你尝试模型 agent 之前检查任务及其参考解决方案。

Verifiers:在同一任务上运行模型

verifiers v1 的 Harbor 集成可以在不同的运行时(例如 Docker)中运行相同的任务目录。它还支持不同的 harness,包括一个极简的 bash harness。

uvx --python 3.13 --from 'verifiers[harbor]' eval harbor \
    --env.taskset.repo https://huggingface.co/datasets/harborframework/terminal-bench-2.1 \
    --env.taskset.dataset terminal-bench-2.1@2.1.0 \
    --env.taskset.tasks '["regex-log"]' \
    --env.agent.runtime.type docker \
    --env.agent.harness.id bash \
    --model "$MODEL" \
    --client.base-url "$LLM_URL"

这里 repo 是完整的 Hugging Face Git URL,而 dataset 是该仓库 registry.json 中的名称和版本。此加载器使用 Harbor 的注册表约定,因此仅凭一个裸 Hub 仓库 ID 无法同时替代这两个值。

OpenEnv:运行 agent 并检查其奖励

OpenEnv 的 Harbor 集成 可以使用诸如 OpenCode 之类的 agent 运行相同的任务目录,并返回 verifier 的奖励以及 agent 的 trace。

pip install "openenv[harbor]==0.7.0"

openenv harbor rollout \
    --llm-url "$LLM_URL" \
    --model "$MODEL" \
    --dataset harborframework/terminal-bench-2.1 \
    --task-index 0 \
    --harness opencode \
    --sandbox docker \
    --out rollout.json

该命令会下载数据集的 tasks/ 目录,在 Docker 中运行一个任务,并写入结果。默认连接使用临时的 Gradio 隧道,以便沙盒化的 agent 能够访问 OpenEnv 的模型代理。请阅读 verifier 结果和模型调用次数:

import json
from pathlib import Path

result = json.loads(Path("rollout.json").read_text())[0]
print("Reward:", result["reward"])
print("Model calls:", result["n_turns"])
print("Error:", result["error"])

奖励为 None 意味着没有产生 verifier 奖励;在将此次运行解释为模型失败之前,请检查 error。此路径需要 Harbor 任务目录。

NeMo Gym:生成响应并检查奖励

NeMo Gym 支持评估和 RL 训练:其环境收集轨迹并计算奖励,而训练框架则更新模型权重。例如,Structured Outputs 数据集 将提示与 JSON schema 配对。其 verifier 奖励 schema 遵循情况;它不检查生成的内容是否事实正确。

最棒的部分是,这提供了一个仓库和一个讨论标签页,人们可以在其中报告来自所有主流框架的损坏任务。因此,当作者修复一个有问题的测试时,每个框架都会在下一次拉取时获得该修复。

为你的环境添加标签

打开你的数据集卡片,并将以下内容添加到 YAML 头部:

---
pretty_name: Terminal-Bench 2.0
tags:
- rl-environment
- harbor
- verifiers
---

这就是整个集成过程。保留 rl-environment,然后列出所有可以加载你的文件的框架。如果你的环境适用于我们尚未注册的框架,请向受支持库列表提交 PR。

文档中有完整参考。

已在 Hub 上

我们已提交 PR,为人们已经用于训练的一些环境添加标签。如果你维护其中某一个,请合并该 PR,你的环境就会出现在筛选器中。

Harbor

  • BeyondSWE:作为 Harbor 任务目录的 BeyondSWE 基准,每个实例一个文件夹。
  • Terminal-Lego:基于真实 StackOverflow 问题构建的 Terminal-Bench 风格任务,仅在通过 Docker 往返验证后保留。
  • Harbor-Mix:从 Harbor 适配器池中挑选的 100 个困难 agentic 任务,运行成本比完整的多基准扫描更低。
  • NatureBench:为 Harbor 预构建的 90 个 NatureBench 任务。

Verifiers

  • Reverse-Text-RL:prime-rl 在 CI 中用来调试 RL 训练的小型反转任务。
  • Multi-SWE-RL-Verified:Multi-SWE-RL 的 4,703 行中通过 gold-patch 验证的 2,232 行,覆盖 C、Go、Java、JavaScript、Rust 和 TypeScript。
  • R2E-Gym-Subset-Verified:经过验证的 R2E-Gym 子集。
  • Scale-SWE-Verified:20,181 个 Python 问题解决任务中,端到端提供干净奖励信号的 17,202 个。

NeMo Gym

  • Workplace Assistant:一个多步骤工具使用沙盒,包含五个数据库、26 个工具和 690 个业务任务。
  • Structured Outputs:使用结构化输出进行指令遵循。
  • CFBench:多语言约束遵循。
  • SysBench:多轮系统消息遵循。

接下来是什么

第一个版本为每个框架生成一个 default 片段。按配置的片段是下一步,这样包含多个任务集的仓库就能为每个任务集显示正确的命令。之后我们将研究针对具有严格布局的框架的结构检测。构建自定义任务 UI 也会非常酷,我们一直在试验这个:

更大的目标是让框架标记在所有地方都自动完成。OpenEnv 已经在上传时做到了。如果你维护 Harbor、Verifiers、Nemo Gym 或任何其他环境框架,请在你的推送路径中添加标签。只需几行代码,你的用户发布的每个环境都会对其他人可见。

如果你训练智能体,去浏览筛选器。如果你构建环境,请发布并标记它们,无论它们涉及编码、工具使用、游戏、机器人还是其他任务。包含文件、可运行的命令以及产生奖励的规则,以便他人使用。如果你的框架缺失,请将其贡献到受支持库列表。

来源:Hugging Face:Blog · huggingface.co