Agent Tool 無上下文記憶,需改用 Sub-agent
Agent Tool 無上下文記憶,需改用 Sub-agent
問題描述
在 ADK 中,透過 agenttool.New() 將 Agent 包裝成 Agent Tool 後,該 agent 在被呼叫時沒有父 agent 的對話記憶:
- Agent Tool 每次被呼叫都是無狀態的獨立執行
- 無法存取父 agent 的對話歷史(session history)
- 適合「給一個輸入、取得一個輸出」的無狀態任務(例如:查資料、分析圖片)
對比:Sub-agent vs Agent Tool
Sub-agent(sub_agents) |
Agent Tool(agenttool.New()) |
|
|---|---|---|
| 上下文記憶 | ✅ 共享父 agent session | ❌ 無,每次獨立執行 |
| 呼叫方式 | transfer_to_agent(agent_name=...) |
直接呼叫工具 |
| 適合情境 | 需要對話歷史的複雜流程 | 無狀態的單次查詢 |
| 使用限制 | 不能掛有 google_search tool |
可掛 google_search |
情境範例
Agent Tool(無上下文記憶)
適合「翻譯文字」、「分析圖片」等純無狀態任務:
1 | // translator_agent:純無狀態翻譯,不需要對話歷史 |
呼叫時 translator_agent 只會看到當次傳入的 input,不知道之前對話說了什麼。
Sub-agent(共享上下文記憶)
適合「建立訂單」、「預約行程」等需要讀取對話歷史的流程:
1 | // booking_agent:需要知道使用者先前提到的日期、人數 |
booking_agent 被 transfer 進來時,可以讀取整個 session 的對話歷史(使用者說了什麼日期、幾人等)。
決策原則
需要對話上下文?→ 用 Sub-agent
純無狀態單次查詢?→ 用 Agent Tool
具體判斷:
- 該 agent 需要知道「使用者之前說了什麼」→ Sub-agent
- 該 agent 只需要「當次輸入」就能完成任務 → Agent Tool
- 該 agent 帶有
google_search→ 只能用 Agent Tool(ADK 限制)
本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 Kenny's Blog!