OpenAI Agents SDK 是 OpenAI 官方开源的 Python Agent 编排框架,2025 年 3 月发布,前身是 2024 年 10 月的实验框架 Swarm。它解决的核心问题是:单次 LLM 调用只能完成一步生成,而真实业务需要「循环调用模型—调用工具—观察结果—继续推理」的多步 Agent 流程,并在此基础上做多 Agent 分工、输入输出校验、多轮记忆与全链路追踪。SDK 用五个原语覆盖这些需求:Agent(指令 + 工具 + 模型)、Handoff(Agent 间移交控制权)、Guardrail(输入/输出护栏)、Session(多轮会话持久化)、Tracing(调用链可观测)。默认走 OpenAI Responses API,支持函数工具与 WebSearch/FileSearch 托管工具,也可通过 LiteLLM 接第三方模型。MIT 协议,可商用。下面从安装、首个示例、五大能力、生产部署与选型对比展开,附带常见误区与面试题,按顺序操作即可在一个下午完成从了解到落地。

岗位关联

掌握 OpenAI Agents SDK,就意味着可以用 OpenAI 官方维护的框架构建多 Agent 生产系统,这是从「调用大模型 API」升级为「设计 Agent 工作流」的关键技能。

目录
  1. 为什么需要 OpenAI Agents SDK:从单次调用到多步编排
  2. 安装与环境配置:3 步就绪
  3. 快速上手:10 分钟跑通一个工具调用 Agent
  4. 核心能力详解:5 大支柱
  5. 生产部署与监控:从上线到运维
  6. 版本迭代
  7. AI 应用场景
  8. 常见误区
  9. 面试题
工具类型
Agent 编排框架(开源 Python SDK)
开发商
OpenAI
开源协议
MIT(可商用)
GitHub Stars
无
主要语言
Python(官方);另有 TypeScript 预览版 openai-agents-ts
当前版本
0.1.x(2025-03 首发,处于 0.x 阶段)
安装方式
pip install openai-agents
上手难度
★★★☆☆(中等)
适合人群
LLM 应用工程师、多 Agent 系统架构师、RAG 团队
同类工具
LangGraph、AutoGen、CrewAI
托管服务
platform.openai.com(Tracing 看板)

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 OpenAI Agents SDK:从单次调用到多步编排

传统方式构建多步 Agent 需要自己实现 agent loop:写 while 循环反复调 LLM、解析 tool_calls 参数、把工具结果拼回上下文、判断何时终止;同时还要自己维护多轮上下文(截断、持久化)、做输入合法性校验、打印日志排查问题。这些代码工程量大,且边界 bug 集中——工具参数解析失败、上下文超出窗口、重试策略缺失,任何一个环节出错都会让线上 Agent 表现不稳定。Swarm 验证了 handoff 模式但明确定位为教学实验,不具备生产条件。

OpenAI Agents SDK 把上述能力内置为原语。agent loop 由框架执行:模型自动决定调用哪些工具,循环直到不再请求工具或达到 max_turns;Handoff 把「将控制权交给另一个 Agent」封装成一次工具调用;Guardrail 在输入进入主流程前与输出生成后执行校验函数,可中断并移交;Session 负责多轮记忆与持久化;Tracing 默认上报 OpenAI 平台,可查看 span 树、耗时与 token 用量。由于是官方维护,新模型能力(如 Responses API 工具、托管工具)能第一时间获得支持。

与同类工具相比,它不要求你像 LangGraph 那样手写状态图,也不像 AutoGen 那样强调多 Agent 自由对话,而是提供「最贴近 OpenAI 官方最佳实践」的极简原语:默认配置即可生产运行,学习成本低,适合以 OpenAI 模型为核心的团队快速落地。

安装与环境配置:3 步就绪

步骤一:安装。要求 Python 3.9+,安装主包 openai-agents。注意 import 名是 agents 而不是 openai-agents。可选安装 LiteLLM 扩展(用于接第三方模型)。

步骤二:配置 API Key。设置环境变量 OPENAI_API_KEY,或在代码中调用 set_default_openai_api_key("sk-...")。如需指向 OpenAI 兼容网关,可通过自定义 client 并传入 base_url 实现,但托管工具与部分高级特性仅对官方端点可用。

步骤三:验证安装。导入 agents 包并确认版本可加载,无 API Key 时仅做 import 检查,不发起网络请求。

bash9 行
# 1. 安装(含可选 LiteLLM 扩展)pip install openai-agentspip install 'openai-agents[litellm]'   # 可选:接第三方模型 # 2. 配置 API Keyexport OPENAI_API_KEY="sk-..." # 3. 验证导入python -c "from agents import Agent, Runner; print('import ok')"

快速上手:10 分钟跑通一个工具调用 Agent

最小可用流程的思路:一个带工具的 Agent 即可演示完整 agent loop——写一个普通 Python 函数、用装饰器挂到 Agent、运行 Runner、读取结果。下面用天气查询演示「模型决定调用工具→拿到结果→生成回答」的完整路径。

1. 新建 agent_demo.py,从 agents 导入 Agent、Runner、function_tool。

2. 定义 get_weather(city) 函数并加 @function_tool:函数名即工具名,docstring 即工具描述,类型注解自动生成参数 schema。

3. 创建 Agent 实例:name 用于追踪,instructions 写清行为,tools 传入函数列表。

4. 在 async 函数内调用 await Runner.run(agent, "北京今天天气怎么样?")。

5. 打印 result.final_output;再打印 len(result.items) 观察执行步骤数,可以看到消息、工具调用、工具结果等多个 item。

代码示例:

运行需要有效的 OPENAI_API_KEY。执行时日志中会出现两次模型调用:第一次请求工具,第二次基于工具结果生成回答。若模型未调用工具,通常是因为指令不够强,在 instructions 中强调「必须先用工具查询」即可。进阶技巧:result.items 列出每一步的消息与工具执行记录;改用 Runner.run_streamed 可拿到流式事件;默认 Tracing 开启时,可在 OpenAI 平台 Logs 页看到本次运行的完整调用链。

python20 行
import asynciofrom agents import Agent, Runner, function_tool @function_tooldef get_weather(city: str) -> str:    """查询指定城市的当前天气,返回天气与温度。"""    return f"{city}:晴,25℃,东北风2级"  # 演示数据,生产请替换为真实天气 API async def main():    agent = Agent(        name="Weather Assistant",        instructions="你是天气助手。用户问天气时,必须先用 get_weather 工具查询再回答。",        tools=[get_weather],    )    result = await Runner.run(agent, "北京今天天气怎么样?")    print("最终回答:", result.final_output)    print("执行步骤数:", len(result.items)) if __name__ == "__main__":    asyncio.run(main())

核心能力详解:5 大支柱

支柱一·Agent 与函数工具:从「单次生成」到「自主循环」。 Agent 是核心对象:instructions 定义行为,tools 挂载函数工具,model 指定模型(默认 OpenAI Responses API 模型),name 用于追踪。@function_tool 装饰器把普通 Python 函数自动转成工具 schema,省去手写 JSON Schema 的步骤。运行时框架自动完成「调用 LLM→解析工具调用→执行→回填结果→再次调用」的循环,直到完成或达到轮次上限。跨厂商需求可用 agents.extensions.litellm.LiteLLMModel 接第三方模型,但托管工具仅在 OpenAI 模型下可用。

支柱二·Handoff:多 Agent 分工基于控制权移交。 handoff(agent) 生成一个特殊工具,父 Agent 决定移交时调用它;子 Agent 执行完后,控制权连同结果一起交还父 Agent,父 Agent 继续推理。这使得「主管—专员」分层成为天然编程模式:主管只做意图判断,专员各持少量工具。可用 input_filter 过滤移交内容(如只传结构化摘要),内置 remove_all_tools 等过滤器。目标 Agent 也可以继续 handoff 给更细的专员,形成多级路由。

支柱三·Guardrail:输入输出两侧的拦截点。 InputGuardrail 在主 Agent 首轮执行前运行校验函数,OutputGuardrail 在最终输出生成后校验。校验函数是普通 Python 函数,返回 GuardrailFunctionOutput(output_info, tripwire_triggered);触发 tripwire 后可指定 tripped_handoff 把对话移交给另一个 Agent(如转人工)。校验逻辑可以是规则、LLM 判断或外部 API 检查。规范上禁止在护栏函数内再调用挂同一护栏的 Agent,否则会递归。

支柱四·Session:多轮记忆的持久化抽象。 Runner.run 每次都是独立事件流,要支持「接着上次聊」需传入 session。SDK 用 Session 存对话消息,抽象出 SessionStorage 接口负责读写;内置 SQLiteSessionStorage,默认会话存储写入本地 SQLite。生产环境可实现自定义 SessionStorage 接 Redis/Postgres 等共享存储,多实例横向扩展时保证同一用户读到同一上下文。会话裁剪策略(保留最近 N 条)需按业务自行配置。

支柱五·Tracing:全链路可观测。 默认 OpenAITracingProcessor 把 span 上报 OpenAI 平台,在 Logs 页可查看每个 Agent 运行、每次工具调用的调用树、耗时与 token 统计。生产环境可用 add_trace_processor 接入自定义 TracingProcessor,或通过 RunConfig(tracing_disabled=True) 关闭默认上报;workflow_name 与 group_id 用于把 trace 归类到业务线与会话组,便于按维度检索。

生产部署与监控:从上线到运维

部署方式一·异步 HTTP 服务。 将 Agent 封装在 FastAPI 等异步框架中,async 路由函数内 await Runner.run(agent, input)。注意并发控制:OpenAI 接口有 RPM/TPM 限流,用 asyncio.Semaphore 限制并发数,并为单次 run 设置整体超时。每个请求应使用独立的 session,不要全局复用同一个会话对象,避免用户上下文串扰。

部署方式二·队列化长任务。 报告生成、批量审核等分钟级任务走任务队列(如 ARQ、Celery)。worker 内可复用 Agent 对象(Agent 是无状态定义),关键是 SessionStorage:默认 SQLite 存本地文件,多 worker/多副本部署时必须换成 Redis/Postgres 等共享存储。用 RunConfig(workflow_name="xxx", group_id=user_id) 给 trace 打标签,便于按业务线检索调用链。

可观测性。 默认 Tracing 已启用并上报 OpenAI 平台,开发期强烈建议保留,可直接在 Logs 页排查「哪一步耗时高、哪次工具调用返回异常」。生产环境若数据不允许出网,用 set_tracing_disabled(True) 关闭默认上报,再实现自定义 TracingProcessor 接入 OpenTelemetry 或自建日志体系;将 trace_id 透传到业务日志,实现端到端关联。

<p class="para-label">避坑清单:</p>

<ul class="dash-list"><li>agent loop 不是无限的:Agent 默认 max_turns=10,达到上限即停止并返回当前结果。长链路多级 handoff 任务需显式调大该值,否则结果被截断,表现为「答到一半就停」。</li><li>Runner.run 是协程:同步脚本用 Runner.run_sync,async 函数内用 await Runner.run;直接调用会得到未等待的协程对象。Notebook 中需用 asyncio.run 包裹,二者混用会报 RuntimeError。</li><li>会话跨实例问题:默认 SQLite 是本地文件,容器多副本部署时每个副本各有独立会话,用户请求落到不同实例会「失忆」。上线前务必替换为共享 SessionStorage。</li><li>托管工具依赖 Responses API:WebSearch/FileSearch 在服务端执行,仅随默认 Responses API 可用;切换到 Chat Completions 模型(OpenAIChatCompletionsModel)或 LiteLLM 第三方模型后这些工具不可用,需改自定义检索工具。</li><li>护栏函数防递归与超时:护栏函数内再调用挂同一护栏的 Agent 会无限循环;校验函数若依赖外部 LLM 判断,必须设置超时与重试,否则会拖慢整个请求链路。</li></ul>

维度OpenAI Agents SDKLangGraphAutoGenCrewAI
定位OpenAI 官方多 Agent 编排 SDK低层图编排框架多 Agent 对话自动化框架角色化 Crew 协作框架
编排范式Handoff 移交 + 内置 agent loop显式状态图(StateGraph)GroupChat 多 Agent 对话角色定义 + 任务分解
类型约束Python 函数工具,自动生成 schema节点注解 + 状态 TypedDict函数与对话消息工具与角色配置
学习曲线低(半小时可上手)高(需理解图与状态管理)中低
生态集成Responses API、托管工具、LiteLLMLangChain 全家桶、LangSmith微软生态、多模型接入多模型、可视化平台
生产部署SessionStorage 可扩展、Tracing 内置状态持久化 checkpoint、生态成熟事件驱动、研究案例多商业版平台支持
LicenseMITMITMITMIT
适合谁OpenAI 生态团队、要官方维护复杂状态机/DAG 工作流多 Agent 对话研究快速原型、角色化流程

选型建议:深度使用 OpenAI API 且希望官方持续跟进新能力的团队,直接选 Agents SDK——Tracing 免自建、托管工具开箱即用。工作流是复杂 DAG/状态机或强依赖 LangChain 生态,选 LangGraph。做多智能体对话机制研究选 AutoGen。想要低代码可视化编排快速出原型,选 CrewAI 或 Langflow。四者同为 MIT,商用无碍,差异主要在编排范式和生态绑定。

版本迭代

OpenAI Agents SDK 前身为 2024 年 10 月开源的实验框架 Swarm(明确标注仅用于教学演示);2025 年 3 月 11 日,OpenAI 在发布「New tools for building agents」时正式推出生产级 Agents SDK v0.1.0,在 Swarm 的 Handoff 思路之上补齐 Guardrail、Session、Tracing 等工程能力,此后保持高频 0.1.x 补丁迭代(截至训练数据,可能已有更新版本;正式版本号以 GitHub Releases/Changelog 为准)。

版本时间变化提升
v0.1.02025-03OpenAI 官方首个公开发布一次落地 Agent、Handoff、Guardrail、Session、Tracing 五大原语;默认 Responses API;支持函数工具与 WebSearch/FileSearch 托管工具;内置 SQLite 会话存储与 OpenAI 平台追踪上报
结论

该 SDK 是编排框架,官方未发布框架本身的基准评测分数,选型评估应关注官方示例质量、社区落地案例与 API 稳定性。由于当前处于 0.x 早期阶段,接口仍可能调整,生产项目需锁定版本号安装(如 openai-agents==0.1.0),升级前阅读 Changelog 确认破坏性变更。

AI 应用场景

客服工单自动分流与升级

阶段:多 Agent 编排(Handoff 意图路由)

解决的问题:单个客服 Agent 同时处理退款、技术、账号问题时,指令和工具互相干扰,工具误选率上升。用 Triage Agent 先分类,再 handoff 到各持少量专精工具的子 Agent,每个子 Agent 只面对与己相关的指令。

具体案例:票务平台客服系统,父 Agent 只做意图判断(不挂业务工具),三个子 Agent 分别处理退款/改签/技术问题,各挂 2-3 个工具。相比单 Agent 挂 10+ 工具,工具列表与指令上下文显著缩短,工具误选问题收敛;官方 examples/handoffs 目录提供可直接运行的同类示例,从模板到可演示分流约 2 小时,加上护栏与会话约 1 个工作日完成生产化。

多轮企业知识库助手

阶段:RAG 管道构建 + 会话记忆(Session)

解决的问题:用户追问「第二点的依据是什么」依赖前文上下文;每次重建完整历史既费 token 又难维护。Session 持久化多轮消息,用户再次进入时恢复上下文,配合检索工具给出带依据的回答。

具体案例:运维知识库助手,每次请求携带会话 ID 从 SQLite 恢复上下文,多轮追问无需用户重复背景;检索工具返回文档片段,模型基于片段作答。相比每次全量重建历史,长对话 token 增量可控,上下文按配置的条数策略裁剪。

金融场景的输入拦截与输出审计

阶段:Agent 安全与合规(Guardrail + Tracing)

解决的问题:理财助手需要拦截提示注入(如「忽略以上指令」)与敏感输出。InputGuardrail 在主 Agent 执行前检查输入,触发 tripwire 后通过 tripped_handoff 移交人工;OutputGuardrail 校验最终回复是否含违规关键词。

具体案例:银行理财助手在护栏函数内实现关键词规则 + LLM 复核两级判断,护栏函数独立可测,用 pytest 维护 100 条回归用例集,每次发版自动跑完不到 1 分钟;Tracing 完整保留每次拦截与人工移交记录,满足审计追溯要求。

常见误区

误区「Swarm 不维护了,OpenAI 把它改个名发出来了,API 应该差不多,老代码改改就能用。」

正解Swarm(2024-10)是教学实验框架,明确不适生产;Agents SDK(2025-03)是生产级重写,新增 Guardrail、Session、Tracing,agent loop、工具系统、会话存储全部重新实现,API 不兼容——Swarm 在 Agent 上调 run/run_with_tools,SDK 用 Runner 系列入口函数,迁移需要重写调用代码而非改包名。

为何常见:两者都以 Handoff 为核心概念,官方博客也说明吸收了 Swarm 经验,「换皮」的联想很容易产生,但工程实现差异巨大。

误区「又是循环调用又是多 Agent,会不会一直调 API 停不下来,成本失控?」

正解Agent 有 max_turns 参数,默认 10 轮(一次 turn = 一次模型调用及其附带的工具执行),达到上限即停止并返回当前结果。真正要防的是工具本身的开销,比如检索工具返回超大文本撑爆上下文,这属于工具设计问题而非循环失控。

为何常见:社区对「agent loop 失控」的担忧多来自早期自研实现的教训,默认参数限制被忽略了。

误区「官方示例里 Runner.run 看着像普通函数,我在脚本和 Notebook 里直接跑就能出结果。」

正解Runner.run 是 async 协程,必须 await 才有结果;同步场景用 Runner.run_sync;Notebook 中用 asyncio.run 包裹。直接调用会得到未等待的协程对象,输出是 coroutine 描述而不是结果,并伴随 RuntimeError 警告。

为何常见:示例文件统一用 async main() 包裹,新手复制到自己的同步脚本时容易漏掉 await。

误区「加了 Guardrail 就安全了,不安全内容都会被拦下,不用再担心。」

正解Guardrail 只提供执行框架——在输入进入主 Agent 前、输出返回后运行你的校验函数,并支持 tripwire 中断与移交。拦截有效性完全取决于校验函数质量:用 LLM 做校验有延迟和幻觉成本,规则校验有覆盖盲区。合规场景仍需人工抽检与日志审计。

为何常见:「护栏」这个命名容易让人误以为模型自带安全过滤,实际它只是用户自定义校验逻辑的挂载点。

误区「WebSearchTool 是 SDK 自带能力,换什么模型应该都能用。」

正解WebSearch/FileSearch 托管工具在 OpenAI 服务端执行,仅当走默认 Responses API 时可用;改用 Chat Completions 模型(OpenAIChatCompletionsModel)或第三方模型(LiteLLM)后,这些托管工具不可用,需要换成自定义检索工具。

为何常见:官方示例默认 Responses API,教程未强调前提条件,切换到其他模型时才暴露兼容性问题。

面试题

Q1. OpenAI Agents SDK 的前身是哪个实验性框架?

单选题 · easy

  • A.AutoGen 框架
  • B.LangGraph 框架
  • C.Swarm 实验框架← 正确答案
  • D.Haystack 框架

答案:C。OpenAI 于 2024 年 10 月开源 Swarm 作为多 Agent 实验框架,2025 年 3 月发布的 Agents SDK 吸收其 Handoff 思路并补齐工程能力。AutoGen、LangGraph 分别是微软与社区框架,Haystack 是 RAG 编排框架,均非 OpenAI 出品。

Q2. Runner.run 的正确调用方式是?

单选题 · easy

  • A.直接同步调用
  • B.通过 REST 接口调用
  • C.通过 CLI 命令调用
  • D.在 async 函数中 await← 正确答案

答案:D。Runner.run 是 async 协程,必须在 async 上下文中 await,同步脚本应使用 Runner.run_sync。直接调用会得到未等待的协程对象而非执行结果,并伴随 RuntimeError 提示。

Q3. 在 PyPI 上,安装 OpenAI Agents SDK 应安装哪个包?

单选题 · easy

  • A.openai 客户端包
  • B.openai-agents 包← 正确答案
  • C.agents 运行时包
  • D.openai-sdk 扩展包

答案:B。包名是 openai-agents,安装后 import 名是 agents(from agents import Agent, Runner)。openai 是官方 API 客户端而非编排框架,其余包名不存在或为无关项目。

Q4. 在用户输入进入主 Agent 之前做前置拦截,应使用?

单选题 · mid

  • A.用 InputGuardrail 配置← 正确答案
  • B.用 OutputGuardrail 配置
  • C.用 Session 保存输入记录
  • D.用 Handoff 移交输入内容

答案:A。InputGuardrail 的校验函数在主 Agent 首轮执行前运行,触发 tripwire 可中断对话或移交;OutputGuardrail 校验生成结果,Session 管记忆持久化,Handoff 管控制权移交,三者职责不同。

Q5. 未显式设置 max_turns 时,Agent 单次运行最多执行多少轮?

单选题 · mid

  • A.固定为 5 轮
  • B.默认为 10 轮← 正确答案
  • C.默认为 50 轮
  • D.没有任何轮次上限

答案:B。Agent 默认 max_turns=10,达到上限后停止并返回当前结果,避免失控循环。多级 handoff 或长链路任务需要显式调大该值,否则任务会在中途被截断。

Q6. 关于 WebSearchTool 托管工具,正确的说法是?

单选题 · hard

  • A.只能在 Chat Completions 下使用
  • B.仅在使用 Responses API 时可用← 正确答案
  • C.仅支持 gpt-4o-mini 小模型
  • D.必须搭配 FileSearchTool 使用

答案:B。托管工具在 OpenAI 服务端执行,SDK 限定其仅随默认 Responses API 可用;切换到 OpenAIChatCompletionsModel 或 LiteLLM 第三方模型后应改用自定义检索工具,否则功能不可用。

Q7. 父 Agent 通过 handoff(agent) 移交控制权后,执行流程是?

单选题 · mid

  • A.子 Agent 运行后会话立即终止
  • B.结果直接返回用户不再回父 Agent
  • C.控制权交还父 Agent 并继续执行← 正确答案
  • D.子 Agent 结果绕过父 Agent 指令

答案:C。handoff 本质是父 Agent 的一次工具调用:子 Agent 执行完后,其结果作为新消息反馈给父 Agent,父 Agent 继续推理直到产出最终输出。这是多级路由能分层处理的原因。

Q8. 关于 Session 多轮记忆,正确的说法有?

多选题 · mid

  • A.默认用 SQLite 持久化会话← 正确答案
  • B.可自定义存储后端接数据库← 正确答案
  • C.会话只能保存在进程内存中
  • D.Run 时可传入 session 续接← 正确答案

答案:ABD。SDK 内置 SessionStorage 抽象与 SQLiteSessionStorage 实现,默认写入本地 SQLite;生产多实例可自定义存储接 Redis/Postgres 等共享后端;Runner.run 支持传入 session 实现「接着上次聊」。内存存储只是自定义实现的一种,并非唯一方式。

Q9. 生产环境部署 Agents SDK 时,推荐的工程实践有?

多选题 · hard

  • A.为护栏函数设置超时与重试← 正确答案
  • B.多实例共用一个本地 SQLite
  • C.自定义 Tracing 处理器接管上报← 正确答案
  • D.将 API Key 硬编码在源码中

答案:AC。护栏函数可能依赖外部服务,必须设超时防拖垮链路;默认 Tracing 上报 OpenAI 平台,合规或数据敏感场景应自定义处理器或关闭;多实例共用一个 SQLite 文件会有锁冲突,API Key 应走环境变量或密钥管理。

Q10. 以下属于 OpenAI Agents SDK 核心原语的有?

多选题 · easy

  • A.Guardrail 护栏原语← 正确答案
  • B.Handoff 移交原语← 正确答案
  • C.Session 会话原语← 正确答案
  • D.VectorStore 向量库

答案:ABC。SDK 围绕 Agent、Handoff、Guardrail、Session、Tracing 五个原语构建。VectorStore 不在内置原语之列,向量检索需在工具函数中自行接入第三方向量库实现。