Google 的 Agent Development Kit(ADK)是 2026 年 Agent 框架里比较特别的一个:它同时给你「自己画流程图」的确定性控制和「让模型自己决定下一步」的自主委派,而且能混在同一个应用里。听起来复杂,但上手只需要 5 分钟——本教程带你从零跑出第一个会调用工具的 Agent,并用它自带的调试界面把每一步看清楚。
先对齐:ADK 在框架里的位置
不同框架对「模型和工具之间那个循环」的约束程度不一样:LangGraph 偏图、CrewAI 偏角色团队、OpenAI Agents SDK 偏轻量声明。ADK 2.x 的答案是「两种都要」——你可以用确定性图控制关键路径,也可以把子任务交给模型自主委派,并在同一个运行时里混用。本篇只做最小可用版本,把「能跑通」放第一位。
Step 1:装 ADK 并脚手架出项目
# 建议用虚拟环境
python -m venv .venv
# Windows: .venv\Scripts\activate
source .venv/bin/activate
pip install google-adk
# 脚手架:生成一个名为 my_agent 的 Agent 项目
adk create my_agent
生成出来的目录大致是这样(不同小版本文件名可能略有差异,以实际输出为准):
my_agent/
├── __init__.py # 声明包
├── agent.py # 你的 Agent 定义(核心)
└── .env # 模型与密钥配置
__init__.py。如果你自己手动建目录,别忘了补这个文件,否则 adk web 会找不到你的 Agent。Step 2:写工具——普通函数就行
ADK 最省事的一点:工具就是普通 Python 函数。它读函数名、类型注解和 docstring,自动生成模型能看懂的调用说明。打开 agent.py,写成下面这样:
# my_agent/agent.py
from google.adk.agents import Agent
def get_current_time(city: str) -> dict:
"""返回指定城市的当前时间。
Args:
city: 城市名,例如 "Beijing"。
"""
# 教程里用占位数据;真实项目换成时区库或接口调用
return {"status": "success", "city": city, "time": "10:30"}
def convert_currency(amount: float, rate: float) -> dict:
"""按给定汇率把金额换算成目标币种。"""
return {"status": "success", "result": round(amount * rate, 2)}
# 必须叫 root_agent —— ADK 靠这个名字找到入口
root_agent = Agent(
model="gemini-flash-latest", # 模型名以官方文档为准
name="root_agent",
description="一个能查时间、算汇率的小助手。",
instruction=(
"你是一个务实的助手。"
"查时间用 get_current_time,换算金额用 convert_currency。"
"工具没返回结果时,如实说明,不要编造数据。"
),
tools=[get_current_time, convert_currency],
)
两个容易踩的点:① docstring 是给模型看的 API 契约,不是写给自己看的注释;② 工具返回值建议统一带一个 status 字段(success / error),这样出错时模型有东西可推理,而不是面对一个空结果瞎猜。
Step 3:配好密钥,先冒烟测试
在 my_agent/.env 里填上你的 Gemini Key(从 Google AI Studio 拿,免费额度够练手):
# my_agent/.env
GOOGLE_API_KEY=你的_gemini_api_key
# 在「包含 my_agent 目录」的上级目录执行
adk run my_agent
# 出现输入提示后,直接问:
# 北京现在几点?
# 观察它是否会调用 get_current_time 工具
.env 里是真实密钥,务必把它加进 .gitignore,永远不要提交到仓库。团队协作时用环境变量或密钥管理服务注入。Step 4:用 adk web 把每一步看清楚
这是 ADK 最值得用的功能:一个本地 Web 界面,聊天框旁边直接展示完整的事件轨迹——模型调了哪个工具、传了什么参数、返回了什么、最终答案怎么拼出来的。
# 同样在上级目录执行
adk web --port 8000
# 浏览器打开 http://localhost:8000
# 左侧选择 my_agent,右侧对话
# 每条回复旁边可展开事件轨迹:工具调用 → 参数 → 返回值 → 组装答案
Step 5:加约束、加工具、想下一步
跑通之后,按这三步加固:
- 在 instruction 里写红线:能做什么、绝对不能做什么、不确定时怎么办。约束写得越明确,Agent 越稳。
- 一个工具只做一件事:把「查订单 + 改订单」拆成两个工具,权限和审计都更清晰;写操作单独命名,方便加人工确认。
- 想清楚部署目标:ADK 支持托管运行时、Cloud Run、GKE 或任意容器平台。本地跑通后再决定部署方式,别过早纠结。
关于模型与额度:ADK 对 Gemini 优化最好,但架构上是模型无关的,也能接其它提供商的模型(需要装对应依赖)。免费额度有速率限制,跑批量任务前先确认配额;所有模型名、SDK 参数以官方文档当前版本为准,不要照抄旧文章。
常见问题速查
| 现象 | 大概率原因 & 解决 |
|---|---|
| adk web 里看不到我的 Agent | 执行目录不对(要在 my_agent 的上级目录),或缺少 __init__.py |
| 报鉴权 / 模型错误 | .env 里的 Key 没生效或额度用尽,先确认变量名与文件位置 |
| 模型不调用工具 | docstring 太笼统,或 instruction 没说明「什么时候用哪个工具」 |
| 工具被调用但结果不对 | 在 adk web 的事件轨迹里看实际传参,多数是参数类型或字段名不匹配 |
| 想换成别的模型 | 改 model= 并安装对应依赖,具体写法查官方文档 |