Создайте турагента с помощью 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.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
Давайте кратко разберемся в этом файле:
-
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. Давайте воспользуемся 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 следующим образом:
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
, используя следующий код:
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-адреса службы, к которому вы затем сможете получить доступ в браузере, чтобы просмотреть то же веб-приложение, которое позволяло вам общаться с агентом отеля, как мы видели ранее при локальной настройке.
9. Поздравления
Поздравляем, вы успешно создали агента с помощью Agent Development Kit (ADK), который использует MCP Toolbox for Databases.