OpenAI Agents API 三条路:官方托管、自建沙箱,还是 SandBase 托管会话
用 OpenAI Agents API 时,代码沙箱可以交给 OpenAI、接到自建执行器,或改用 SandBase 的兼容托管会话。本文只讲这三条路,以及 SandBase 明确拒绝的调用。

OpenAI Agents API 的文档先把产品拆成两截:OpenAI 托管的 Codex harness(编排层),以及可选的运行环境。环境可以不配(none),可以让 OpenAI 开代码沙箱(openai_hosted),也可以在你自己的机器上跑 codex exec-server(self_hosted)。第三条路是另一家托管:官方 OpenAI SDK 不变,只改 base_url 和 API 密钥,会话由对方托管。SandBase 文档写的是这条路。它不是「OpenAI 兼容聊天接口」,也不接受 self_hosted。
先说结论
- 兼容 Agents API,指的是 Agent、Session(会话)、事件、items、turns 和 Skills。把聊天接口的
base_url换掉,是另一类产品。- 在 OpenAI,三种
environment.type只决定命令和文件谁来跑。编排层仍在 OpenAI。自建沙箱也不会让这个 API 符合 Zero Data Retention。- Vercel、CoreWeave、E2B 等名字,是把代码沙箱接到 OpenAI 的编排层上。执行器还是你的。
- SandBase 托管会话。SDK 要求带
environment,所以传{"type":"openai_hosted"}。self_hosted返回 400。本文没有实际跑这段代码。
先别把它当成聊天网关
OpenAI 的 Agents 指南 把运行时分成三档。Agents API 适合 OpenAI 来管长任务。Agents SDK 把循环放在你的程序里。Responses API 是直接调模型。搜「OpenAI 兼容」的人,多半要的是第三档:换一家模型服务,HTTP 形状仍像 Chat Completions 或 Responses。
兼容 Agents API 的平台,要让 client.beta.agents 和会话在换了地址和密钥之后还能用。SandBase 的 兼容说明 把范围写成:Agents、Sessions、事件、items、turns、Skills。MCP 连接和 Secrets 走 SandBase 的 HTTP,不是 SDK 方法。
只调模型服务和数据接口,不必上这套协议。那篇是 三套账号能不能收成一套 API 密钥。只想用 E2B SDK 跑命令,看 E2B SDK 先留着:代码沙箱暂时免费。
OpenAI 的 environment 到底在选什么
架构说明(2026-11-07)写得很直:OpenAI 跑编排层,你的程序送任务、收结果。环境是可选的,给文件和命令用。
environment.type | 谁跑编排 | 谁跑命令和文件 | 程序还要管什么 |
|---|---|---|---|
none | OpenAI | 没有执行器,也没有内置 shell | 输入、你自己实现的工具、事件流 |
openai_hosted | OpenAI | OpenAI 创建并管理沙箱 | 任务、事件、函数工具 |
self_hosted | OpenAI | 你,通过 codex exec-server | 创建、重连、关闭、文件、环境密钥 |
概览 把费用分成模型 API 价格、内置工具的标准价格,以及 OpenAI 托管沙箱的容器价格。同一页写明:数据驻留目前只支持美国,不支持 Zero Data Retention。选自建沙箱也不会让 Agents API 符合 ZDR。SandBase 的兼容页同样没有给出 ZDR 模式。不要在这条路上找 ZDR。
自建沙箱,编排层还是 OpenAI 的
自建沙箱文档 写:执行器按编排层的要求跑命令、读写文件、使用本机 MCP。连接都是出站:向 https://api.openai.com 注册,再用 WebSocket 连 wss://codex-cloud-environments.chatgpt.com 收命令。程序用 OPENAI_API_KEY。另一把环境密钥放进沙箱,变量名是 CODEX_API_KEY。这把密钥不能调用别的 API,但 Agent 写出的代码读得到它。
程序要先打开事件流,再用会话返回的 remote_url 和环境 ID 启动 codex exec-server,环境连上之后才能发输入。启动和关闭也可以走 webhook。这条分界更细的说明在 OpenAI Agents API 自托管沙箱:哪些由你控制。这里不把那篇再写一遍。
OpenAI 的自建页列出了可以跑这个执行器的厂商,包括 Vercel、CoreWeave、E2B、Daytona、Modal、Cloudflare。Vercel 的说明 和 CoreWeave 的说明 都是同一模式:沙箱是他们的,编排层是 OpenAI 的。需求是「Codex 循环留在 OpenAI,shell 放到我们的机器上」时,看这些文档。它们不是「用非 OpenAI 密钥托管 Agents API」。
SandBase 这条托管路径改了什么
SandBase Agents 写:对 Agents 和 Sessions,产品兼容 OpenAI Agents API。运行时由 SandBase 托管。你选目录里的模型和工具,再从应用里开一个托管会话。页面还写,SandBase Agents 跑在 OpenAgentCore 上,那是 MiniMax 以 MIT 许可实现的这套协议;一个会话可以在托管代码沙箱里跑 Codex、Claude Code 或 MiniMax Code。这是 SandBase 的产品说明,不是说你因此拥有 OpenAI 的云账号或容器。
SandBase 的 /agents:托管个人 Agent 和会话,旁边是 OpenAI SDK 的配置面板。
合同在 兼容说明。官方 SDK 的 base_url 指到 https://api.sandbase.ai/v1,密钥用 SandBase API 密钥。直接发 HTTP 可以不带 environment。SDK 不行。Python 缺这个参数会 TypeError。传 {"type":"openai_hosted"}。SandBase 接受这个值,并且每个会话都在它自己的托管云里跑。别的值,包括 self_hosted,返回 400,错误信息是 only openai_hosted environment is supported。返回体里的 environment 不用拿来决定机器放哪。
你不用跑 codex exec-server,不用建 OpenAI 的环境密钥,也不用为会话搭一个 webhook 来创建沙箱。MCP 不能写成 OpenAI 那种内联工具,那种写法返回 400。先 POST /v1/mcp-connections 登记连接,再在 Agent 上引用 mcp_connections。Secrets 是 SandBase 的记录,不是 OpenAI vault。调 vault 会 404。
兼容说明里的模型 ID 是 DeepSeek V4 Flash。Agents 页面的配置示例用的是 anthropic/claude-sonnet-5.5。用所选运行时支持的模型。会话一旦开始,模型就固定了。Build Agent 是控制台路径:先定义,在会话里试,再从代码调用。会话文档 管事件流和历史。先打开实时流,再发输入。events.create 返回 202,一次只能带一个事件。
下面是文档里的接法。本文没有执行。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["SANDBASE_API_KEY"],
base_url="https://api.sandbase.ai/v1",
)
agent = client.beta.agents.create(
model="deepseek/deepseek-v4-flash",
name="Research assistant",
instructions="Keep output brief.",
)
session = client.beta.agents.sessions.create(
agent_id=agent.id,
environment={"type": "openai_hosted"},
)
print(agent.id, session.id)该页核对过的 SDK:openai-python 3.13.0 和 3.24.0,openai-node 7.28.0。Node 26 上要强制 HTTP/1.1。同一条 HTTP/2 连接上,事件流开着时 POST 可能卡住。SDK 会带 OpenAI-Beta: agents=v1。SandBase 接受这个值,或者不带这个头。别的值是 400。
如果只要跑一条 shell 命令,用 代码沙箱 和 E2B SDK。那是代码沙箱,不是 Agents 会话。
按团队需求选
| 需求 | OpenAI 从头到尾 | OpenAI 编排 + 你的沙箱 | SandBase 托管 |
|---|---|---|---|
| 谁管循环 | OpenAI | OpenAI | SandBase,跑在 OpenAgentCore 上 |
| shell 在哪 | 设了 openai_hosted 就在 OpenAI | 你的执行器 | 只能在 SandBase 托管云 |
| 私有网络或自定义镜像 | 用 OpenAI 托管的限制,或改自建 | self_hosted 就是干这个的 | 不提供。self_hosted 是 400 |
| 只驻留美国、没有 ZDR | 概览写明了 | 还是这个 API,限制相同 | 不是 ZDR 产品。保留策略要另查 SandBase |
| 一套密钥调目录模型和数据接口 | OpenAI 模型和 OpenAI 工具 | 编排层仍要 OpenAI 密钥 | SandBase 密钥、目录模型、SandBase MCP |
| 你要运维的 | 任务和事件 | 环境密钥、codex exec-server、重连、清理 | Agent 定义、会话输入、事件流 |
| 账单 | 模型 + 工具 + 托管容器价格 | OpenAI 用量再加沙箱厂商 | 一个 SandBase 余额。目录价。代码沙箱是另一项产品 |
SandBase 会直接拒绝的调用
兼容页的 “Not supported” 表,2026-11-07 读到的,是上线前该看的清单:
SandBase 的 OpenAI Agents API 兼容说明:不支持的调用里,self_hosted 返回 400,只接受 openai_hosted。
environment为self_hosted:400,only openai_hosted environment is supported。agents.create里multi_agent.enabled:400,multi_agent is not supported。- 内联 MCP、
tool_search、programmatic_tool_calling、computer_use:400。创建时只接受function和一个web_search。 events.create带tool_result或 computer-use 审批:400。走到requires_action的会话不支持。- 一次请求里多于一个事件:400。
vault_ids:400。beta.agents.vaults:404,纯文本,不是 JSON 错误体。sessions.traces、sessions.subagents、environments.templates:404。skills.versions.delete:404。ZIP 根上直接放SKILL.md、而不是放进一个顶层目录,是 400。
实时流上的 Last-Event-ID 或 ?after= 是 400,流不回放。失败写在 session.failure,不是 session.error。Agents 页的常见问题还写明不支持图片输入事件。这不是换了个标志的完整 OpenAI 功能面。
账单长什么样
OpenAI 概览:模型按所选模型的 API 价格,工具按内置工具的标准价格,OpenAI 托管沙箱按容器价格。本文不抄那张价目。自建执行器还会在 OpenAI 用量之外再收计算费。
SandBase 的 Agents 页写:Agent 用掉的 token 和调用的工具,从同一个余额按目录价格扣,每次会话和扣费出现在 Activities。另一项是 代码沙箱 FAQ:创建、运行、停止兼容 E2B 的沙箱目前不扣余额,可能有公平使用上限,收费前会公告。模型服务和数据接口照常计费。定价页 上,Build 按次、没有订阅,失败的模型或数据接口调用不收费。不要把「代码沙箱暂时免费」读成「Agents 会话有一个公布过的 $0 运行时」。Agents 页给会话标的是模型 token 和工具调用。
SandBase 定价页:模型服务、数据接口和运行时记在同一个余额上;包含项里代码沙箱目前标为 $0。
常见问题
什么样的平台才算兼容 OpenAI Agents API?
实现了 Agents、会话、事件、items、turns 和 Skills,官方 SDK 换 base_url 和密钥还能用。SandBase 的地址是 https://api.sandbase.ai/v1。这不是聊天补全网关。
该用 OpenAI 托管沙箱、自建沙箱,还是 SandBase?
要 OpenAI 提供 Linux 工作区,并接受它的计费和仅美国驻留,用 openai_hosted。shell 必须在你控制的机器上,并且你愿意跑 codex exec-server,用自建。要官方 SDK 的 Agents 和会话、一套 SandBase API 密钥、目录里的模型服务和 SandBase 工具,而且不需要 self_hosted,用 SandBase。
OpenAI SDK 能在 SandBase 上创建会话吗?
支持的那一层可以。SDK 要求 environment。传 {"type":"openai_hosted"}。self_hosted 返回 400。上线前对一下兼容说明里的 SDK 版本。上面的代码没有为本文执行过。
按谁必须跑编排、谁必须跑 shell 来选。OpenAI 的三种环境里,编排层都在 OpenAI。自建厂商是给这个编排层接执行器。SandBase 是另一份托管合同:官方 SDK、SandBase API 密钥、会话在 SandBase 的云里,以及一份写明的 400 清单。把生产上的 OpenAI Agent 迁过来之前,先读 兼容说明。这里的代码是那一页的接法,不是一次测出来的运行。