跳到主要內容
OpenAI Agents SDK(Python):三個概念就夠,從零到多 Agent 系統的最快路徑
/閱讀約 8 分鐘/

OpenAI Agents SDK(Python):三個概念就夠,從零到多 Agent 系統的最快路徑

OpenAI 在 2025 年 3 月推出的 Agents SDK,用 Agent、Handoff、Guardrail 三個 primitive 建構多 Agent 系統,20.3K stars、4,800+ 個專案在用。這篇拆解三個核心概念,再跟 LangGraph 和 Claude Agent SDK 做清楚比較。

目錄+

2025 年 3 月,OpenAI 正式推出 Agents SDK,宣告取代前一個實驗性框架 Swarm。Swarm 的問題是明確的:它是 demo 等級的工具,幾乎沒有生產所需的 tracing、guardrail、或狀態管理。Agents SDK 這次不一樣——20.3K GitHub stars、4,800 以上的下游依賴、236 位貢獻者,這個數字代表的是真實的使用量,不是 hype。

截至 2026 年 4 月,最新版本是 v0.14.2。同月中的一次重大更新加入了 sandbox agents、可配置記憶體、類 Codex 的 filesystem tools,以及 MCP 整合。如果你是 Python developer 或 indie builder,想快速讓多個 agent 協作完成任務,這篇文章幫你把三個核心概念說清楚,再告訴你什麼情境下不該選它。

openai/openai-agents-python on GitHub

三個核心概念

Agent:封裝 LLM 行為的基本單元

Agent 是 OpenAI Agents SDK 的第一個 primitive。它把一個 LLM 呼叫連同它的 instructions、tools、guardrails、handoffs 封裝成一個可組合的單元。

from agents import Agent, Runner

agent = Agent(
    name="assistant",
    instructions="你是一個客服助理,只處理帳單相關問題。",
    tools=[lookup_invoice, create_refund],
)

result = Runner.run_sync(agent, "我的上個月帳單是多少?")
print(result.final_output)

instructions 決定 agent 的角色定位,tools 是它可以呼叫的函式(Python function 加上型別標註就能自動轉成 tool schema)。一個 Agent 物件可以被多個 runner 共用,本身是 stateless 的設計。

Handoff:把完整控制權交出去

Handoff 是 OpenAI Agents SDK 最關鍵的設計決策,也是它跟一般「呼叫另一個 LLM」最本質的差別。

當 agent A 執行一個 tool call,工具執行完畢後控制權回到 A,A 繼續決定下一步。但當 agent A 執行一個 handoff,控制權從此刻起移交給 agent B——A 退出執行迴圈,B 接管後續所有決策。

這個語義差別在多 agent 系統裡非常重要。一個典型的 fan-out 模式是 triage agent 判斷使用者意圖後,把請求路由給對應的 specialist agent:

Loading diagram...

Triage Agent 的工作只有一件事:分類並移交。Billing Agent 接手之後,它有自己的 instructions 和 tools,整個對話上下文(conversation history)會一起傳遞過去,不需要重新初始化。

billing_agent = Agent(name="billing", instructions="處理帳單查詢。")
refund_agent = Agent(name="refund", instructions="處理退款申請。")

triage_agent = Agent(
    name="triage",
    instructions="根據使用者需求,handoff 到對應的 agent。",
    handoffs=[billing_agent, refund_agent],
)

Guardrail:兩層驗證,一個斷路器

Guardrail 是輸入和輸出的驗證層。它可以是一個 Python function,也可以是另一個 LLM agent(用來做語意層面的判斷)。

關鍵機制是 tripwire:guardrail 一旦觸發失敗條件,整個執行鏈立刻中止,不會繼續呼叫 LLM 或執行後續 tool。這對需要過濾有害輸入、防止資料洩露的場景特別實用。

Input guardrail 在 agent 收到使用者輸入後立刻執行;output guardrail 在 agent 產出回覆後、傳給使用者前執行。兩層可以獨立配置,也可以同時掛上多個 guardrail。

Runner 執行模型

SDK 提供三種執行模式,對應不同的使用情境:

Runner.run_sync():同步阻塞執行,最簡單。適合 script、CLI 工具、或不需要非同步架構的快速原型。整個 agent loop 跑完才返回,回傳 RunResult。

Runner.run():async 版本,適合在 FastAPI、async web framework 或需要同時跑多個 agent 的情境。回傳同樣的 RunResult,但不阻塞 event loop。

Streaming event loop:逐步接收 agent 的中間事件(tool call、token streaming、handoff 發生),適合需要即時反饋的 UI 場景,例如把 agent 思考過程串流給前端。

# 同步(script / CLI)
result = Runner.run_sync(agent, input)

# 非同步(FastAPI / async 應用)
result = await Runner.run(agent, input)

# Streaming(需要即時事件的 UI)
async for event in Runner.run_streamed(agent, input):
    print(event)

框架對比

維度OpenAI Agents SDKLangGraphClaude Agent SDK
語言Python(TypeScript 分開維護)PythonPython + TypeScript
多 Agent 協作Handoff(委派模式)Graph node(狀態機)Sub-agents
LLM 支援OpenAI 優先,100+ via LiteLLM任意(model-agnostic)Claude 優先(支援 Bedrock/Vertex)
狀態持久化Sessions(輕量)Checkpointing(強)CLAUDE.md 記憶機制
內建可觀測性Tracing UILangSmith無(需外掛)
學習曲線低(幾小時可跑)高(1-2 週)低(概念直觀)
最適合GPT 生態快速 prototype複雜有狀態工作流Safety 優先 / MCP 原生

選 OpenAI Agents SDK:你的主力模型是 GPT 系列、需要快速上線、agent 數量在 5-8 個以內,且不需要複雜的狀態恢復機制。內建 Tracing UI 讓你不需要額外配置就能 debug 多 agent 執行過程。

選 LangGraph:你的工作流有明確的狀態轉移邏輯、需要可靠的 checkpointing(中途失敗可以從上次的 checkpoint 繼續)、或你的團隊已經在用 LangChain 生態。LangGraph Platform 被 Cisco、Uber、LinkedIn 使用,每月 PyPI 下載量達 3800 萬,是目前最成熟的有狀態 agent 框架。

選 Claude Agent SDK:你的首要考量是安全性與可稽核性、需要 MCP 原生整合、或你的應用場景對 Claude 的 safety 特性有依賴。Python 和 TypeScript 同步維護,適合全端 builder。

批判視角

Agents SDK 的 handoff pattern 在 agent 數量少的時候很清晰,但當系統擴展到 8-10 個以上的 agent 類型時,triage logic 會急速複雜化——你需要在 instructions 裡描述愈來愈多的路由條件,維護成本不亞於直接寫 graph 結構。

Sessions 提供輕量的對話持久化,但它不是 LangGraph checkpointing 的替代品。如果你的 agent 工作流需要從中間節點恢復(例如一個跑了 30 分鐘的任務在第 20 分鐘失敗),Sessions 目前沒有辦法做到這件事。

2026-04-15 的更新雖然補上了 sandbox agents 和 filesystem tools,補齊了生產部署的重要缺口,但 TypeScript 版本目前仍落後 Python 版本的功能迭代速度。如果你的專案是 TypeScript-first,需要留意功能可用性的時間差。