使用資料庫專用的 MCP Toolbox 和代理程式開發套件 (ADK) 建構旅行社

使用 MCP Toolbox for Databases 和 Agent Development Kit (ADK) 建構 Travel Agent

程式碼研究室簡介

subject上次更新時間:6月 8, 2025
account_circle作者:Romin Irani Jack Wotherspoon

1. 簡介

在本程式碼研究室中,您將使用 Agent Development Kit (ADK) 建構代理,該工具會利用 MCP Toolbox for Databases

您將透過本程式碼研究室,按照以下步驟逐步操作:

  1. 佈建 PostgreSQL 適用的 Cloud SQL 資料庫,其中包含飯店資料庫和樣本資料。
  2. 設定 MCP Toolbox for Databases,以便存取資料。
  3. 使用 Agent Development Kit (ADK) 設計及開發代理,以便利用 MCP Toolbox 回答使用者的查詢。
  4. 探索在本機和 Google Cloud 上透過 Cloud Run 服務測試資料庫的 Agent 和 MCP Toolbox 的選項。

b3768488d144b8f6.png

  • 設計、建構及部署服務機器人,以便回答使用者對某地點飯店的查詢,或依名稱搜尋飯店。

課程內容

  • 透過樣本資料佈建及填入 PostgreSQL 適用的 Cloud SQL 資料庫。
  • 為 PostgreSQL 適用的 Cloud SQL 資料庫執行個體設定 MCP 資料庫工具箱。
  • 使用 Agent Development Kit (ADK) 設計及開發服務專員,以便回答使用者查詢。
  • 在本機環境中測試代理程式和 MCP Toolbox for Databases。
  • (選用) 在 Google Cloud 中部署代理和 MCP Toolbox for Databases。

軟硬體需求

  • Chrome 網路瀏覽器
  • Gmail 帳戶
  • 已啟用計費功能的 Cloud 專案

本程式碼研究室專為各級別 (包括初學者) 的開發人員設計,範例應用程式會使用 Python。不過,您不必具備 Python 知識,也能瞭解本文所述的概念。

2. 事前準備

建立專案

  1. Google Cloud 控制台的專案選取器頁面中,選取或建立 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 執行個體

我們將使用 PostgreSQL 適用的 Google Cloud SQL 執行個體來儲存飯店資料。PostgreSQL 適用的 Cloud SQL 是一項全代管資料庫服務,可協助您在 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

我們先根據下列結構定義建立飯店資料表。在 Cloud SQL Studio 的其中一個「Editor」(編輯器) 窗格中,執行下列 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
);

接下來,我們來在飯店資料表中填入範例資料。執行下列 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 伺服器,設計時考量到企業級和實際工作環境的品質。它可處理連線集區、驗證等複雜作業,讓您更輕鬆、快速且安全地開發工具。

Toolbox 可協助您建構生成式 AI 工具,讓您的代理程式存取資料庫中的資料。工具箱提供以下功能:

  • 簡化開發作業:透過不到 10 行程式碼,將工具整合至您的代理程式,在多個代理程式或架構之間重複使用工具,並更輕鬆地部署新版工具。
  • 提升效能:採用連線集區、驗證等最佳做法。
  • 強化安全性:整合式驗證機制,讓您更安全地存取資料
  • 端對端監控:內建 OpenTelemetry 支援功能,可使用現成指標和追蹤記錄。

Toolbox 位於應用程式調度架構和資料庫之間,提供用於修改、發布或叫用工具的控制平面。這項工具可讓您在單一位置儲存及更新工具,簡化工具管理作業,讓您在代理程式和應用程式之間共用工具,並更新這些工具,而無須重新部署應用程式。

e316aed02b9861a6.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.6.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 定義為對應項目。通常,來源設定會包含連線至資料庫並與其互動所需的所有資訊。在本例中,我們已設定單一來源,以憑證指向 PostgreSQL 適用的 Cloud SQL 執行個體。詳情請參閱「來源」參考資料。
  2. Tools 定義代理程式可執行的動作,例如讀取和寫入來源。工具代表代理程式可採取的動作,例如執行 SQL 陳述式。您可以在 tools.yaml 檔案的 tools 區段中,將 Tools 定義為對應項目。通常,工具需要有來源才能運作。在本例中,我們定義了兩個工具:search-hotels-by-namesearch-hotels-by-location,並指定該工具要作用的來源,以及 SQL 和參數。詳情請參閱「工具」參考資料。
  3. 最後,我們有 Toolset,可讓您定義要一起載入的一組工具。這項功能可用於依據代理程式或應用程式定義不同的群組。在本例中,我們有一個名為 my_first_toolset 的單一工具組,其中包含我們定義的兩個工具。

執行 MCP Toolbox for Databases Server

執行下列指令 (從 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 通訊埠上執行。如果您發現通訊埠 5000 已在使用中,可以根據下方指令使用其他通訊埠 (例如 7000)。請在後續指令中使用 7000,而非 5000 連接埠。

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

我們來使用 Cloud Shell 進行測試。

按一下 Cloud Shell 中的「網頁預覽」按鈕,如下所示:

f990712162e8e924.png

按一下「Change port」(變更通訊埠),然後將通訊埠設為 5000,如以下所示,然後按一下「Change and Preview」(變更並預覽)。

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 套件,以及 langchain 依附元件,如下所示:

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 應用程式建立輔助結構,應用程式名稱為 **(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.',
)

在本機測試 Agent 應用程式

在現有的終端機視窗中輸入下列指令。確認您位於包含 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)

按一下最後一個連結,系統就會顯示用於測試 Bot 的 Web 控制台。您應該會在瀏覽器中看到以下畫面:

fe775e0eac5df274.png

請注意,系統已在左上方識別出 hotel-agent-app。您現在可以開始與服務專員交談。提供幾個詢問城市的提示。以下是對話範例:

b732feb383668869.png

您可以關閉在 Cloud Shell 終端機中執行的程序 (Ctrl-C)。

您也可以透過 adk run 指令測試代理程式,如以下所示 (請從 my-agents 資料夾執行)。

adk run hotel-agent-app

試試看這個指令,您可以透過指令列 (終端機) 與 Google 助理交談。輸入 exit 即可關閉對話。

7. 將我們的服務專員連結至工具

我們現在已瞭解如何編寫代理程並在本機測試。我們將連結這個代理程式與工具。在 ADK 的情況下,工具代表提供給 AI 代理的特定功能,可讓 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.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 Toolbox for Databases 設定的 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 資料夾) 指令 (如以下所示) 啟動代理程式,就像先前所做的一樣。如有需要,您也可以使用 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 執行個體資料庫擷取資料,並據此格式化回應。

這樣就完成了本機開發作業,並測試我們使用 Agent Development Kit (ADK) 建構的 Hotel Agent,該工具是由我們在 MCP Toolbox for Databases 中設定的工具提供支援。

8. (選用) 將 MCP Toolbox for Databases 和 Agent 部署至 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 檔案上傳為機密資料,由於我們必須在 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 = ToolboxTool("http://127.0.0.1:5000")

將其變更為 Cloud Run 服務的服務網址,如下所示:

toolbox = ToolboxTool("CLOUD_RUN_SERVICE_URL")

使用 adk runadk web 測試代理程式應用程式,如同先前所述。

在 Cloud Run 上部署 Hotel Agent 應用程式

首先,請確認您已按照上述指示在 my-agents/hotel-agent-app/agent.py 中進行變更,將 Toolbox 服務網址指向在 Cloud Run 上執行的服務,而非本機主機。

在新的 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

部署成功後,系統會提供服務網址的值,您可以在瀏覽器中存取該值,查看可與飯店服務專員進行即時通訊的相同網路應用程式,如先前在本機設定中所示。

56bc8b29fa9c9989.png

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-app --platform=managed --region=${REGION} --project=${PROJECT_ID} --quiet

下列指令會刪除 Cloud SQL 執行個體:

gcloud sql instances delete hoteldb-instance

10. 恭喜

恭喜!您已成功使用 Agent Development Kit (ADK) 建構代理,並利用 MCP Toolbox for Databases。

參考文件