OpenAI Agents API 三条路:官方托管、自建沙箱,还是 SandBase 托管会话

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

OpenAI Agents API Hosted Path: vs OpenAI-hosted / self-hosted

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谁跑编排谁跑命令和文件程序还要管什么
noneOpenAI没有执行器,也没有内置 shell输入、你自己实现的工具、事件流
openai_hostedOpenAIOpenAI 创建并管理沙箱任务、事件、函数工具
self_hostedOpenAI你,通过 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 页和 OpenAI SDK 示例 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,一次只能带一个事件。

下面是文档里的接法。本文没有执行。

Python
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 托管
谁管循环OpenAIOpenAISandBase,跑在 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 兼容说明里不支持的调用 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 定价页上每个方案都包含的项目 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 迁过来之前,先读 兼容说明。这里的代码是那一页的接法,不是一次测出来的运行。