SuperAPI AI 工具集

generate-ors-env

智能体与模型

查看项目

更新于 10-15 13:48

技能介绍

用途

generate-ors-env 用于构建强化学习(RL)环境的 ORS(Open Reward Standard)变体。ORS 是 Open Reward Standard(openrewardstandard.io)定义的协议,采用 HTTP REST + Server-Sent Events,面向智能体环境。其标志性特征是奖励随每个 ToolOutput 内联返回,区别于 OpenEnv(外部/事后奖励)和 NeMo Gym(回合后 /verify)。

当用户已有共享领域模块(<domain>.py)并希望生成 ORS 变体时,应包装该模块,而不是把领域逻辑复制到框架文件夹中。

主要能力

该技能覆盖以下环境原型:

  • 纯 Python 游戏:单个 @tool,tasks.py 中包含 N 个任务字典构成训练集,通过 finished=True 给出终端奖励。
  • 有状态沙箱:setup() 从 task_spec 分配资源,teardown() 释放资源,每个工具提供奖励桩。
  • 视觉/计算机使用:返回 ImageBlock(data=<base64>, mimeType="image/png"),由 terminate(status) 工具发出终端奖励。

技能规定了服务端与客户端的确切导入方式:

服务端: from openreward.environments import ( Environment, Server, tool, ToolOutput, TextBlock, Split, ImageBlock, )

客户端(rollout): from openreward import EnvironmentsAPI api = EnvironmentsAPI(base_url=URL, api_key="") env = api.get(ENV_NAME)

注意:不要使用 OpenReward(api_key=..., base_url=...),因为它会向 base URL 前置 matrix. / api. / construct. 子域,从而破坏 HF Space URL。EnvironmentsAPI 会原样访问 base_url。

使用方式

技能给出了目录结构与实现顺序。

目录结构: <env_dir>/ors/ ├── pyproject.toml # openreward>=0.1.33 + e2b-*(如需要)+ pydantic ├── init.py ├── Dockerfile # 本地开发镜像 ├── Dockerfile.spaces # HF Space(端口 7860,单阶段 pip install) ├── README.spaces.md # HF Space frontmatter ├── server.py # Environment 子类 + main() ├── tasks.py # 字典列表(每个任务的 task_spec) ├── rollout.py # 或 rollout_openai.py + rollout_qwen.py └── README.md # 一页开发 README

实现顺序:

  1. 任务文件 tasks.py:一个普通字典列表,每个字典成为每个会话的 task_spec。ORS 在 list_tasks() 时自动包装为 Task 对象。

  2. Environment 子类 server.py:定义 setup()(首次工具调用时调用)、teardown()(会话删除时调用)、list_splits()、list_tasks()、get_prompt() 以及 @tool 方法。关键契约包括:工具第二个参数为 params: PydanticModel,ORS 使用该模型的 JSON schema 作为工具的 input_schema;空输入也需 Pydantic 模型(class _Empty(BaseModel): pass);ToolOutput.blocks 为 [TextBlock | ImageBlock];reward 为 float | None,None 表示本步无奖励,0.0 表示已执行但得零分;finished=True 结束会话;task_spec 是字典,从 self.task_spec 读取,无 schema 校验。

  3. 服务端入口 main():使用 argparse 解析 --port 与 --host,调用 Server([WordleORS]).run(host=args.host, port=args.port)。端点名由类名小写自动派生,例如 WordleORS → wordleors。

  4. Rollout:始终从环境发现工具与任务,不要硬编码名称。使用 env.list_tasks("train")、env.list_tools(format="openai")、env.session(task=tasks[0]) 等。视觉环境截图工具返回 ImageBlock,读取 b.data(已是 base64)传入模型图像内容。

  5. Dockerfile:Dockerfile.spaces 是 HF Space 部署镜像,保持精简,示例使用 python:3.11-slim、创建用户、pip install openreward pydantic 等、EXPOSE 7860、CMD 启动 server.py。README.spaces.md 包含 frontmatter(title、emoji、colorFrom、colorTo、sdk: docker、app_port: 7860、tags)。

推送到 HF Spaces:创建名为 <owner>/<env_name>-ors 的 Space,将 E2B_API_KEY 等设为 Space secrets(而非环境变量),本地 .env 不应上传。使用 api.add_space_secret 与 api.upload_file 上传 Dockerfile.spaces、README.spaces.md、server.py、tasks.py、init.py、pyproject.toml。

验证关卡:

  • 本地服务器:uv run python server.py --port 8772,然后 curl http://localhost:8772/list_environments 返回 ["<envname>"]。
  • 工具发现:curl http://localhost:8772/<envname>/tools | jq '.tools | length' 与 @tool 方法数量一致。
  • 端到端:MAX_TURNS=3 uv run python rollout.py 驱动模型至少完成一次工具调用且无错误。

适用场景

适用于需要为智能体环境搭建 ORS 脚手架、编写 Environment 子类、定义任务与工具、生成 rollout 脚本,以及部署到 Hugging Face Spaces 的开发者。

限制与注意事项

技能列出了常见陷阱:

  • from openreward.environments.types import Task 是错误的;Task 位于 openreward.api.environments.types,通常无需导入。list_tasks 可返回普通字典,ORS 会包装。
  • OpenReward(base_url=URL) 会重写 URL,前置 matrix. / api. / construct. 子域;HF Spaces 应直接使用 EnvironmentsAPI(base_url=URL, api_key="")。
  • e2b-desktop 依赖 e2b 但未固定版本,需将两者都加入依赖。
  • 端点名是类名小写,例如 MyEnvORS 变为 myenvors,需明确告知用户以正确设置 ENV_NAME 环境变量。

参考资料包括 references/architecture.md(协议形态与 Server / Environment / Session 生命周期)、openrewardstandard.io(协议规范)、docs.openreward.ai(Python SDK 与平台文档)、PyPI 上的 openreward(最新 0.1.81+)、GitHub 上的 Talc-AI/OpenReward(源码)。

关于收费、价格、平台或效果等具体信息,资料中暂未提供。