Создание умного каталога для электронной торговли с сохранением данных в нескольких базах данных

1. Введение

В современной розничной торговле данные представляют собой разнообразную и обширную экосистему. У вас есть надежные данные о транзакциях (цены и ассортимент), "неупорядоченные" полиморфные каталоги (характеристики электроники и размеры одежды) и петабайты журналов поведения. Попытка объединить их в единый монолит не только создает технический долг, но и ухудшает пользовательский опыт.

В этой практической работе вы создадите многоязычную систему, которая объединяет:

  • AlloyDB – основа для транзакций, обеспечивающая высокую скорость и согласованность, а также эмбеддинги изображений.
  • MongoDB Atlas в Google Cloud – гибкий уровень каталога, не зависящий от схемы.
  • Cloud Storage – аналитический мозг для прогнозирования трендов в реальном времени.
  • BigQuery – цифровое хранилище высокого разрешения.

В чем секрет? Вы будете использовать MCP Toolbox for Databases для интеллектуальной оркестрации и объединения источников данных, работающих в Cloud Run, в качестве семантического моста, а затем развернете многоагентное чат-приложение с помощью Agent Development Kit (ADK). Вы не просто создаете строку поиска, а разрабатываете интеллектуальный мозг для розничной торговли, который понимает контекст, учитывает ограничения и устраняет разрыв между первичными данными и намерениями человека.

Невозможный запрос пользователя

Стандартные агенты электронной торговли не справляются с многомерным анализом (сочетанием отрицательных ограничений, визуального сходства и инвентаря в реальном времени). Например, я обычно хочу поговорить с розничным сайтом, например:

"Привет! Я планирую поездку в горы, чтобы сделать фотографии. Покажи мне водонепроницаемые рюкзаки, похожие по стилю на AeroGlow Pro, но без кожаных элементов. Также сообщи, есть ли они в наличии и жаловались ли другие фотографы в отзывах на прочность ремешка".

Почему этот запрос называют "убийцей агентов":

  • Визуальное сходство (AlloyDB + Vector Search). Для запроса "Похоже по стилю на AeroGlow Pro" требуется сравнение эмбеддингов изображений.
  • Отрицательное ограничение (MongoDB). "Без кожи" требует фильтрации по гибким вложенным атрибутам, которых обычно нет в стандартной схеме SQL.
  • Данные об ассортименте в реальном времени (AlloyDB). Чтобы узнать, есть ли товар в наличии, нужно проверить транзакции в реальном времени, а не устаревший индекс Google Поиска.
  • Семантический синтез (BigQuery + несколько агентов). Чтобы проанализировать отзывы на предмет долговечности ремешка, агенту необходимо обобщить неструктурированные отзывы из BigQuery на лету.

Большинство ботов в розничной торговле увидят только слова "рюкзак" и "кожаный" и покажут 10 кожаных рюкзаков. Как мы это предотвращаем?

Потому что мы не просто сопоставляем ключевые слова. Мы используем MCP Toolbox, чтобы наши агенты могли одновременно анализировать все эти источники – транзакционную истину в AlloyDB и гибкие атрибуты в MongoDB. Давайте построим его!

Что вам предстоит сделать

  • Подготовьте кластер AlloyDB для основных данных о товарах.
  • Настройте MongoDB Atlas в Google Cloud для хранения полуструктурированной информации о товарах.
  • Создайте сегмент Cloud Storage для показа изображений товаров.
  • Разверните MCP Toolbox for Databases в Cloud Run, чтобы обеспечить единообразный доступ к данным.
  • Запускать процессы ETL для передачи данных в BigQuery для анализа.
  • Общайтесь с ИИ-агентом на естественном языке.

Архитектура с несколькими базами данных для электронной торговли

Требования

  • Браузер, например Chrome.
  • Проект Google Cloud с включенными платежными функциями.
  • Бесплатный аккаунт MongoDB Atlas в Google Cloud.

2. Подготовка

Как создать проект Google Cloud

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

Запустить Cloud Shell

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

  1. В верхней части консоли Google Cloud нажмите Activate Cloud Shell (Активировать Cloud Shell).
  2. После подключения к Cloud Shell проверьте аутентификацию:
    gcloud auth list
    
  3. Убедитесь, что проект настроен:
    gcloud config get project
    
  4. Если проект не задан, задайте его:
    export PROJECT_ID=<YOUR_PROJECT_ID>
    gcloud config set project $PROJECT_ID
    

Задать переменные

В Cloud Shell задайте переменные среды для идентификатора и номера проекта:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

Включите необходимые API

Чтобы включить все необходимые API, выполните следующую команду:

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

3. Как настроить Cloud Storage

Cloud Storage – это огромное хранилище для неструктурированных медиаобъектов, например изображений товаров.

  1. В консоли Google Cloud перейдите в Cloud Storage и нажмите Create bucket (Создать сегмент).
  2. Укажите уникальное название сегмента, например -ecommerce-images.
  3. Нажмите Создать.
  4. Чтобы разрешить демонстрационному приложению доступ к изображениям без аутентификации, снимите флажок Enforce public access prevention on this bucket (Принудительно запретить общий доступ к этому сегменту) и нажмите Confirm (Подтвердить).
  5. Перейдите на вкладку Разрешения.
  6. В разделе Разрешения нажмите Предоставить доступ.
  7. В поле Новые субъекты введите allUsers.
  8. В разделе Выберите роль нажмите Cloud Storage > Storage Object Viewer.
  9. Нажмите Save (Сохранить), а затем – Allow Public Access (Разрешить публичный доступ), чтобы подтвердить, что вы делаете ресурс общедоступным.
  10. В Cloud Shell сохраните название сегмента в переменной:
    export BUCKET=<your-bucket-name>
    
    Замените названием созданного вами сегмента.

Загрузите изображения-плейсхолдеры

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

  1. В Cloud Shell клонируйте хранилище:
    git clone https://github.com/AbiramiSukumaran/polyglot-persist-ecommerce.git
    
  2. Перейдите в папку UploadImages:
    cd polyglot-persist-ecommerce/UploadImages
    
  3. Загрузите примеры изображений в сегмент:
    gcloud storage cp *.jpg gs://$BUCKET/
    

4. Настроить AlloyDB

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

Как инициализировать кластер AlloyDB

  1. В консоли Google Cloud перейдите в AlloyDB для PostgreSQL.
  2. Нажмите Создать кластер.
  3. В поле Cluster ID (Идентификатор кластера) введите ecommerce-cluster.
  4. Задайте надежный пароль для пользователя postgres. Для обучения можно использовать alloydb.
  5. В поле Database Version (Версия базы данных) оставьте значение по умолчанию.
  6. В поле Region (Регион) выберите us-central1 (или нужный регион).

Настройте основной экземпляр.

  1. В поле Идентификатор экземпляра введите ecommerce-cluster-primary.
  2. В разделе Zonal availability (Доступность по зонам) выберите Single zone (Одна зона).
  3. В поле Machine series (Серия машины) выберите N2, а в поле Machine type (Тип машины) – 4 vCPU, 32 GB.
  4. В разделе Подключение к частному IP-адресу выберите Доступ к частным сервисам (PSA) и укажите сеть default.Если сеть по умолчанию не задана, нажмите Подтвердить настройку сети, чтобы создать ее.
  5. В разделе Public IP Connectivity (Подключение к общедоступному IP-адресу) установите флажок Enable Public IP (Включить общедоступный IP-адрес), чтобы набор инструментов MCP мог правильно подключиться в этой практической работе. Консоль автоматически включает флаг password.enforce_complexity, который требуется AlloyDB для общедоступного IP-адреса.
  6. В поле Авторизованные внешние сети введите 0.0.0.0/0. Установите флажок Я осознаю риски и нажмите Сохранить.
  7. Нажмите Создать кластер.

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

  1. В меню навигации слева выберите AlloyDB Studio.
  2. В раскрывающемся списке База данных выберите postgres.
  3. Выберите Встроенная аутентификация, чтобы войти в базу данных.
  4. В поле Username (Имя пользователя) укажите пользователя postgres.
  5. В поле Password (Пароль) введите пароль, заданный ранее.
  6. Нажмите Authenticate (Выполнить аутентификацию).
  7. В редакторе откройте новую вкладку запроса без названия.
  8. Скопируйте следующий код DDL и нажмите Выполнить:
    CREATE TABLE products_core_table (
      product_id UUID PRIMARY KEY,
      name VARCHAR(255) NOT NULL,
      sku VARCHAR(50) UNIQUE NOT NULL,
      price NUMERIC(10, 2) NOT NULL,
      stock INT NOT NULL
    );
    
  9. В Cloud Shell перейдите в корневую папку проекта:
    cd ~/polyglot-persist-ecommerce
    
  10. Откройте файл alloydb_insert_queries.sql в Cloud Shell и скопируйте запросы на вставку.
    cat alloydb_insert_queries.sql
    
  11. На новой вкладке запроса без названия вставьте только операторы INSERT и нажмите Выполнить.
  12. На новой вкладке запроса без названия скопируйте следующий код DDL и нажмите Выполнить, чтобы создать индекс в таблице products_core_table:
    CREATE INDEX idx_products_core_sku ON products_core_table(sku);
    

Создайте эмбеддинги изображений, чтобы ИИ-агент мог находить похожие товары

Интеграция ИИ-агента использует эмбеддинги изображений для поиска похожих товаров. Встраивания генерируются с помощью модели multimodalembedding@001 и хранятся в базе данных AlloyDB. Векторные представления – это 1408-мерные векторы, которые хранятся в столбце img_embeddings.

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

Предоставьте сервисному аккаунту AlloyDB роли для доступа к Cloud Storage

Предоставьте сервисному аккаунту AlloyDB роли, необходимые для чтения изображений из Cloud Storage и создания эмбеддингов Vertex AI:

for role in roles/storage.objectUser roles/storage.objectViewer roles/aiplatform.user; do
  gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-alloydb.iam.gserviceaccount.com" \
    --role=$role --condition=None
done

Включить расширения

Для создания этого приложения мы будем использовать расширения pgvector и google_ml_integration. Расширение pgvector позволяет хранить векторные эмбеддинги и выполнять поиск по ним. Расширение google_ml_integration предоставляет функции, которые вы используете для доступа к конечным точкам прогнозирования Vertex AI, чтобы получать прогнозы в SQL. Чтобы включить эти расширения, выполните следующие DDL-запросы:

  1. В консоли Google Cloud перейдите в AlloyDB для PostgreSQL.
  2. В меню навигации слева выберите AlloyDB Studio.
  3. В редакторе откройте новую вкладку запроса без названия.
  4. Скопируйте следующий код DDL и нажмите Выполнить:
    CREATE EXTENSION IF NOT EXISTS vector;
    CREATE EXTENSION IF NOT EXISTS google_ml_integration;
    

Инициализировать базу данных со встраиваниями

  1. Добавьте столбец img_embeddings в таблицу products_core_table.
    ALTER TABLE products_core_table
    ADD COLUMN img_embeddings vector(1408);
    
  2. Выведите запрос на встраивание, указав название своего сегмента:
    cd ~/polyglot-persist-ecommerce
    sed "s/<STORAGE_BUCKET_NAME>/$BUCKET/g" alloydb_generate_embeddings.sql
    
  3. Скопируйте выходные данные, вставьте их на новую вкладку запроса AlloyDB Studio и нажмите Run (Выполнить). Это займет около минуты. Если время ожидания истекло, запустите его снова. Товары, для которых уже есть эмбеддинги, будут пропущены.

5. Как настроить MongoDB Atlas в Google Cloud

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

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

  1. Войдите в MongoDB Atlas (при необходимости создайте бесплатный аккаунт).
  2. В разделе Deploy your cluster (Развертывание кластера) выберите Free (Бесплатно). (Atlas предварительно выбирает платный уровень; убедитесь, что выбран бесплатный.)
  3. В поле Provider (Поставщик) выберите Google Cloud, а в поле Region (Регион) – Iowa (us-central1) (Айова (us-central1)).
  4. В поле Name (Название) введите ecommerce-cluster и снимите флажок Preload sample dataset (Предварительно загрузить пример набора данных).
  5. Нажмите Create Deployment (Создать развертывание).

Разрешите доступ и создайте пользователя базы данных

Откроется диалоговое окно Connect to ecommerce-cluster (Подключение к кластеру электронной торговли).

  1. Нажмите Добавить другой IP-адрес, введите 0.0.0.0/0 и добавьте его.
  2. Введите store-user в поле Username (Имя пользователя) и storeuser в поле Password (Пароль), а затем нажмите Create Database User (Создать пользователя базы данных).
  3. Нажмите Choose a connection method (Выбрать способ подключения), а затем – Drivers and Client Libraries (Драйверы и клиентские библиотеки).
  4. В разделе Use this connection string in your application (Использовать эту строку подключения в приложении) скопируйте строку подключения. Похоже, это mongodb+srv://store-user:@ecommerce-cluster.xxxxx.mongodb.net/. Замените на storeuser и сохраните строку. Она понадобится вам в tools.yaml.

Создание базы данных и коллекции

  1. На панели навигации слева нажмите Data Explorer (Проводник по данным), а затем – Create database (Создать базу данных) и укажите следующие сведения:
    • Database Name (Название базы данных): ecommerce_db.
    • Название коллекции: product_details_collection
  2. Нажмите Create Database (Создать базу данных).
  3. В Проводнике данных выберите название коллекции.
  4. Нажмите на значок Добавить данные (+) и выберите Вставить документ.
  5. Скопируйте содержимое JSON из файла product_details_export.json и вставьте его в диалоговое окно редактора Insert Document (Вставить документ).
  6. Atlas покажет баннер с предложением преобразовать текст в синтаксис оболочки. Нажмите Преобразовать, а затем – Вставить. Убедитесь, что добавлено 192 документа.
  7. В Data Explorer нажмите Create collection (+) (Создать коллекцию (+)) рядом с базой данных ecommerce_db.
  8. Введите user_interactions_collection в качестве названия коллекции и нажмите Create Collection (Создать коллекцию).
  9. В Проводнике данных выберите коллекцию user_interactions_collection.
  10. Нажмите на значок Добавить данные (+) и выберите Вставить документ.
  11. Скопируйте содержимое JSON из файла user_interactions_export.json и вставьте его в диалоговое окно редактора Insert Document (Вставить документ).
  12. Atlas покажет баннер с предложением преобразовать текст в синтаксис оболочки. Нажмите Преобразовать, а затем – Вставить. Убедитесь, что добавлено 211 документов.

6. Настройка BigQuery

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

Создайте набор данных

  1. В консоли Google Cloud перейдите в BigQuery.
  2. На панели Explorer (Проводник) рядом с идентификатором проекта нажмите на значок меню в виде трех точек и выберите Create dataset (Создать набор данных).
  3. В поле Dataset ID (Идентификатор набора данных) введите ecommerce_analytics.
  4. В поле Расположение данных выберите US (multiple regions) (для конфигурации tools.yaml требуется расположение US).
  5. Нажмите Создать набор данных.

Как создать таблицу аналитики

  1. Откройте новый запрос в рабочей области BigQuery.
  2. Выполните следующую инструкцию SQL, чтобы создать сводную таблицу, связывающую пользователей с взаимодействиями с товарами:
CREATE TABLE ecommerce_analytics.user_product_interactions (
    user_id STRING DEFAULT 'any user',
    product_id STRING,
    interaction_score INT
);

Предоставьте роли сервисному аккаунту Compute

Предоставьте сервисному аккаунту Compute по умолчанию роли, необходимые для MCP Toolbox и приложения:

for role in \
  roles/bigquery.dataEditor \
  roles/bigquery.jobUser \
  roles/secretmanager.secretAccessor \
  roles/alloydb.client \
  roles/serviceusage.serviceUsageConsumer \
  roles/storage.objectViewer \
  roles/aiplatform.user \
  roles/artifactregistry.writer; do
  gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
    --role="$role" \
    --condition=None
done

Вы также можете перейти в раздел IAM & Admin (IAM и администрирование) > IAM, нажать Grant access (Предоставить доступ), ввести сервисный аккаунт и добавить те же роли.

7. Понимание приложения от начала до конца

Чтобы узнать, как компоненты взаимодействуют друг с другом, мы создадим приложение для электронной торговли, которое использует несколько баз данных и сервисов. Приложение создано на основе серверной части Python (Flask) и интегрирует несколько сервисов и баз данных Google Cloud.

Структура каталога

В следующем разделе вы клонируете репозиторий polyglot-persist-ecommerce и используете его для локального запуска приложения. После локального тестирования приложения мы развернем MCP Toolbox и приложение в Cloud Run.

Изучите скачанные файлы в этом каталоге. В нем есть следующие каталоги верхнего уровня:

  • UploadImages – хранит объекты изображений, которые в основном используются для документации или визуального контента в каталоге товаров интернет-магазина.
  • static – хранит статические веб-объекты приложения, такие как файлы CSS и JavaScript, используемые для стилизации и добавления интерактивности в пользовательский интерфейс ( источник).
  • templates – хранит HTML-шаблоны (вероятно, Jinja2 для Flask), используемые приложением Python для динамического отображения веб-страниц каталога электронной торговли ( источник).

Файлы в этом репозитории работают вместе для создания, настройки и развертывания приложения электронной торговли с несколькими базами данных. Основные файлы, такие как app.py, управляют серверной частью, интегрируя различные источники данных, определенные в файлах SQL и JSON, а файлы конфигурации обеспечивают бесперебойное развертывание в облачных средах:

  • app.py: управляет бэкендом Flask и интеграцией с несколькими базами данных.
  • agentengine.py – основная логика для инициализации и настройки агентов Vertex AI.
  • .env: хранит секреты для подключений к базам данных и хранилищам.
  • tools.yaml – настраивает MCP Toolbox для операций с несколькими базами данных.
  • Dockerfile – определяет образ контейнера и настройку среды.
  • requirements.txt – список библиотек Python, необходимых для работы приложения.
  • tools.yaml – конфигурации для MCP Toolbox.
  • Procfile – элемент, определяющий команды для развертывания рабочей среды;
  • alloydb_insert_queries.sql: содержит SQL-запросы для реляционных данных.
  • product_details_export.json и user_interactions_export.json: примеры данных JSON для базы данных NoSQL.
  • README.md – помогает настроить и развернуть проект, а также разобраться в нем.

Полный процесс подачи заявки

  • Настройка AlloyDB. Подготовьте высокопроизводительный кластер и используйте предоставленные SQL-скрипты, чтобы создать таблицу products_core_table с векторными столбцами для встраиваний изображений.
  • Настройка MongoDB Atlas. Разверните кластер в Google Cloud, чтобы хранить изменяемые атрибуты товаров в product_details и регистрировать кликстримы в реальном времени в user_interactions.
  • Аналитика BigQuery. Создайте набор данных, чтобы агрегировать журналы взаимодействий и выполнять сложные аналитические запросы, которые позволяют выявлять пять самых популярных товаров среди миллионов событий.
  • Хранилище Cloud Storage. Создайте общедоступный сегмент для хранения изображений товаров в высоком разрешении. Убедитесь, что каждый объект доступен по подписанному или общедоступному URL для интерфейса.
  • Развертывание MCP Toolbox. Разверните Toolbox в Cloud Run, чтобы создать центральный мост RESTful, который преобразует намерения на естественном языке в запросы к нескольким базам данных.
  • Конфигурация Tools.yaml. Определите свои инструменты, например get_product_core_data или get_top_5_views, сопоставив определенные операции SQL и NoSQL с простыми, понятными агенту названиями.
  • Логика бэкенда Flask. Реализуйте маршруты app.py, которые взаимодействуют с MCP Toolbox, обрабатывают координацию извлечения данных и служат API для пользовательского интерфейса.
  • Оркестрация нескольких агентов. Настройте агентов ADK в коде, чтобы они могли определять намерения пользователей и выбирать подходящий инструмент для решения сложных задач, связанных с розничной торговлей и требующих использования нескольких источников.
  • Интеграция с интерфейсом. Создайте интерфейс index.html с каталогом товаров и функцией записи взаимодействий, вкладкой "Аналитика" для просмотра данных об эффективности товаров и специальной вкладкой "Агент", которая использует мультиагентный чат ADK для удобного общения с покупателями.

Теперь давайте реализуем оркестрацию и развертывание.

8. Настройка MCP Toolbox и развертывание в Cloud Run

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

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

Скачайте двоичный файл MCP Toolbox в домашний каталог и сделайте его исполняемым:

export VERSION=1.15.0
curl -L -o ~/toolbox https://storage.googleapis.com/mcp-toolbox-for-databases/v$VERSION/linux/amd64/toolbox
chmod +x ~/toolbox

Настройте tools.yaml

Вам нужно определить абстракции для AlloyDB, MongoDB и BigQuery. Файл tools.yaml сообщает MCP Toolbox, как взаимодействовать с каждым из них.

  1. В репозитории уже есть tools.yaml. Откройте его.
    cd ~/polyglot-persist-ecommerce
    cloudshell edit tools.yaml
    
  2. Замените плейсхолдеры ***** своими значениями:

    База данных

    Поле

    Пример значения

    AlloyDB/BigQuery

    project

    YOUR_PROJECT_ID

    AlloyDB

    region

    us-central1

    AlloyDB

    cluster

    ecommerce-cluster

    AlloyDB

    instance

    ecommerce-cluster-primary

    AlloyDB

    database

    postgres

    AlloyDB

    password

    alloydb

    AlloyDB

    ipType

    public (добавьте эту строку под alloydb-source, если ее там нет)

    MongoDB

    uri

    строку подключения, которую вы сохранили ранее;

  3. Укажите, что предварительные версии изображений должны храниться в сегменте:
    sed -i "s/ecommerce-app-images/$BUCKET/g" tools.yaml
    

Протестируйте интерфейс инструмента

  1. В терминале Cloud Shell запустите набор инструментов локально, чтобы открыть интерфейс:
    ~/toolbox --config tools.yaml --ui --enable-api
    
  2. В Cloud Shell нажмите Web Preview (Предварительный просмотр) > Change port (Изменить порт), введите 5000 и добавьте /ui в конец открывшегося URL.

Появится следующий интерфейс MCP Toolbox:

Интерфейс MCP Toolbox

Чтобы остановить локальный набор инструментов, нажмите Ctrl+C.

Развернуть в Cloud Run

Разверните MCP Toolbox в Cloud Run, чтобы сделать его доступным в качестве безопасного управляемого сервиса, который наше приложение может использовать для запросов к базам данных. Мы сохраним конфигурацию в Secret Manager, чтобы защитить конфиденциальные данные подключения.

  1. Загрузите конфигурацию tools.yaml в Google Secret Manager:
    gcloud secrets create tools --data-file=tools.yaml
    
    Если вы измените tools.yaml позже, загрузите новую версию с:
    gcloud secrets versions add tools --data-file=tools.yaml
    
  2. Разверните с помощью общедоступного образа контейнера MCP Toolbox:
    gcloud run deploy toolbox \
        --image us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:$VERSION \
        --region us-central1 \
        --service-account ${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \
        --set-secrets "/app/tools.yaml=tools:latest" \
        --args="--config=/app/tools.yaml","--address=0.0.0.0","--port=8080","--ui","--enable-api" \
        --allow-unauthenticated
    
    --enable-api включает REST API, который используется веб-приложением.
  3. Сохраните URL набора инструментов:
    export TOOLBOX_URL=$(gcloud run services describe toolbox --region us-central1 --format='value(status.url)')
    echo $TOOLBOX_URL
    
    Чтобы посмотреть инструменты, откройте $TOOLBOX_URL/ui в браузере.

9. Настройка приложения для электронной торговли и развертывание в Cloud Run

Теперь, когда базы данных запущены и абстракция MCP Toolbox развернута, мы можем запустить веб-приложение Flask.

Чтобы предоставить каталог товаров, приложение Flask обрабатывает данные, выполняя следующие шаги:

  1. Получение основных данных. Из AlloyDB (list_products_core) извлекается полный список товаров.
  2. Получение расширенных сведений. Извлекает все сведения о товаре из MongoDB (list_all_product_details).
  3. Объединить списки. Списки объединяются.
  4. Добавить медиаконтент. Добавляет URL изображения из Cloud Storage к каждому товару.

Создайте Agent Engine

  1. Установите зависимости:
    cd ~/polyglot-persist-ecommerce
    pip install -r requirements.txt
    
    Примечание. На этом этапе может потребоваться несколько минут, чтобы разрешить зависимости и установить пакеты.
  2. Инициализируйте и зарегистрируйте ИИ-агента с помощью Vertex AI Reasoning Engine:
    export REASONING_ENGINE_LOCATION=us-central1
    export APP_NAME=$(python agentengine.py)
    echo $APP_NAME
    
    Выходные данные будут выглядеть примерно так:
    projects/991742412753/locations/us-central1/reasoningEngines/4933254136889081856
    

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

Развертывание фронтенда в Cloud Run

  1. Разверните веб-приложение в Cloud Run, чтобы завершить архитектуру:
    gcloud run deploy polyglot --source . \
      --region us-central1 \
      --allow-unauthenticated \
      --set-env-vars="MCP_TOOLBOX_SERVER_URL=$TOOLBOX_URL,GCS_PRODUCT_BUCKET=$BUCKET,FALLBACK_IMAGE_URL=https://storage.googleapis.com/$BUCKET/fallback.jpg,GOOGLE_GENAI_USE_VERTEXAI=TRUE,PROJECT_ID=$PROJECT_ID,GOOGLE_CLOUD_LOCATION=global,REASONING_ENGINE_LOCATION=$REASONING_ENGINE_LOCATION,APP_NAME=$APP_NAME,MODEL=gemini-3.5-flash"
    

Ваше приложение опубликовано! Откройте URL сервиса, предоставленный Cloud Run, чтобы посмотреть каталог Multidb Ecommerce. URL будет выглядеть примерно так: https://polyglot-*********-uc.a.run.app/.

10. Открыть приложение

  1. Нажмите Каталог товаров, чтобы посмотреть все товары.
    Каталог товаров
  2. Нажмите на значок продукта, чтобы посмотреть информацию о товаре. Вы заметите, что изображения берутся из Cloud Storage, сведения о товарах – из MongoDB, а данные об ассортименте – из AlloyDB.О продукте
  3. Взаимодействуйте с каталогом товаров, чтобы генерировать макеты просмотров и записей, отправляемых в MongoDB.
  4. Нажмите ETL & Analytics (ETL и аналитика), чтобы посмотреть аналитику по продукту. Вы заметите, что аналитика товаров извлекается из BigQuery.
    ETL и аналитика продукта
  5. Чтобы взаимодействовать с ИИ-агентом, нажмите на вкладку ИИ-агент. Задавайте вопросы на естественном языке, например:
    I'm planning a high-altitude photography trip.
    Show me some weather-resistant backpacks similar in style to aero glow pro
    but without any leather components. Also, let me know if they are actually in
    stock and if other photographers have complained about the strap durability
    in the reviews.
    
    ИИ-агент

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

ИИ-агент

11. Организовать

Чтобы избежать дальнейших списаний средств с вашего аккаунта Google Cloud, удалите ресурсы, созданные в ходе этой практической работы.

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

gcloud run services delete toolbox --region us-central1 --quiet
gcloud run services delete polyglot --region us-central1 --quiet
gcloud secrets delete tools --quiet
bq rm -r -f -d $PROJECT_ID:ecommerce_analytics
gcloud storage rm --recursive gs://$BUCKET
gcloud alloydb clusters delete ecommerce-cluster --region us-central1 --force --quiet

При необходимости удалите экземпляр Agent Engine:

curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://us-central1-aiplatform.googleapis.com/v1/$APP_NAME?force=true"

Вы также можете перейти в консоль Google Cloud, выбрать Vertex AI > Agent Engine и удалить экземпляр.

Чтобы удалить весь проект Google Cloud и все его ресурсы, выполните следующую команду:

gcloud projects delete $PROJECT_ID

12. Поздравляю!

Поздравляем! Вы успешно создали мультиоблачную архитектуру Multidb.

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

  • Гибкая запись данных. MongoDB для журналов событий.
  • Согласованность транзакций. AlloyDB для обеспечения целостности ядра.
  • Высокопроизводительная аналитика. BigQuery для бизнес-аналитики.
  • Единая разработка. Один бэкенд на Python, абстрагирующий все сложности с помощью MCP Toolbox.

Справочная документация

Узнайте больше о связанных продуктах Google Cloud и изучите эти практические работы:

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