huggingface/OpenEnv

An interface library for RL post training with environments.

OpenEnv – エージェント実行環境

概要 – OpenEnv は、隔離された強化学習環境(各環境は Docker イメージとしてパッケージ化)を実行し、シンプルな Gymnasium スタイルの API(reset()、step()、state())を介して対話できる Python ライブラリです。環境はローカル、クラウドサンドボックス、または Hugging Face Space でホストでき、WebSocket を介して通信し、非同期と同期の両方の使用をサポートします。

重要性 – LLM 駆動のエージェント向けの最新の RL には、エージェントがツールを呼び出し、観測を受け取り、報酬を得られる、安全で再現可能なサンドボックスが必要です。OpenEnv は、そのようなサンドボックスを作成、共有、トレーニングするための統一された方法を提供し、組み込みの報酬合成、評価ユーティリティ、および人気の RL フレームワーク(TRL、ART、SkyRL など)との緊密な統合を備えています。

主な機能

  • 単一 API – reset()、step()、state() は、非同期か同期かに関係なく、すべての環境で同じように機能します。
  • Docker 隔離環境 – 各環境は独自のコンテナで実行されるため、コードの実行、ブラウザの実行、金融タスクのシミュレーションを安全に行えます。
  • 40 以上のすぐ使える環境カタログ – ゲーム(Wordle、OpenSpiel)、コーディングサンドボックス、ブラウザナビゲーション(BrowserGym)、金融シミュレーター、およびコーディングエージェントデータセット用の Harbor ハーネス。
  • フレームワークに依存しないトレーニング – TRL、Unsloth、SkyRL、ART、Miles、Oumi、torchforge などと連携。例には GRPO トレーナーや非同期ハーネストレーニングが含まれます。
  • ツール公開環境 – MCP 環境は、本番環境のエージェント向けにツールエンドポイント(/mcp)を公開し、トレーニングには標準の step() ループを引き続き使用します。
  • 報酬と評価ヘルパー – ルーブリックで報酬を合成し、Inspect AI スイートで評価します。
  • CLI と SDK – openenv init、validate、push、import コマンドにより、新しい環境のスキャフォールディング、テスト、デプロイが簡単になります。

典型的なワークフロー

  1. 環境を選択または構築 – カタログから使用(例:Echo、Coding、BrowserGym)するか、openenv init my_env を実行して新しい環境をスキャフォールディングします。
  2. デプロイ – openenv push で Docker イメージを Hugging Face Space またはクラウドサンドボックスに送信します。
  3. コードから接続 – クライアントパッケージをインストールし(pip install git+https://huggingface.co/spaces/openenv/echo_env)、非同期または同期のコンテキストマネージャーを使用して reset() と step() を呼び出します。
  4. トレーニング – environment_factory を TRL トレーナー(例:GRPOTrainer)に渡すか、Harbor 統合を使用して、すべてのモデル呼び出しを TrainingTrace としてキャプチャし、RL-from-人間-フィードバックスタイルのトレーニングを行います。
  5. 評価 – 報酬ルーブリックを合成し、Inspect AI 評価を実行します。

クイックスタート

pip install openenv                     # コア SDK
pip install git+https://huggingface.co/spaces/openenv/echo_env  # サンプルクライアント
import asyncio
from echo_env import CallToolAction, EchoEnv

async def main():
    async with EchoEnv(base_url="https://openenv-echo-env.hf.space") as env:
        await env.reset()
        res = await env.step(CallToolAction(tool_name="echo_message",
                                            arguments={"message": "Hello"}))
        print(res.observation.result["data"])  # → Hello
        print(res.reward)

asyncio.run(main())

同期コードの場合は、クライアントを .sync() でラップします。

ドキュメントとコミュニティ – 完全なドキュメント、チュートリアル、Discord は README にリンクされています。プロジェクトは BSD-3-Clause ライセンスの下にあり、初期段階であるため、API は変更される可能性があります。


上記のすべての情報は、リポジトリの README から直接取得したものであり、外部の仮定は追加されていません。

関連