Приложение AlloyDB Agentic RAG с MCP Toolbox

1. Введение

e71e051395674233.gif

В этом практическом занятии вы научитесь создавать кластер AlloyDB, развертывать инструментарий MCP и настраивать его для использования AlloyDB в качестве источника данных. Затем вы создадите пример интерактивного RAG-приложения, которое использует развернутый инструментарий для обработки запросов.

f753f71c7116358a.png

Более подробную информацию о MCP Toolbox можно найти на странице документации , а пример приложения Cymbal Air — здесь .

Эта лабораторная работа является частью набора лабораторных работ, посвященных функциям AlloyDB AI. Вы можете узнать больше на странице AlloyDB AI в документации и посмотреть другие лабораторные работы .

Предварительные требования

  • Базовое понимание консоли Google Cloud
  • Базовые навыки работы с командной строкой и оболочкой Google Cloud.

Что вы узнаете

  • Как развернуть кластер AlloyDB с интеграцией Vertex AI
  • Как подключиться к AlloyDB
  • Как настроить и развернуть службу MCP Toolbox
  • Как развернуть пример приложения, используя развернутую службу

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

  • Аккаунт Google Cloud и проект Google Cloud
  • Веб-браузер, например Chrome.

2. Настройка и требования

Настройка среды для самостоятельного обучения

  1. Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы всегда можете его изменить.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор вашего проекта (обычно обозначается как PROJECT_ID ). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он сохраняется на протяжении всего проекта.
  • К вашему сведению, существует третье значение — номер проекта , которое используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
  1. Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не потребует больших затрат, если вообще потребует. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.

В консоли Google Cloud нажмите на значок Cloud Shell на панели инструментов в правом верхнем углу:

Активируйте Cloud Shell

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

Скриншот терминала Google Cloud Shell, показывающий, что среда подключена.

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Вся работа в этом практическом задании может выполняться в браузере. Вам не нужно ничего устанавливать.

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

Включить API

Выход:

Внутри Cloud Shell убедитесь, что идентификатор вашего проекта указан правильно:

Обычно идентификатор проекта отображается в скобках в командной строке облачной оболочки, как показано на рисунке:

fa6ee779963405d5.png

gcloud config set project [YOUR-PROJECT-ID]

Затем установите переменную среды PROJECT_ID равным идентификатору вашего проекта Google Cloud:

PROJECT_ID=$(gcloud config get-value project)

Включите все необходимые службы:

gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       vpcaccess.googleapis.com \
                       aiplatform.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       run.googleapis.com \
                       iam.googleapis.com \
                       secretmanager.googleapis.com

Ожидаемый результат

student@cloudshell:~ (gleb-test-short-004)$ gcloud services enable alloydb.googleapis.com \
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       vpcaccess.googleapis.com \
                       aiplatform.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       run.googleapis.com \
                       iam.googleapis.com \
                       secretmanager.googleapis.com
Operation "operations/acf.p2-404051529011-664c71ad-cb2b-4ab4-86c1-1f3157d70ba1" finished successfully.

4. Развертывание кластера AlloyDB

Создание кластера AlloyDB и основного экземпляра. Следующая процедура описывает, как создать кластер и экземпляр AlloyDB с помощью Google Cloud SDK. Если вы предпочитаете использовать консольный подход, вы можете следовать документации здесь .

Перед созданием кластера AlloyDB нам необходим доступный диапазон частных IP-адресов в нашей VPC, который будет использоваться будущим экземпляром AlloyDB. Если его нет, нам нужно его создать, назначить для использования внутренними сервисами Google, после чего мы сможем создать кластер и экземпляр.

Создать частный диапазон IP-адресов

Нам необходимо настроить параметры доступа к частным сервисам (Private Service Access, VPC) в нашей VPC для AlloyDB. Предполагается, что в проекте используется «стандартная» сеть VPC, и она будет применяться для всех действий.

Создайте диапазон частных IP-адресов:

gcloud compute addresses create psa-range \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=24 \
    --description="VPC private service access" \
    --network=default

Создайте частное соединение, используя выделенный диапазон IP-адресов:

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range \
    --network=default

Ожидаемый вывод в консоль:

student@cloudshell:~ (test-project-402417)$ gcloud compute addresses create psa-range \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=24 \
    --description="VPC private service access" \
    --network=default
Created [https://www.googleapis.com/compute/v1/projects/test-project-402417/global/addresses/psa-range].

student@cloudshell:~ (test-project-402417)$ gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range \
    --network=default
Operation "operations/pssn.p24-4470404856-595e209f-19b7-4669-8a71-cbd45de8ba66" finished successfully.

student@cloudshell:~ (test-project-402417)$

Создание кластера AlloyDB

В этом разделе мы создаём кластер AlloyDB в регионе us-central1.

Задайте пароль для пользователя postgres. Вы можете задать свой собственный пароль или использовать функцию генерации случайных чисел.

export PGPASSWORD=`openssl rand -hex 12`

Ожидаемый вывод в консоль:

student@cloudshell:~ (test-project-402417)$ export PGPASSWORD=`openssl rand -hex 12`

Запишите пароль от PostgreSQL для дальнейшего использования.

echo $PGPASSWORD

Этот пароль понадобится вам в будущем для подключения к экземпляру под учетной записью postgres. Я рекомендую записать его или скопировать куда-нибудь, чтобы иметь возможность использовать позже.

Ожидаемый вывод в консоль:

student@cloudshell:~ (test-project-402417)$ echo $PGPASSWORD
bbefbfde7601985b0dee5723

Создайте кластер для бесплатной пробной версии

Если вы раньше не использовали AlloyDB, вы можете создать бесплатный пробный кластер:

Определите регион и имя кластера AlloyDB. Мы будем использовать регион us-central1 и имя кластера alloydb-aip-01:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01

Выполните команду для создания кластера:

gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION \
    --subscription-type=TRIAL

Ожидаемый вывод в консоль:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION \
    --subscription-type=TRIAL
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.                                                                                                                                                                                                                                                           

Создайте основной экземпляр AlloyDB для нашего кластера в той же сессии Cloud Shell. Если вы отключены, вам потребуется заново определить переменные среды для региона и имени кластера.

gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=8 \
    --region=$REGION \
    --cluster=$ADBCLUSTER

Ожидаемый вывод в консоль:

student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=8 \
    --region=$REGION \
    --availability-type ZONAL \
    --cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.                                                                                                                                                                                                                                                     

Создание кластера AlloyDB Standard

Если это не первый ваш кластер AlloyDB в проекте, перейдите к созданию стандартного кластера.

Определите регион и имя кластера AlloyDB. Мы будем использовать регион us-central1 и имя кластера alloydb-aip-01:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01

Выполните команду для создания кластера:

gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION

Ожидаемый вывод в консоль:

export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
gcloud alloydb clusters create $ADBCLUSTER \
    --password=$PGPASSWORD \
    --network=default \
    --region=$REGION 
Operation ID: operation-1697655441138-6080235852277-9e7f04f5-2012fce4
Creating cluster...done.                                                                                                                                                                                                                                                           

Создайте основной экземпляр AlloyDB для нашего кластера в той же сессии Cloud Shell. Если вы отключены, вам потребуется заново определить переменные среды для региона и имени кластера.

gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --region=$REGION \
    --cluster=$ADBCLUSTER

Ожидаемый вывод в консоль:

student@cloudshell:~ (test-project-402417)$ gcloud alloydb instances create $ADBCLUSTER-pr \
    --instance-type=PRIMARY \
    --cpu-count=2 \
    --region=$REGION \
    --availability-type ZONAL \
    --cluster=$ADBCLUSTER
Operation ID: operation-1697659203545-6080315c6e8ee-391805db-25852721
Creating instance...done.                                                                                                                                                                                                                                                     

Предоставьте необходимые разрешения AlloyDB

Добавьте разрешения Vertex AI для агента службы AlloyDB.

Откройте еще одну вкладку Cloud Shell, используя знак "+" вверху.

4ca978f5142bb6ce.png

В новой вкладке облачной оболочки выполните:

PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"

Ожидаемый вывод в консоль:

student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-11039]
student@cloudshell:~ (test-project-001-402417)$ gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"
Updated IAM policy for project [test-project-001-402417].
bindings:
- members:
  - serviceAccount:service-4470404856@gcp-sa-alloydb.iam.gserviceaccount.com
  role: roles/aiplatform.user
- members:
...
etag: BwYIEbe_Z3U=
version: 1
 

Закройте вкладку, выполнив одну из команд, указанных на вкладке, например, «Выход»:

exit

5. Подготовка виртуальной машины GCE.

В качестве платформы для работы с базой данных и развертывания различных частей тестового приложения мы будем использовать виртуальную машину Google Compute Engine (GCE). Использование виртуальной машины обеспечивает большую гибкость в установке компонентов и прямой доступ к частному IP-адресу AlloyDB для этапов подготовки данных.

Создать учетную запись службы

Поскольку мы будем использовать нашу виртуальную машину для развертывания MCP Toolbox в качестве службы и развертывания или размещения тестового приложения, первым шагом является создание учетной записи службы Google (GSA). Учетная запись GSA будет использоваться виртуальной машиной GCE, и нам потребуется предоставить ей необходимые права для работы с другими службами.

В оболочке Cloud Shell выполните:

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts create compute-aip --project $PROJECT_ID

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/cloudbuild.builds.editor"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/artifactregistry.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/storage.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/run.admin"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/iam.serviceAccountUser"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/alloydb.viewer"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/alloydb.client"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/serviceusage.serviceUsageConsumer"

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:compute-aip@$PROJECT_ID.iam.gserviceaccount.com \
    --role roles/secretmanager.admin

Развертывание виртуальной машины GCE

Создайте виртуальную машину GCE в том же регионе и VPC, что и кластер AlloyDB.

В Cloud Shell выполните:

ZONE=us-central1-a
PROJECT_ID=$(gcloud config get-value project)
gcloud compute instances create instance-1 \
    --zone=$ZONE \
    --create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com

Ожидаемый вывод в консоль:

student@cloudshell:~ (test-project-402417)$ ZONE=us-central1-a
PROJECT_ID=$(gcloud config get-value project)
gcloud compute instances create instance-1 \
    --zone=$ZONE \
    --create-disk=auto-delete=yes,boot=yes,image=projects/debian-cloud/global/images/$(gcloud compute images list --filter="family=debian-12 AND family!=debian-12-arm64" --format="value(name)") \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --service-account=compute-aip@$PROJECT_ID.iam.gserviceaccount.com
Your active configuration is: [cloudshell-10282]
Created [https://www.googleapis.com/compute/v1/projects/gleb-test-short-002-470613/zones/us-central1-a/instances/instance-1].
NAME: instance-1
ZONE: us-central1-a
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE: 
INTERNAL_IP: 10.128.0.2
EXTERNAL_IP: 34.28.55.32
STATUS: RUNNING

Установите клиент PostgreSQL.

Установите клиентское программное обеспечение PostgreSQL на развернутую виртуальную машину.

Подключитесь к виртуальной машине:

gcloud compute ssh instance-1 --zone=us-central1-a

Ожидаемый вывод в консоль:

student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a
Updating project ssh metadata...working..Updated [https://www.googleapis.com/compute/v1/projects/test-project-402417].                                                                                                                                                         
Updating project ssh metadata...done.                                                                                                                                                                                                                                              
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.5110295539541121102' (ECDSA) to the list of known hosts.
Linux instance-1 5.10.0-26-cloud-amd64 #1 SMP Debian 5.10.197-1 (2023-09-29) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
student@instance-1:~$ 

Установите программное обеспечение, запускаемое командой внутри виртуальной машины:

sudo apt-get update
sudo apt-get install --yes postgresql-client

Ожидаемый вывод в консоль:

student@instance-1:~$ sudo apt-get update
sudo apt-get install --yes postgresql-client
Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]
Get:4 file:/etc/apt/mirrors/debian-security.list Mirrorlist [39 B]
Hit:7 https://packages.cloud.google.com/apt google-compute-engine-bookworm-stable InRelease
Get:8 https://packages.cloud.google.com/apt cloud-sdk-bookworm InRelease [1652 B]
Get:2 https://deb.debian.org/debian bookworm InRelease [151 kB]
Get:3 https://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
...redacted...
update-alternatives: using /usr/share/postgresql/15/man/man1/psql.1.gz to provide /usr/share/man/man1/psql.1.gz (psql.1.gz) in auto mode
Setting up postgresql-client (15+248) ...
Processing triggers for man-db (2.11.2-2) ...
Processing triggers for libc-bin (2.36-9+deb12u7) ...

Подключитесь к экземпляру AlloyDB.

Подключитесь к основному экземпляру с виртуальной машины, используя psql.

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

Используйте указанную ранее переменную $PGASSWORD и имя кластера для подключения к AlloyDB с виртуальной машины GCE:

export PGPASSWORD=<Noted password>
PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"

Ожидаемый вывод в консоль:

student@instance-1:~$ PROJECT_ID=$(gcloud config get-value project)
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres sslmode=require"
psql (15.13 (Debian 15.13-0+deb12u1), server 16.8)
WARNING: psql major version 15, server major version 16.
         Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

postgres=>

Завершить сеанс psql, сохранив при этом SSH-соединение:

exit

Ожидаемый вывод в консоль:

postgres=> exit
student@instance-1:~$ 

6. Инициализация базы данных.

Мы будем использовать клиентскую виртуальную машину в качестве платформы для заполнения базы данных данными и размещения нашего приложения. Первым шагом является создание базы данных и ее заполнение данными.

Создать базу данных

Создайте базу данных с именем "assistantdemo".

В сессии виртуальной машины GCE выполните:

psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"  

Ожидаемый вывод в консоль:

student@instance-1:~$ psql "host=$INSTANCE_IP user=postgres" -c "CREATE DATABASE assistantdemo"
CREATE DATABASE
student@instance-1:~$  

Подготовка среды Python

Для продолжения мы будем использовать готовые скрипты Python из репозитория GitHub, но перед этим нам необходимо установить необходимое программное обеспечение.

В виртуальной машине GCE выполните:

sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip

Ожидаемый вывод в консоль:

student@instance-1:~$ sudo apt install -y python3.11-venv git
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl
Suggested packages:
  git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn ed diffutils-doc
The following NEW packages will be installed:
  git git-man liberror-perl patch python3-distutils python3-lib2to3 python3-pip-whl python3-setuptools-whl python3.11-venv
0 upgraded, 9 newly installed, 0 to remove and 2 not upgraded.
Need to get 12.4 MB of archives.
After this operation, 52.2 MB of additional disk space will be used.
Get:1 file:/etc/apt/mirrors/debian.list Mirrorlist [30 B]
...redacted...
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 23.0.1
    Uninstalling pip-23.0.1:
      Successfully uninstalled pip-23.0.1
Successfully installed pip-24.0
(.venv) student@instance-1:~$

Проверьте версию Python.

В виртуальной машине GCE выполните:

python -V

Ожидаемый вывод в консоль:

(.venv) student@instance-1:~$ python -V
Python 3.11.2
(.venv) student@instance-1:~$ 

Установите MCP Toolbox локально.

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

Мы собираемся использовать инструментарий MCP для инициализации нашего тестового набора данных, который впоследствии будет использоваться в качестве MCP-сервера для обработки запросов к источникам данных от нашего приложения в процессе генерации данных с расширенным извлечением (Retrieval Augmented Generation, RAG).

Давайте установим локально пакет инструментов MCP, чтобы заполнить базу данных assistantdemo.

В виртуальной машине GCE выполните:

export VERSION=0.16.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox

Ожидаемый вывод в консоль:

(.venv) student@instance-1:~$ export VERSION=0.16.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  133M  100  133M    0     0   158M      0 --:--:-- --:--:-- --:--:--  158M

Запустите панель инструментов для инициализации данных.

В виртуальной машине GCE выполните:

Экспорт переменных среды для заполнения базы данных:

export ALLOYDB_POSTGRES_PROJECT=$(gcloud config get-value project)
export ALLOYDB_POSTGRES_REGION="us-central1"
export ALLOYDB_POSTGRES_CLUSTER="alloydb-aip-01"
export ALLOYDB_POSTGRES_INSTANCE="alloydb-aip-01-pr"
export ALLOYDB_POSTGRES_DATABASE="assistantdemo"
export ALLOYDB_POSTGRES_USER="postgres"
export ALLOYDB_POSTGRES_PASSWORD=$PGPASSWORD
export ALLOYDB_POSTGRES_IP_TYPE="private"

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

./toolbox --prebuilt alloydb-postgres

Ожидаемый вывод в консоль. В последней строке вывода вы должны увидеть: "Сервер готов к обслуживанию!":

student@instance-1:~$ cexport ALLOYDB_POSTGRES_PROJECT=$PROJECT_ID
export ALLOYDB_POSTGRES_REGION="us-central1"
export ALLOYDB_POSTGRES_CLUSTER="alloydb-aip-01"
export ALLOYDB_POSTGRES_INSTANCE="alloydb-aip-01-pr"
export ALLOYDB_POSTGRES_DATABASE="assistantdemo"
export ALLOYDB_POSTGRES_USER="postgres"
export ALLOYDB_POSTGRES_PASSWORD=$PGPASSWORD
export ALLOYDB_POSTGRES_IP_TYPE="private"
student@instance-1:~$ ./toolbox --prebuilt alloydb-postgres
2025-09-02T18:30:58.957655886Z INFO "Using prebuilt tool configuration for alloydb-postgres" 
2025-09-02T18:30:59.507306664Z INFO "Initialized 1 sources." 
2025-09-02T18:30:59.50748379Z INFO "Initialized 0 authServices." 
2025-09-02T18:30:59.507618807Z INFO "Initialized 2 tools." 
2025-09-02T18:30:59.507726704Z INFO "Initialized 2 toolsets." 
2025-09-02T18:30:59.508258894Z INFO "Server ready to serve!" 

Не закрывайте эту вкладку Cloud Shell, пока не завершится заполнение данных.

Заполнить базу данных

Откройте еще одну вкладку Cloud Shell, используя знак "+" вверху.

4ca978f5142bb6ce.png

И подключитесь к виртуальной машине экземпляра 1 :

gcloud compute ssh instance-1 --zone=us-central1-a

Ожидаемый вывод в консоль:

student@cloudshell:~ (test-project-402417)$ gcloud compute ssh instance-1 --zone=us-central1-a
Linux instance-1 6.1.0-37-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Sep  2 21:44:07 2025 from 35.229.111.9
student@instance-1:~$ 

Клонируйте репозиторий GitHub с кодом службы получения данных и примером приложения.

В виртуальной машине GCE выполните:

git clone  https://github.com/GoogleCloudPlatform/cymbal-air-toolbox-demo.git

Ожидаемый вывод в консоль:

student@instance-1:~$ git clone  https://github.com/GoogleCloudPlatform/cymbal-air-toolbox-demo.git
Cloning into 'cymbal-air-toolbox-demo'...
remote: Enumerating objects: 3481, done.
remote: Counting objects: 100% (47/47), done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 3481 (delta 16), reused 7 (delta 5), pack-reused 3434 (from 3)
Receiving objects: 100% (3481/3481), 57.96 MiB | 6.04 MiB/s, done.
Resolving deltas: 100% (2549/2549), done.
student@instance-1:~

Пожалуйста, обратите внимание, если вы обнаружите какие-либо ошибки.

Подготовьте среду Python и установите необходимые пакеты:

source .venv/bin/activate
cd cymbal-air-toolbox-demo
pip install -r requirements.txt

Укажите путь к корневой папке репозитория в Python и запустите скрипт для заполнения базы данных тестовым набором данных. Первая команда добавляет путь к модулям Python в нашу среду, а вторая команда заполняет базу данных данными.

export PYTHONPATH=$HOME/cymbal-air-toolbox-demo
python data/run_database_init.py

Ожидаемый вывод в консоль (засекречено). В конце вы должны увидеть "инициализация базы данных завершена":

student@instance-1:~$ source .venv/bin/activate
(.venv) student@instance-1:~$ 
(.venv) student@instance-1:~$ cd cymbal-air-toolbox-demo/
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ pip install -r requirements.txt
python run_database_init.py
Collecting fastapi==0.115.0 (from -r requirements.txt (line 1))
  Downloading fastapi-0.115.0-py3-none-any.whl.metadata (27 kB)
Collecting google-auth==2.40.3 (from -r requirements.txt (line 2))
  Downloading google_auth-2.40.3-py2.py3-none-any.whl.metadata (6.2 kB)
Collecting google-cloud-aiplatform==1.97.0 (from google-cloud-aiplatform[evaluation]==1.97.0->-r requirements.txt (line 3))
  Downloading google_cloud_aiplatform-1.97.0-py2.py3-none-any.whl.metadata (36 kB)
Collecting itsdangerous==2.2.0 (from -r requirements.txt (line 4))
  Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)
Collecting jinja2==3.1.5 (from -r requirements.txt (line 5))
  Downloading jinja2-3.1.5-py3-none-any.whl.metadata (2.6 kB)
Collecting langchain-community==0.3.25 (from -r requirements.txt (line 6))
  Downloading langchain_community-0.3.25-py3-none-any.whl.metadata (2.9 kB)
Collecting langchain==0.3.25 (from -r requirements.txt (line 7))
...

(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ 
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ export PYTHONPATH=$HOME/cymbal-air-toolbox-demo
python data/run_database_init.py
Airports table initialized
Amenities table initialized
Flights table initialized
Tickets table initialized
Policies table initialized
database init done.
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$ 

Теперь вы можете закрыть эту вкладку.

В сессии виртуальной машины выполните:

exit

В сессии Cloud Shell нажмите Ctrl+D или выполните следующую команду:

exit

На первой вкладке с запущенной программой MCP Toolbox нажмите Ctrl+C, чтобы выйти из сеанса работы программы.

База данных заполнена примерами данных для приложения.

Вы можете проверить это, подключившись к базе данных и проверив количество строк в таблице airports. Вы можете использовать утилиту psql, как мы использовали ранее, или AlloyDB Studio . Вот как это можно проверить с помощью psql.

В SSH-сессии к виртуальной машине instance-1 выполните:

export PGPASSWORD=<Noted AlloyDB password>
REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "SELECT COUNT(*) FROM airports"  

Ожидаемый вывод в консоль:

student@instance-1:~$ REGION=us-central1
ADBCLUSTER=alloydb-aip-01
INSTANCE_IP=$(gcloud alloydb instances describe $ADBCLUSTER-pr --cluster=$ADBCLUSTER --region=$REGION --format="value(ipAddress)")
psql "host=$INSTANCE_IP user=postgres dbname=assistantdemo" -c "SELECT COUNT(*) FROM airports"
 count 
-------
  7698
(1 row)

База данных готова, и мы можем перейти к развертыванию MCP Toolbox.

7. Разверните MCP Toolbox в Cloud Run.

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

Подготовьте идентификатор клиента.

Для использования функции бронирования в приложении необходимо подготовить идентификатор клиента OAuth 2.0 с помощью Cloud Console. Без него мы не сможем войти в приложение, используя свои учетные данные Google, чтобы совершить бронирование и записать его в базу данных.

В консоли Cloud перейдите в раздел API и сервисы и нажмите «Экран согласия OAuth». Вот ссылка на эту страницу. Откроется страница обзора OAuth, где нужно нажать «Начать».

2f13a26289362f20.png

На следующей странице мы указываем название приложения, адрес электронной почты службы поддержки пользователей и нажимаем «Далее».

dd3721c042db26ae.png

На следующем экране мы выбираем «Внутреннее» для нашего приложения и снова нажимаем «Далее».

71b6d11179ed872b.png

Затем мы указываем контактный адрес электронной почты и нажимаем «Далее».

8ff29dfd959b41f0.png

Затем мы соглашаемся с политикой сервисов Google API и нажимаем кнопку «Создать».

ca87d1200662b7f7.png

Это приведет нас на страницу, где мы сможем создать OAuth-клиент.

56e5040805632a53.png

На экране выбираем из выпадающего меню «Веб-приложение», указываем «Cymbal Air» в качестве приложения и нажимаем кнопку «Добавить URI».

4e28c6700426735a.png

URI представляют собой доверенные источники для приложения и зависят от того, откуда вы пытаетесь получить доступ к приложению. Мы указали "http://localhost:8081" в качестве авторизованного URI и "http://localhost:8081/login/google" в качестве URI перенаправления. Эти значения будут работать, если вы введете в браузере "http://localhost:8081" в качестве URI для подключения. Например, при подключении через SSH-туннель с вашего компьютера. Я покажу вам, как это сделать позже.

9dc25f2d318097e2.png

После нажатия кнопки «Создать» появится всплывающее окно с учетными данными ваших клиентов. Эти данные будут записаны в систему. Вы всегда можете скопировать идентификатор клиента, чтобы использовать его при запуске приложения.

f5a7b6ad0858d95c.png

Позже вы увидите, где нужно указать идентификатор клиента.

Создать учетную запись службы

Для нашего сервиса Cloud Run нам необходима выделенная учетная запись службы со всеми необходимыми привилегиями. Для работы сервиса нам нужен доступ к AlloyDB и Cloud Secret Manager. В качестве имени для учетной записи службы мы будем использовать toolbox-identity.

Откройте еще одну вкладку Cloud Shell, используя знак "+" вверху.

4ca978f5142bb6ce.png

В новой вкладке облачной оболочки выполните:

export PROJECT_ID=$(gcloud config get-value project)
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/alloydb.client"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/serviceusage.serviceUsageConsumer"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/secretmanager.secretAccessor"

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

Закройте вкладку, нажав Ctrl+D или выполнив команду «Выход» во вкладке:

exit

Подготовка конфигурации MCP Toolbox

Подготовьте конфигурационный файл для MCP Toolbox. Вы можете ознакомиться со всеми параметрами конфигурации в документации , но здесь мы будем использовать пример файла tools.yaml и заменим некоторые значения, такие как имя кластера и экземпляра, пароль AlloyDB и идентификатор проекта, на наши фактические значения.

Экспорт паролей AlloyDB:

export PGPASSWORD=<noted AlloyDB password>

Экспортируйте идентификатор клиента, подготовленный на предыдущем шаге:

export CLIENT_ID=<noted OAuth 2.0 client ID for our application>

Подготовьте конфигурационный файл.

PROJECT_ID=$(gcloud config get-value project)
ADBCLUSTER=alloydb-aip-01
sed -e "s/project: retrieval-app-testing/project: $(gcloud config get-value project)/g" \
-e "s/cluster: my-alloydb-cluster/cluster: $ADBCLUSTER/g" \
-e "s/instance: my-alloydb-instance/instance: $ADBCLUSTER-pr/g" \
-e "s/password: postgres/password: $PGPASSWORD\\n    ipType: private/g" \
-e "s/^ *clientId: .*/    clientId: $CLIENT_ID/g" \
cymbal-air-toolbox-demo/tools.yaml >~/tools.yaml

Если вы посмотрите на раздел файла, определяющий целевой источник данных, вы увидите, что мы также добавили строку для использования частного IP-адреса для подключения.

sources:
  my-pg-instance:
    kind: alloydb-postgres
    project: gleb-test-short-003-471020
    region: us-central1
    cluster: alloydb-aip-01
    instance: alloydb-aip-01-pr
    database: assistantdemo
    user: postgres
    password: L23F...
    ipType: private
authServices:
  my_google_service:
    kind: google
    clientId: 96828*******-***********.apps.googleusercontent.com

Создайте секрет, используя конфигурацию tools.yaml в качестве источника.

В консоли SSH виртуальной машины выполните следующую команду:

gcloud secrets create tools --data-file=tools.yaml

Ожидаемый вывод в консоль:

student@instance-1:~$ gcloud secrets create tools --data-file=tools.yaml
Created version [1] of the secret [tools].

Разверните MCP Toolbox в качестве облачной службы запуска.

Теперь все готово для развертывания MCP Toolbox в качестве сервиса в Cloud Run. Для локального тестирования можно запустить команду "./toolbox –tools-file=./tools.yaml", но если мы хотим, чтобы наше приложение работало в облаке, развертывание в Cloud Run будет гораздо целесообразнее.

В SSH-сессии виртуальной машины выполните:

export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
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" \
    --network default \
    --subnet default \
    --no-allow-unauthenticated

Ожидаемый вывод в консоль:

student@instance-1:~$ export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
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" \
    --network default \
    --subnet default \
    --no-allow-unauthenticated
Deploying container to Cloud Run service [toolbox] in project [gleb-test-short-002-470613] region [us-central1]
✓ Deploying new service... Done.                                                                                                                                                                                                
  ✓ Creating Revision...                                                                                                                                                                                                        
  ✓ Routing traffic...                                                                                                                                                                                                          
Done.                                                                                                                                                                                                                           
Service [toolbox] revision [toolbox-00001-l9c] has been deployed and is serving 100 percent of traffic.
Service URL: https://toolbox-868691532292.us-central1.run.app

student@instance-1:~$

Проверьте работу сервиса.

Теперь мы можем проверить, работает ли служба и можем ли мы получить доступ к конечной точке. Для получения конечной точки службы и токена аутентификации мы используем утилиту gcloud. В качестве альтернативы вы можете проверить URI службы в консоли облака.

dd1a16ee00a861a0.png

Вы можете скопировать значение и заменить в команде curl часть "$(gcloud run services list –filter="(toolbox)" –format="value(URL)" .

Вот как получить URL-адрес динамически из командной строки:

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud  run services list --filter="(toolbox)" --format="value(URL)")

Ожидаемый вывод в консоль:

student@instance-1:~$ curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" $(gcloud  run services list --filter="(toolbox)" --format="value(URL)")
🧰 Hello, World! 🧰student@instance-1:~$

Если мы видим сообщение "Hello World", это означает, что наш сервис запущен и обрабатывает запросы.

8. Развертывание тестового приложения

Теперь, когда у нас запущена и работает служба получения информации, мы можем развернуть тестовое приложение. Это приложение представляет собой онлайн-помощник по аэропортам, который может предоставлять информацию о рейсах, аэропортах и ​​даже бронировать рейсы на основе данных о рейсах и аэропортах из нашей базы данных.

Приложение можно развернуть локально, на виртуальной машине в облаке или в любом другом сервисе, таком как Cloud Run или Kubernetes. Здесь мы сначала покажем, как развернуть его на виртуальной машине.

Подготовьте окружающую среду

Мы продолжаем работать на нашей виртуальной машине, используя ту же SSH-сессию. Для запуска нашего приложения нам нужны некоторые модули Python, которые мы уже добавили при инициализации базы данных. Давайте переключимся на нашу виртуальную среду Python и изменим местоположение на каталог приложения.

В SSH-сессии виртуальной машины выполните:

source ~/.venv/bin/activate
cd cymbal-air-toolbox-demo

Ожидаемый результат (засекречено):

student@instance-1:~$ source ~/.venv/bin/activate
cd cymbal-air-toolbox-demo
(.venv) student@instance-1:~/cymbal-air-toolbox-demo$

Приложение «Помощник запуска»

Перед запуском приложения необходимо настроить несколько переменных среды. Для базовой функциональности приложения, такой как поиск информации о рейсах и услугах аэропорта, требуется только переменная TOOLBOX_URL, которая указывает приложению на службу получения данных. Получить её можно с помощью команды gcloud.

В SSH-сессии виртуальной машины выполните:

export TOOLBOX_URL=$(gcloud  run services list --filter="(toolbox)" --format="value(URL)")

Ожидаемый результат (засекречено):

student@instance-1:~/cymbal-air-toolbox-demo$ export BASE_URL=$(gcloud  run services list --filter="(toolbox)" --format="value(URL)")

Для использования более продвинутых возможностей приложения, таких как бронирование и изменение авиабилетов, нам необходимо войти в приложение, используя свою учетную запись Google. Для этого нам нужно указать переменную среды CLIENT_ID, используя идентификатор клиента OAuth из главы «Подготовка идентификатора клиента»:

export CLIENT_ID=215....apps.googleusercontent.com

Ожидаемый результат (засекречено):

student@instance-1:~/cymbal-air-toolbox-demo$ export CLIENT_ID=215....apps.googleusercontent.com

Теперь мы можем запустить наше приложение:

python run_app.py

Ожидаемый результат:

student@instance-1:~/cymbal-air-toolbox-demo/llm_demo$ python run_app.py
INFO:     Started server process [2900]
INFO:     Waiting for application startup.
Loading application...
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8081 (Press CTRL+C to quit)

Подключиться к приложению

Существует несколько способов подключения к приложению, работающему на виртуальной машине. Например, можно открыть порт 8081 на виртуальной машине, используя правила брандмауэра в VPC, или создать балансировщик нагрузки с публичным IP-адресом. В данном случае мы будем использовать SSH-туннель к виртуальной машине, преобразуя локальный порт 8080 в порт 8081 виртуальной машины.

Подключение с локального компьютера

Для подключения с локального компьютера необходимо запустить SSH-туннель. Это можно сделать с помощью команды `gcloud compute ssh` .

gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8081:localhost:8081

Ожидаемый результат:

student-macbookpro:~ student$ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
Warning: Permanently added 'compute.7064281075337367021' (ED25519) to the list of known hosts.
Linux instance-1.us-central1-c.c.gleb-test-001.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
student@instance-1:~$

Теперь мы можем открыть браузер и использовать http://localhost:8081 для подключения к нашему приложению. Мы должны увидеть экран приложения.

c667b9013afac3f9.png

Подключение из Cloud Shell

В качестве альтернативы можно использовать Google Cloud Shell для подключения. Откройте еще одну вкладку Cloud Shell, используя знак «+» вверху.

4ca978f5142bb6ce.png

В новой вкладке получите URI источника и перенаправления для вашего веб-клиента, выполнив команду gcloud:

echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google"

Вот ожидаемый результат:

student@cloudshell:~ echo "origin:"; echo "https://8080-$WEB_HOST"; echo "redirect:"; echo "https://8080-$WEB_HOST/login/google"
origin:
https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev
redirect:
https://8080-cs-35704030349-default.cs-us-east1-rtep.cloudshell.dev/login/google

Используйте URI источника и перенаправления в качестве « Авторизованных источников JavaScript » и «Авторизованных URI перенаправления » для учетных данных, созданных в главе «Подготовка идентификатора клиента», заменив или дополнив исходные значения http://localhost:8080 .

На странице идентификаторов клиентов OAuth 2.0 нажмите на "Cymbal Air".

b4c1430329886d9c.png

Укажите URI источника и перенаправления для Cloud Shell и нажмите кнопку «Сохранить».

5651bdd6d0d1c88.png

В новой вкладке облачной оболочки запустите туннель к вашей виртуальной машине, выполнив команду gcloud:

gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081

Если появится ошибка "Невозможно назначить запрошенный адрес", пожалуйста, проигнорируйте её.

Вот ожидаемый результат:

student@cloudshell:~ gcloud compute ssh instance-1 --zone=us-central1-a -- -L 8080:localhost:8081
bind [::1]:8081: Cannot assign requested address
inux instance-1.us-central1-a.c.gleb-codelive-01.internal 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat May 25 19:15:46 2024 from 35.243.235.73
student@instance-1:~$

Это открывает порт 8080 в вашей облачной оболочке, который можно использовать для «предварительного просмотра веб-страниц».

Нажмите на кнопку «Веб-просмотр» в правом верхнем углу Cloud Shell и в выпадающем меню выберите «Предварительный просмотр на порту 8080».

444fbf54dcd4d160.png

В вашем веб-браузере откроется новая вкладка с интерфейсом приложения. Вы должны увидеть страницу «Помощник службы поддержки клиентов Cymbal Air».

389f0ae2945beed5.png

Войдите в приложение

Когда все настроено и приложение открыто, вы можете использовать кнопку «Войти» в правом верхнем углу экрана приложения, чтобы ввести свои учетные данные. Это необязательно и требуется только в том случае, если вы хотите попробовать функциональность бронирования в приложении.

a1f571371b957129.png

Откроется всплывающее окно, где мы сможем выбрать свои учетные данные.

После авторизации приложение готово, и вы можете начать отправлять свои запросы в поле внизу окна.

В этой демонстрации показан помощник службы поддержки клиентов Cymbal Air. Cymbal Air — вымышленная пассажирская авиакомпания. Помощник представляет собой чат-бот с искусственным интеллектом, который помогает путешественникам управлять рейсами и находить информацию о хабе Cymbal Air в международном аэропорту Сан-Франциско (SFO).

Без авторизации (без CLIENT_ID) это может помочь ответить на вопросы пользователей, например:

Когда следующий рейс в Денвер?

Есть ли какие-нибудь магазины класса люкс рядом с воротами C28?

Где можно купить кофе рядом с выходом A6?

Где можно купить подарок?

Пожалуйста, найдите рейс из Сан-Франциско в Денвер, вылетающий сегодня.

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

6e7758f707c67c3e.png

Приложение использует новейшие модели Google Foundation для генерации ответов и дополнения их информацией о рейсах и услугах из рабочей базы данных AlloyDB. Подробнее об этом демонстрационном приложении можно узнать на странице проекта на Github .

9. Очистка окружающей среды

Теперь, когда все задачи выполнены, мы можем приступить к уборке окружающей среды.

Удалить службу Cloud Run

В Cloud Shell выполните:

gcloud run services delete toolbox --region us-central1

Ожидаемый вывод в консоль:

student@cloudshell:~ (gleb-test-short-004)$ gcloud run services delete retrieval-service --region us-central1
Service [retrieval-service] will be deleted.

Do you want to continue (Y/n)?  Y

Deleting [retrieval-service]...done.                                                                                                                                                                                                                 
Deleted service [retrieval-service].

Удалите учетную запись службы для службы, работающей в облаке.

В Cloud Shell выполните:

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet

Ожидаемый вывод в консоль:

student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-222]
student@cloudshell:~ (gleb-test-short-004)$ gcloud iam service-accounts delete retrieval-identity@$PROJECT_ID.iam.gserviceaccount.com --quiet
deleted service account [retrieval-identity@gleb-test-short-004.iam.gserviceaccount.com]
student@cloudshell:~ (gleb-test-short-004)$

После завершения лабораторной работы удалите экземпляры AlloyDB и кластер.

Удалите кластер AlloyDB и все его экземпляры.

Если вы использовали пробную версию AlloyDB, не удаляйте пробный кластер, если планируете тестировать другие тестовые среды и ресурсы с его помощью. Вы не сможете создать другой пробный кластер в том же проекте.

Кластер уничтожается с помощью опции force, которая также удаляет все экземпляры, принадлежащие кластеру.

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

gcloud config set project <your project id>
export REGION=us-central1
export ADBCLUSTER=alloydb-aip-01
export PROJECT_ID=$(gcloud config get-value project)

Удалите кластер:

gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force

Ожидаемый вывод в консоль:

student@cloudshell:~ (test-project-001-402417)$ gcloud alloydb clusters delete $ADBCLUSTER --region=$REGION --force
All of the cluster data will be lost when the cluster is deleted.

Do you want to continue (Y/n)?  Y

Operation ID: operation-1697820178429-6082890a0b570-4a72f7e4-4c5df36f
Deleting cluster...done.   

Удалить резервные копии AlloyDB

Удалите все резервные копии AlloyDB для кластера:

for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done

Ожидаемый вывод в консоль:

student@cloudshell:~ (test-project-001-402417)$ for i in $(gcloud alloydb backups list --filter="CLUSTER_NAME: projects/$PROJECT_ID/locations/$REGION/clusters/$ADBCLUSTER" --format="value(name)" --sort-by=~createTime) ; do gcloud alloydb backups delete $(basename $i) --region $REGION --quiet; done
Operation ID: operation-1697826266108-60829fb7b5258-7f99dc0b-99f3c35f
Deleting backup...done.                                                                                                                                                                                                                                                            

Теперь мы можем уничтожить нашу виртуальную машину.

Удалить виртуальную машину GCE

В Cloud Shell выполните:

export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
    --zone=$ZONE \
    --quiet

Ожидаемый вывод в консоль:

student@cloudshell:~ (test-project-001-402417)$ export GCEVM=instance-1
export ZONE=us-central1-a
gcloud compute instances delete $GCEVM \
    --zone=$ZONE \
    --quiet
Deleted 

Удалите учетную запись службы для виртуальной машины GCE и службы восстановления.

В Cloud Shell выполните:

PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet

Ожидаемый вывод в консоль:

student@cloudshell:~ (gleb-test-short-004)$ PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts delete compute-aip@$PROJECT_ID.iam.gserviceaccount.com --quiet
Your active configuration is: [cloudshell-222]
deleted service account [compute-aip@gleb-test-short-004.iam.gserviceaccount.com]
student@cloudshell:~ (gleb-test-short-004)$ 

10. Поздравляем!

Поздравляем с завершением практического занятия!

Что мы рассмотрели

  • Как развернуть кластер AlloyDB
  • Как подключиться к AlloyDB
  • Как настроить и развернуть службу MCP Toolbox
  • Как развернуть пример приложения, используя развернутую службу

11. Опрос

Выход:

Как вы будете использовать этот учебный материал?

Прочитайте только до конца. Прочитайте текст и выполните упражнения.