前幾天在聊相互不認識的 Agent 間怎麼連接,今天來聊聊 Google ADK 內部間 Agent 的協作模式。
本篇文章參考 Google ADK 的文件
https://github.com/google/adk-docs/blob/main/docs/agents/multi-agents.md
你可能會問:「前幾天不是講了 A2A 協議?那跟 ADK Multi-Agent 有什麼不同?」
ADK 定義了三種核心 Agent 類型:
LLM Agents
Workflow Agents
Custom Agents
在多 Agent 系統中,採用階層式架構就像組建一個有明確分工的團隊。每個 Agent 各司其職,由上層協調者統籌分配任務,讓整個系統既靈活又容易擴充。這種設計能讓我們像搭積木一樣,根據需求隨時調整團隊成員,並確保每個部分都能獨立運作、互不干擾。
# 建立專業分工的 Agent 團隊
billing_specialist = LlmAgent(
name="帳務專家",
description="處理付款、退款、發票等財務問題"
)
tech_specialist = LlmAgent(
name="技術專家",
description="解決登入、功能操作、系統錯誤等技術問題"
)
# 總指揮負責分配任務
conductor = LlmAgent(
name="總指揮",
model="gemini-2.0-flash",
instruction="根據使用者問題,將任務分配給最適合的專家處理",
sub_agents=[billing_specialist, tech_specialist]
)
這種設計有幾個好處:
在 ADK 的多種協作模式中,Coordinator/Dispatcher 是最容易上手的也是 Agent 互動中最常見的一種方式。
想像餐廳運作:
方式一:LLM-Driven Delegation(智慧分派)
coordinator = LlmAgent(
name="智慧總監",
model="gemini-2.0-flash",
instruction="""
你是一位智慧總監,負責將使用者的請求分配給最適合的專家:
- 付款相關問題:轉給帳務專家
- 技術操作問題:轉給技術專家
""",
sub_agents=[billing_specialist, tech_specialist]
)
ADK 的 AutoFlow 會自動處理 transfer_to_agent()
,像有個助理自動把任務交給對的專家。
方式二:Explicit Invocation(明確調用)
from google.adk.tools import agent_tool
coordinator = LlmAgent(
name="精確總監",
instruction="使用適當的專家工具來處理使用者問題",
tools=[
agent_tool.AgentTool(agent=billing_specialist),
agent_tool.AgentTool(agent=tech_specialist)
]
)
這種方式讓專家 Agent 變成「工具」,總監可以精確控制何時呼叫哪位專家。
在 Coordinator/Dispatcher 模式下,LLM-Driven Delegation(智慧分派)與 Explicit Invocation(明確調用)最大的本質差異,在於「誰決定要呼叫哪個 Agent」以及「控制權」的歸屬:
Explicit Invocation 下,協調者(總監)始終保持主控權,所有流程都必須經過協調者決定與調度;而 LLM-Driven Delegation 則是協調者把流程完全交出去,後續怎麼發展就不再干涉。
掌握 Coordinator/Dispatcher,你已具備 Multi-Agent 系統基礎。ADK 還有更多協作模式:
明天將深入這些進階模式,設計更強大的 Agent 協作系統。