Создайте турагент с помощью MCP Toolbox for Databases и Agent Development Kit (ADK)

Создайте турагента с помощью MCP Toolbox for Databases и Agent Development Kit (ADK)

О практической работе

subjectПоследнее обновление: мая 20, 2025
account_circleАвторы: Romin Irani, Jack Wotherspoon

1. Введение

В этой лабораторной работе вы создадите агента с помощью Agent Development Kit (ADK) , который использует MCP Toolbox for Databases .

В ходе выполнения кодовой лаборатории вы будете использовать пошаговый подход следующим образом:

  1. Подготовьте базу данных Cloud SQL для PostgreSQL, в которой будет храниться база данных отелей и образцы данных.
  2. Настройте MCP Toolbox for Databases, который обеспечивает доступ к данным.
  3. Спроектируйте и разработайте агента с помощью Agent Development Kit (ADK), который будет использовать MCP Toolbox для ответа на запросы пользователя.
  4. Изучите возможности тестирования Agent и MCP Toolbox for Databases локально и в Google Cloud с помощью сервиса Cloud Run.

b3768488d144b8f6.png

  • Разработайте, создайте и разверните агента, который будет отвечать на запросы пользователей об отелях в определенном месте или искать отели по названию.

Чему вы научитесь

  • Подготовка и заполнение базы данных Cloud SQL для PostgreSQL образцами данных.
  • Настройте MCP Toolbox for Databases для экземпляра базы данных Cloud SQL for PostgreSQL.
  • Спроектируйте и разработайте агента с помощью Agent Development Kit (ADK) для ответа на запросы пользователей.
  • Протестируйте Agent и MCP Toolbox для баз данных в локальной среде.
  • (Необязательно) Разверните Agent и MCP Toolbox для баз данных в Google Cloud.

Что вам понадобится

  • Браузер Chrome
  • Учетная запись Gmail
  • Облачный проект с включенным биллингом

Эта кодовая лаборатория, предназначенная для разработчиков всех уровней (включая новичков), использует Python в своем примере приложения. Однако знание Python не требуется для понимания представленных концепций.

2. Прежде чем начать

Создать проект

  1. В Google Cloud Console на странице выбора проекта выберите или создайте проект Google Cloud.
  2. Убедитесь, что для вашего проекта Cloud включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
  3. Вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud, которая поставляется с предустановленной bq. Нажмите Активировать Cloud Shell в верхней части консоли Google Cloud.

Изображение кнопки «Активировать Cloud Shell»

  1. После подключения к Cloud Shell вы проверяете, что вы уже аутентифицированы и что проекту присвоен ваш идентификатор проекта, с помощью следующей команды:
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 для PostgreSQL для хранения данных наших отелей. Cloud SQL для PostgreSQL — это полностью управляемая служба баз данных, которая поможет вам настроить, поддерживать, управлять и администрировать ваши реляционные базы данных PostgreSQL на Google Cloud Platform.

Чтобы создать экземпляр, выполните следующую команду в 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. Подготовка базы данных отелей

Теперь нашей задачей будет создание образца данных для нашего гостиничного агента.

Посетите страницу Cloud SQL в консоли Cloud. Вы должны увидеть готовый и созданный hoteldb-instance . Щелкните имя экземпляра ( hoteldb-instance ), как показано ниже:

29dbc55e97f6f7b.png

В левом меню Cloud SQL выберите пункт меню Cloud SQL Studio , как показано ниже:

c11cc134c83ce327.png

Это попросит вас войти в Cloud SQL Studio, через которую мы дадим несколько команд SQL. Выберите postgres для опции Database и для User и Password, значение, которое нужно использовать, 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
);

Теперь давайте заполним таблицу отелей образцами данных. Выполните следующий 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;

Вы должны увидеть ряд записей в таблице отелей, как показано ниже:

a7dd838f1962d412.png

Мы завершили процесс настройки экземпляра Cloud SQL и создали наши образцы данных. В следующем разделе мы настроим MCP Toolbox for Databases.

5. Настройка MCP Toolbox для баз данных

MCP Toolbox for Databases — это сервер MCP с открытым исходным кодом для баз данных. Он был разработан с учетом корпоративного уровня и качества производства. Он позволяет вам разрабатывать инструменты проще, быстрее и безопаснее, обрабатывая такие сложности, как пул соединений, аутентификация и многое другое.

Toolbox помогает вам создавать инструменты Gen AI, которые позволяют вашим агентам получать доступ к данным в вашей базе данных. Toolbox обеспечивает:

  • Упрощенная разработка: интегрируйте инструменты в свой агент менее чем в 10 строк кода, повторно используйте инструменты между несколькими агентами или фреймворками и с легкостью развертывайте новые версии инструментов.
  • Лучшая производительность: лучшие практики, такие как пул соединений, аутентификация и многое другое.
  • Повышенная безопасность: интегрированная аутентификация для более безопасного доступа к вашим данным
  • Сквозное наблюдение: готовые метрики и трассировка со встроенной поддержкой OpenTelemetry.

Toolbox располагается между фреймворком оркестровки вашего приложения и вашей базой данных, предоставляя плоскость управления, которая используется для изменения, распространения или вызова инструментов. Он упрощает управление вашими инструментами, предоставляя вам централизованное место для хранения и обновления инструментов, позволяя вам совместно использовать инструменты между агентами и приложениями и обновлять эти инструменты без необходимости повторного развертывания вашего приложения.

58d1dd1727fe9e1e.png

Вы видите, что одной из баз данных, поддерживаемых MCP Toolbox for Databases, является Cloud SQL, и мы подготовили ее в предыдущем разделе.

Установка набора инструментов

Откройте Cloud Shell Terminal и создайте папку с именем 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 . Создайте файл с именем tools.yaml в той же папке, т.е. mcp-toolbox , содержимое которого показано ниже.

Вы можете использовать редактор nano, который доступен в Cloud Shell. Команда nano выглядит следующим образом: " nano tools.yaml ".

Не забудьте заменить значение YOUR_PROJECT_ID на идентификатор вашего проекта Google Cloud.

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 представляют собой различные источники данных, с которыми может взаимодействовать инструмент. Источник представляет собой источник данных, с которым может взаимодействовать инструмент. Вы можете определить Sources как карту в разделе источников вашего файла tools.yaml. Обычно конфигурация источника будет содержать любую информацию, необходимую для подключения и взаимодействия с базой данных. В нашем случае мы настроили один источник, который указывает на наш экземпляр Cloud SQL для PostgreSQL с учетными данными. Для получения дополнительной информации обратитесь к справочнику Источники .
  2. Tools определяют действия, которые может выполнять агент, например, чтение и запись в источник. Инструмент представляет действие, которое может выполнять ваш агент, например, запуск оператора SQL. Вы можете определить Tools как карту в разделе инструментов вашего файла tools.yaml. Обычно инструменту требуется источник для действия. В нашем случае мы определяем два инструмента: search-hotels-by-name и search-hotels-by-location и указываем источник, с которым он действует, а также SQL и параметры. Для получения дополнительной информации обратитесь к справочнику Инструменты .
  3. Наконец, у нас есть Toolset , который позволяет вам определять группы инструментов, которые вы хотите загружать вместе. Это может быть полезно для определения различных групп на основе агента или приложения. В нашем случае у нас есть один toolset с именем my_first_toolset , который содержит два определенных нами инструмента.

Запустите MCP Toolbox для сервера баз данных

Для запуска сервера выполните следующую команду (из папки 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

В URL-адресе браузера добавьте в конец URL-адреса следующее:

/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 Toolkit for Databases описывает Pythonic-способ проверки и тестирования инструментов, который задокументирован здесь . Мы пропустим это и перейдем непосредственно к Agent Development Kit (ADK) в следующем разделе, где будут использоваться эти инструменты.

6. Написание нашего агента с помощью Agent Development Kit (ADK)

Установите комплект разработки агента (ADK)

Откройте новую вкладку терминала в Cloud Shell и создайте папку с именем my-agents следующим образом. Перейдите также в папку my-agents .

mkdir my-agents
cd
my-agents

Теперь давайте создадим виртуальную среду Python с помощью venv следующим образом:

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 для создания каркаса для нашего приложения Hotel Agent с помощью команды adk create с именем приложения ** (hotel-agent-app) **, как указано ниже.

adk create hotel-agent-app

Следуйте инструкциям и выберите следующее:

  • Модель Gemini для выбора модели корневого агента.
  • Выберите Vertex AI в качестве бэкэнда.
  • Будут отображены ваш идентификатор проекта Google по умолчанию и регион. Выберите саму настройку по умолчанию.
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

Значения указывают на то, что мы будем использовать Gemini через Vertex AI вместе с соответствующими значениями для идентификатора и местоположения проекта Google Cloud.

Затем у нас есть файл __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, использует Large Language Models (LLM) в качестве своего основного движка для понимания естественного языка, рассуждения, планирования, генерации ответов и динамического принятия решений о том, как действовать или какие инструменты использовать, что делает их идеальными для гибких, ориентированных на язык задач. Узнайте больше об LLM Agents здесь .

Давайте изменим код 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 локально

В существующем окне терминала введите следующую команду. Убедитесь, что вы находитесь в родительской папке (my-agents) содержащей папку hotel-agent-app .

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)

Нажмите на последнюю ссылку, и она должна открыть веб-консоль для проверки Агента. Вы должны увидеть следующее, запущенное в браузере, как показано ниже:

9a297ffb7ecfa1a7.png

Обратите внимание, что в левом верхнем углу было идентифицировано приложение hotel-agent-app. Теперь вы можете начать общение с агентом. Дайте несколько подсказок, спрашивая о городах. Пример разговора показан ниже:

b732feb383668869.png

Вы можете остановить процесс, запущенный в терминале Cloud Shell (Ctrl-C).

Альтернативный способ тестирования Агента — с помощью команды adk run как указано ниже, из папки my-agents .

adk run hotel-agent-app

Попробуйте команду, и вы сможете общаться с Агентом через командную строку (терминал). Введите exit , чтобы закрыть разговор.

7. Подключение нашего агента к инструментам

Теперь, когда мы знаем, как написать Агента и протестировать его локально, мы собираемся подключить этого Агента к Инструментам. В контексте ADK Инструмент представляет собой определенную возможность, предоставляемую агенту ИИ, позволяющую ему выполнять действия и взаимодействовать с миром за пределами его основных способностей генерации текста и рассуждений.

В нашем случае мы собираемся оснастить нашего агента инструментами, которые мы настроили в 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,
)

Теперь мы можем протестировать агента, который будет извлекать реальные данные из нашей базы данных PostgreSQL, настроенной с помощью MCP Toolbox for Databases.

Для этого выполните следующую последовательность:

В одном терминале 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 запустите Agent в другом терминале, как мы делали ранее, с помощью команды 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 и соответствующим образом форматировать ответ.

На этом завершается локальная разработка и тестирование нашего Hotel Agent, который мы создали с помощью Agent Development Kit (ADK) и который работал на основе инструментов, настроенных нами в MCP Toolbox for Databases.

8. (Необязательно) Развертывание MCP Toolbox для баз данных и агента в облаке.

В предыдущем разделе мы использовали терминал Cloud Shell для запуска сервера MCP Toolbox и протестировали инструменты с Agent. Он работал локально в среде Cloud Shell.

У вас есть возможность развернуть как сервер MCP Toolbox, так и агент в облачных сервисах Google, которые могут размещать эти приложения для нас.

Размещение сервера MCP Toolbox на Cloud Run

Сначала мы можем начать с сервера MCP Toolbox и разместить его в Cloud Run. Это даст нам публичную конечную точку, которую мы сможем интегрировать с любым другим приложением и/или приложениями Agent. Инструкции по размещению этого в Cloud Run приведены здесь . Теперь мы рассмотрим основные шаги.

Запустите новый Cloud Shell Terminal или используйте существующий Cloud Shell Terminal. Перейдите в папку mcp-toolbox , в которой находятся двоичный файл toolbox и tools.yaml .

Выполните следующие команды (для каждой команды дано пояснение):

Установите переменную PROJECT_ID так, чтобы она указывала на ваш идентификатор проекта Google Cloud.

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

Давайте создадим отдельную учетную запись службы, которая будет действовать как идентификатор для службы Toolbox, которую мы будем развертывать в Google Cloud Run. Мы также гарантируем, что эта учетная запись службы имеет правильные роли, т. е. возможность доступа к 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 как секрет, и поскольку нам нужно установить Toolbox в Cloud Run, мы будем использовать последний образ контейнера для 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 Server с нашим настроенным 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", которое мы видели ранее. Кроме того, вы также можете посетить следующий URL-адрес, чтобы увидеть доступные инструменты:

SERVICE URL/api/toolset

Вы также можете зайти в Cloud Run из консоли Google Cloud и увидеть службу Toolbox, доступную в списке служб в Cloud Run.

Примечание: если вы хотите по-прежнему запускать Hotel Agent локально и при этом подключаться к недавно развернутой службе Cloud Run, вам нужно внести одно изменение в файл my-agents/hotel-agent-app/agent.py .

Вместо следующего:

toolbox = ToolboxSyncClient("http://127.0.0.1:5000")

Измените его на URL-адрес службы Cloud Run, как указано ниже:

toolbox = ToolboxSyncClient("CLOUD_RUN_SERVICE_URL")

Протестируйте приложение-агент с помощью adk run или adk web как мы видели ранее.

Развертывание приложения Hotel Agent в облаке

Первый шаг — убедиться, что вы внесли изменения в my-agents/hotel-agent-app/agent.py как указано выше, чтобы указать URL-адрес службы Toolbox, работающей в Cloud Run, а не на локальном хосте.

В новом терминале Cloud Shell или существующем сеансе терминала убедитесь, что вы находитесь в правильной виртуальной среде Python, которую мы настроили ранее.

Сначала давайте создадим файл requirements.txt в папке my-agents/hotel-agent-app как показано ниже:

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

Наконец, давайте развернем приложение агента в Cloud Run с помощью команды adk deploy 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

Это запустит процесс развертывания приложения Hotel Agent в 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

При успешном развертывании вам будет предоставлено значение URL-адреса службы, к которому вы затем сможете получить доступ в браузере, чтобы просмотреть то же веб-приложение, которое позволяло вам общаться с агентом отеля, как мы видели ранее при локальной настройке.

56bc8b29fa9c9989.png

9. Поздравления

Поздравляем, вы успешно создали агента с помощью Agent Development Kit (ADK), который использует MCP Toolbox for Databases.

Справочные документы