10 分鐘中文官方手冊|OpenAI Agent SDK 框架與工具

生成式 AI 席捲各行各業,但真正把 LLM 落地並不簡單──開發者得維運多條 API、同步提示詞、管理權限,還得處理雜亂的商業流程。複雜度一高,部署速度就被拖慢,更新也變得痛苦。OpenAI Agent SDK 應運而生:它把「智能體」「工具」「上下文」與「交接」封裝成一致介面,讓團隊專注設計動作而不是堆疊樣板程式。本文將從宏觀視角切入,再逐步深入,帶你掌握 Agent SDK 的特色、功能、應用與實作方式。

什麼是 OpenAI Agent SDK?

Agent 是具備「目標 + 工具箱」的 LLM。跟只回覆文字的聊天機器不同,Agent 能主動規劃任務、挑選工具、維持記憶並在需要時把工作交接出去。

核心概念

名稱說明
Agents具指令與記憶的智能體,負責決策與執行。
ToolsPython 函式或 REST 端點,供 Agent 呼叫以讀/寫外部世界。
ContextSDK 透過 RunContext 跟蹤對話、工具呼叫與回應。
Handoffs交接機制,把對話控制權移交給另一個專科 Agent;在 LLM 眼中表現為 transfer_to_<agent> 工具。
Handoffs - OpenAI Agents SDK

SDK 優勢

  • 輕量pip install openai-agents 即用,無額外微服務。
  • 靈活:任何 Python 函式都能瞬間變工具。
  • 可擴展:支援 LiteLLM 與 OpenAI-Compatible 端點,輕鬆換成本地模型。openai.github.io
  • 易維護:Tracing、Guardrails 與 Handoffs 把錯誤隔離在模組層。

Agent SDK 的關鍵功能

1. Function Calling:讓 LLM 自己挑函式

  • 在函式上加 @function_tool 裝飾器,SDK 自動產生 JSON Schema。
  • LLM 依語意產出 {"name": "...", "arguments": {...}},SDK 執行函式並回填結果。
  • 應用:查匯率、訂單狀態、SQL 查詢皆可一鍵封裝。

2. Output Types:要求結構化輸出

agent = Agent(
    name="JSONBot",
    instructions="回傳 {title:str, summary:str}",
    output_type=dict[str, str]
)

Agent 會強制 LLM 遵守格式,省去後端再解析的麻煩。

3. Streaming:邊想邊說

開啟 stream=True,SDK 以 Server-Sent Events 把 token 即時推給前端,對話無延遲。

4. Tracing:可觀測,才好維運

SDK 自帶 Tracing middleware,把每次工具呼叫、交接、模型回應寫入 span。團隊可接 Jaeger/Zipkin 追效能瓶頸。

5. Guardrails:上保險槓

Guardrail 檢查輸入/輸出:

from agents import Guardrail, ValidationError
no_pii = Guardrail.block_pattern(r"\d{4}-\d{4}-\d{4}-\d{4}")  # 擋信用卡

agent = Agent(..., output_guardrails=[no_pii])

當 LLM 誤洩個資,SDK 直接丟 ValidationError,避免不當輸出。

入門實例

1. 環境設置

python -m venv venv && source venv/bin/activate
pip install openai-agents openai
export OPENAI_API_KEY=<your-key>

2. Hello World

from agents import Agent

greeter = Agent(
    name="Greeter",
    instructions="用一句台語跟使用者打招呼。"
)
print(greeter.run_sync("Say hi"))

3. 進階:本地 LLM + 外部 API

from openai import AsyncOpenAI
from agents import Agent, function_tool, set_default_openai_client

# 1️⃣ 指到本地 Ollama 端點
set_default_openai_client(AsyncOpenAI(base_url="http://localhost:11434/v1", api_key="none"))

# 2️⃣ 封裝匯率 API
@function_tool
def usd_twd() -> float:
    import requests, json
    return json.loads(requests.get("https://api.ratesapi.io/latest?base=USD&symbols=TWD").text)["rates"]["TWD"]

# 3️⃣ 建立 Agent
fx_bot = Agent(
    name="FXBot",
    instructions="回答匯率問題,必要時呼叫工具。",
    tools=[usd_twd]
)

print(fx_bot.run_sync("一美元是多少台幣?"))

相關資訊

官方文件https://openai.github.io/openai-agents-python/

Handoffs 指南https://openai.github.io/openai-agents-python/handoffs/

LiteLLM 整合https://openai.github.io/openai-agents-python/models/litellm/

GitHub 範例https://github.com/openai/openai-agents-python