什麼是 Google ADK
Google Agent Development Kit(ADK)是 Google 開源的 Python 框架,專為 AI Agent 的開發、測試、評估與部署設計
與過去單體式 AI 架構不同,ADK 強調模組化與生產可用性,讓開發者能組合多個 AI Agent 協同完成複雜任務
支援語系
- Python > v3.9
- TypeScript
- GO
- Java
快速開始
Step 1. 環境設定
環境變數安裝
uv add dotenv
# 使用 pip
pip install dot env
虛擬環境設定
使用 venv 的目的是為了防止環境變數污染
推薦方式:uv(正式專案)
# 初始化新專案
uv init my_project
cd my_project
# 安裝 google-adk
uv add google-adk
替代方式:pip(快速體驗)
# 安裝 google adk
pip install google-adk
Step 2. 建立專案
adk create my_agent
目錄結構
目錄檔名僅能包含英文、數字和底線(_),起始僅能英文或底線
- my_agent
- agent.py # Agent 主要邏輯
- __init__.py # 匯入 Agent 模組
- .env # 環境變數宣告
- /skills
__init__.py
from . import agent
.env
# System settings
OPENAI_API_BASE="{OPENAI_URL}"
OPENAI_API_KEY="{OPENAI_TOKEN}"
MODEL="{YOUR_MODEL}"
LANGUAGE="Chinese"
注意:load_dotenv() 必須在所有 local import 之前呼叫,否則環境變數無法正確載入
from dotenv import load_dotenv
load_dotenv() # ← 必須放在最前面
from agents.my_agent.agent import root_agent # 之後才 import agents
Step 3. 撰寫第一個 Agent
from google.adk.agents.llm_agent import Agent
from google.adk.models.lite_llm import LiteLlm
def get_current_time(city: str) -> dict:
"""Returns the current time in a specified city."""
return {"status": "success", "city": city, "time": "10:30 AM"}
root_agent = Agent(
model=LiteLlm(model="{YOUR_MODEL}"),
name='root_agent',
description='A helpful assistant for user questions.',
instruction='Answer user questions to the best of your knowledge',
tools=[get_current_time]
)
為何要使用 LiteLlm?
LiteLlm 是 Google ADK 提供的一個 model wrapper,讓你用統一的介面來呼叫多種 LLM provider。
| 統一介面 | 一套 API 呼叫 OpenAI / Gemini / Anthropic 等 |
| ADK 原生整合 | 可直接傳給 Agent(model=...) |
| 環境變數支援 | 自動讀取環境變數 |
| Proxy 支援 | 可指向內部 LLM Proxy Gateway |
Step 4. 執行 Agent
執行需要在 agent folder ,否則啟用後會找不到 agent
# 僅能在開發環境執行
adk web
# 如果有使用 .venv 則需要使用 uv run (在虛擬環境中執行)
uv run adk web
Agent 是什麼?
Agent 是一個自主執行的單元,可以做到
- 理解使用者需求
- 決定使用哪些工具
- 與其他 Agent 協作(A2A)
- 回應並完成任務
Agent 基本組成
agent = LlmAgent(
model="{YOUR_MODEL}", # 使用的 AI 模型
name="my_agent", # 唯一識別名稱
description="這個 Agent 做什麼", # 供其他 Agent 辨識用
instruction="你是一個...", # 行為指引(最重要!)
tools=[tool1, tool2], # 可用工具列表
)
Instruction 撰寫技巧
instruction 是決定 Agent 行為最關鍵的參數,可以使用 prompt
動態插入狀態變數
# {var} -> 必填,找不到會報錯
# {var?} -> 選填,找不到則忽略
instruction="目前使用者 {user_name} 正在詢問{topic?}"
Instruction 中引用工具
instruction="""
當使用者詢問天氣時:
1. 使用 `get_weather_report` 工具取得天氣資料
2. 如果工具回傳 error,請向使用者道歉並詢問是否換個城市
3. 成功後使用 `analyze_sentiment` 分析天氣對心情的影響
"""
Agent 類型
LLM Agent (智慧型)
利用 LLM 進行推理、決策,適合自然語言處理、動態工具選擇
from google.adk.agents import LlmAgent
agent = LlmAgent(
model="{YOUR_MODEL}",
name="smart_agent",
instruction="...",
tools=[...],
)
Workflow Agent(流程控制型)
不使用 LLM 控制流程,執行確定性、可預測的流程
SequentialAgent(循序)執行
step1 → step2 → step3
from google.adk.agents import SequentialAgent
pipeline = SequentialAgent(
name="data_pipeline",
sub_agents=[fetch_agent, process_agent, report_agent],
)
ParallelAgent(平行)執行
多個 sub agent 同時執行,適合可平行化的資料搜集任務

from google.adk.agents import ParallelAgent
parallel = ParallelAgent(
name="parallel_research",
sub_agents=[search_agent, database_agent],
)
LoopAgent(迴圈)執行
持續執行 sub-agent 直到條件成立
from google.adk.agents import LoopAgent
loop = LoopAgent(
name="retry_loop",
sub_agents=[check_agent],
max_iterations=5, # 最多執行幾次
)
Custom Agent(自定義型)
繼承 BaseAgent,完全自訂執行邏輯:
from google.adk.agents import BaseAgent
class MyCustomAgent(BaseAgent):
async def _run_async_impl(self, ctx):
# 完全自訂的執行邏輯
yield some_event
三種類型比較
| 核心引擎 | LLM 模型 | 預定義邏輯 | 自訂程式碼 |
| 行為確定性 | 不確定(彈性) | 確定(可預測) | 自行決定 |
| 主要用途 | 語言任務、動態決策 | 結構化流程 | 特殊需求整合 |
Tools 工具系統
Tools 讓 Agent 能夠與外部世界互動
工具的執行流程

Function Tool(自訂函式)
最常用的工具類型,ADK 會自動讀取函式的 docstring 和型別提示來告知 LLM 如何使用這個工具,因此寫好文件非常重要
def search_database(query: str, limit: int = 10) -> dict:
"""
在資料庫中搜尋指定關鍵字。
Args:
query: 搜尋關鍵字
limit: 最多返回幾筆結果
Returns:
dict: 包含 status 和 results 的字典
"""
# 實作搜尋邏輯
results = db.search(query, limit=limit)
return {"status": "success", "results": results}
agent = LlmAgent(
...,
tools=[search_database], # 直接傳函式
)
Agent as Tool(Agent 作為工具)
把另一個 Agent 包裝成工具呼叫,與 sub_agents 的差異在於可以取得子 Agent 的回傳值:
from google.adk.tools import AgentTool
specialist_agent = LlmAgent(name="specialist", ...)
main_agent = LlmAgent(
...,
tools=[AgentTool(agent=specialist_agent)],
)
| 控制方式 | LLM 自行決定轉交時機 | 主動呼叫,可取得回傳值 |
| 適合場景 | 動態路由 | 需要子 Agent 輸出做後續處理 |
Agent 間的溝通方式
- LLM 動態路由:父 Agent 的 LLM 決定轉給哪個 sub-agent
- Workflow 控制:由 SequentialAgent / ParallelAgent 決定執行順序
- Agent as Tool:將 sub-agent 當作工具呼叫
什麼是 Multi-Agent
由多個 AI Agent 組成,每個 Agent 負責特定職責,透過協調者(Orchestrator)統一調度
為何需要使用 Multi-Agent?
- 分工明確:每個 Agent 只做一件事情,易維護
- 可擴充性:新增功能只需要加入新的 Agent 即可
- 容錯性:單一 Agent 失敗不影響整體
- 重用性:相同 Agent 可在不同流程中複用
MCP 工具整合
MCP(Model Context Protocol)讓 Agent 透過標準協定呼叫外部服務(Confluence、JIRA、GitHub 等),無需自己實作 API Client。
概念說明
Agent ──呼叫──> MCPToolset ──stdio──> MCP Server(子行程)(e.g., mcp-atlassian)
