Google ADK AI简明教程

谷歌刚刚发布了 Agent Development Kit (ADK) — 如果你对构建AI代理感兴趣,这绝对是你应该关注的东西。

你可能已经探索过像 AutoGenCrewAI 这样的框架,它们可以以强大的方式将大型语言模型串联起来。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

汇智网翻译整理,转载请标明出处