1. 简介
在此 Codelab 中,您将使用 MCP Toolbox for Databases 的 Agent Development Kit (ADK) 构建一个智能体。
在此 Codelab 中,您将采用以下分步方法:
- 预配一个 Cloud SQL for PostgreSQL 数据库,其中包含酒店数据库和示例数据。
- 设置 MCP Toolbox for Databases,以便访问数据。
- 使用智能体开发套件 (ADK) 设计和开发一个智能体,该智能体将利用 MCP Toolbox 回答用户提出的查询。
- 探索通过 Cloud Run 服务在本地和 Google Cloud 上测试代理和 MCP Toolbox for Databases 的选项。
实践内容
- 设计、构建和部署一个智能体,该智能体将回答用户关于某个位置的酒店的查询,或按名称搜索酒店。
学习内容
- 预配 Cloud SQL for PostgreSQL 数据库并使用示例数据填充该数据库。
- 为 Cloud SQL for PostgreSQL 数据库实例设置 MCP Toolbox for Databases。
- 使用智能体开发套件 (ADK) 设计和开发智能体,以回答用户查询。
- 在本地环境中测试智能体和 MCP Toolbox for Databases。
- (可选)在 Google Cloud 中部署代理和 MCP Toolbox for Databases。
所需条件
- Chrome 网络浏览器
- Gmail 账号
- 启用了结算功能的 Cloud 项目
此 Codelab 专为各种水平的开发者(包括新手)而设计,并在示例应用中使用 Python。不过,您无需具备 Python 知识,只需具备基本的代码阅读能力即可理解所介绍的概念。
2. 准备工作
创建项目
- 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。
- 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
- 您将使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境,它预加载了 bq。点击 Google Cloud 控制台顶部的“激活 Cloud Shell”。
- 连接到 Cloud Shell 后,您可以使用以下命令检查自己是否已通过身份验证,以及项目是否已设置为您的项目 ID:
gcloud auth list
- 在 Cloud Shell 中运行以下命令,以确认 gcloud 命令了解您的项目。
gcloud config list project
- 如果项目未设置,请使用以下命令进行设置:
gcloud config set project <YOUR_PROJECT_ID>
- 通过以下命令启用必需的 API。这可能需要几分钟的时间,请耐心等待。
gcloud services enable cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudfunctions.googleapis.com \
aiplatform.googleapis.com \
sqladmin.googleapis.com \
compute.googleapis.com
成功执行该命令后,您应该会看到类似于以下内容的消息:
Operation "operations/..." finished successfully.
除了使用 gcloud 命令,您还可以通过控制台搜索每个产品或使用此链接。
如果遗漏了任何 API,您始终可以在实施过程中启用它。
如需了解 gcloud 命令和用法,请参阅文档。
3. 创建 Cloud SQL 实例
我们将使用 Google Cloud SQL for PostgreSQL 实例来存储酒店数据。Cloud SQL for PostgreSQL 是一项全代管式数据库服务,可帮助您在 Google Cloud Platform 上设置、维护、管理和控制 PostgreSQL 关系型数据库。
在 Cloud Shell 中运行以下命令以创建实例:
gcloud sql instances create hoteldb-instance \
--database-version=POSTGRES_15 \
--tier db-g1-small \
--region=us-central1 \
--edition=ENTERPRISE \
--root-password=postgres
此命令大约需要 3-5 分钟才能执行完毕。成功执行该命令后,您应该会看到一条指示命令已完成的输出,以及您的 Cloud SQL 实例信息,例如 NAME、DATABASE_VERSION、LOCATION 等。
4. 准备 Hotels 数据库
我们现在的任务是为酒店代理创建一些示例数据。
在 Cloud 控制台中访问 Cloud SQL 页面。您应该会看到 hoteldb-instance
已准备就绪并已创建。点击实例名称 (hoteldb-instance
),如下所示:
在 Cloud SQL 左侧菜单中,访问 Cloud SQL Studio
菜单选项,如下所示:
系统会要求您登录 Cloud SQL Studio,我们将通过该 Studio 提供一些 SQL 命令。对于“数据库”选项,请选择 postgres
;对于“用户”和“密码”,要使用的值均为 postgres
。点击 AUTHENTICATE
。
我们先根据下述架构创建酒店表。在 Cloud SQL Studio 的某个编辑器窗格中,执行以下 SQL:
CREATE TABLE hotels(
id INTEGER NOT NULL PRIMARY KEY,
name VARCHAR NOT NULL,
location VARCHAR NOT NULL,
price_tier VARCHAR NOT NULL,
checkin_date DATE NOT NULL,
checkout_date DATE NOT NULL,
booked BIT NOT NULL
);
现在,我们来使用示例数据填充 hotels 表。执行以下 SQL:
INSERT INTO hotels(id, name, location, price_tier, checkin_date, checkout_date, booked)
VALUES
(1, 'Hilton Basel', 'Basel', 'Luxury', '2024-04-20', '2024-04-22', B'0'),
(2, 'Marriott Zurich', 'Zurich', 'Upscale', '2024-04-14', '2024-04-21', B'0'),
(3, 'Hyatt Regency Basel', 'Basel', 'Upper Upscale', '2024-04-02', '2024-04-20', B'0'),
(4, 'Radisson Blu Lucerne', 'Lucerne', 'Midscale', '2024-04-05', '2024-04-24', B'0'),
(5, 'Best Western Bern', 'Bern', 'Upper Midscale', '2024-04-01', '2024-04-23', B'0'),
(6, 'InterContinental Geneva', 'Geneva', 'Luxury', '2024-04-23', '2024-04-28', B'0'),
(7, 'Sheraton Zurich', 'Zurich', 'Upper Upscale', '2024-04-02', '2024-04-27', B'0'),
(8, 'Holiday Inn Basel', 'Basel', 'Upper Midscale', '2024-04-09', '2024-04-24', B'0'),
(9, 'Courtyard Zurich', 'Zurich', 'Upscale', '2024-04-03', '2024-04-13', B'0'),
(10, 'Comfort Inn Bern', 'Bern', 'Midscale', '2024-04-04', '2024-04-16', B'0');
我们运行一个 SELECT SQL 来验证数据,如下所示:
SELECT * FROM hotels;
您应该会在酒店表中看到许多记录,如下所示:
我们已完成设置 Cloud SQL 实例的流程,并创建了示例数据。在下一部分中,我们将设置 MCP Toolbox for Databases。
5. 设置 MCP Toolbox for Databases
MCP Toolbox for Databases 是一款适用于数据库的开源 MCP 服务器,在设计时考虑了企业级和生产质量。它通过处理连接池、身份验证等复杂问题,让您能够更轻松、更快速、更安全地开发工具。
工具箱可帮助您构建生成式 AI 工具,让智能体能够访问数据库中的数据。工具箱提供:
- 简化开发:只需不到 10 行代码即可将工具集成到代理中,在多个代理或框架之间重复使用工具,并更轻松地部署新版本的工具。
- 更出色的性能:采用连接池、身份验证等最佳实践。
- 增强的安全性:集成式身份验证,可更安全地访问您的数据
- 端到端可观测性:开箱即用的指标和跟踪功能,内置对 OpenTelemetry 的支持。
Toolbox 位于应用的编排框架和数据库之间,提供用于修改、分发或调用工具的控制平面。它提供了一个集中存储和更新工具的位置,让您可以轻松管理工具,从而在代理和应用之间共享工具,并更新这些工具,而无需重新部署应用。
您可以看到,MCP Toolbox for Databases 支持的数据库之一是 Cloud SQL,我们在上一部分中已预配该数据库。
安装 Toolbox
打开 Cloud Shell 终端,然后创建一个名为 mcp-toolbox
的文件夹。
mkdir mcp-toolbox
通过以下命令前往 mcp-toolbox
文件夹:
cd mcp-toolbox
通过以下脚本安装 MCP Toolbox for Databases 的二进制版本。以下命令适用于 Linux,但如果您使用的是 Mac 或 Windows,请确保下载正确的二进制文件。查看适用于您的操作系统和架构的版本页面,然后下载正确的二进制文件。
export VERSION=0.13.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
现在,我们已准备好工具箱的二进制版本,可供我们使用。下一步是使用我们的数据源和其他配置来配置该工具箱。
配置 tools.yaml
配置 Toolbox 的主要方式是通过 tools.yaml
文件。在同一文件夹(即 mcp-toolbox
)中创建一个名为 tools.yaml
的文件,其内容如下所示。
您可以使用 Cloud Shell 中提供的 nano 编辑器。nano 命令如下:“nano tools.yaml
”。
请务必将 YOUR_PROJECT_ID
值替换为您的 Google Cloud 项目 ID。
sources:
my-cloud-sql-source:
kind: cloud-sql-postgres
project: YOUR_PROJECT_ID
region: us-central1
instance: hoteldb-instance
database: postgres
user: postgres
password: "postgres"
tools:
search-hotels-by-name:
kind: postgres-sql
source: my-cloud-sql-source
description: Search for hotels based on name.
parameters:
- name: name
type: string
description: The name of the hotel.
statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%';
search-hotels-by-location:
kind: postgres-sql
source: my-cloud-sql-source
description: Search for hotels based on location. Result is sorted by price from least to most expensive.
parameters:
- name: location
type: string
description: The location of the hotel.
statement: |
SELECT *
FROM hotels
WHERE location ILIKE '%' || $1 || '%'
ORDER BY
CASE price_tier
WHEN 'Midscale' THEN 1
WHEN 'Upper Midscale' THEN 2
WHEN 'Upscale' THEN 3
WHEN 'Upper Upscale' THEN 4
WHEN 'Luxury' THEN 5
ELSE 99 -- Handle any unexpected values, place them at the end
END;
toolsets:
my_first_toolset:
- search-hotels-by-name
- search-hotels-by-location
让我们简要了解一下该文件:
Sources
表示工具可以与之互动的不同数据源。来源表示工具可以与之互动的数据源。您可以在 tools.yaml 文件的 sources 部分中将Sources
定义为映射。通常,来源配置将包含连接数据库并与之互动所需的任何信息。在本例中,我们配置了一个指向 Cloud SQL for PostgreSQL 实例的单一来源,并提供了凭据。如需了解详情,请参阅来源参考文档。Tools
定义智能体可以采取的操作,例如读取和写入来源。工具表示代理可以执行的操作,例如运行 SQL 语句。您可以在 tools.yaml 文件的 tools 部分中将Tools
定义为映射。通常,工具需要一个源才能发挥作用。在本例中,我们定义了两个工具:search-hotels-by-name
和search-hotels-by-location
,并指定了它们所处理的来源以及 SQL 和参数。如需了解详情,请参阅工具参考文档。- 最后,我们有
Toolset
,可让您定义要能够一起加载的工具组。这有助于根据代理或应用定义不同的群组。在本例中,我们有一个名为my_first_toolset
的工具集,其中包含我们定义的两个工具。
运行 MCP Toolbox for Databases 服务器
运行以下命令(从 mcp-toolbox
文件夹)以启动服务器:
./toolbox --tools-file "tools.yaml"
理想情况下,您应该会看到输出,表明服务器已成功连接到我们的数据源,并已加载工具集和工具。以下是输出示例:
2025-09-05T12:56:28.490964335Z INFO "Initialized 1 sources."
2025-09-05T12:56:28.491127294Z INFO "Initialized 0 authServices."
2025-09-05T12:56:28.491184521Z INFO "Initialized 2 tools."
2025-09-05T12:56:28.491223782Z INFO "Initialized 2 toolsets."
2025-09-05T12:56:28.497457533Z INFO "Server ready to serve!"
MCP Toolbox 服务器默认在端口 5000
上运行。如果您发现端口 5000
已在使用中,可以随意使用另一个端口(例如 7000
),如以下命令所示。请在后续命令中使用 7000
,而不是 5000
端口。
./toolbox --tools-file "tools.yaml" --port 7000
我们来使用 Cloud Shell 测试一下。
点击 Cloud Shell 中的“网页预览”,如下所示:
点击更改端口,然后将端口设置为 5000(如下所示),并点击“更改并预览”。
这应该会带来以下输出:
在浏览器网址中,将以下内容添加到网址末尾:
/api/toolset
这应该会显示当前配置的工具。输出示例如下所示:
{
"serverVersion": "0.13.0+binary.linux.amd64.1a6dfe8d37d0f42fb3fd3f75c50988534dbc1b85",
"tools": {
"search-hotels-by-location": {
"description": "Search for hotels based on location. Result is sorted by price from least to most expensive.",
"parameters": [
{
"name": "location",
"type": "string",
"required": true,
"description": "The location of the hotel.",
"authSources": []
}
],
"authRequired": []
},
"search-hotels-by-name": {
"description": "Search for hotels based on name.",
"parameters": [
{
"name": "name",
"type": "string",
"required": true,
"description": "The name of the hotel.",
"authSources": []
}
],
"authRequired": []
}
}
}
通过 MCP Toolbox for Databases 界面测试工具
该工具箱提供了一个可视化界面(工具箱界面),让您可以通过修改参数、管理标头和执行调用来直接与工具互动,所有操作都在一个简单的 Web 界面中完成。
如果您想测试一下,可以运行之前用于启动 Toolbox 服务器的命令,并添加 --ui
选项。
为此,请关闭您可能正在运行的 MCP Toolbox for Databases Server 的上一个实例,然后运行以下命令:
./toolbox --tools-file "tools.yaml" --ui
理想情况下,您应该会看到输出,表明服务器已成功连接到我们的数据源,并已加载工具集和工具。以下是示例输出,您会注意到其中提及了 Toolbox 界面已启动并正在运行。
2025-09-08T02:44:11.561572538Z INFO "Initialized 1 sources."
2025-09-08T02:44:11.561966395Z INFO "Initialized 0 authServices."
2025-09-08T02:44:11.562060934Z INFO "Initialized 2 tools."
2025-09-08T02:44:11.562105678Z INFO "Initialized 2 toolsets."
2025-09-08T02:44:11.568209923Z INFO "Server ready to serve!"
2025-09-08T02:44:11.568259411Z INFO "Toolbox UI is up and running at: http://localhost:5000/ui"
点击界面网址,确保网址末尾有 /ui
。系统会显示如下界面:
点击左侧的“工具”选项,查看已配置的工具。在本例中,应有两个工具,即 search-hotels-by-name
和 search-hotels-by-location
,如下所示:
只需点击其中一个工具 (search-hotels-by-location
),系统即会显示一个页面,供您通过提供所需的参数值来测试该工具,然后点击 Run Tool 即可查看结果。运行示例如下所示:
MCP Toolkit for Databases 还介绍了一种以 Python 方式验证和测试工具的方法,相关文档请参阅此处。我们将在下一部分中跳过这些工具,直接进入将使用这些工具的智能体开发套件 (ADK)。
6. 使用智能体开发套件 (ADK) 编写智能体
安装智能体开发套件 (ADK)
在 Cloud Shell 中打开新的终端标签页,并按如下方式创建一个名为 my-agents
的文件夹。也导航到 my-agents
文件夹。
mkdir my-agents
cd my-agents
现在,让我们使用 venv
创建一个虚拟 Python 环境,如下所示:
python -m venv .venv
按以下方式激活虚拟环境:
source .venv/bin/activate
安装 ADK 和 MCP Toolbox for Databases 软件包以及 langchain 依赖项,如下所示:
pip install google-adk toolbox-core
现在,您将能够按如下方式调用 adk
实用程序。
adk
系统会显示命令列表。
$ adk
Usage: adk [OPTIONS] COMMAND [ARGS]...
Agent Development Kit CLI tools.
Options:
--version Show the version and exit.
--help Show this message and exit.
Commands:
api_server Starts a FastAPI server for agents.
create Creates a new app in the current folder with prepopulated agent template.
deploy Deploys agent to hosted environments.
eval Evaluates an agent given the eval sets.
run Runs an interactive CLI for a certain agent.
web Starts a FastAPI server with Web UI for agents.
创建我们的第一个代理应用
现在,我们将使用 adk
通过 adk
create
命令(应用名称为 **(hotel-agent-app)
**,如下所示)为酒店代理应用创建脚手架。
adk create hotel-agent-app
按照相应步骤操作,然后选择以下选项:
- 用于为根代理选择模型的 Gemini 模型。
- 选择 Vertex AI 作为后端。
- 系统会显示您的默认 Google 项目 ID 和区域。选择默认值本身。
Choose a model for the root agent:
1. gemini-2.5-flash
2. Other models (fill later)
Choose model (1, 2): 1
1. Google AI
2. Vertex AI
Choose a backend (1, 2): 2
You need an existing Google Cloud account and project, check out this link for details:
https://google.github.io/adk-docs/get-started/quickstart/#gemini---google-cloud-vertex-ai
Enter Google Cloud project ID [YOUR_PROJECT_ID]:
Enter Google Cloud region [us-central1]:
Agent created in <YOUR_HOME_FOLDER>/my-agents/hotel-agent-app:
- .env
- __init__.py
- agent.py
观察已创建默认模板和代理所需文件的文件夹。
首先是 .env
文件。其内容如下所示:
GOOGLE_GENAI_USE_VERTEXAI=1
GOOGLE_CLOUD_PROJECT=YOUR_GOOGLE_PROJECT_ID
GOOGLE_CLOUD_LOCATION=YOUR_GOOGLE_PROJECT_REGION
这些值表示我们将通过 Vertex AI 使用 Gemini,并使用 Google Cloud 项目 ID 和位置的相应值。
然后是 __init__.py
文件,该文件将相应文件夹标记为模块,并包含一条从 agent.py
文件导入代理的语句。
from . import agent
最后,我们来看看 agent.py
文件。内容如下所示:
from google.adk.agents import Agent
root_agent = Agent(
model='gemini-2.5-flash',
name='root_agent',
description='A helpful assistant for user questions.',
instruction='Answer user questions to the best of your knowledge',
)
这是您可以使用 ADK 编写的最简单的智能体。根据 ADK 文档页面,智能体是一种自成一体的执行单元,旨在自主行动以实现特定目标。智能体可以执行任务、与用户互动、利用外部工具以及与其他智能体协调。
具体来说,LLMAgent(通常别名为 Agent)以大语言模型 (LLM) 为核心引擎,用于理解自然语言、推理、规划、生成回答,并动态决定如何继续或使用哪些工具,因此非常适合灵活的语言中心型任务。点击此处可详细了解 LLM 智能体。
我们来修改 agent.py
的代码,如下所示:
from google.adk.agents import Agent
root_agent = Agent(
model='gemini-2.5-flash',
name='hotel_agent',
description='A helpful assistant that answers questions about a specific city.',
instruction='Answer user questions about a specific city to the best of your knowledge. Do not answer questions outside of this.',
)
在本地测试代理应用
在现有终端窗口中,输入以下命令。确保您位于包含 hotel-agent-app
文件夹的父文件夹 (my-agents)
中。
adk web
下面展示了一个执行示例:
INFO: Started server process [1478]
INFO: Waiting for application startup.
+-----------------------------------------------------------------------------+
| ADK Web Server started |
| |
| For local testing, access at http://127.0.0.1:8000. |
+-----------------------------------------------------------------------------+
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
点击最后一个链接,系统应会显示一个用于测试代理的网络控制台。您应该会在浏览器中看到以下内容,如下所示:
请注意,左上角已识别出 hotel-agent-app
。您现在可以开始与代理对话了。提供一些询问城市信息的提示。以下是对话示例:
您可以关闭在 Cloud Shell 终端中运行的进程 (Ctrl-C)。
测试代理的另一种方法是通过 my-agents
文件夹中的 adk run
命令进行测试,如下所示。
adk run hotel-agent-app
试用该命令,您就可以通过命令行(终端)与代理进行对话。输入 exit
以关闭对话。
7. 将代理连接到工具
现在,我们已经了解了如何编写代理并在本地对其进行测试。我们将把此代理连接到工具。在 ADK 的上下文中,工具表示提供给 AI 代理的特定功能,使其能够执行操作并与世界互动,而不仅仅是进行核心文本生成和推理。
在本例中,我们将为智能体配备在 MCP Toolbox for Databases 中配置的工具。
使用以下代码修改 agent.py
文件。请注意,我们在代码中使用了默认端口 5000,但如果您使用的是其他端口号,请使用该端口号。
from google.adk.agents import Agent
from toolbox_core import ToolboxSyncClient
toolbox = ToolboxSyncClient("http://127.0.0.1:5000")
# Load single tool
# tools = toolbox.load_tool('search-hotels-by-location')
# Load all the tools
tools = toolbox.load_toolset('my_first_toolset')
root_agent = Agent(
name="hotel_agent",
model="gemini-2.5-flash",
description=(
"Agent to answer questions about hotels in a city or hotels by name."
),
instruction=(
"You are a helpful agent who can answer user questions about the hotels in a specific city or hotels by name. Use the tools to answer the question"
),
tools=tools,
)
现在,我们可以测试将从 PostgreSQL 数据库中提取真实数据的代理,该数据库已通过 MCP Toolbox for Databases 完成配置。
为此,请按以下顺序操作:
在 Cloud Shell 的一个终端中,启动 MCP Toolbox for Databases。您可能已在本地端口 5000 上运行它,正如我们之前测试的那样。如果没有,请运行以下命令(从 mcp-toolbox
文件夹中)启动服务器:
./toolbox --tools_file "tools.yaml"
理想情况下,您应该会看到输出,表明服务器已成功连接到我们的数据源,并已加载工具集和工具。以下是输出示例:
2025-09-05T12:56:28.490964335Z INFO "Initialized 1 sources."
2025-09-05T12:56:28.491127294Z INFO "Initialized 0 authServices."
2025-09-05T12:56:28.491184521Z INFO "Initialized 2 tools."
2025-09-05T12:56:28.491223782Z INFO "Initialized 2 toolsets."
2025-09-05T12:56:28.497457533Z INFO "Server ready to serve!"
MCP 服务器成功启动后,在另一个终端中,通过 adk run
(来自 my-agents
文件夹)命令启动代理,如以下示例所示。您也可以根据需要使用 adk web
命令。
$ adk run hotel-agent-app/
Log setup complete: /tmp/agents_log/agent.20250423_170001.log
To access latest log: tail -F /tmp/agents_log/agent.latest.log
Running agent hotel_agent, type exit to exit.
user: what can you do for me?
[hotel_agent]: I can help you find hotels in a specific city or search for hotels by name.
user: I would like to search for hotels
[hotel_agent]: Great, do you have a specific city or hotel name in mind?
user: Yes a specific city
[hotel_agent]: Great, which city are you interested in?
user: Basel
[hotel_agent]: OK. I found three hotels in Basel: Hilton Basel, Hyatt Regency Basel, and Holiday Inn Basel.
请注意,智能体现在正在使用我们在 MCP Toolbox for Databases 中配置的两个工具(search-hotels-by-name
和 search-hotels-by-location
),并向我们提供正确的选项。然后,它能够从 PostgreSQL 实例数据库中无缝检索数据,并相应地设置响应格式。
至此,我们已完成使用智能体开发套件 (ADK) 构建的酒店智能体的本地开发和测试,该智能体由我们在 MCP Toolbox for Databases 中配置的工具提供支持。
8. (可选)将 MCP Toolbox for Databases 和代理部署到 Cloud Run
在上一部分中,我们使用 Cloud Shell 终端启动了 MCP Toolbox 服务器,并使用代理测试了这些工具。该应用在 Cloud Shell 环境中本地运行。
您可以选择将 MCP Toolbox 服务器和代理部署到可以托管这些应用的 Google Cloud 服务。
在 Cloud Run 上托管 MCP Toolbox 服务器
首先,我们可以从 MCP Toolbox 服务器开始,并将其托管在 Cloud Run 上。这样一来,我们便会获得一个可与任何其他应用和/或代理应用集成的公共端点。如需了解如何在 Cloud Run 上托管此应用,请点击此处。我们现在来了解一下关键步骤。
启动新的 Cloud Shell 终端或使用现有的 Cloud Shell 终端。前往 mcp-toolbox
文件夹,其中包含 toolbox
二进制文件和 tools.yaml
。
运行以下命令(每条命令都有说明):
将 PROJECT_ID
变量设置为指向您的 Google Cloud 项目 ID。
export PROJECT_ID="YOUR_GOOGLE_CLOUD_PROJECT_ID"
接下来,验证项目中是否已启用以下 Google Cloud 服务。
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
iam.googleapis.com \
secretmanager.googleapis.com
我们来创建一个单独的服务账号,该账号将充当我们在 Google Cloud Run 上部署的 Toolbox 服务的身份。我们还确保此服务账号具有正确的角色,即能够访问 Secret Manager 并与 Cloud SQL 通信。
gcloud iam service-accounts create toolbox-identity
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/secretmanager.secretAccessor
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/cloudsql.client
我们将上传 tools.yaml
文件作为 Secret,并且由于我们必须在 Cloud Run 中安装 Toolbox,因此我们将使用最新的 Toolbox 容器映像,并在 IMAGE 变量中设置该映像。
gcloud secrets create tools --data-file=tools.yaml
export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
熟悉的 Cloud Run 部署命令中的最后一步:
gcloud run deploy toolbox \
--image $IMAGE \
--service-account toolbox-identity \
--region us-central1 \
--set-secrets "/app/tools.yaml=tools:latest" \
--args="--tools_file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
--allow-unauthenticated
这应该会开始将配置的 tools.yaml
部署到 Cloud Run 的 Toolbox 服务器的流程。成功部署后,您应该会看到类似于以下内容的消息:
Deploying container to Cloud Run service [toolbox] in project [YOUR_PROJECT_ID] region [us-central1]
OK Deploying new service... Done.
OK Creating Revision...
OK Routing traffic...
OK Setting IAM Policy...
Done.
Service [toolbox] revision [toolbox-00001-zsk] has been deployed and is serving 100 percent of traffic.
Service URL: https://toolbox-<SOME_ID>.us-central1.run.app
您现在可以在浏览器中访问上面列出的 Service URL
。它应该会显示我们之前看到的“Hello World”消息。此外,您还可以访问以下网址,查看可用的工具:
SERVICE URL/api/toolset
您还可以通过 Google Cloud 控制台访问 Cloud Run,然后在 Cloud Run 的服务列表中看到 Toolbox 服务。
注意:如果您仍想在本地运行酒店代理,但又想连接到新部署的 Cloud Run 服务,只需在 my-agents/hotel-agent-app/agent.py
文件中进行一项更改。
而不是以下内容:
toolbox = ToolboxSyncClient("http://127.0.0.1:5000")
将其更改为 Cloud Run 服务的服务网址,如下所示:
toolbox = ToolboxSyncClient("CLOUD_RUN_SERVICE_URL")
使用 adk run
或 adk web
(如前所述)测试代理应用。
在 Cloud Run 上部署酒店代理应用
第一步是确保您已按照上述说明在 my-agents/hotel-agent-app/agent.py
中进行更改,以指向在 Cloud Run 上运行的 Toolbox 服务网址,而不是本地主机。
在新 Cloud Shell 终端或现有终端会话中,确保您位于之前设置的正确 Python 虚拟环境中。
首先,我们在 my-agents/hotel-agent-app
文件夹中创建一个 requirements.txt
文件,如下所示:
google-adk
toolbox-core
前往 my-agents
文件夹,然后先设置以下环境变量:
export GOOGLE_CLOUD_PROJECT=YOUR_GOOGLE_CLOUD_PROJECT_ID
export GOOGLE_CLOUD_LOCATION=us-central1
export AGENT_PATH="hotel-agent-app/"
export SERVICE_NAME="hotels-service"
export APP_NAME="hotels-app"
export GOOGLE_GENAI_USE_VERTEXAI=True
最后,我们通过 adk deploy
cloud_run 命令将代理应用部署到 Cloud Run,如下所示。如果您被要求允许对服务进行未经身份验证的调用,请暂时提供“y”作为值。
adk deploy cloud_run \
--project=$GOOGLE_CLOUD_PROJECT \
--region=$GOOGLE_CLOUD_LOCATION \
--service_name=$SERVICE_NAME \
--app_name=$APP_NAME \
--with_ui \
$AGENT_PATH
这会开始将酒店代理应用部署到 Cloud Run 的流程。它会上传源代码,将其打包到 Docker 容器中,将该容器推送到 Artifact Registry,然后在 Cloud Run 上部署服务。这可能需要几分钟的时间,请耐心等待。
您应该会看到类似于以下内容的消息:
Start generating Cloud Run source files in /tmp/cloud_run_deploy_src/20250905_132636
Copying agent source code...
Copying agent source code completed.
Creating Dockerfile...
Creating Dockerfile complete: /tmp/cloud_run_deploy_src/20250905_132636/Dockerfile
Deploying to Cloud Run...
Building using Dockerfile and deploying container to Cloud Run service [hotels-service] in project [YOUR_PROJECT_ID] region [us-central1]
- Building and deploying... Uploading sources.
- Uploading sources...
. Building Container...
OK Building and deploying... Done.
OK Uploading sources...
OK Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds;region=us-central1/d1f7e76b-0587-4bb6-b9c0-bb4360c07aa0?project=415
458962931]. f
OK Creating Revision...
OK Routing traffic...
Done.
Service [hotels-service] revision [hotels-service-00003-hrl] has been deployed and is serving 100 percent of traffic.
Service URL: <YOUR_CLOUDRUN_APP_URL>
INFO: Display format: "none"
Cleaning up the temp folder: /tmp/cloud_run_deploy_src/20250905_132636
成功部署后,系统会为您提供服务网址的值,然后您可以在浏览器中访问该网址,以查看之前在本地设置中看到的允许您与酒店代理对话的同一 Web 应用。
9. 清理
为避免系统向您的 Google Cloud 账号持续收取费用,请务必删除我们在本次研讨会期间创建的资源。我们将删除 Cloud SQL 实例,并且如果您已将 Toolbox 和 Hotels 应用部署到 Cloud Run,我们还会删除这些服务(可选)。
确保已根据您的项目和区域正确设置以下环境变量:
export PROJECT_ID="YOUR_PROJECT_ID"
export REGION="YOUR_REGION"
以下两个命令会删除我们已部署的 Cloud Run 服务:
gcloud run services delete toolbox --platform=managed --region=${REGION} --project=${PROJECT_ID} --quiet
gcloud run services delete hotels-service --platform=managed --region=${REGION} --project=${PROJECT_ID} --quiet
以下命令会删除 Cloud SQL 实例:
gcloud sql instances delete hoteldb-instance
10. 恭喜
恭喜,您已成功使用智能体开发套件 (ADK) 构建了一个利用 MCP Toolbox for Databases 的智能体。