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

1. Введение

e71e051395674233.gif

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

f753f71c7116358a.png

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

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

Предпосылки

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

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

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

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

  • Учетная запись Google Cloud и проект Google Cloud
  • Веб-браузер, такой как Chrome

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

Запустить Cloud Shell

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

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

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

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

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

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

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-адресов

Нам необходимо настроить доступ к частному сервису в нашей 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

Если это не первый кластер 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 Service Account (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

Установить клиент Postgres

Установите клиентское программное обеспечение 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 для обработки запросов на источники данных из нашего приложения во время потока расширенной генерации данных (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

Запустить Toolbox для инициализации данных

В виртуальной машине 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

Ожидаемый вывод на консоль (удалён). В конце должно быть написано «database init done»:

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, чтобы выйти из сеанса работы с Toolbox.

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

Вы можете проверить это, подключившись к базе данных и проверив количество строк в таблице «Аэропорты». Для этого можно использовать утилиту 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

На следующем экране выбираем Internal для нашего приложения и снова нажимаем Next.

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 и 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 .

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

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 Customer Service Assistant».

389f0ae2945beed5.png

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

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

a1f571371b957129.png

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

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

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

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

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

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

Где можно выпить кофе возле выхода А6?

Где я могу купить подарок?

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

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

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 VM

В 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 VM и службы извлечения

В 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 Service
  • Как развернуть пример приложения с использованием развернутой службы

11. Опрос

Выход:

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

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