跳到正文
原文
Hugging Face Blog·· 8 天前精选AI 评分63

Hugging Face Hub 上线强化学习环境筛选与跨框架加载

Welcome RL Environments to the hub

AI 导读

Hugging Face Hub 新增 RL Environments 筛选,带 rl-environment 标签的数据集仓库会集中出现在 huggingface.co/datasets?

推荐理由

强化学习环境以带标签数据集上架 Hub,Harbor、Verifiers、OpenEnv 与 NeMo Gym 可共用任务集并读取奖励。

正文 · AI 翻译

强化学习环境为智能体 AI 系统带来新能力,也是衡量并提升智能体性能的好方法。因此,Hugging Face Hub 现在为 RL Environments 设立了专门的位置。

环境会给智能体一项任务,对其行动以观测作出响应,并对结果评分。所得奖励可在评估期间衡量智能体的性能,或在训练期间提供学习信号。关于这一交互循环的介绍,请参见 我们关于环境的博文。在环境中,智能体将执行一组以数据集表示的任务。因此,环境大致可分为两部分:任务集和运行时。本次发布聚焦于任务集。

Browsing the RL Environments filter on the Hugging Face Hub

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

停止搭建环境注册表

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

我们认为这种形态是错的。环境就是任务、测试、容器和奖励规则,也就是其上附有运行时的数据。Hub 已经能存储数据、为其做版本管理、进行门控、提供预览,并服务数以百万计的人。它不需要第二套系统来存放环境。它需要一种方式来表明:“这些数据是一个环境,以及如何运行它。”

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

框架继续做自己擅长的事。Hub 做自己擅长的事,即托管、发现和版本管理。不必由任何人拥有这份目录。事实上,目录也可以在其他平台上运行,由 hub 提供支持。

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

已发布的内容

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

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

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

每个框架标签都会在数据集页面上放置该框架的图标,并在 使用此数据集 中添加一段生成的片段。

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

运行一个环境并检查其奖励

选择适用于你的框架的示例,并在满足下文所列先决条件的独立 Python 环境中运行。

Harbor:运行参考解决方案

Harbor 可以从 Hub 仓库加载任务目录。oracle 智能体会运行该任务的参考解决方案,然后由 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

查看器会显示任务的奖励、verifier 输出和日志。这样可以在你尝试模型智能体之前,先检查任务及其参考解决方案。

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 的 registry 约定,因此单独的 Hub 仓库 ID 不能同时替代这两个值。

OpenEnv:运行智能体并检查其奖励

OpenEnv 的 Harbor 集成可以使用 OpenCode 等智能体运行相同的任务目录,并一并返回 verifier 的奖励和智能体的 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 隧道,以便沙箱中的智能体能够访问 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 adapters 池中挑选的 100 个高难度智能体任务,运行成本低于完整的多基准扫描。
  • NatureBench:为 Harbor 预构建的 90 个 NatureBench 任务。

Verifiers

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

NeMo Gym

接下来

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

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

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

来源:Hugging Face Blog · huggingface.co