使用适用于数据库的 MCP Toolbox 和智能体开发套件 (ADK) 构建旅行代理

使用 MCP Toolbox for Databases 和智能体开发套件 (ADK) 构建旅行代理

关于此 Codelab

subject上次更新时间:5月 20, 2025
account_circleRomin Irani, Jack Wotherspoon 编写

1. 简介

在此 Codelab 中,您将使用 Agent Development Kit (ADK) 构建智能体,该工具利用 MCP Toolbox for Databases

在本 Codelab 中,您将采用分步方法,具体步骤如下:

  1. 预配一个 Cloud SQL for PostgreSQL 数据库,其中包含酒店数据库和示例数据。
  2. 设置 MCP Toolbox for Databases,以便访问数据。
  3. 使用智能体开发套件 (ADK) 设计和开发一个智能体,该智能体将利用 MCP Toolbox 来回答用户的查询。
  4. 探索在本地以及通过 Cloud Run 服务在 Google Cloud 上测试适用于数据库的 Agent 和 MCP Toolbox 的选项。

b3768488d144b8f6.png

  • 设计、构建和部署一个客服助理,用于回答用户对某个地点的酒店的查询,或按名称搜索酒店。

学习内容

  • 预配 Cloud SQL for PostgreSQL 数据库并使用示例数据填充该数据库。
  • 为 Cloud SQL for PostgreSQL 数据库实例设置 MCP Toolbox for Databases。
  • 使用智能体开发套件 (ADK) 设计和开发智能体,以回答用户查询。
  • 在本地环境中测试智能体和 MCP Toolbox for Databases。
  • (可选)在 Google Cloud 中部署适用于数据库的智能体和 MCP Toolbox。

所需条件

  • Chrome 网络浏览器
  • Gmail 账号
  • 启用了结算功能的 Cloud 项目

此 Codelab 面向各种级别(包括新手)的开发者,其示例应用中使用了 Python。不过,您无需了解 Python 即可理解所介绍的概念。

2. 准备工作

创建项目

  1. Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目
  2. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能
  3. 您将使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境,它预加载了 bq。点击 Google Cloud 控制台顶部的“激活 Cloud Shell”。

“激活 Cloud Shell”按钮图片

  1. 连接到 Cloud Shell 后,您可以使用以下命令检查自己是否已通过身份验证,以及项目是否已设置为您的项目 ID:
gcloud auth list
  1. 在 Cloud Shell 中运行以下命令,以确认 gcloud 命令了解您的项目。
gcloud config list project
  1. 如果项目未设置,请使用以下命令进行设置:
gcloud config set project <YOUR_PROJECT_ID>
  1. 通过以下命令启用所需的 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 \
--cpu=2 \
--memory=8GiB \
--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),如下所示:

29dbc55e97f6f7b.png

在 Cloud SQL 左侧菜单中,访问 Cloud SQL Studio 菜单选项,如下所示:

c11cc134c83ce327.png

系统会要求您登录 Cloud SQL Studio,我们将通过该工具提供一些 SQL 命令。为“数据库”选项选择 postgres,对于“用户”和“密码”,使用的值为 postgres。点击 AUTHENTICATE

我们先根据下方给出的架构创建 hotel 表。在 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-22', '2024-04-20', 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-24', '2024-04-05', B'0'),
 
(5, 'Best Western Bern', 'Bern', 'Upper Midscale', '2024-04-23', '2024-04-01', B'0'),
 
(6, 'InterContinental Geneva', 'Geneva', 'Luxury', '2024-04-23', '2024-04-28', B'0'),
 
(7, 'Sheraton Zurich', 'Zurich', 'Upper Upscale', '2024-04-27', '2024-04-02', B'0'),
 
(8, 'Holiday Inn Basel', 'Basel', 'Upper Midscale', '2024-04-24', '2024-04-09', 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;

您应该会在 hotels 表中看到多个记录,如下所示:

a7dd838f1962d412.png

我们已完成设置 Cloud SQL 实例的过程,并创建了示例数据。在下一部分中,我们将设置 MCP Toolbox for Databases。

5. 设置 MCP Toolbox for Databases

MCP Toolbox for Databases 是一个适用于数据库的开源 MCP 服务器,在设计时就考虑到了企业级和生产级质量。它可处理连接池、身份验证等复杂问题,让您能够更轻松、更快速、更安全地开发工具。

该工具包可帮助您构建生成式 AI 工具,让智能体能够访问数据库中的数据。Toolbox 提供:

  • 简化开发流程:只需不到 10 行代码即可将工具集成到代理中,在多个代理或框架之间重复使用工具,并更轻松地部署工具的新版本。
  • 性能更出色:连接池、身份验证等最佳实践。
  • 增强型安全性:集成身份验证,更安全地访问您的数据
  • 端到端可观测性:开箱即用的指标和跟踪功能,内置对 OpenTelemetry 的支持。

Toolbox 位于应用的编排框架和数据库之间,提供用于修改、分发或调用工具的控制平面。它为您提供了一个集中的位置来存储和更新工具,从而简化了工具的管理。您可以在代理和应用之间共享工具,并更新这些工具,而无需重新部署应用。

58d1dd1727fe9e1e.png

您可以看到,MCP Toolbox for Databases 支持的数据库之一是 Cloud SQL,我们在上一节中已预配该数据库。

安装 Toolbox

打开 Cloud Shell 终端,然后创建一个名为 mcp-toolbox 的文件夹。

mkdir mcp-toolbox

通过以下命令前往 mcp-toolbox 文件夹:

cd mcp-toolbox

通过以下脚本安装二进制版本的 MCP Toolbox for Databases:

export VERSION=0.3.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.
   parameters:
     - name: location
       type: string
       description: The location of the hotel.
   statement: SELECT * FROM hotels WHERE location ILIKE '%' || $1 || '%';

toolsets:
   my_first_toolset:
     - search-hotels-by-name
     - search-hotels-by-location

我们先简要了解一下该文件:

  1. Sources 表示工具可以与之互动的不同数据源。来源表示工具可以与之交互的数据源。您可以在 tools.yaml 文件的 sources 部分将 Sources 定义为映射。通常,来源配置将包含与数据库建立连接和交互所需的所有信息。在本例中,我们配置了一个指向包含凭据的 Cloud SQL for PostgreSQL 实例的单个来源。如需了解详情,请参阅来源参考文档。
  2. Tools 用于定义代理可以执行的操作,例如读取和写入来源。工具代表代理可以执行的操作,例如运行 SQL 语句。您可以在 tools.yaml 文件的 tools 部分将 Tools 定义为映射。通常,工具需要有操作的来源。在本例中,我们将定义两个工具:search-hotels-by-namesearch-hotels-by-location,并指定其操作的来源以及 SQL 和参数。如需了解详情,请参阅工具参考文档。
  3. 最后,我们有 Toolset,可让您定义要一起加载的一组工具。这对于根据代理或应用定义不同的组非常有用。在本例中,我们有一个名为 my_first_toolset 的工具集,其中包含我们定义的两个工具。

运行 MCP Toolbox for Databases 服务器

运行以下命令(从 mcp-toolbox 文件夹中运行)以启动服务器:

./toolbox --tools-file "tools.yaml"

理想情况下,您应该会看到服务器已能够连接到数据源,并已加载工具包和工具的输出。示例输出如下所示:

./toolbox --tools-file "tools.yaml"
2025-04-23T14:32:29.564903079Z INFO "Initialized 1 sources."
2025-04-23T14:32:29.565009291Z INFO "Initialized 0 authServices."
2025-04-23T14:32:29.565070176Z INFO "Initialized 2 tools."
2025-04-23T14:32:29.565120847Z INFO "Initialized 2 toolsets."
2025-04-23T14:32:29.565510068Z INFO "Server ready to serve!"

MCP Toolbox 服务器默认在端口 5000 上运行。我们来使用 Cloud Shell 进行测试。

在 Cloud Shell 中,点击“网页预览”,如下所示:

f990712162e8e924.png

点击更改端口,将端口设置为 5000(如下所示),然后点击“更改并预览”。

d1b9de0c46ecef8a.png

这应该会产生以下输出:

2fdcdac326034d41.png

在浏览器网址中,将以下内容添加到网址末尾:

/api/toolset

这应该会调出当前配置的工具。输出示例如下所示:

{
  "serverVersion": "0.3.0+container.12222fe27ae070f2689a0632d60fda45412d1f97",
  "tools": {
    "search-hotels-by-location": {
      "description": "Search for hotels based on location.",
      "parameters": [
        {
          "name": "location",
          "type": "string",
          "description": "The location of the hotel.",
          "authSources": []
        }
      ]
    },
    "search-hotels-by-name": {
      "description": "Search for hotels based on name.",
      "parameters": [
        {
          "name": "name",
          "type": "string",
          "description": "The name of the hotel.",
          "authSources": []
        }
      ]
    }
  }
}

此处介绍了 MCP 数据库工具包,其中介绍了一种使用 Python 验证和测试工具的方法。我们将跳过该部分,直接跳转到下一部分,在其中使用这些工具来介绍 Agent Development Kit (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 软件包:

pip install google-adk toolbox-core

现在,您可以按如下方式调用 adk 实用程序。

adk

系统会显示一组命令。

$ adk
Usage: adk [OPTIONS] COMMAND [ARGS]...

  Agent Development Kit CLI tools.

Options:
  --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.0-flash-001
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 [gcp-experiments-349209]:
Enter Google Cloud region [us-central1]:

Agent created in /home/romin/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.0-flash-001',
   
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.0-flash-001',
   
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 [5015]
INFO:     Waiting for application startup.

+-----------------------------------------------------------------------------+
| ADK Web Server started                                                      |
|                                                                             |
| For local testing, access at http://localhost:8000.                         |
+-----------------------------------------------------------------------------+

INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

点击最后一个链接,系统应会打开一个 Web 控制台,以便您测试代理。您应该会在浏览器中看到如下所示的内容:

9a297ffb7ecfa1a7.png

请注意,左上角已标识出 hotel-agent-app。您现在可以开始与客服人员对话了。提供一些询问城市的提示。下面显示了一段对话示例:

b732feb383668869.png

您可以关闭在 Cloud Shell 终端中运行的进程(Ctrl-C)。

您还可以通过 my-agents 文件夹中的 adk run 命令来测试代理。

adk run hotel-agent-app

试用该命令,您可以通过命令行(终端)与代理进行对话。输入 exit 关闭对话。

7. 将客服人员与工具相关联

现在,我们已经知道如何编写代理并在本地对其进行测试。我们将此代理连接到“工具”。在 ADK 上下文中,工具代表为 AI 智能体提供的特定功能,使其能够执行操作并与世界互动,而不仅仅是利用其核心文本生成和推理能力。

在本例中,我们将为智能体配备我们在 MCP Toolbox for Databases 中配置的工具。

使用以下代码修改 agent.py 文件:

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.0-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,
)

现在,我们可以测试该代理,它将从使用 MCP 数据库工具箱配置的 PostgreSQL 数据库中提取真实数据。

具体步骤如下:

在 Cloud Shell 的某个终端中,启动 MCP Toolbox for Databases。您可能已经在本地的 5000 端口上运行了该服务,就像我们之前测试的那样。如果没有,请运行以下命令(从 mcp-toolbox 文件夹中运行)来启动服务器:

./toolbox --tools_file "tools.yaml"

理想情况下,您应该会看到服务器已能够连接到数据源,并已加载工具包和工具的输出。示例输出如下所示:

./toolbox --tools-file "tools.yaml"
2025-04-23T14:32:29.564903079Z INFO "Initialized 1 sources."
2025-04-23T14:32:29.565009291Z INFO "Initialized 0 authServices."
2025-04-23T14:32:29.565070176Z INFO "Initialized 2 tools."
2025-04-23T14:32:29.565120847Z INFO "Initialized 2 toolsets."
2025-04-23T14:32:29.565510068Z INFO "Server ready to serve!"

MCP 服务器成功启动后,在另一个终端中,通过下方所示的 adk run(来自 my-agents 文件夹)命令启动 Agent,就像我们之前所做的那样。您也可以使用 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-namesearch-hotels-by-location),并向我们提供正确的选项。然后,它能够从 PostgreSQL 实例数据库中无缝检索数据,并相应地设置响应格式。

至此,我们使用智能体开发套件 (ADK) 构建的酒店智能体已完成本地开发和测试,该智能体由我们在 MCP Toolbox for Databases 中配置的工具提供支持。

8. (可选)将 MCP Toolbox for Databases 和 Agent 部署到 Cloud Run

在上一部分中,我们使用 Cloud Shell 终端启动了 MCP Toolbox 服务器,并使用 Agent 测试了这些工具。此脚本在 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

这应该会启动将 Toolbox 服务器(使用我们配置的 tools.yaml)部署到 Cloud Run 的过程。部署成功后,您应该会看到如下所示的消息:

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 服务。

注意:如果您仍希望在本地运行 Hotel Agent,同时连接到新部署的 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 runadk 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/20250424_045623
Copying agent source code...
Copying agent source code complete.
Creating Dockerfile...
Creating Dockerfile complete: /tmp/cloud_run_deploy_src/20250424_045623/Dockerfile
Deploying to Cloud Run...
Building using Dockerfile and deploying container to Cloud Run service [hotels-service] in project [YOUR_GOOGLE_CLOUD_PROJECT] region [us-central1]
|  Building and deploying... Uploading sources.                                                                                                                                                                      
  |  Uploading sources...                                                                                                                                                                                            
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/b02f5a74-6da6-4367-aaba-0c8aa098edf5?project=415458962931].                                  
  OK Creating Revision...                                                                                                                                                                                            
  OK Routing traffic...                                                                                                                                                                                              
Done.                                                                                                                                                                                                                
Service [hotels-service] revision [hotels-service-00002-cpm] has been deployed and is serving 100 percent of traffic.
Service URL: https://hotels-service-<SOME_ID>.us-central1.run.app
Cleaning up the temp folder: /tmp/cloud_run_deploy_src/20250424_045623

部署成功后,系统会为您提供服务网址的值,您可以通过浏览器访问该值,以查看之前在本地设置中看到的用于与酒店客服人员聊天的 Web 应用。

56bc8b29fa9c9989.png

9. 恭喜

恭喜!您已成功使用利用 MCP Toolbox for Databases 的智能体开发套件 (ADK) 构建了智能体。

参考文档