Превратите скрытые данные в структурированное золото

1. Обзор

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

Уже нет.

В этой лабораторной работе я покажу вам, как преобразовать 400 неструктурированных PDF-файлов — содержащих текст, таблицы и изображения — в четко структурированные таблицы BigQuery с автоматически определяемыми связями между ними. И мы сделаем это за считанные минуты, используя BigQuery Knowledge Catalog и Dataplex.

Что вы построите

Чтобы это выглядело правдоподобно, давайте рассмотрим вымышленный бизнес: быстрорастущую франшизу по продаже замороженного йогурта.

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

Вот кошмарный сценарий: покупатель спрашивает: «Меня очень заинтересовал ваш замороженный йогурт Midnight Swirl. Есть ли в нем какие-либо аллергены?»

Для ответа на этот вопрос вашей системе, как правило, потребуется:

  1. Найдите PDF-файл с рецептом "Полуночного вихря".
  2. Внимательно изучите состав (например, «Какао-порошок», «Молочная основа», «Эмульгатор X»).
  3. Просмотрите десятки PDF-файлов от поставщиков, чтобы найти технические характеристики конкретных ингредиентов.
  4. Проверьте информационные листы поставщиков на наличие скрытых аллергенов, связанных с этими ингредиентами.

Попытка создать ИИ-агента, который будет делать это на лету, считывая 400 необработанных PDF-файлов во время выполнения, — это медленно, дорого и чревато галлюцинациями. Вместо этого мы будем использовать семантический вывод, чтобы сначала извлечь все это в реляционную базу данных, что сделает нашего будущего ИИ-агента молниеносно быстрым и на 100% основанным на фактических данных SQL.

Начнём строительство!

2381f1453211387d.png

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

  • Как настроить хранилище Cloud Storage для исходных файлов (PDF-файлов)
  • Как настроить и запустить задачу Datascan и семантический вывод в Knowledge Catalog для извлечения данных из исходных PDF-файлов, семантического вывода связей и контекста и сохранения их в BigQuery.
  • Как использовать BigQuery Agents для общения с недавно созданным набором данных

Требования

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

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

Создать проект

  1. В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud.
  2. Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
  1. Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud. Нажмите «Активировать Cloud Shell» в верхней части консоли Google Cloud.

Изображение кнопки «Активировать Cloud Shell»

  1. После подключения к Cloud Shell необходимо проверить, прошли ли вы аутентификацию и установлен ли идентификатор вашего проекта, используя следующую команду:
gcloud auth list
  1. Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте.
gcloud config list project
  1. Если вы хотите пройти аутентификацию
gcloud auth login
  1. Если ваш проект не задан, используйте следующую команду для его установки:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project <YOUR_PROJECT_ID>
  1. Включите необходимые API: Выполните эту команду, чтобы включить все необходимые API:
gcloud services enable \
    dataplex.googleapis.com \
    datacatalog.googleapis.com \
    discoveryengine.googleapis.com \
    bigqueryconnection.googleapis.com \
    bigquery.googleapis.com \
    aiplatform.googleapis.com \
    cloudresourcemanager.googleapis.com \
    serviceusage.googleapis.com \
    storage.googleapis.com

Подводные камни и устранение неполадок

Синдром «Проекта-призрака»

Вы выполнили команду gcloud config set project , но в консоли отображается другой проект. Проверьте идентификатор проекта в выпадающем списке в левом верхнем углу!

Баррикада Биллинга

Вы активировали проект, но забыли указать платежный аккаунт. AlloyDB — высокопроизводительный движок; он не запустится, если «топливо» (платежный бак) пуст.

Задержка распространения API

Вы нажали «Включить API», но в командной строке по-прежнему отображается сообщение Service Not Enabled . Подождите 60 секунд. Облаку нужно время, чтобы активировать свои нейроны.

Квота Квагс

Если вы используете совершенно новую пробную учетную запись, вы можете столкнуться с региональной квотой на экземпляры AlloyDB. Если us-central1 не работает, попробуйте us-east1 .

«Скрытый» сервисный агент

Иногда агенту службы AlloyDB автоматически не предоставляется роль aiplatform.user . Если ваши SQL-запросы не могут взаимодействовать с Gemini в дальнейшем, обычно в этом причина.

3. Настройка хранилища Google Cloud Storage.

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

Прежде чем начать:

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

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

git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/next-26-keynotes.git

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

cd next-26-keynotes

Загрузите папку data-cloud-demo.

git sparse-checkout set genkey/data-cloud-demo

После завершения оформления заказа перейдите в папку data-cloud-demo и распакуйте ZIP-файлы, чтобы получить доступ к ресурсам Codelab.

Создайте хранилище и загрузите PDF-файлы с рецептами и информацией о поставщиках замороженного йогурта.

  1. В консоли Google Cloud перейдите на страницу «Корзины облачного хранилища» .
  2. Нажмите «Создать».
  3. На странице «Создать корзину» введите информацию о вашей корзине. После каждого из следующих шагов нажимайте «Продолжить», чтобы перейти к следующему шагу:
  4. В разделе «Начало работы» введите имя хранилища. Например: froyo_data
  5. В разделе «Выберите место хранения данных» выберите «Регион», а затем введите свой регион. us-central1
  6. В разделе «Выберите способ управления доступом к объектам» снимите флажок «Применять публичную защиту доступа к этому сегменту».
  7. Нажмите «Создать».
  8. В списке сегментов щелкните по созданному вами сегменту.
  9. На вкладке «Объекты» для корзины нажмите «Загрузить», а затем «Загрузить папки».
  10. Выберите папку с рецептами , которую вы распаковали в разделе «Перед началом работы» этого практического задания.
  11. Нажмите «Загрузить».
  12. Повторите процесс загрузки для папки поставщиков .

После загрузки структура вашего хранилища должна выглядеть следующим образом (независимо от имени хранилища):

596b8acb481016b7.png

4. Настройка подключения к BigQuery

Создайте подключение к облачным ресурсам. Это создаст уникальную учетную запись службы, которая будет выступать в качестве «идентификационной карты» BigQuery для доступа к внешним файлам.

  • Перейдите на страницу BigQuery .
  • В левой панели щелкните «Проводник». Если левая панель не отображается, щелкните «Развернуть левую панель», чтобы открыть ее.
  • В панели «Проводник» разверните название проекта, а затем щелкните «Подключения».
  • На странице «Подключения» нажмите «Создать подключение».
  • В поле «Тип подключения» выберите модели удаленного доступа Vertex AI, функции удаленного доступа, BigLake и Spanner (облачный ресурс).
  • В поле «Идентификатор подключения» введите имя идентификатора подключения:
  • bq-connection. Обязательно запишите этот ID, так как он понадобится вам при настройке сканирования данных позже в этом практическом задании.
  • Установите тип местоположения на «Регион», а затем выберите регион. Например, us-central1. Соединение должно находиться в том же регионе, что и другие ваши ресурсы, такие как наборы данных.
  • Нажмите «Создать соединение».
  • Нажмите «Перейти к подключению».
  • В панели «Информация о подключении» скопируйте идентификатор учетной записи службы для использования на следующем шаге. Учетная запись службы выглядит примерно так: bqcx-**********-qn3a@gcp-sa-bigquery-condel.iam.gserviceaccount.com.

5. Настройка прав доступа

  1. Предоставьте необходимые разрешения подключению BigQuery для доступа к объектам Cloud Storage и каталогу знаний.

Перейдите на страницу IAM и администрирование, в разделе «Просмотр по субъектам» нажмите кнопку «Предоставить доступ», добавьте субъект, вставив учетную запись службы, скопированную на предыдущем шаге. В разделе «Роли» добавьте имена следующих ролей по очереди и сохраните:

  • roles/storage.objectUser
  • roles/storage.objectViewer
  • roles/bigquery.user
  • roles/bigquery.dataEditor
  • roles/aiplatform.viewer
  • roles/agentplatform.user
  • roles/store.admin
  • roles/dataproc.serviceAgent
  • roles/dataplex.discoveryPublishingServiceAgent
  • roles/dataplex.serviceAgent
  • roles/dataplex.securityAdmin
  1. Предоставьте учетной записи службы Dataplex права доступа к облачному хранилищу.

Перейдите на страницу IAM и администрирование, в разделе «Просмотр по субъектам» нажмите кнопку «Предоставить доступ» и добавьте субъект, введя Dataplex в текстовое поле «Новый субъект». Из списка, который автоматически заполняется, выберите субъект учетной записи службы Dataplex, который выглядит примерно так:

service-*********@ gcp-sa-dataplex.iam.gserviceaccount.com

Предоставьте этой учетной записи службы следующие права:

  • roles/storage.objectUser
  • roles/storage.objectViewer
  • roles/store.viewer
  • roles/dataplex.discoveryBigLakePublishingServiceAgentroles/storage.objectUser
  • roles/storage.objectViewer
  • roles/store.viewer
  • roles/dataplex.discoveryBigLakePublishingServiceAgentroles/storage.objectUser
  • roles/storage.objectViewer
  • roles/store.viewer
  • roles/dataplex.discoveryBigLakePublishingServiceAgent

6. Настройка каталога знаний

Создайте каталог знаний для объединения неструктурированных данных и автоматизации поиска неструктурированных файлов (таких как PDF-рецепты и поставщики PDF-файлов).

  1. Создайте DataScan с помощью curl.

Вы также можете создать это задание из консоли, но в этом разделе мы создадим сканирование для сегмента Cloud Storage, добавив datascan_ID и указав путь к наборам данных BigQuery. После этого Knowledge Catalog автоматически создаст записи для ваших PDF-файлов в BigQuery.

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

# 1. Set your variables
PROJECT_ID="<PROJECT_ID>"
REGION="<REGION>"
ENV_SUFFIX="stg1"
DATASCAN_ID="froyo-data-${ENV_SUFFIX}"
BUCKET_NAME="<BUCKET_NAME>"

# 2. Set this to the Name of the connection you created in Step 7
CONNECTION_ID="<CONNECTION_ID_NAME>"

# 3. Define the API Endpoint
DATAPLEX_API="dataplex.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}"

# 4. Create the DataScan via CURL
echo "Creating Dataplex DataScan: ${DATASCAN_ID}..."

curl -X POST "https://$DATAPLEX_API/dataScans?dataScanId=${DATASCAN_ID}" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"data": {
   "resource": "//storage.googleapis.com/projects/'"${PROJECT_ID}"'/buckets/'"${BUCKET_NAME}"'"
   },
"executionSpec": {
   "trigger": {
      "on_demand": {}
   }
},
"dataDiscoverySpec": {
   "bigqueryPublishingConfig": {
      "tableType": "BIGLAKE",
      "connection": "projects/'"${PROJECT_ID}"'/locations/'"${REGION}"'/connections/'"${CONNECTION_ID}"'"
   },
   "storageConfig": {
      "unstructuredDataOptions": {
      "entity_inference_enabled": true
      }
   }
   }
}'

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

  1. Через минуту-две в консоли Google Cloud перейдите на страницу управления метаданными .
  2. На вкладке «Обнаружение облачного хранилища» щелкните имя элемента сканирования (помните, что не следует нажимать на ссылку «Источник», которая может показаться заманчивой, но откроет хранилище).

31afb1dc3caba5f6.png

  1. Важный шаг:

Отредактируйте задание и убедитесь, что установлен флажок «Включить семантический вывод». Если нет, установите его, введите идентификатор проекта и регион, а затем нажмите «Сохранить».

c021927bf80fe204.png

После этого вы можете либо выполнить следующую команду в терминале Cloud Shell, либо нажать кнопку «Выполнить сейчас» на странице обнаружения облачного хранилища:

gcloud dataplex datascans run $DATASCAN_ID --location=$REGION
  1. Сканирование займет некоторое время. После завершения проверьте наличие опубликованного набора данных. Чтобы проверить статус задания, перейдите на страницу управления метаданными , на вкладке «Обнаружение в облачном хранилище» и щелкните имя сканирования последнего запуска. Вы должны увидеть опубликованный набор данных, как показано ниже:

d0cd6ae1edb81ce9.png

Примечание: Если на этапе сканирования возникнут ошибки, просто подождите немного и повторите попытку (на создание задания и его выполнение потребуется несколько минут).

Вы можете просмотреть таблицу в BigQuery, щелкнув по ней и перейдя к набору данных froyo_data . Щелкните по идентификатору таблицы в BigQuery и выполните следующий запрос на вкладке «Редактор запросов»:

SELECT count(*) FROM `agent-data-cloud.froyo_data.froyo_data` LIMIT 1000;

В результате получается код ошибки 400 (если нет, можно вернуться и запустить задание Datascan заново).

7. Извлечение семантических данных

Отлично!! Теперь давайте извлечем информацию из этих неструктурированных объектов с помощью каталога знаний.

Мы воспользуемся функцией Insights для генерации SQL-запросов с целью извлечения структурированных данных из неструктурированной таблицы.

  1. В консоли Google Cloud перейдите на страницу поиска по каталогу знаний .
  2. Найдите таблицу набора данных, для которой вы хотите просмотреть аналитические данные. В строке поиска введите имя набора данных/таблицы из предыдущего шага: "froyo_data" и нажмите Enter.
  3. В списке результатов щелкните по записи "ТАБЛИЦА" (а не по записи "Набор данных").
  4. Вы должны увидеть вкладку «АНАЛИТИКА» . Нажмите на неё (если требуется включить какой-либо API, следуйте инструкциям и просто включите API).

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

  1. На вкладке «АНАЛИТИКА» вы увидите выпадающее меню «ИЗВЛЕЧЕНИЕ». Нажмите на него и выберите опцию «Извлечение с помощью SQL».

89809b34c610569d.png

В появившемся диалоговом окне « Извлечение с помощью SQL » укажите в качестве целевого набора данных тот, который вы видели в результатах задания Datascan. Начните вводить его имя, и оно должно отобразиться в автозаполнении. Нажмите кнопку « Извлечь ». В качестве альтернативы вы можете создать новый набор данных и извлечь его оттуда.

Это должно открыть редактор запросов BigQuery с открытой вкладкой, заполненной извлеченными SQL-запросами из результатов сканирования данных.

8. Проверка SQL-запросов и создание схемы.

Если сгенерированный запрос кажется корректным и семантически релевантным вашим неструктурированным данным, смело запускайте его, нажав кнопку «Запустить» в редакторе запросов. Создание схемы, необходимой для структурированного хранения ваших неструктурированных медиафайлов, займет несколько минут.

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

6e65906240a9a8be.png

Отлично!!! Было здорово, что мы так быстро справились со всеми этими задачами, связанными с базами данных. Теперь настало время для решающего испытания!

9. Главное испытание!!!

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

Вот мой вопрос от пользователя:

I'm really interested in your Midnight Swirl froyo. Are there any allergens in it?

Обычно при обычном поиске или поиске с использованием LLM-запроса результат будет "Ноль ингредиентов". Но мы разработали полноценную систему семантического вывода, преобразующую все наши неструктурированные медиафайлы в структурированные данные. Итак, вот простой SQL-запрос, который извлечет эту информацию:

SELECT p.product_name, i.ingredient_name, a.allergen_name, category, stability
FROM froyo_data.consistsof c
INNER JOIN froyo_data.product p
  ON c.product_id = p.product_id
INNER JOIN froyo_data.ingredient i
  ON c.ingredient_id = i.ingredient_name
LEFT OUTER JOIN froyo_data.containsallergen a
  ON i.ingredient_id = a.ingredient_id
WHERE
  UPPER(p.product_name) LIKE '%MIDNIGHT%SWIRL%'
  AND allergen_name IS NOT NULL;

Ура! Посмотрите на результат:

f582d55814a23e8.png

10. Уборка

После завершения этой лабораторной работы не забудьте удалить задание сканирования и таблицы BigQuery, которые оно создало.

Перейдите по ссылке https://console.cloud.google.com/bigquery/governance/metadata-curation/cloud-storage-discovery . Выберите задание, которое хотите удалить, щелкнув по вертикальным многоточиям рядом с ним, и нажмите УДАЛИТЬ.

9fcbbfa1a9ccba6d.png

Это должно помочь завершить работу.

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

Наша реализация успешно выявила скрытый аллерген. Больше никаких скрытых данных, друзья!!! Во второй части мы объединим эти данные BigQuery в транзакционной системе с AlloyDB, чтобы унифицировать потребности в данных для нашего агентского приложения.