Создайте автомобильную торговую площадку на основе искусственного интеллекта с помощью BigQuery и Gemini Models.

1. Введение

В этом практическом занятии вы создадите бэкенд и развернете фронтенд для «Cymbal Autos», онлайн-площадки по продаже автомобилей. Вы будете использовать BigQuery и модели Gemini на платформе Gemini Enterprise Agent Platform для анализа фотографий автомобилей, прогнозирования цен с помощью BigQuery ML , выявления мошеннических объявлений с помощью векторных представлений и расчета сводных оценок сделок. Наконец, вы отобразите эти данные на фронтенде Next.js, развернутом в Cloud Run .

Архитектурная схема, показывающая взаимодействие BigQuery с Agent Platform и запуск фронтенда на Next.js Cloud Run.

Что вы будете делать

  • Подключите BigQuery к неструктурированным образам облачного хранилища с помощью ObjectRef.
  • Извлечение атрибутов транспортных средств из фотографий с помощью BigQuery и моделей Gemini.
  • Прогнозируйте справедливые рыночные цены, обучив модель регрессии XGBoost с помощью BigQuery ML.
  • Выявляйте потенциально мошеннические и заслуживающие доверия объявления, встраивая описания автомобилей и используя функцию VECTOR_SEARCH
  • С помощью AI.SCORE рассчитайте комплексный рейтинг сделки для каждого объявления, учитывая при этом информацию о состоянии товара из описания продавца.
  • Экспортируйте данные и разверните приложение из маркетплейса Next.js в Google Cloud Run.

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

  • Веб-браузер, например Chrome.
  • Проект Google Cloud с включенной функцией выставления счетов.
  • Базовые знания SQL, Python и Google Cloud.
  • Достаточные права доступа к IAM для включения API, создания ресурсов и назначения разрешений (например, владельца проекта).

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

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

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

Создайте проект в Google Cloud.

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

Запустить Cloud Shell

Для загрузки кода, запуска скриптов настройки и развертывания приложения вы будете использовать Google Cloud Shell .

  1. В верхней части консоли Google Cloud нажмите кнопку «Активировать Cloud Shell» .

Открытая облачная оболочка

  1. После подключения к Cloud Shell выполните аутентификацию сессии, чтобы убедиться, что ваше приложение может получить доступ к API Google Cloud. Следуйте инструкциям для авторизации Cloud Shell:
gcloud auth application-default login
  1. Укажите идентификатор вашего проекта Google Cloud и уникальное имя для вашего сегмента Google Cloud Storage (где вы будете хранить необработанные данные):
export PROJECT_ID=$(gcloud config get-value project)
export USER_BUCKET="cymbal-autos-${PROJECT_ID}"

gcloud config set project $PROJECT_ID

Вы должны увидеть сообщение, похожее на приведенное ниже:

Your active configuration is: [cloudshell-####]
Updated property [core/project]

Включить API

Выполните эту команду в Cloud Shell, чтобы включить все необходимые API для этого практического занятия:

gcloud services enable \
  aiplatform.googleapis.com \
  artifactregistry.googleapis.com \
  bigquery.googleapis.com \
  bigqueryconnection.googleapis.com \
  cloudbuild.googleapis.com \
  run.googleapis.com

После успешного выполнения вы должны увидеть сообщение, похожее на показанное ниже:

Operation "operations/..." finished successfully.

3. Получите код и данные для настройки.

Сначала загрузите демонстрационные ресурсы и настройте переменные среды.

  1. В Cloud Shell клонируйте репозиторий devrel-demos и перейдите в каталог проекта:
git clone https://github.com/GoogleCloudPlatform/devrel-demos.git
cd devrel-demos/data-analytics/cymbal-autos-multimodal
  1. Запустите скрипт, чтобы скопировать данные в вашу среду. Этот скрипт синхронизирует локальные наборы данных репозитория с вашим личным хранилищем Cloud Storage и получает изображения транспортных средств из общедоступного хранилища:
chmod +x scripts/setup/*.sh
./scripts/setup/00_copy_data.sh

После этого вы должны увидеть сообщение, похожее на следующее:

Average throughput: 87.8MiB/s
Data copy complete!
  1. Далее настройте подключение к облачным ресурсам BigQuery. Для анализа неструктурированных изображений в облачном хранилище и прямого вызова моделей Agent Platform из ваших SQL-запросов BigQuery должен делегировать разрешения IAM базовой учетной записи службы. Этот скрипт создает защищенное соединение и предоставляет ему необходимые роли пользователя Vertex AI и потребителя использования службы (на распространение изменений уходит около минуты):
./scripts/setup/01_setup_api_connection.sh

Вы должны увидеть сообщение, похожее на следующее:

Environment setup complete! Your BigQuery connection is ready.
  1. Наконец, создайте исходный набор данных BigQuery и загрузите необработанные табличные данные. Это создаст ваш набор данных model_dev и заполнит начальные таблицы, заложив основу перед написанием каких-либо запросов машинного обучения:
./scripts/setup/02_load_to_bq.sh

Вы должны увидеть сообщение, похожее на следующее:

=================================================================
BigQuery load complete!
=================================================================

4. Извлечение мультимодальных изображений

Перед оценкой автомобилей вам потребуется извлечь структурированные данные (например, цвет, тип кузова или визуальные повреждения) из сотен необработанных фотографий. Используя функции ObjectRef и модели Gemini, размещенные на платформе Agent Platform, вы можете генерировать эти характеристики без перемещения файлов или написания сложных конвейеров обработки данных. Это извлечение напрямую влияет на значок ✨ «Визуальное состояние» во фронтенд-приложении.

  1. Откройте BigQuery Studio в новой вкладке браузера.
  2. Нажмите кнопку «+ Создать новый запрос» . В ходе этого практического занятия вы будете использовать редактор SQL для взаимодействия с SQL-кодом.
  3. Перед созданием инструментов машинного обучения для извлечения данных, вы можете быстро просмотреть исходные изображения. Выполните следующий запрос, чтобы увидеть массив URI изображений, хранящихся в Google Cloud Storage для каждого объявления:
SELECT auction_id, item_name, description, images 
FROM `model_dev.vehicle_metadata` LIMIT 5;
  1. Теперь в редакторе SQL-запросов BigQuery Studio вставьте следующий SQL-код, чтобы создать новую таблицу со столбцом image_ref . Нажмите « Выполнить» .
CREATE OR REPLACE TABLE `model_dev.vehicle_multimodal` AS
SELECT 
  *,
  ARRAY(
    SELECT OBJ.FETCH_METADATA(OBJ.MAKE_REF(uri, 'us.conn')) 
    FROM UNNEST(images) AS uri
  ) AS image_ref
FROM `model_dev.vehicle_metadata`;
  1. Взгляните на новый столбец ObjectRef в таблице image_ref , который вы только что создали. В новой таблице теперь есть столбец ObjectRef, имеющий права на выполнение операций над самими изображениями. Выполните следующий запрос, чтобы просмотреть его:
SELECT auction_id, item_name, description, image_ref 
FROM `model_dev.vehicle_multimodal` LIMIT 5;
  1. Теперь вы будете использовать AI.GENERATE и AI.CLASSIFY для анализа изображений. AI.GENERATE извлекает оценку состояния и краткое описание повреждений в одном предложении, запрашивая информацию у Gemini, а AI.CLASSIFY строго классифицирует тип кузова и цвет автомобиля.

Выполните следующий запрос, чтобы извлечь эти данные в отдельную таблицу признаков. Ожидаемое время выполнения — около 3 минут.

CREATE OR REPLACE TABLE `model_dev.vehicle_vision_features` AS
WITH generated_data AS (
   SELECT
   auction_id,
   AI.GENERATE(
     prompt => ('Rate the condition of this car on a scale from 0-100. Output a 1 sentence description of any glaring red flags', image_ref),
     output_schema => 'condition INT64, description_summary STRING'
   ).* EXCEPT(full_response,status)
 FROM
   `model_dev.vehicle_multimodal`
),

-- Object-centric Classifications
classified_data AS (
 SELECT
   auction_id,
   AI.CLASSIFY(
     ('What type of automobile is this?', image_ref[0]),
     categories => ['Truck', 'Sedan', 'SUV']) AS body_style,
   AI.CLASSIFY(
     ('Color of the exterior of the automobile', image_ref[0]),
     categories => ['Black', 'White', 'Silver', 'Gray', 'Red', 'Blue', 'Brown', 'Green', 'Beige', 'Gold']) AS color,
   AI.CLASSIFY(
     ('Color of the interior of the automobile', image_ref[0]),
     categories => ['Black', 'Gray', 'Beige', 'Tan', 'Brown', 'White', 'Red']) AS interior
 FROM `model_dev.vehicle_multimodal`
)

-- Join the AI insights back together into the final feature table
SELECT
 g.auction_id,
 g.condition,
 g.description_summary,
 c.body_style,
 c.color,
 c.interior
FROM generated_data g
JOIN classified_data c ON g.auction_id = c.auction_id;
  1. Чтобы просмотреть сгенерированные объекты самостоятельно, выполните следующий запрос или просто посмотрите на скриншот ниже:
SELECT auction_id, condition, description_summary, body_style, color, interior FROM `model_dev.vehicle_vision_features` LIMIT 5;

Мультимодальное извлечение

Краткое содержание раздела: Вы получили доступ к исходным изображениям напрямую из BigQuery и использовали модели Gemini для извлечения структурированных визуальных признаков без перемещения каких-либо файлов.

5. Прогнозирование цен с помощью XGBoost

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

  1. Вернитесь на вкладку BigQuery Studio .
  2. Для начала взгляните на обучающий набор данных. В отличие от активных объявлений о продаже автомобилей, таблица synthetic_cars содержит 100 000 исторических данных о продажах, которые будут использованы для обучения модели. Выполните этот простой запрос, чтобы взглянуть на данные:
SELECT
  *
FROM
  `model_dev.synthetic_cars`
LIMIT 10;
  1. Теперь выполните следующий SQL-запрос для обучения модели регрессии XGBoost. Эта модель изучает, как такие атрибуты, как пробег, год выпуска, марка и визуальное состояние, влияют на цену, на основе 100 000 исторических записей:
CREATE OR REPLACE MODEL `model_dev.car_price_model`
OPTIONS(
  MODEL_TYPE = 'BOOSTED_TREE_REGRESSOR',
  INPUT_LABEL_COLS = ['selling_price'],
  MAX_ITERATIONS = 15,
  TREE_METHOD = 'HIST'
) AS
SELECT
  * EXCEPT(vin, sale_date, market_value, seller)
FROM
  `model_dev.synthetic_cars`;
  1. Прежде чем прогнозировать цены на автомобили, выставленные на продажу в режиме реального времени, необходимо собрать все необходимые входные данные в одном месте. Выполните следующий SQL-запрос, чтобы объединить структурированные метаданные автомобиля с данными, полученными с помощью компьютерного моделирования:
CREATE OR REPLACE TABLE `model_dev.vehicle_prediction_features` AS
SELECT
  meta.auction_id,
  meta.model_year,
  meta.make,
  meta.model,
  meta.mileage,
  meta.transmission_type,
  meta.state,
  COALESCE(vision.body_style, 'Unknown') AS body_style,
  COALESCE(vision.condition, 50) AS condition,
  COALESCE(meta.color, vision.color, 'Unknown') AS color,
  COALESCE(vision.interior, 'Unknown') AS interior
FROM `model_dev.vehicle_metadata` meta
LEFT JOIN `model_dev.vehicle_vision_features` vision 
  ON meta.auction_id = vision.auction_id;
  1. Наконец, спрогнозируйте справедливую рыночную стоимость каждого текущего объявления о продаже автомобиля. Выполните следующий запрос, чтобы передать агрегированные признаки в вашу недавно обученную модель, и сохраните числовые результаты в защищенную таблицу прогнозов:
CREATE OR REPLACE TABLE `model_dev.vehicle_price_predictions` AS
SELECT 
  auction_id,
  ROUND(predicted_selling_price, 2) AS predicted_market_value
FROM ML.PREDICT(
  MODEL `model_dev.car_price_model`,
  (SELECT * FROM `model_dev.vehicle_prediction_features`)
);
  1. Теперь проверьте результаты работы модели. Выполните этот простой запрос, чтобы предварительно просмотреть прогнозируемые рыночные цены для актуальных объявлений о продаже автомобилей:
SELECT * FROM `model_dev.vehicle_price_predictions` LIMIT 5;

Прогноз XGBoost

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

6. Семантические встраивания и определение подлинности

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

  1. Мультимодальный поиск изображений: Преобразование необработанных фотографий транспортных средств в векторное пространство, позволяющее пользователям осуществлять поиск с использованием естественного языка (например, «надежный рабочий грузовик»).
  2. Встраивание текста и поиск по сходству: Преобразуйте текстовые описания автомобилей в векторные представления, чтобы сравнить активные объявления с известными профилями потенциальных мошенников или энтузиастов, используя VECTOR_SEARCH . Это вычисляет 🔍 Показатель подлинности , который покупатели видят в приложении.
  1. Во-первых, необходимо сгенерировать мультимодальные эмбеддинги для объявлений о продаже автомобилей. С помощью модели gemini-embedding-2-preview вы можете вводить как изображения, так и текст в один и тот же эмбеддинг. Хотя эта модель полностью способна обрабатывать несколько модальностей одновременно, в данном конкретном случае мы встраиваем только изображения автомобилей. Это обеспечивает работу панели «семантического поиска» для фронтенд-приложения, позволяя покупателям использовать естественный язык (например, «надежный пикап») и быстро находить подходящие объявления. Выполните этот запрос для генерации мультимодальных векторов с помощью AI.EMBED :
CREATE OR REPLACE TABLE `model_dev.vehicle_images_embedded` AS
SELECT
  auction_id,
  AI.EMBED(
    STRUCT(image_ref),
    endpoint => 'gemini-embedding-2-preview').result AS multimodal_embedding
FROM `model_dev.vehicle_multimodal`
WHERE ARRAY_LENGTH(image_ref) > 0;
  1. Далее вы изучите данные профиля риска, загруженные ранее. Обратите внимание, что они содержат как известные типы мошенничества, так и примеры законных объявлений от энтузиастов. Выполните этот запрос, чтобы просмотреть базовые профили:
SELECT profile_id, profile_type, description
FROM `model_dev.seller_risk_profiles`;
  1. Теперь вам нужно преобразовать эти исходные описания рисков в векторные представления. Вы можете использовать специализированную модель векторного представления текста ( text-embedding-005 ) для строгой оценки только что просмотренного текста. Вставьте следующий SQL-запрос и нажмите «Выполнить», чтобы встроить базовые профили:
CREATE OR REPLACE TABLE `model_dev.seller_risk_profiles_embedded` AS
SELECT 
  profile_id, 
  description AS content, 
  profile_type, 
  AI.EMBED(description, endpoint => 'text-embedding-005').result AS text_embedding
FROM `model_dev.seller_risk_profiles`;
  1. Далее сгенерируйте сопоставимые векторные представления для фактического текущего автопарка. Выполните этот запрос, чтобы преобразовать исходное HTML-описание каждого транспортного средства в векторное пространство, чтобы их можно было сравнить с базовыми профилями:
CREATE OR REPLACE TABLE `model_dev.vehicle_descriptions_embedded` AS
SELECT 
  auction_id,
  description AS content,
  AI.EMBED(description, endpoint => 'text-embedding-005').result AS text_embedding
FROM `model_dev.vehicle_metadata`
WHERE description IS NOT NULL;
  1. Наконец, выполните векторный поиск, чтобы вычислить семантическое расстояние между действующими объявлениями и базовыми профилями. Выполните следующий SQL-запрос для сопоставления. Меньшее математическое расстояние означает, что объявление очень похоже на известную группу мошеннических схем, в то время как большее расстояние указывает на законное описание.
CREATE OR REPLACE TABLE `model_dev.vehicle_authenticity_scores` AS
SELECT 
  scam_search.query.auction_id,
  CAST(
    GREATEST(0.0, LEAST(100.0, ROUND((MIN(scam_search.distance) - 0.33) / 0.12 * 100.0))) 
    AS INT64
  ) AS authenticity_score
FROM VECTOR_SEARCH(
  TABLE `model_dev.seller_risk_profiles_embedded`,
  'text_embedding',
  (
      SELECT text_embedding, auction_id 
      FROM `model_dev.vehicle_descriptions_embedded`
  ),
  top_k => 15,
  distance_type => 'COSINE'
) AS scam_search
WHERE scam_search.base.profile_type = 'scam'
GROUP BY 1;

Содержимое этой таблицы может выглядеть следующим образом:

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

Краткое содержание раздела: Вы создали мультимодальные эмбеддинги для поисковой строки на фронтенде и использовали векторный поиск непосредственно в BigQuery для сравнения необработанных HTML-текстовых объявлений с известными профилями мошеннических схем.

7. Генеративная оценка сделок

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

Заключительный этап — объединение этих сигналов ИИ в единое представление, которое станет окончательным показателем оценки сделки для фронтенд-приложения.

  1. Сначала объедините исходные метаданные с извлеченными с помощью ИИ визуальными признаками, результатами прогнозирования цен и оценками семантической достоверности. Выполните следующий SQL-запрос:
CREATE OR REPLACE TABLE `model_dev.vehicle_features_enhanced` AS
SELECT
  meta.auction_id,
  meta.item_name,
  meta.model_year,
  meta.make,
  meta.model,
  meta.mileage,
  meta.current_bid,
  meta.listing_url,
  meta.transmission_type,
  meta.description,
  meta.state,
  COALESCE(vision.body_style, 'Unknown') AS body_style,
  COALESCE(vision.condition, 50) AS condition,
  COALESCE(meta.color, vision.color, 'Unknown') AS color,
  COALESCE(vision.interior, 'Unknown') AS interior,
  COALESCE(scam.authenticity_score, 100) AS authenticity_score,
  vision.description_summary,
  prices.predicted_market_value
FROM `model_dev.vehicle_metadata` meta
LEFT JOIN `model_dev.vehicle_vision_features` vision 
  ON meta.auction_id = vision.auction_id
LEFT JOIN `model_dev.vehicle_price_predictions` prices
  ON meta.auction_id = prices.auction_id
LEFT JOIN `model_dev.vehicle_authenticity_scores` scam
  ON meta.auction_id = scam.auction_id;
  1. Далее, рассчитайте оценку сделки от 0 до 100, объединив четыре различных сигнала, полученных с помощью искусственного интеллекта. Эта формула учитывает соотношение цены, качества и риска, чтобы выявить лучшие предложения:
    • Ценовой рейтинг (40%): Сопоставляет экономию с рыночной стоимостью.
    • Оценка зрения (30%): Результаты предыдущего анализа фотографий.
    • Оценка подлинности (15%): оценка риска мошенничества.
    • Оценка состояния (15%): определяется в режиме реального времени на основе описания продавца с помощью AI.SCORE .
    Выполните следующий запрос:
CREATE OR REPLACE TABLE `model_dev.marketplace_listings` AS
WITH score_elements AS (
  SELECT 
    *,
    -- 1. SELLER DESCRIPTION SCORE (use AI.SCORE on seller description)
      AI.SCORE(
        FORMAT("Rate the vehicle condition (0-100) based ONLY on this text: '%s'", description)
    ) AS description_score,

    -- 2. PRICE SCORE
    -- Higher impact for underpricing, lower impact for overpricing.
    CAST(LEAST(100.0, GREATEST(0.0, 
      75.0 + (
        IF((predicted_market_value - current_bid) > 0, 
           ((predicted_market_value - current_bid) / NULLIF(predicted_market_value, 0)) * 250.0,
           ((predicted_market_value - current_bid) / NULLIF(predicted_market_value, 0)) * 40.0
        )
      )
    )) AS INT64) AS price_score
  FROM `model_dev.vehicle_features_enhanced`
),
final_calcs AS (
  SELECT 
    *,
    
    -- 3. Combine scores: Price (40%), Condition (30%), Description (15%), Authenticity (15%)
    ROUND(
      (
        (price_score * 0.40) + 
        (CAST(condition AS INT64) * 0.30) + 
        (COALESCE(description_score, 50) * 0.15) + 
        (CAST(authenticity_score AS INT64) * 0.15)
      )
      -- Authenticity penalty for scores below 50.
      * (IF(CAST(authenticity_score AS INT64) < 50, 0.20, 1.05)) 
    ) AS raw_score
  FROM score_elements
)
SELECT 
  * EXCEPT(raw_score),
  
  -- 4. Set floor values: low authenticity scores drop to 10; others floor at 35.
  CAST(GREATEST(
    (IF(CAST(authenticity_score AS INT64) < 50, 10, 35)), 
    LEAST(100, raw_score)
  ) AS INT64) AS deal_score
FROM final_calcs;

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

  1. Проверка подлинности : если объявление помечено как «Высокий риск» (оценка < 50), общий рейтинг сделки автоматически снижается на 80%, чтобы предотвратить продвижение подозрительных объявлений.
  2. Оптимизация «Скрытая жемчужина» : формула использует кусочно-линейную логику, чтобы агрессивно поощрять экономию, оставаясь при этом более снисходительной к наценкам, гарантируя, что даже переоцененный автомобиль в идеальном состоянии может получить оценку «Удовлетворительно».

Полученная таблица model_dev.marketplace_listings содержит такие поля, как deal_score , а также price_score и authenticity_score .

  1. Чтобы самостоятельно просмотреть рейтинги сделок, выполните следующий запрос или просто посмотрите на скриншот ниже:
SELECT item_name, model_year, authenticity_score, predicted_market_value, price_score, deal_score FROM `model_dev.marketplace_listings`

Сгенерированный рейтинг сделки

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

8. Разверните фронтенд-приложение

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

Экспорт результатов оценки ИИ во фронтенд

Фронтенд на React использует локальные JSON-данные для быстрой первоначальной загрузки страниц. Для работы маркетплейса извлеките итоговые оценки сделок из BigQuery и внедрите их обратно в проект Next.js.

  1. Убедитесь, что ваша среда готова. Если сеанс Cloud Shell завершился по истечении времени ожидания или вы перешли в другую папку, выполните следующую команду, чтобы вернуться в корневой каталог проекта и восстановить переменные среды:
cd ~/devrel-demos/data-analytics/cymbal-autos-multimodal && \
export PROJECT_ID=$(gcloud config get-value project) && \
export USER_BUCKET="cymbal-autos-${PROJECT_ID}"
  1. Запустите предоставленный скрипт на Python, чтобы запросить итоговое представление BigQuery и объединить новые оценки сделок с базовым хранилищем данных приложения:
python3 scripts/setup/08_export_frontend_data.py

Вы получите подтверждающее сообщение следующего содержания:

💾 Updated local file: app/src/data/cars.json

Разверните приложение в облаке.

После успешного обогащения данных вы можете развернуть фронтенд-приложение Next.js в общедоступном интернете с помощью Cloud Run. Оно имеет современный интерфейс с рейтингами предложений, интерактивными каруселями изображений и динамической гибридной семантической поисковой строкой, которая выполняет запросы к BigQuery в режиме реального времени.

  1. В Cloud Shell перейдите в каталог app/ вашего клонированного репозитория. Это крайне важно — оставаясь в корневом каталоге, вы завершите сборку с ошибкой.
cd app
  1. Разверните приложение в виде бессерверного контейнера с помощью Cloud Run. Команда передает PROJECT_ID в качестве переменной окружения, чтобы API Next.js знал, к какому проекту BigQuery следует обращаться:
gcloud run deploy cymbal-autos-frontend \
  --source . \
  --region us-west1 \
  --allow-unauthenticated \
  --min-instances 1 \
  --set-env-vars PROJECT_ID=$PROJECT_ID \
  --project $PROJECT_ID
  1. После завершения развертывания терминал выведет на экран защищенный URL-адрес сервиса. Он будет выглядеть примерно так:
Service URL: https://cymbal-autos-frontend-[YOUR-PROJECT-NUMBER].us-west1.run.app/

9. Изучите приложение Cymbal Autos.

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

  1. Перейдите на сайт: откройте защищенный URL-адрес сервиса, возвращенный Cloud Run.

Главная страница Cymbal Autos

  1. Выполните семантический поиск: попробуйте поискать абстрактное понятие, например, «Надежный рабочий грузовик, который может перевозить грузы и ездить по бездорожью» . Приложение Next.js преобразует ваш исходный текст в многомодальное векторное представление и запускает VECTOR_SEARCH в реальном времени в BigQuery, сопоставляя вашу идею с автомобильной экосистемой.

Строка поиска Cymbal Autos

Примечание: объявления отсортированы по семантическому сходству.

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

Результаты поиска Cymbal Autos

  1. Внимательно изучите детали: Щелкните по любому автомобилю, чтобы открыть его полное описание.
  2. Проверьте сигнал ИИ: пролистайте подробности, чтобы увидеть исходные результаты машинного обучения, полученные вами ранее в лаборатории:
    • 📈 Справедливая рыночная стоимость: базовая цена, прогнозируемая вашей моделью XGBoost.
    • ✨ Визуальное состояние: Степень физических повреждений, рассчитанная моделями Gemini.
    • 🔍 Показатель подлинности: Этот векторный показатель подлинности позволяет отличить добросовестных продавцов от потенциальных мошенников.

Рейтинги объявлений Cymbal Autos

10. Уборка

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

  1. В терминале Cloud Shell вернитесь в корневой каталог:
cd ..
  1. Запустите приведенный ниже скрипт очистки. Он очистит ваш сегмент Google Cloud Storage, удалит набор данных model_dev BigQuery, удалит подключение к BigQuery и удалит службу Cloud Run.
chmod +x scripts/cleanup/teardown.sh
./scripts/cleanup/teardown.sh

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

Поздравляем! Вы успешно создали интеллектуальную торговую площадку для автомобилей. Вы использовали BigQuery для объединения анализа неструктурированных данных, прогнозного моделирования и интеграции ИИ в единое рабочее пространство.

Что вы узнали

  • Как подключить BigQuery к неструктурированным образам Cloud Storage с помощью ObjectRef
  • Как извлечь атрибуты автомобиля из фотографий с помощью BigQuery и моделей Gemini, таких как функции AI.GENERATE и AI.CLASSIFY
  • Как прогнозировать цены на автомобили с помощью машинного обучения BigQuery
  • Как выявить потенциально мошеннические объявления, встраивая описания автомобилей и используя функцию VECTOR_SEARCH
  • Как использовать AI.SCORE для оперативной оценки неструктурированных данных и включения результатов в комплексную оценку сделок.
  • Как экспортировать данные и развернуть приложение из маркетплейса Next.js в Cloud Run

Следующие шаги