OpenAI 最新發布 Agents SDK,這是一個輕量級但功能強大的框架,可以協助開發者構建、管理並優化 AI 代理(AI Agents),提升開發者跟公司自動化能力。 SDK 提供了一系列強大的功能,開發者能夠快速創建 AI 代理,執行複雜任務,並與其他工具和流程進行無縫整合。
如何使用?
設置 Python 環境
python -m venv env
source env/bin/activate
安裝 Agents SDK
pip install openai-agents
Hello world 示例
from agents import Agent, Runner
agent = Agent(name="Assistant", instructions="You are a helpful assistant")
result = Runner.run_sync(agent, "Write a haiku about recursion in programming.")
print(result.final_output)
# Code within the code,
# Functions calling themselves,
# Infinite loop's dance.
(如果運行此命令,請確保設置 OPENAI_API_KEY
環境變數)
切換示例
from agents import Agent, Runner
import asyncio
spanish_agent = Agent(
name="Spanish agent",
instructions="You only speak Spanish.",
)
english_agent = Agent(
name="English agent",
instructions="You only speak English",
)
triage_agent = Agent(
name="Triage agent",
instructions="Handoff to the appropriate agent based on the language of the request.",
handoffs=[spanish_agent, english_agent],
)
async def main():
result = await Runner.run(triage_agent, input="Hola, ¿cómo estás?")
print(result.final_output)
# ¡Hola! Estoy bien, gracias por preguntar. ¿Y tú, cómo estás?
if __name__ == "__main__":
asyncio.run(main())
函數示例
import asyncio
from agents import Agent, Runner, function_tool
@function_tool
def get_weather(city: str) -> str:
return f"The weather in {city} is sunny."
agent = Agent(
name="Hello world",
instructions="You are a helpful agent.",
tools=[get_weather],
)
async def main():
result = await Runner.run(agent, input="What's the weather in Tokyo?")
print(result.final_output)
# The weather in Tokyo is sunny.
if __name__ == "__main__":
asyncio.run(main())
Key Concepts
Agents SDK 基於以下核心概念:
Component | Purpose |
---|---|
Agent | 一個配置了指令、工具、交接、保護機制等的 LLM。 |
Tool | 代理可呼叫的函數(如 API、計算、文件存取)。 |
Context | 可變物件,可用來儲存狀態或共享資源。 |
Output Types | 允許指定結構化的最終輸出,或預設為自由文本。 |
Handoffs | 可將對話委派或切換給其他代理的機制。 |
Streaming | 代理在思考或使用工具時,可以即時輸出部分或增量結果(適用於即時 UI)。 |
Tracing | 自動記錄每次 "代理運行" 的詳細跟蹤資訊,用於偵錯、分析或記錄。 |
Guardrails | 驗證輸入或輸出,檢查策略,或在違規時終止執行。 |
這些功能,開發者可以構建強大的多步驟或對話式工作流程,確保準確且可驗證的結果,並在必要時劃分任務或調用專門的子代理來處理特定功能。
Agents
Agents 將大型語言模型(LLM)封裝為具有所有必要配置的單元,包括系統指令、可用工具、交接目標等,還可以包含輸入或輸出驗證機制,以及進階模型設定。
核心概念
一個 Agent 本質上是配置了以下內容的 LLM:
- 指令(靜態或動態)
- 工具(可以呼叫的函數)
- 交接(可以將對話轉移給其他代理)
- 可選的保護機制(輸入或輸出驗證)
- 其他設定(如模型參數、輸出類型、回調函數等)
Agent 執行流程
當代理接收到使用者輸入後,會進入執行循環:
- 代理查看目前的對話歷程(包括使用者輸入、先前的工具結果、系統訊息)。
- LLM 決定下一步行動:
- 直接產生最終回應(結束循環)。
- 呼叫工具(可能是多次連續執行)。
- 轉交至其他代理。
- 當代理產生最終回應或轉交時,循環結束。
Agent 例子
from agents import Agent, AgentRunner
agent = Agent(
name="basic_agent",
instructions="You are a helpful agent."
)
result = await AgentRunner.run(agent, ["What's the capital of the USA?"])
print(result.agent_output) # The capital of the United States is Washington, D.C.
代理的主要欄位
欄位 | 作用 |
name | 代理的名稱識別符。 |
instructions | 代理的靜態指令或動態指令函數。 |
description | 代理的描述(通常用於子代理或工具)。 |
tools | 代理可調用的工具列表。 |
handoffs | 可轉交的其他代理列表。 |
model_settings | LLM 的相關參數(模型類型、溫度等)。 |
output_type | 預設為自由格式文本,也可指定結構化輸出。 |
context_type | 設定 Context 物件的 Python 類型。 |
工具(Tools)
工具讓代理可以在運行時決定調用外部函數,如 API 存取、數據查詢、數學計算等。
定義工具
使用 @function_tool
裝飾器將函數註冊為工具。
from agents.tool import function_tool
@function_tool
def get_weather(location: str, unit: str = "C") -> str:
"""
根據位置獲取天氣資訊。
"""
return f"The weather in {location} is 22 degrees {unit}."
將工具附加到代理:
agent.tools.append(get_weather)
Context(上下文管理)
有時候,代理需要在多個步驟之間保留狀態,例如會話數據、用戶 ID、請求歷史等。
from agents.run_context import AgentContextWrapper
from agents.tool import function_tool
class MyContext:
def __init__(self, user_id: str):
self.user_id = user_id
self.seen_messages = []
@function_tool
def greet_user(context: AgentContextWrapper[MyContext], greeting: str) -> str:
user_id = context.agent_context.user_id
return f"Hello {user_id}, you said: {greeting}"
Output Types(輸出類型)
Output Types 允許開發者指定代理的最終輸出格式,確保其符合應用需求。預設情況下,代理會產生自由格式的文本,但開發者可以使用 結構化輸出 來確保回應符合 JSON 格式。
示例:指定結構化輸出
from pydantic import BaseModel
from agents import Agent, AgentRunner
class WeatherResponse(BaseModel):
location: str
temperature_c: float
summary: str
agent = Agent(
name="weather_agent",
instructions="請提供結構化的天氣資訊。",
output_type=WeatherResponse,
)
result = await AgentRunner.run(agent, ["巴黎的天氣如何?"])
print(result.agent_output)
如果代理返回的 JSON 格式不符合 WeatherResponse
,則會觸發錯誤,確保輸出符合預期。
Handoffs(交接機制)
Handoffs 允許代理將對話委派給其他代理,這在多語言客服、不同領域專業代理等場景中特別實用。
示例:多語言客服代理
from agents import Agent, AgentRunner, handoff
english_agent = Agent(name="english_agent", instructions="回應使用英文。")
spanish_agent = Agent(name="spanish_agent", instructions="回應使用西班牙文。")
triage_agent = Agent(
name="triage_agent",
instructions="根據用戶語言選擇適當的代理。",
handoffs=[handoff(english_agent), handoff(spanish_agent)],
)
result = await AgentRunner.run(triage_agent, ["Hola, ¿cómo estás?"])
print(result.agent_output) # 會被交接給 spanish_agent。
Streaming(即時流式輸出)
Streaming 允許代理在思考或使用工具時,逐步輸出回應,適用於 即時交互 UI,如聊天機器人或語音助手。
示例:流式輸出
from agents import Agent, AgentRunner
stream = AgentRunner.run_streamed(agent, ["請講一個故事"])
async for event in stream.stream_events():
print(event.delta, end="", flush=True)
print("\n--- done ---")
在流式模式下,代理可以逐步輸出內容,而不需要等到完整結果產生。
Tracing(追蹤與記錄)
Tracing 允許開發者 記錄代理的完整執行歷程,包括:
- 使用者輸入
- 系統指令
- 工具呼叫與結果
- 代理決策與最終回應
這對於 偵錯、分析及行為監控 特別有幫助。
示例:啟用追蹤
from agents import AgentRunner, AgentRunConfig
config = AgentRunConfig(
run_name="CustomerSupportFlow",
tracing_disabled=False,
trace_non_openai_generations=True,
)
result = await AgentRunner.run(my_agent, ["Hello?"], run_config=config)
Guardrails(安全限制與驗證)
Guardrails 允許開發者 定義輸入與輸出的規則,確保代理不會處理或返回不合規的內容。
示例:禁止不當內容輸入
from agents.guardrails import CustomGuardrail
async def is_not_swearing(msgs, context) -> bool:
content = " ".join(m["content"] for m in msgs if "content" in m)
return "badword" not in content.lower()
my_guardrail = CustomGuardrail(
guardrail_function=is_not_swearing,
tripwire_config=lambda output: not output # 如果返回 False,則拋出錯誤
)
agent = Agent(
name="safe_agent",
input_guardrails=[my_guardrail]
)
out = await AgentRunner.run(agent, ["some text"])
# 若輸入含有 "badword",則會觸發 GuardrailTripwireTriggered。
OpenAI 的 Agents SDK 提供了一個強大的開源平台,使開發者能夠更輕鬆地構建和管理 AI 代理,進而推動企業的自動化進程。隨著 AI 技術的快速發展,這類工具將在未來商業環境中發揮 越來越關鍵的作用。
開發者現在即可透過 OpenAI 官方文件和 API Playground 開始構建 AI 代理,體驗 Agents SDK 的強大功能!
參考來源:
openai/openai-agents-python: A lightweight, powerful framework for multi-agent workflows