Google ADK AI简明教程
谷歌刚刚发布了 Agent Development Kit (ADK) — 如果你对构建AI代理感兴趣,这绝对是你应该关注的东西。
你可能已经探索过像 AutoGen 或 CrewAI 这样的框架,它们可以以强大的方式将大型语言模型串联起来。ADK处于类似的领域,但采用了全新的方法,强调 实时多模态能力、代理协作 和 超级精简的开发者体验。
而且这不是研究玩具。ADK 是基于谷歌用于生产级代理的工程实践构建的,让你感觉更像是在使用现代开发工具包,而不是一些抽象的框架。
令人惊讶的是,你可以构建简单的多代理系统,具有实时音频和视频功能、云或本地部署以及内置的UI测试环境——所有这些都可以在 不到100行代码 中完成。
在这篇文章中,我将带你了解我是如何使用ADK构建一个智能旅行规划代理的,包括多个子代理——什么有效,什么让我感到惊讶,以及为什么我认为如果你对AI发展的方向感兴趣,这值得一试。
让我们先来看看ADK到底是什么。
1、什么是Agent Development Kit (ADK)?
谷歌的 Agent Development Kit (ADK) 是一个全新的开源框架,旨在让构建高级AI代理变得更简单、更快捷、更易获得。
与其需要拼凑一堆工具和API,ADK提供了一个统一的框架,直接可用。
以下是它的亮点:
- 模型无关性: 你可以使用 任何AI模型,包括谷歌自己的Gemini模型,这给了你选择最适合你的模型的灵活性。
- 随处部署: 无论你是本地构建还是在Google云端部署,ADK都不会限制你。
- 设计为互操作性: 它很容易与现有服务、工具甚至其他框架构建的代理集成。
现在我们已经了解了Google的ADK提供了什么,是时候动手实践了。无论你是刚起步还是想推动代理能做的事情的极限,这才是真正的乐趣开始的地方。 让我们开始吧!
2、设置环境
在我们开始编写代码之前,让我们设置一个干净的 环境 来工作。Google的ADK是以 Python包 的形式提供的,因此最好使用 虚拟环境 来保持整洁且无冲突。
在你的项目目录中,运行:
python -m venv .venv # 对于Windows或当'python'指向正确版本时
python3 -m venv .venv # 对于macOS/Linux
然后根据你的操作系统激活环境:
# macOS / Linux
source .venv/bin/activate
# Windows (CMD)
.venv\Scripts\activate.bat
# Windows (PowerShell)
.venv\Scripts\Activate.ps1
3、安装ADK
一旦环境激活,通过以下命令安装ADK:
pip install google-adk
为了确认一切安装正确(这虽然是可选的,但推荐):
pip show google-adk
如果一切安装正确,你应该会看到类似下面的输出。
这确认了ADK已准备就绪!
4、设置项目结构
既然ADK已经安装好了,现在是时候设置一个Python项目来托管你的代理了。
首先在你的项目目录中创建一个新的文件夹。在我的例子中,我创建了一个名为 travel_planner
的文件夹。在这个文件夹内,我创建了子目录 subagents
用于存储代理模块,以及 tools
用于实用函数和模式。这种结构有助于保持你的代码库整洁且模块化,随着项目的增长,这会让开发和维护变得更加容易。
这是旅行规划项目的完整文件夹结构:
travel_planner/
└── travel_planner/
├── .env # 存储环境变量,如API密钥
├── agent.py # 主协调器 - 将任务分配给子代理
├── subagents/ # 存放不同代理模块的文件夹
│ ├── flight_agent.py # 处理航班搜索和建议
│ └── hotel_agent.py # 处理酒店搜索和预订
├── tools/ # 实用函数和工具模式
│ ├── schemas.py # Pydantic或自定义模式,确保代理间数据一致性
└── __init__.py # 将travel_planner设为Python包
别担心立即创建所有这些文件。我们将逐步通过每个文件来构建项目。
5、从Google AI Studio获取API密钥
接下来,在跳入代码之前,让我们设置你的环境以安全地连接到 Gemini,这个LLM将为你的代理提供动力。
虽然本指南使用 Gemini 通过Google AI Studio,但值得注意的是,你可以通过工具如 LiteLLM 连接到各种各样的LLM——包括 OpenAI、Anthropic等。如果你想了解设置这些的分步指南,请在 评论区 告诉我!
在你的 travel_planner
项目根目录下,创建一个 .env
文件。这个文件将保存你的认证凭据和配置设置。
但在我们继续设置之前,我们需要先从 Google AI Studio 获取一个 API密钥。这个密钥允许你的代理安全地与Gemini模型交互。
a) 前往 Google AI Studio(确保你已登录你的Google账户)
b) 点击“获取API密钥”。
c) 点击“创建API密钥”。
d) 点击“在新项目中创建API密钥”(或“在现有项目中创建API密钥”,如果你已有项目创建)。
e) 复制生成的API密钥。
重要提示: 切勿将你的API密钥提交到版本控制或公开分享。将其视为密码对待。
6、配置你的 .env
文件
现在,打开你喜欢的编辑器——我会使用 Visual Studio Code 进行此演练。
然后,打开 .env
文件并添加以下内容:
GOOGLE_GENAI_USE_VERTEXAI=FALSE
GOOGLE_API_KEY=YOUR_ACTUAL_API_KEY_HERE
将 YOUR_ACTUAL_API_KEY
替换为你从Google AI Studio复制的 API密钥。
7、定义旅行请求
让我们确保所有代理都使用相同的语言。
为此,我们将使用 Pydantic 来定义一个共享模式,描述“旅行请求”应该包含的内容,比如你要去哪里、什么时候去、预算是多少。
在 tools
文件夹内,创建一个名为 schemas.py
的新文件,并添加以下内容:
from pydantic import BaseModel
class TravelInfo(BaseModel):
origin: str
destination: str
start_date: str
end_date: str
budget_amount: float
budget_currency: str
这个小代码块为每个旅行请求设定了规则。每个代理都会使用它来正确地理解和处理数据。可以将其视为我们系统的通用语言。
如果你是Pydantic的新手,不要担心——我们会以一种简单的方式使用它,帮助我们保持组织性和避免错误。
8、构建子代理
搜索工具已经设置好了,现在是时候创建子代理了!这些是专注于特定任务的专门代理,例如查找航班或酒店。我们将定义航班代理和酒店代理,两者都由Gemini提供动力,以处理每个任务的决策和推理。
我们将使用ADK的Agent类轻松集成到Gemini API中。每个代理都有自己的职责和工具来完成任务。
是什么让一个代理运行?
让我们快速回顾一下构成一个代理的主要部分:
name
:这是我们识别代理的方式。每个代理都有一个唯一的名称。model
:我们使用的是***“gemini-2.0-flash-exp”***,但你可以根据需要选择任何LLM模型。description
:简短描述代理的功能,相当于它的职位描述!instructions
:这是设定规则的地方。它告诉代理如何表现以及应该做什么。tools
:这些是代理用来完成工作的力量。在这种情况下,我们不实现搜索工具(如航班或酒店搜索)以保持简单。相反,代理将专注于基于给定数据提出模拟建议。
现在,让我们开始构建代理!
8.1 航班代理(subagents/flight_agent.py)
在subagents
文件夹中创建一个新的文件flight_agent.py
并添加以下代码:
from google.adk import Agent
flight_agent = Agent(
name="flight_agent",
model="gemini-2.0-flash-exp",
description="根据出发地、目的地、旅行日期和预算提供建议的航班。",
instruction="""
你是一个航班预订代理。协调员会给你以下信息:
- 出发地
- 目的地
- 起始日期
- 结束日期
- 预算金额
- 预算货币
返回1-2个模拟航班选项,包括:
- 航空公司名称
- 出发和返回日期/时间
- 价格(以指定货币表示)
- 班级(经济舱/商务舱)
确保总价格在预算范围内。
"""
)
8.2 酒店代理(subagents/hotel_agent.py)
同样,在subagents
文件夹中创建另一个文件hotel_agent.py
并添加以下代码:
from google.adk import Agent
hotel_agent = Agent(
name="hotel_agent",
model="gemini-2.0-flash-exp",
description="在给定的旅行日期内找到符合目的地和预算的酒店。",
instruction="""
你是一个酒店预订代理。协调员会给你以下信息:
- 目的地
- 起始日期
- 结束日期
- 预算金额
- 预算货币
返回1-2个模拟酒店建议,包括:
- 酒店名称
- 每晚价格和总成本(以给定货币表示)
- 主要设施
确保总价格符合预算。
"""
)
这里发生了什么?
- 航班代理:这个代理专注于寻找航班。它使用提供的信息(如出发地、目的地、起始日期、结束日期和预算)来建议最佳航班选项。
- 酒店代理:这个代理专门负责酒店搜索。它使用相同的数据(目的地、日期、预算)来推荐用户价格范围内的合适酒店。
10、构建协调员代理
现在你已经有了航班代理和酒店代理,是时候将它们全部整合到协调员代理中了!想想这个代理就像幕后的大脑。
这个代理直接与用户交互。它接收自然语言输入,如“计划下周预算700美元去曼谷的3天旅行”,提取关键细节,并将具体任务分配给适当的子代理。
协调员代理将:
- 理解用户:它接收自然语言输入并提取有用的信息,如你要去哪里、何时去以及预算是多少。
- 填补空白:如果缺少某些信息(如日期或货币),它会要求澄清或使用智能默认值。
- 召集团队:一旦收集到所有必要信息,它会将任务分配给航班和酒店代理。
- 整理一切:最后,它会生成一份旅行总结,包括航班和酒店选项、估算费用,甚至包括一天的行程示例。
以下是定义协调员代理的代码,位于travel_planner/agent.py
中(注意,这不在与其他代理相同的文件夹中):
from google.adk import Agent
from travel_planner.subagents.flight_agent import flight_agent
from travel_planner.subagents.hotel_agent import hotel_agent
from travel_planner.tools.schemas import TravelInfo
from datetime import datetime, timedelta
today = datetime.today().date()
coordinator_agent = Agent(
name="TravelCoordinator",
model="gemini-2.0-flash-exp",
description="主要的协调员代理,收集旅行偏好并查询子代理。",
instruction=f"""
你是一个旅行规划协调员。
你的任务是从用户那里收集旅行偏好,并与子代理协调,提供航班、酒店建议和日程安排。
你会收到用户的自然语言输入,并需要提取以下详细信息:
注意,总预算应用于航班和酒店建议,不应超过总额。
如果用户没有指定起始日期,而是提到“下周”、“下个月”或“明年”,则通过取今天的日期作为 {today} 来转换为日期格式。
步骤1:从用户的输入中提取以下详细信息:
- 出发地(出发地点)
- 目的地
- 起始日期(格式:YYYY-MM-DD)
- 结束日期(格式:YYYY-MM-DD)
- 预算金额(数字)
- 预算货币(例如,USD,LKR,$)
步骤2:如果有任何细节缺失或不清楚:
- 对于起始日期:如果用户没有提供,请询问他们是否愿意使用 {today} 或指定首选起始日期。
- 对于结束日期:如果用户只提供了天数,请根据 {today} 或提供的起始日期计算结束日期。
如果没有提供起始日期,请询问用户指定一个首选日期或默认为今天的日期。
- 如果用户未提供预算货币,默认假设为“USD”,除非另有说明。
步骤3:一旦收集到所有详细信息:
- 向用户确认旅行偏好(出发地、目的地、起始日期、结束日期、预算)。
- 如果有任何模糊之处,请向用户确认。
步骤4:将数据发送给相应的代理:
- `flight_agent`用于航班建议
- `hotel_agent`用于酒店建议
步骤5:呈现最终结果,结合两个代理的结果和一天的计划,包括:
- 包含所有详细信息的旅行摘要(出发地、目的地、起始日期、结束日期、预算)
- 注意,总预算应用于航班和酒店建议。它不应超过总额。
- 航班建议
- 酒店建议
- 总估算成本
- 旅行的一天计划示例,包括目的地的活动和参观地点。
在引导用户时,请简洁、清晰且友好。如果遇到任何缺失信息,请要求用户澄清。
""",
sub_agents=[flight_agent, hotel_agent]
)
root_agent = coordinator_agent
协调员代理的工作原理是什么?
在协调员代理中,其他所有内容,如名称、模型、描述和指令,与其他代理的工作方式类似。这里的关键新元素是sub_agents
字段。
sub_agents
是航班代理和酒店代理。协调员根据用户的请求将任务委托给他们,分别处理航班和酒店搜索,然后将结果组合成旅行计划。
这个协调员代理也被定义为根代理,这意味着它是系统中的主要入口点。
11、创建__init__.py
我们快完成了!
为了让travel_planner
目录成为一个完整的Python包,创建一个名为__init__.py
的文件放在里面。
与其留空,我们在这里导入我们的根代理,以便可以从包外部轻松访问它。
以下是travel_planner/__init__.py
中要添加的内容:
from . import agent
就这样——你的项目完成了!多智能体旅行规划器已经准备就绪!
12、如何运行:与智能体交互的不同方式
现在我们已经完成了系统的设置,并且所有智能体都已准备就绪,是时候看看它们的实际表现了!Agent 开发工具包 (ADK) 提供了几种运行智能体的方式,每种方式都提供了独特的交互方式。让我们分解一下四种主要方法。
截图来自 开始使用 Agent 开发工具包 由 Google for Developers 提供
- ADK CLI:想快速运行你的智能体吗?使用命令行界面!它快速、简单,并且可以直接从终端运行。
- ADK Web:这是很酷的部分!你会得到一个用 Angular 构建的交互式网络用户界面。你可以与智能体聊天,甚至可以使用语音或视频进行交互。它非常用户友好,非常适合查看你的智能体如何实际工作。
- ADK API 服务器:需要你的智能体与其他应用程序或系统一起工作吗?API 服务器将你的智能体作为 REST 端点公开,因此你可以将其集成到任何地方。
- 程序化调用:如果你喜欢编程,可以从你的程序直接调用智能体,这给了你对它何时以及如何运行的完全控制权。
每种方法都有其独特的优点,具体取决于你的目标是什么。在这个演示中,我将使用 ADK Web,因为它允许你通过视觉和实时与你的智能体互动。但如果你更习惯于使用终端,始终可以使用 ADK CLI 并运行 adk run travel_planner
命令!
13、用 ADK Web 运行你的旅行智能体!
在这一部分中,我们将使用 ADK Web 来展示我们的旅行协调员智能体的实际表现。此方法允许你通过一个流畅的交互界面与智能体互动,测试其功能并查看它如何管理协调航班和酒店的任务。
使用终端,导航到父目录(travel_planner
)并运行以下命令。
adk web
你应该会得到如下结果。
按住 CTRL(或 Mac 上的 CMD)并单击 http://localhost:8000 在浏览器中打开 Web 服务器。
这将在浏览器上启动一个交互式界面,如下所示。
在 UI 的左上角,可以在下拉菜单中选择您的智能体。选择 “travel_planner”。
现在,你可以直接使用文本框与 旅行规划器 智能体聊天。你甚至可以使用麦克风进行语音交互!
你还可以通过点击操作来检查单独的功能调用、响应和模型输出。
14、结束语
现在你已经成功运行了多智能体旅行规划器!你已经看到了 Agent 开发工具包 (ADK) 如何轻松构建和管理智能体,从设置到用户交互。
我尽量以 尽可能简单 的方式解释了这一切,这就是为什么它可能显得有点长。但分解内容有助于确你您在进入更高级的概念之前获得坚实的理解。
有了系统就位,真正的乐趣才刚刚开始。你可以扩展它,添加更多智能体、集成新工具或微调其功能。ADK 的灵活性允许你将系统引向任何方向,无论是完善现有功能还是尝试全新的功能。
请随意探索不同的运行智能体的方式,从简洁的 Web 界面到快速简单的 CLI 命令。可能性是无穷的,创新的力量掌握在你的手中。
原文链接:From Zero to Genius: How I Built a Powerful AI Agent with Google’s ADK in Just 100 Lines of Code
汇智网翻译整理,转载请标明出处