返回专栏
Agent SDK/02 · OpenAI/2.4

OpenAI Agents API

Agents API 通过一个 OpenAI 托管的 API 提供 Codex harness。

预计阅读
13分钟
全文字数
2,019字
资料截至
2026-10-09
Agent SDK · OpenAI2.4
版本与时效声明
  • Agents API 处于 beta 阶段。REST 请求需要带上请求头 OpenAI-Beta: agents=v11,Python SDK 的入口在 client.beta.agents.* 下。它在 2026-09-10 随 openai-python 3.13.0 加入 SDK2;本文基于 openai-python 3.26.1。
  • beta 期间,接口、事件名、计费方式都可能调整。文中代码已用 pyright 对照 3.26.1 做过类型检查;没有 API Key,因此没有实际运行。
  • 资料截至 2026-10-09,本文不随官方同步更新,请对照 Agents API 文档 使用。
本文要点
  1. Agents API 通过一个 OpenAI 托管的 API 提供 Codex harness。会话、编排、上下文压缩、故障恢复都由 OpenAI 负责;你只需要提供工具,并选择执行环境3。
  2. 四个核心概念:Agent(配置)、Environment(可选的沙箱)、Session(持久的 agent 实例)、Events / Items(实时事件和已保存的工作记录)3。
  3. 执行环境有三种:none、openai_hosted、self_hosted4。
  4. 它与 3.4 Claude Managed Agents 是同一类产品,也就是分层模型中的 L5。

1. 它是什么,和 Agents SDK 有什么不同#

Agents API(本文)Agents SDK
agent 循环在哪运行OpenAI 托管的 Codex harness你的进程
状态存在哪OpenAI 保存的 session、turns、items你的存储,或者 Responses 的会话状态
执行环境OpenAI 托管沙箱、自托管沙箱,或不使用沙箱你自己的运行时
集成工作量低中

以上取自官方对比表5。

托管的 harness 提供以下能力3:

  • 在沙箱中执行命令和代码;
  • 应用相关的 skills 和指令;
  • 通过工具或 MCP 连接外部数据;
  • 在 agent 工作过程中进行引导(steering);
  • 自动总结之前的工作,以管理上下文窗口;
  • 把工作拆成子任务,委派给 subagent;
  • 从中断处恢复会话。

计费:模型用量按所选模型的 API 价格计费;OpenAI 工具按标准价格计费;OpenAI 托管的沙箱按容器价格计费3。


2. 架构:三个角色#

Environment(可选)

OpenAI

你的应用服务器

sessions.create / events.create

SSE 事件 或 webhook

函数调用请求(requires_action)

命令、文件

executor 连接

提交任务

接收事件

处理函数工具

托管的 Codex harness

(模型与工具循环、会话)

none:没有计算环境

openai_hosted:OpenAI 托管的 Linux 沙箱

self_hosted:你的机器 / Docker / Lambda,

需要连接一个 executor

Environment(可选)

OpenAI

你的应用服务器

sessions.create / events.create

SSE 事件 或 webhook

函数调用请求(requires_action)

命令、文件

executor 连接

提交任务

接收事件

处理函数工具

托管的 Codex harness

(模型与工具循环、会话)

none:没有计算环境

openai_hosted:OpenAI 托管的 Linux 沙箱

self_hosted:你的机器 / Docker / Lambda,

需要连接一个 executor

官方对三个角色的定义6:

  • Harness:OpenAI 托管的 Codex 实例,运行模型和工具循环,维护 agent 的 session。
  • Environment:agent 执行命令、运行代码、操作文件的地方。可以是远程沙箱、你的笔记本、Docker 容器,或者 AWS Lambda。
  • Application server:你的代码。它负责提交任务、接收事件、处理函数工具;如果环境由你提供,还要负责环境的生命周期。
环境类型适合什么注意事项
none问答,或者只调用外部服务没有内置的 Bash、apply-patch、工作区文件和 executor MCP6
openai_hosted跑脚本、改文件、生成产物工作目录是 /workspace。可以配置 packages、files、setup_commands、env、网络。容器规格:small 为 1 vCPU / 1 GB,medium(默认)为 2 vCPU / 4 GB,large 为 4 vCPU / 16 GB7
self_hosted需要私有网络、自定义镜像,或者自己的算力由你启动环境并连接 executor,同时负责开通、重连、关闭以及文件留存6

3. 第一个 Session#

from openai import OpenAI
with OpenAI() as client:
with client.beta.agents.sessions.create(
agent={
"model": "gpt-6-astra",
"instructions": "写干净的代码,运行它,并报告真实的输出。",
},
environment={"type": "openai_hosted"}, # 由 OpenAI 开通并管理沙箱
input="创建 tree.py,打印当前目录的文件树。运行它,并把输出给我看。",
stream=True,
).with_result_collection() as stream:
for event in stream:
print(event.to_json(indent=None), flush=True) # 实时事件
result = stream.get_final_result()
print(result.output_text)
session_id = result.session_id # 保存起来,后续轮次要用

这是官方 quickstart 的中文化版本1。

OpenAI 托管沙箱Agents API你的应用OpenAI 托管沙箱Agents API你的应用loop[一个 turn]sessions.create(agent, environment, input, stream=true)开通沙箱事件流开始运行命令、编辑文件agent.session.turn.output_text.delta ...agent.session.turn.completedevents.create(agent.session.input.message) // 后续轮次,或者引导当前轮次
OpenAI 托管沙箱Agents API你的应用OpenAI 托管沙箱Agents API你的应用loop[一个 turn]sessions.create(agent, environment, input, stream=true)开通沙箱事件流开始运行命令、编辑文件agent.session.turn.output_text.delta ...agent.session.turn.completedevents.create(agent.session.input.message) // 后续轮次,或者引导当前轮次

4. Session、Turn、Item#

  • Turn 是 session 中的一个工作周期。消息发给空闲的 session,会开启一个新 turn;发给正在工作的 session,则用来引导当前 turn1。
  • turn 是异步运行的,你可以通过流式事件或者 webhook 跟踪进度1。
  • Events 是实时进度;Items 是已保存的消息和工具调用,可以事后读取8。
  • 流不会重放错过的事件。断线之后,要先读取 session 及其已保存的 item 来恢复状态1。

4.1 发送后续消息:使用幂等键#

from uuid import uuid4
from openai import OpenAI
def send_message(client: OpenAI, session_id: str, text: str, submission_key: str) -> None:
client.beta.agents.sessions.events.create(
session_id,
idempotency_key=submission_key, # 重试时复用同一个 key,避免重复提交
events=[
{
"type": "agent.session.input.message",
"input": [{"role": "user", "content": [{"type": "input_text", "text": text}]}],
}
],
)
submission_key = str(uuid4()) # 官方建议:先把 key 和消息一起保存,再提交

改编自官方示例1。另外几个常见操作:

  • 取消当前 turn:发送 {"type": "agent.session.input.cancel"};
  • 修改一个已存在 session 的模型、推理强度、服务等级:调用 POST /v1/agents/sessions/{id}14。

4.2 判断结果:只看到“空闲”不等于成功#

官方要求你检查以下三个事件之一,确定 turn 的结局:agent.session.turn.completed、agent.session.turn.failed、agent.session.turn.cancelled。即使 turn 已经 completed,也不能保证每个工具都执行成功,还要检查 agent 的输出18。


5. 复用 Agent 配置#

from openai import OpenAI
client = OpenAI()
# 1) 创建一次,得到 agent.id(可以把它当作“岗位模板”)
agent = client.beta.agents.create(
model="gpt-6-astra",
instructions="准确回答技术问题。",
reasoning={"summary": "auto"},
)
# 2) 每次开新 session 时,通过 agent_id 引用它
session = client.beta.agents.sessions.create(
agent_id=agent.id,
environment={"type": "none"},
input="解释一下 agent 是怎么连接 MCP 服务器的。",
)
print(session.id)

改编自官方示例4。几条规则4:

  • 修改已保存的 agent,只影响之后新建的 session。每个 session 在创建时复制一份配置,之后一直沿用。
  • 创建 session 时同时传 agent_id 和 agent,可以对这一个 session 覆盖部分配置。传入的对象或数组会整体替换对应字段,而不是合并。
  • 凭据放在 vault 里,和保存的配置分开存放。

6. 函数工具:在你这边执行#

当 agent 需要调用你的函数时,session 会发出 agent.session.requires_action 事件。你执行函数后,通过 agent.session.input.tool_result 把结果送回去9。SDK 提供了一个类型化的辅助写法:流式迭代的同时自动调用本地处理函数10。

from openai import OpenAI
from openai.lib.beta.agents import function_tool
client = OpenAI()
@function_tool(name="get_weather", description="查询城市今天的天气")
def get_weather(city: str) -> str:
return {"北京": "晴,25°C", "上海": "小雨,22°C"}.get(city, "暂无数据")
with client.beta.agents.sessions.create(
agent={"model": "gpt-6-astra", "tools": [get_weather.definition]}, # 声明工具
environment={"type": "none"},
input="北京今天适合跑步吗?",
stream=True,
tool_handlers={get_weather.name: get_weather}, # 本地处理函数:迭代流时自动执行
) as stream:
print(stream.get_final_result().output_text)
有副作用的函数要做持久化

断线后,你需要重新读取 session,从 required_actions 里找出还在等待的调用。如果函数已经执行过,就用同一个 turn_id 和 call_id 重新提交保存下来的结果;不确定是否执行过时,先检查实际结果,不要直接重跑9。


7. 多 Agent:托管的 subagent#

from openai import OpenAI
client = OpenAI()
with client.beta.agents.sessions.create(
agent={
"model": "gpt-6-astra",
"instructions": "把每个版本说明分别委派给一个 subagent,"
"提取对用户可见的变化和迁移步骤,等两边都完成后合并成一份摘要。",
"multi_agent": {"enabled": True, "max_concurrent_subagents": 2},
},
environment={"type": "none"},
input="版本 A:搜索支持按日期过滤。版本 B:导出接口改为返回下载 URL。",
stream=True,
).with_result_collection() as stream:
for _event in stream:
pass
result = stream.get_final_result()
print(result.output_text)

改编自官方示例11。要点如下:

  • 打开 multi_agent.enabled 之后,harness 会自动提供创建、发送消息、等待、中断 subagent 的工具,不需要你自己声明11。
  • 每个 subagent 有独立的上下文,可以并行工作。适合互不依赖的任务;短任务和彼此依赖的步骤,留在主 agent 里做更合适11。

8. 其他能力一览#

能力说明文档
Computer use执行浏览器任务,处理网站授权和登录Computer use
MCP 连接连接 OpenAI 侧或你的环境中的 MCP serverMCP connections
Plugins / Skills把 skills 和 MCP 配置打包,在多个 session 间复用Plugins
Vaults凭据存放在 vault 中,沙箱里看不到真实的密钥Vaults
Files & Artifacts上传输入文件,下载产出的文件Files and artifacts
Webhooks不用一直保持流,也能响应生命周期变化Session webhooks
Tracing在 Dashboard 里查看,或者导出为 OTLP JSONTracing
第三方沙箱文档提供了 AWS Lambda、Cloudflare、Daytona、E2B、Modal、Runloop 等的接入指南官方 llms.txt 索引

9. 什么时候用 Agents API#

适合不太适合
长时间运行、需要沙箱的任务,比如写代码并运行、处理文件、生成报告需要严格控制每一步循环逻辑的场景(用 Agents SDK,或者自己写循环)
不想运维 agent 基础设施(会话存储、恢复、压缩)对数据驻留和存储有严格要求、不能把会话交给厂商保存
希望直接复用 OpenAI 自己在 Codex 中打磨过的 harness多厂商模型混用(它只能用 OpenAI 模型)

右栏是笔者根据官方定位做的归纳,并非官方原文。


小结#

  • Agents API 把循环、会话、压缩、恢复、subagent都交给 OpenAI 的托管 Codex harness,你负责配置 agent、选择环境、处理函数工具和事件。
  • 记住三件事:session ID 要自己保存;消息要带幂等键;turn 的结局只看 completed、failed、cancelled 三个事件。
  • 想对照理解,可以看 Anthropic 的同类产品 3.4 Claude Managed Agents。两者的概念几乎一一对应:Agent、Environment、Session、Events。

相关笔记#

参考资料#

注释与出处#

  1. OpenAI,Run and continue sessions,https://developers.openai.com/api/docs/guides/agents-api/sessions ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8

  2. openai/openai-python,CHANGELOG.md 中 3.13.0(2026-09-10)条目 “add Agents API”,https://github.com/openai/openai-python/blob/9301e319ea33ef28fba380f39a289dedc14652c1/CHANGELOG.md ↩

  3. OpenAI,Agents API,https://developers.openai.com/api/docs/guides/agents-api/overview ↩ ↩2 ↩3 ↩4

  4. OpenAI,Configuring Agents,https://developers.openai.com/api/docs/guides/agents-api/configuration ↩ ↩2 ↩3 ↩4

  5. OpenAI,Agents(Compare agent runtime options 一节),https://developers.openai.com/api/docs/guides/agents ↩

  6. OpenAI,Architecture,https://developers.openai.com/api/docs/guides/agents-api/architecture ↩ ↩2 ↩3

  7. OpenAI,OpenAI-hosted sandboxes,https://developers.openai.com/api/docs/guides/agents-api/environments/openai-hosted ↩

  8. OpenAI,Events and items,https://developers.openai.com/api/docs/guides/agents-api/sessions/events ↩ ↩2

  9. OpenAI,Functions(Agents API),https://developers.openai.com/api/docs/guides/agents-api/tools/functions ↩ ↩2

  10. openai/openai-python,helpers.md(Typed beta Agents tools 一节),https://github.com/openai/openai-python/blob/9301e319ea33ef28fba380f39a289dedc14652c1/helpers.md ↩

  11. OpenAI,Multi-agent(Agents API),https://developers.openai.com/api/docs/guides/agents-api/multi-agent ↩ ↩2 ↩3

输入关键词开始搜索。多个关键词用空格分隔。