在 Google ADK(Agent Development Kit)中,工具型(Tool)和子代理(Sub Agent)是構建 AI 代理的兩種主要方式,用來實現不同層次的任務分解和功能整合。
這篇我們會詳細介紹這兩種方法的定義、差異,以及為什麼子代理的寫法更好,還有它們各自的應用場景。
工具型(Tool)Agent 的定義
工具型 Agent 是透過明確定義的函數(tools)來執行特定任務的代理。這些工具通常是 Python 函數,封裝單一功能(例如數學計算或文字處理),由代理調用完成用戶的請求。工具型 Agent 行為高度結構化,依賴預定義的工具集,適合處理明確、單一的任務。在 Google ADK 中,透過 tools
參數將函數綁定到代理,代理再依據指令(instruction)選擇合適工具執行。
子代理(Sub Agent)的定義
子代理是獨立的代理單元,嵌入在主代理(Root Agent)之下,形成多代理系統的一部分。每個子代理都有自己的模型、指令、描述和工具集,專注處理某類任務,並能與其他代理協作完成複雜目標。子代理透過 sub_agents
參數與主代理關聯,適合需要協作或分層處理的場景,例如旅行規劃系統中的航班查詢與酒店預訂。
主要差異:
方面 | 工具型 (Tool) | 子代理 (Sub Agent) |
---|---|---|
結構 | 單一函數,封裝特定功能 | 獨立代理,包含模型、指令、工具等 |
功能範圍 | 單一任務,如計算或查詢 | 複雜任務分解,可處理多步驟或協作邏輯 |
自主性 | 低:依賴代理調用,無獨立決策能力 | 高:擁有專屬指令與模型,可獨立處理任務 |
協作方式 | 單一代理直接調用,無代理間互動 | 透過主代理協調,支援多代理協作 |
靈活性 | 固定功能,難以應對動態變化 | 可動態分配任務,適應複雜場景 |
實現複雜度 | 簡單:僅需定義函數並綁定 | 複雜:需設計代理結構與協作邏輯 |
適用場景 | 簡單、確定性任務(如數學運算) | 複雜、非結構化任務(如工作流自動化) |
工具型方法適合快速實現單一功能,而子代理則適合模組化、協作式系統,能實現更高階的任務分解與彈性。
在 Google ADK 中,子代理型設計通常被認為更優,原因包括:
root_agent
的 sub_agents
列表即可。工具型 Agent 則需要修改 tools
列表,容易發生衝突,重構成本較高。root_agent
可根據用戶輸入,自動委派給相關子代理協同工作。工具型 Agent 則缺乏這種能力,只能單兵作戰。工具型 Agent 最佳場景
適合簡單、單一、明確定義的任務,特別適合快速原型或資源受限的情況。
範例:
原因:配置簡單、開發成本低,適合小型專案或短期應用,但不適合長期維護或擴展。
子代理型 Agent 最佳場景
適合複雜、動態或需要協作的任務,尤其是企業級應用或多步驟工作流。
範例:
原因:提供模組化設計,支援任務分解和代理協作,能處理非結構化、動態任務,方便長期維護與擴展。