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コマンドにより、新しい環境のスキャフォールディング、テスト、デプロイが簡単になります。
典型的なワークフロー
- 環境を選択または構築 – カタログから使用(例:
Echo、Coding、BrowserGym)するか、openenv init my_envを実行して新しい環境をスキャフォールディングします。 - デプロイ –
openenv pushで Docker イメージを Hugging Face Space またはクラウドサンドボックスに送信します。 - コードから接続 – クライアントパッケージをインストールし(
pip install git+https://huggingface.co/spaces/openenv/echo_env)、非同期または同期のコンテキストマネージャーを使用してreset()とstep()を呼び出します。 - トレーニング –
environment_factoryを TRL トレーナー(例:GRPOTrainer)に渡すか、Harbor 統合を使用して、すべてのモデル呼び出しをTrainingTraceとしてキャプチャし、RL-from-人間-フィードバックスタイルのトレーニングを行います。 - 評価 – 報酬ルーブリックを合成し、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 から直接取得したものであり、外部の仮定は追加されていません。
関連
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- プロジェクト