Pydantic AI 多代理人協作 (Multi-Agent Patterns)

當你在解決簡單的問題時,一個單一的萬能代理人(Agent)通常就足夠了。但在面臨企業級的複雜任務(例如:同時需要規劃行程、比對財務預算、最後還要寫成一封正式的 Email 寄出)時,讓單一個 Agent 承擔所有工作往往會導致系統提示過於龐大、注意力發散,且容易出錯。

解決之道是採用多代理人架構 (Multi-Agent Architecture)。在這種架構下,我們會建立多個職責單一、具有專門系統提示與專屬工具的「專家 Agent」,並讓它們互相合作。

代理人委派 (Agent Delegation)

在 Pydantic AI 中實現多代理人最簡單也最直覺的方式,就是把其他 Agent 包裝成主要 Agent 的工具 (Tools)

這被稱為代理人委派 (Agent Delegation)。你可以設定一個負責理解使用者意圖的「路由代理人 (Router Agent)」,當它發現使用者的問題屬於特定領域時,它就會呼叫對應的「專家代理人 (Expert Agent)」。

實作範例

以下是一個簡單的客服系統範例,包含一個主控台 Agent 以及兩個負責不同領域的專家 Agent:

from pydantic_ai import Agent, RunContext

# 1. 建立退款處理專家 Agent
refund_agent = Agent(
    'openai:gpt-4o',
    system_prompt='你是退款處理專家。根據訂單編號查詢並處理退款。請務必跟使用者要到訂單編號。'
)

# 為退款專家添加專屬的資料庫工具
@refund_agent.tool
def process_refund_in_db(order_id: str) -> str:
    return f"訂單 {order_id} 退款成功。"

# 2. 建立技術支援專家 Agent
tech_support_agent = Agent(
    'openai:gpt-4o',
    system_prompt='你是技術支援專家。專門解決產品使用上的技術問題。'
)

# 3. 建立主控台/路由 Agent
router_agent = Agent(
    'gemini-1.5-pro',
    system_prompt='你是客服中心總機。判斷使用者的需求,如果是退款問題,交給退款專家;如果是技術問題,交給技術專家。綜合他們的回答來回覆使用者。'
)

# 將退款專家包裝成路由 Agent 的工具
@router_agent.tool
async def handle_refund(ctx: RunContext, user_query: str) -> str:
    # 在這裡呼叫退款 Agent,並把對話歷史傳遞下去 (依需求決定是否傳遞)
    response = await refund_agent.run(user_query)
    return response.data

# 將技術專家包裝成路由 Agent 的工具
@router_agent.tool
async def handle_tech_support(ctx: RunContext, user_query: str) -> str:
    response = await tech_support_agent.run(user_query)
    return response.data

# 執行測試
result = router_agent.run_sync("我的滑鼠買來就壞了,根本連不上藍牙!另外我上一筆訂單 T12345 想申請退款。")
print(result.data)

在這個流程中,router_agent 扮演大腦分配任務,而 refund_agenttech_support_agent 專心處理自己的專業領域。這種職責分離 (Separation of Concerns) 使得系統除錯與擴充都變得容易得多。

Agent-to-Agent (A2A) 協定

除了直接將 Agent 包裝成本地 Python 工具之外,Pydantic AI 也支援更進階的跨伺服器協作。

有時候,這些專家 Agent 可能散佈在不同的微服務 (Microservices) 中,由不同的團隊以不同的語言開發。這時候可以使用標準化的介接協定(例如 MCP 或特定的 Agent-to-Agent 協定),讓 Pydantic AI 的代理人能夠透過網路呼叫並取得其他代理人的推論結果。

這使得建構高度分散且可獨立擴展的 AI 系統成為可能。

何時該使用多代理人?

  • 當系統提示 (System Prompt) 超過兩頁時:如果一個 Agent 的規章制度太多,它很容易忘記或忽略某些規則。拆分給不同的專家是更好的做法。
  • 工具過多時:如果一個 Agent 掛載了 20 個工具,模型在選擇工具時很容易產生幻覺或混淆。
  • 需要不同權限控管時:退款 Agent 可能具有寫入資料庫的權限(甚至需要 Human-in-the-loop 審批),但一般客服 Agent 只該有讀取權限。將它們拆分可以大幅提升安全性。

透過 Pydantic AI 極其簡單的 Tool 裝飾器,實作多代理人架構不再需要複雜的 Orchestrator,只需將 Agent 當作 Python 函數來呼叫即可!