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-인간-피드백 스타일 훈련을 수행합니다.
  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에서 직접 가져온 것이며 외부 가정은 추가되지 않았습니다.

관련