Создайте турагента с помощью MCP Toolbox for Databases и Agent Development Kit (ADK)
О практической работе
1. Введение
В этой лабораторной работе вы создадите агента с помощью Agent Development Kit (ADK) , который использует MCP Toolbox for Databases .
В ходе выполнения кодовой лаборатории вы будете использовать пошаговый подход следующим образом:
- Подготовьте базу данных Cloud SQL для PostgreSQL, в которой будет храниться база данных отелей и образцы данных.
- Настройте MCP Toolbox for Databases, который обеспечивает доступ к данным.
- Спроектируйте и разработайте агента с помощью Agent Development Kit (ADK), который будет использовать MCP Toolbox для ответа на запросы пользователя.
- Изучите возможности тестирования Agent и MCP Toolbox for Databases локально и в Google Cloud с помощью сервиса Cloud Run.
Что ты будешь делать?
- Разработайте, создайте и разверните агента, который будет отвечать на запросы пользователей об отелях в определенном месте или искать отели по названию.
Чему вы научитесь
- Подготовка и заполнение базы данных 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. Прежде чем начать
Создать проект
- В Google Cloud Console на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего проекта Cloud включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
- Вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud, которая поставляется с предустановленной bq. Нажмите Активировать Cloud Shell в верхней части консоли Google Cloud.
- После подключения к Cloud Shell вы проверяете, что вы уже аутентифицированы и что проекту присвоен ваш идентификатор проекта, с помощью следующей команды:
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 для 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
), как показано ниже:
В левом меню Cloud SQL выберите пункт меню Cloud SQL Studio
, как показано ниже:
Это попросит вас войти в 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;
Вы должны увидеть ряд записей в таблице отелей, как показано ниже:
Мы завершили процесс настройки экземпляра Cloud SQL и создали наши образцы данных. В следующем разделе мы настроим MCP Toolbox for Databases.
5. Настройка MCP Toolbox для баз данных
MCP Toolbox for Databases — это сервер MCP с открытым исходным кодом для баз данных. Он был разработан с учетом корпоративного уровня и качества производства. Он позволяет вам разрабатывать инструменты проще, быстрее и безопаснее, обрабатывая такие сложности, как пул соединений, аутентификация и многое другое.
Toolbox помогает вам создавать инструменты Gen AI, которые позволяют вашим агентам получать доступ к данным в вашей базе данных. Toolbox обеспечивает:
- Упрощенная разработка: интегрируйте инструменты в свой агент менее чем в 10 строк кода, повторно используйте инструменты между несколькими агентами или фреймворками и с легкостью развертывайте новые версии инструментов.
- Лучшая производительность: лучшие практики, такие как пул соединений, аутентификация и многое другое.
- Повышенная безопасность: интегрированная аутентификация для более безопасного доступа к вашим данным
- Сквозное наблюдение: готовые метрики и трассировка со встроенной поддержкой OpenTelemetry.
Toolbox располагается между фреймворком оркестровки вашего приложения и вашей базой данных, предоставляя плоскость управления, которая используется для изменения, распространения или вызова инструментов. Он упрощает управление вашими инструментами, предоставляя вам централизованное место для хранения и обновления инструментов, позволяя вам совместно использовать инструменты между агентами и приложениями и обновлять эти инструменты без необходимости повторного развертывания вашего приложения.
Вы видите, что одной из баз данных, поддерживаемых 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.6.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
Давайте кратко разберемся в этом файле:
-
Sources
представляют собой различные источники данных, с которыми может взаимодействовать инструмент. Источник представляет собой источник данных, с которым может взаимодействовать инструмент. Вы можете определитьSources
как карту в разделе источников вашего файла tools.yaml. Обычно конфигурация источника будет содержать любую информацию, необходимую для подключения и взаимодействия с базой данных. В нашем случае мы настроили один источник, который указывает на наш экземпляр Cloud SQL для PostgreSQL с учетными данными. Для получения дополнительной информации обратитесь к справочнику Источники . -
Tools
определяют действия, которые может выполнять агент, например, чтение и запись в источник. Инструмент представляет действие, которое может выполнять ваш агент, например, запуск оператора SQL. Вы можете определитьTools
как карту в разделе инструментов вашего файла tools.yaml. Обычно инструменту требуется источник для действия. В нашем случае мы определяем два инструмента:search-hotels-by-name
иsearch-hotels-by-location
и указываем источник, с которым он действует, а также SQL и параметры. Для получения дополнительной информации обратитесь к справочнику Инструменты . - Наконец, у нас есть
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
Если вы обнаружите, что порт 5000
уже используется, смело используйте другой порт (например, 7000
) в соответствии с командой, показанной ниже. Пожалуйста, используйте 7000
вместо порта 5000
в последующих командах.
./toolbox --tools-file "tools.yaml" --port 7000
Давайте воспользуемся Cloud Shell, чтобы это проверить.
Нажмите «Веб-просмотр» в Cloud Shell, как показано ниже:
Нажмите «Изменить порт» и установите порт на 5000, как показано ниже, затем нажмите «Изменить и просмотреть».
Это должно дать следующий результат:
В 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 вместе с зависимостью 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
для создания каркаса для нашего приложения 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)
Нажмите на последнюю ссылку, и она должна открыть веб-консоль для проверки Агента. Вы должны увидеть следующее, запущенное в браузере, как показано ниже:
Обратите внимание, что в левом верхнем углу было идентифицировано приложение hotel-agent-app. Теперь вы можете начать общение с агентом. Дайте несколько подсказок, спрашивая о городах. Пример разговора показан ниже:
Вы можете остановить процесс, запущенный в терминале Cloud Shell (Ctrl-C).
Альтернативный способ тестирования Агента — с помощью команды adk run
как указано ниже, из папки my-agents
.
adk run hotel-agent-app
Попробуйте команду, и вы сможете общаться с Агентом через командную строку (терминал). Введите exit
, чтобы закрыть разговор.
7. Подключение нашего агента к инструментам
Теперь, когда мы знаем, как написать Агента и протестировать его локально, мы собираемся подключить этого Агента к Инструментам. В контексте ADK Инструмент представляет собой определенную возможность, предоставляемую агенту ИИ, позволяющую ему выполнять действия и взаимодействовать с миром за пределами его основных способностей генерации текста и рассуждений.
В нашем случае мы собираемся оснастить нашего агента инструментами, которые мы настроили в 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,
)
Теперь мы можем протестировать агента, который будет извлекать реальные данные из нашей базы данных 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 = ToolboxTool("http://127.0.0.1:5000")
Измените его на URL-адрес службы Cloud Run, как указано ниже:
toolbox = ToolboxTool("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-адреса службы, к которому вы затем сможете получить доступ в браузере, чтобы просмотреть то же веб-приложение, которое позволяло вам общаться с агентом отеля, как мы видели ранее при локальной настройке.
9. Очистка
Чтобы избежать текущих расходов на ваш аккаунт Google Cloud, важно удалить ресурсы, которые мы создали во время этого семинара. Мы удалим экземпляр Cloud SQL и, если вы развернули Toolbox и Hotels App в 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. Поздравления
Поздравляем, вы успешно создали агента с помощью Agent Development Kit (ADK), который использует MCP Toolbox for Databases.