本範例展示了 Agent Development Kit (ADK) 中的 Agent-to-Agent (A2A) 架構,說明多個代理如何協作以處理複雜任務。此範例實作了一個能擲骰子並檢查質數的代理。
A2A Basic 範例包含:
- Root Agent (
root_agent):主要的協調者,負責將任務委派給專門的子代理 - Roll Agent (
roll_agent):本地子代理,負責擲骰子操作 - Prime Agent (
prime_agent):遠端 A2A 代理,負責檢查質數,運行於獨立的 A2A 伺服器
flowchart TD
User["User"]
subgraph Local Environment
Root["Root Agent"]
Roll["Roll Agent"]
end
subgraph Remote Environment
Prime["Prime Agent<br/>(localhost:8001)"]
end
User <--> Root
Root -- "Delegate: Roll Dice" <--> Roll
Root -- "Delegate: Check Prime" <--> Prime
sequenceDiagram
participant User as 使用者
participant Root as 根代理 (Root Agent)
participant Roll as 擲骰子代理 (Roll Agent)
participant Prime as 質數代理 (Prime Agent)
User->>Root: 請求 (例如:擲骰子並檢查質數)
alt 擲骰子請求
Root->>Roll: 委派擲骰子任務
Roll->>Root: 返回擲骰結果
end
alt 質數檢查請求
Root->>Prime: 委派質數檢查任務
Prime->>Root: 返回檢查結果
end
Root->>User: 回覆最終結果
- 核心概念:建立一個多代理系統 (Multi-Agent System),包含一個編排用的根代理與兩個功能性子代理。
- 關鍵技術:
- 使用
google.adk框架定義代理。 RemoteA2aAgent:透過 A2A (Agent-to-Agent) 協定連接遠端代理。Agent Delegation:任務委派機制。
- 使用
- 重要結論:Gemini 2.0 Flash 可有效作為中樞代理,根據指令將任務分發給不同專業代理處理。
- 行動項目:請確保遠端質數檢查代理服務 (localhost:8001) 已啟動,以便
prime_agent正常運作。
roll_agent展示如何建立並整合本地子代理- 處理可自訂面數的擲骰功能
- 使用簡單的函式工具 (
roll_die) 進行隨機數產生
prime_agent展示如何連接遠端代理服務- 透過 HTTP 與
http://localhost:8001/a2a/check_prime_agent進行通訊 - 展現跨服務代理溝通
- 根代理會根據使用者請求智能委派任務
- 可串接多步操作(如「擲骰並檢查是否為質數」)
- 提供多代理間清晰的工作流程協調
- 包含
ExampleTool,提供範例互動以供參考 - 協助代理理解預期行為模式
uv init
source venv/bin/activate # Linux/Macuv pip install "google-adk[a2a]"-
啟動遠端質數代理伺服器:
# 啟動遠端 a2a 伺服器,於 8001 埠提供 check prime agent adk api_server --a2a --port 8001 a2a_basic/remote_a2a -
執行主代理:
# 於另一終端機執行 adk web 伺服器 adk web -
開啟瀏覽器並訪問:
http://localhost:8000
當兩個服務都啟動後,可與 root agent 互動:
單純擲骰:
User: 擲一顆六面骰
Bot: 我幫你擲出了 4。
質數檢查:
User: 7 是質數嗎?
Bot: 是的,7 是質數。
組合操作:
User: 擲一顆十面骰並檢查是否為質數
Bot: 我幫你擲出了 8。
Bot: 8 不是質數。
roll_die(sides: int):擲骰函式工具roll_agent:專責擲骰的本地代理prime_agent:遠端 A2A 代理設定root_agent:具委派邏輯的主協調代理
agent.py:質數檢查服務實作agent.json:A2A 代理卡check_prime(nums: list[int]):質數檢查演算法
你可以這樣擴充本範例:
- 增加更多數學運算(如因數分解、開根號等)
- 建立更多遠端代理
- 實作更複雜的委派邏輯
- 增加持久化狀態管理
- 整合外部 API 或資料庫
將遠端 A2A 代理部署到不同環境(如 Cloud Run、不同主機/埠)時,必須更新代理卡 JSON 檔的 url 欄位:
{
"url": "http://localhost:8001/a2a/check_prime_agent",
...
}{
"url": "https://your-service-abc123-uc.a.run.app/a2a/check_prime_agent",
...
}{
"url": "https://your-domain.com:9000/a2a/check_prime_agent",
...
}重要: remote_a2a/check_prime_agent/agent.json 的 url 欄位必須指向實際部署且可存取的遠端 A2A 代理 RPC 端點。
連線問題:
- 確認本地 ADK web 伺服器已於 8000 埠運行
- 確認遠端 A2A 伺服器已於 8001 埠運行
- 檢查防火牆是否阻擋 localhost 連線
- 確認
remote_a2a/check_prime_agent/agent.json的url欄位與實際遠端 A2A 伺服器位置一致 - 確認 RemoteA2AAgent 建構時傳入的代理卡 URL 與執行中的 A2A 伺服器一致
代理無回應:
- 檢查本地 ADK web 伺服器(8000 埠)及遠端 A2A 伺服器(8001 埠)日誌
- 確認代理指令明確且無歧義
- 再次確認 agent.json 檔案中的 RPC URL 正確且可存取
- [adk-python] a2a_basic
ExampleTool 的內容可參考 Example Tool README。

