iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0

前幾天在聊相互不認識的 Agent 間怎麼連接,今天來聊聊 Google ADK 內部間 Agent 的協作模式。

本篇文章參考 Google ADK 的文件
https://github.com/google/adk-docs/blob/main/docs/agents/multi-agents.md

你可能會問:「前幾天不是講了 A2A 協議?那跟 ADK Multi-Agent 有什麼不同?」

  • 前幾天的 A2A:跨組織協作、標準通訊、安全驗證、服務發現
  • 今天的 ADK Multi-Agent:團隊內部分工、流程管理、資源共享

ADK Multi-Agent 架構:分工合作的智慧

三種角色,各司其職

ADK 定義了三種核心 Agent 類型:

LLM Agents

  • 負責理解語言、推理、規劃
  • 處理需要「思考」的任務

Workflow Agents

  • 控制流程、安排任務順序
  • 管理其他 Agent 的執行
  • 包含:SequentialAgent(依序)、ParallelAgent(平行)、LoopAgent(迴圈)

Custom Agents

  • 處理 LLM 不擅長的任務(如數學、資料庫)

階層式架構

在多 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]
)

這種設計有幾個好處:

  • 專業化:每個 Agent 專注自己的領域
  • 模組化:要加新功能,只需新增 Agent
  • 故障隔離:某個 Agent 出錯,不影響全局
  • 獨立最佳化:不同 Agent 可用不同模型或參數

Coordinator/Dispatcher 模式:協作的起點

在 ADK 的多種協作模式中,Coordinator/Dispatcher 是最容易上手的也是 Agent 互動中最常見的一種方式。

概念說明

想像餐廳運作:

  • 客人點餐後,總監不會親自下廚
  • 會根據菜色分配給最適合的主廚
  • 每位主廚專精自己的料理,品質更好

ADK 實作方式

方式一: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 變成「工具」,總監可以精確控制何時呼叫哪位專家。

LLM-Driven Delegation vs. Explicit Invocation(AgentTool):誰掌控協作?

在 Coordinator/Dispatcher 模式下,LLM-Driven Delegation(智慧分派)與 Explicit Invocation(明確調用)最大的本質差異,在於「誰決定要呼叫哪個 Agent」以及「控制權」的歸屬:

Explicit Invocation 下,協調者(總監)始終保持主控權,所有流程都必須經過協調者決定與調度;而 LLM-Driven Delegation 則是協調者把流程完全交出去,後續怎麼發展就不再干涉。

  • LLM-Driven Delegation:像總監請助理直接把客戶帶去找專家,助理帶過去後,總監就不再干涉,專家和客戶怎麼互動都由他們決定。
  • Explicit Invocation:像總監每次都親自打電話給專家,問完再回來,然後再決定下一步。整個過程總監都在場,流程始終由總監掌控。

掌握 Coordinator/Dispatcher,你已具備 Multi-Agent 系統基礎。ADK 還有更多協作模式:

  • Sequential Pipeline:像生產線一樣依序處理
  • Parallel Fan-Out/Gather:平行處理再匯總
  • Hierarchical Task Decomposition:層次化分解複雜任務
  • Iterative Refinement:透過迴圈精進結果

明天將深入這些進階模式,設計更強大的 Agent 協作系統。


上一篇
A2A 的對話起點:從 AgentCard 到通訊協議
下一篇
ADK Multi-Agent 協作 (二)
系列文
不只是反覆 TRY AGAIN,煉金師懂得調配試煉的秘方。19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言