1. Введение
Массивные наборы данных содержат ценную информацию, но извлечение значимого понимания может оказаться непростой задачей. Традиционные аналитические инструменты часто не обеспечивают детальных, человечных объяснений, которые помогают нам по-настоящему понять историю наших данных. Хранилища данных содержат все больше и больше неструктурированных данных, но эти данные не всегда были доступны для получения ценной информации. Неструктурированный текст, изображения и видео содержат ценную информацию для развития вашего бизнеса. LLM предлагают новый мощный способ понять ваши данные, предоставляя объяснения, анализ настроений, обнаружение объектов и многое другое. С появлением мультимодальных моделей (и возможностью хранить объектные данные, такие как изображения и видео, в BigQuery через таблицы объектов) интеграция мощных LLM, таких как Gemini 1.0 Pro (для анализа текста) и Gemini 1.0 Pro Vision (для текста и изображений) /видеоанализ) с BigQuery может изменить способ анализа данных.
В этой лабораторной работе мы рассмотрим следующие два метода получения аналитической информации LLM из корпоративных данных и масштабирования этой аналитической информации до тысяч строк в BigQuery:
Способ 1: удаленный вызов модели
- Вызовите Gemini 1.0 Pro из BigQuery, используя
ML.GENERATE_TEXT
в запросеSELECT
. - Используйте этот подход, если модель уже доступна в качестве удаленной модели в BigQuery и вы хотите использовать ее «из коробки». Проверьте статус модели, которую вы хотите использовать, в документации BigQuery.
Способ 2: удаленная реализация функции
- Вызов облачной функции, которая реализует вызов Gemini 1.0 Pro Vision, представленный как удаленная функция в BigQuery .
- Используйте этот подход, если модель, которую вы хотите использовать, либо недоступна в готовом виде в качестве удаленной модели , либо вам требуется большая гибкость и настройка в вашем сценарии использования.
Что ты построишь
- Для метода удаленного вызова модели вы создадите сумматор местоположений для набора данных интернет-архивных книг (который общедоступен в BigQuery), вызвав удаленную модель для Gemini 1.0 Pro в конструкции ML.GENERATE_TEXT в BigQuery.
- Для метода реализации удаленной функции вы создадите средство проверки изображений для проверки тестовых изображений на соответствие базовому образу. Для этого вы создадите набор данных, содержащий снимки экрана тестовых изображений, во внешней таблице и попросите Gemini 1.0 Pro Vision проверить его на соответствие базовому изображению. Затем вы создадите облачную функцию Java, которая реализует вызов Gemini Pro Vision, и вызовете ее как удаленную функцию в BigQuery.
Примечание:
Возможно, в BigQuery доступно больше моделей Vertex AI Generative AI в виде удаленных моделей. Это означает, что вы можете получить доступ к этим моделям с помощью готовой конструкции ML.GENERATE_TEXT
из BigQuery. Однако даже в случае доступности удаленной модели у вас всегда есть возможность создать расширенные настройки для вашего варианта использования с помощью облачных функций, а затем получить доступ к этим моделям как удаленным функциям из BigQuery.
Почему BigQuery?
BigQuery — это бессерверное мультиоблачное хранилище данных, которое может масштабироваться от байтов до петабайтов с минимальными эксплуатационными расходами и, следовательно, является отличным выбором для хранения данных обучения машинного обучения. Используя встроенные возможности машинного обучения BigQuery (BQML) и аналитику, вы можете создавать прогнозы без кода, используя только запросы SQL. Кроме того, вы можете получить доступ к данным из внешних источников с помощью федеративных запросов, что устраняет необходимость в сложных конвейерах ETL.
BigQuery — это полностью управляемое облачное хранилище данных, которое помогает пользователям анализировать структурированные, полуструктурированные и неструктурированные данные.
2. Требования
3. Прежде чем начать
- В Google Cloud Console на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего облачного проекта включена оплата. Узнайте, как проверить, включена ли оплата в проекте .
- Вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud, в которую предварительно загружен bq. Нажмите «Активировать Cloud Shell» в верхней части консоли Google Cloud.
- После подключения к Cloud Shell вы проверяете, что вы уже прошли аутентификацию и что для проекта установлен идентификатор вашего проекта, используя следующую команду:
gcloud auth list
- Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте.
gcloud config list project
- Если ваш проект не установлен, используйте следующую команду, чтобы установить его:
gcloud config set project <YOUR_PROJECT_ID>
- Перейдите на Gemini for Google Cloud Marketplace, чтобы включить API. Вы также можете использовать следующую команду в терминале Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Убедитесь, что включены следующие API:
- Большой запрос
- Подключение к BigQuery
- Облачная функция
- Облачный бег
- Вертексный ИИ
- Облачная сборка
- API облачного хранилища
Альтернативой использованию команды gcloud является переход через консоль по этой ссылке .
Обратитесь к документации по командам и использованию gcloud.
4. Создайте набор данных BigQuery и внешнее подключение.
Начнем с создания набора данных и подключения к облачному ресурсу.
Набор данных в BigQuery — это контейнер для всех таблиц и объектов вашего приложения.
Чтобы создать набор данных , выполните следующие действия:
- Перейдите на страницу BigQuery в консоли Google Cloud.
- На панели «Проводник» выберите проект, в котором вы хотите создать набор данных.
- Разверните параметр «Действия» (значок вертикального многоточия) и нажмите « Создать набор данных» .
- Нажмите Создать набор данных .
- Введите
gemini_bq_fn
в поле «Идентификатор набора данных» . - Установите тип местоположения «
Multi-region
и примите значение по умолчанию —US(multiple regions in United States.
- Нажмите Создать набор данных .
- Убедитесь, что набор данных создан и указан под идентификатором вашего проекта на панели Проводника .
Для взаимодействия с вашей облачной функцией требуется подключение к BigQuery. Чтобы создать удаленную функцию, необходимо создать соединение с BigQuery. В этой лаборатории кода мы будем использовать соединение BigLake для доступа к модели из BigQuery через функцию Cloud. Соединения BigLake помогают подключить внешний источник данных, сохраняя при этом детальный контроль доступа и безопасность BigQuery, которыми в нашем случае является API Vertex AI Gemini Pro.
Чтобы создать соединение BigLake , выполните следующие действия:
- Нажмите «Добавить» на панели «Проводник» страницы BigQuery.
- Щелкните Подключения к внешним источникам данных .
- В меню «Тип подключения» выберите «Удаленные модели Vertex AI», «Удаленные функции» и «BigLake (Облачный ресурс»).
- В поле «Идентификатор подключения» введите имя подключения как
gemini-bq-conn
. - Установите тип местоположения «
Multi-region
и примите значение по умолчанию —US(multiple regions in United States.
- Нажмите Создать соединение .
- Нажмите Перейти к подключению, а затем скопируйте идентификатор учетной записи службы в области сведений о подключении .
- Перейдите на страницу IAM и администратора и нажмите «Предоставить доступ» .
- Вставьте идентификатор сервисной учетной записи в поле Новые принципы .
- Выберите роль
Vertex AI user
из списка ролей и нажмите «Сохранить» .
Теперь вы успешно создали набор данных и соединение с BigQuery. Далее вы выполните шаги, необходимые для удаленного вызова модели.
5. Вариант использования № 1. Удаленный вызов модели: настройка удаленного вызова модели.
Теперь, когда вы создали свой набор данных и подключение, давайте создадим модель в BigQuery на основе базовой модели Vertex AI Gemini Pro. В конце этого упражнения ваше приложение LLM будет запущено и будет работать только с запросами SQL.
Шаг 1. Создайте таблицу BigQuery , содержащую входные данные для удаленной модели.
Создайте в своем наборе данных таблицу с именем books
, которая может содержать около 50 записей из таблицы bigquery-public-data.gdelt_internetarchivebooks.1905
в наборе данных Internet Archive Books, полученном BigQuery для публичного использования.
Для этого выполните следующий оператор DDL (язык определения данных) на панели редактора BigQuery SQL:
create or replace table gemini_bq_fn.books as (
select *
from
bigquery-public-data.gdelt_internetarchivebooks.1905 limit 50)
Шаг 2. Создайте модель BigQuery.
Создайте модель в своем наборе данных. Для этого запустите следующий DDL на панели редактора BigQuery SQL:
CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');
Обратите внимание, что модель создана с возможностью просмотра модели.
Шаг 3. Проверьте свое новое приложение генеративного искусственного интеллекта.
Используйте функцию ML.GENERATE_TEXT
в запросе SELECT
, чтобы отправить запрос к удаленной модели.
SELECT ml_generate_text_llm_result as Gemini_Response, prompt as Prompt
FROM ML.GENERATE_TEXT(MODEL `gemini_bq_fn.gemini_remote_model`,
(select 'You are a text summarizer and standardizer. From the following text that contains address locations, standardize and print one standardized, consolidated address. You cannot return empty because you know how to pick up sensible data from the text in this field: ' ||
substring(locations, 0, 200) as prompt
from `gemini_bq_fn.books`),
STRUCT(
TRUE AS flatten_json_output));
Вы должны увидеть следующий результат:
Поздравляем! Вы успешно продемонстрировали, как использовать удаленную модель (на основе модели gemini-pro
) с функцией ML.GENERATE_TEXT
для анализа текстовых данных в таблице BigQuery.
Теперь давайте попробуем другую модель Vertex AI с использованием удаленных функций BigQuery. Допустим, вы хотите добавить больше возможностей настройки и гибкости в удаленное использование модели в BigQuery. Поддерживаемые модели перечислены в документации BigQuery.
6. Вариант использования № 2. Удаленная реализация функции: настройка удаленной реализации функции.
В этом упражнении вы создадите функцию в BigQuery на основе облачной функции Java, которая реализует базовую модель Gemini 1.0 Pro Vision. Сначала вы создадите и развернете облачную функцию Java для сравнения изображений с использованием модели Gemini 1.0 Pro Vision, а затем создадите удаленную функцию в BigQuery, которая вызывает развернутую облачную функцию. Помните, что ту же процедуру можно выполнить для любого удаленного выполнения функции в BigQuery.
Итак, начнем!
Шаг 1. Создайте облачную функцию Java
Вы создадите облачную функцию второго поколения на Java для проверки тестовых изображений на соответствие базовому изображению. Базовое изображение хранится в наборе данных, содержащем скриншоты тестовых изображений, во внешней таблице BigQuery. Вы проверите изображения с помощью модели Gemini Pro Vision (Java SDK). Затем вы развернете облачную функцию Java в конечной точке REST.
Выполните следующие действия:
- Запустите редактор Cloud Shell .
- Если вы используете устаревший редактор, нажмите «Попробовать новый редактор» .
- В строке состояния нажмите Cloud Code — Войти .
- Если будет предложено разрешить редактору Cloud Shell выполнять вызовы Google Cloud API, нажмите «Авторизовать» . Следуйте инструкциям, чтобы войти в свою учетную запись Google. Теперь вы подключены к Google Cloud.
- Если вы не видите свой проект в строке состояния Cloud Code, нажмите Cloud Code — Войти > Выбрать проект Google Cloud. Выберите проект Google Cloud, в котором вы хотите создать свои облачные функции. Проект загружается и становится активным в редакторе Cloud Shell.
- В строке состояния Cloud Code щелкните имя активного проекта. В появившемся меню быстрого выбора выберите «Новое приложение» .
- В диалоговом окне «Создать новое приложение» выберите приложение «Облачные функции».
- Выберите Java: Hello World, когда будет предложено выбрать шаблон.
- Введите
Gemini-BQ-Function
в качестве имени вашего проекта в пути к проекту. Структура проекта появится в новом представлении редактора Cloud Shell.
- Добавьте необходимые зависимости в тег
<dependencies>... </dependencies>
или скопируйте зависимости из примера файла pom.xml . - Измените имя вашего класса с
HelloWorld.java
на более значимое. Допустим,GeminiBigQueryFunction.java
. Переименуйте пакет соответствующим образом. - Замените код-заполнитель в файле GeminiBigQueryFunction.Java примером кода , представленным в репозитории GitHub . Обязательно замените переменную <YOUR_PROJECT_ID> идентификатором вашего проекта в примере кода.
- Перейдите в терминал Cloud Shell. Убедитесь, что вы находитесь в каталоге своего проекта. Если нет, перейдите в каталог проекта, выполнив следующую команду:
cd Gemini-BQ-Function
- Выполните следующий оператор, чтобы создать и развернуть облачную функцию:
gcloud functions deploy gemini-bq-fn --gen2 --runtime java17 --trigger-http --entry-point cloudcode.helloworld.GeminiBigQueryFunction --allow-unauthenticated --source .
Замените точку входа в команде точкой входа вашей функции. Выходные данные представляют собой URL-адрес REST в следующем формате:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-bq-fn
- Проверьте эту облачную функцию, выполнив следующую команду из терминала:
gcloud functions call gemini-bq-fn --region=us-central1 --gen2 --data '{"calls":[["https://storage.googleapis.com/img_public_test/image_validator/baseline/1.JPG", "https://storage.googleapis.com/img_public_test/image_validator/test/2.JPG", "PROMPT_ABOUT_THE_IMAGES_TO_GEMINI"]]}'
Ответ на запрос случайной выборки:
Потрясающий! Общая облачная функция для реализации модели Gemini Pro Vision готова. Давайте использовать эту конечную точку непосредственно для данных BigQuery из удаленной функции BigQuery.
Шаг 2. Создайте таблицу объектов BigQuery и удаленную функцию.
Предварительное условие
Для этой части упражнения вам понадобится корзина Cloud Storage. Выполните следующие действия, чтобы создать корзину Cloud Storage:
- Чтобы создать корзину, перейдите в консоль Cloud Storage и нажмите «Создать» .
- Введите
demo-bq-gemini-public-image
в качестве имени корзины и нажмите « Создать» . - Снимите
Enforce public access prevention on this bucket
. Несмотря на то, что в этом упражнении вы создаете этот сегмент для общего доступа, мы рекомендуем вам запретить общий доступ и предоставить разрешения определенным учетным записям служб, как того требуют сценарии использования вашего предприятия. - После создания сегмента перейдите на вкладку «Разрешения» , чтобы просмотреть и изменить разрешения.
- Чтобы добавить участников, нажмите «Предоставить доступ». Укажите идентификатор учетной записи службы, чтобы предоставить разрешения определенной учетной записи, или укажите
allUsers
, чтобы предоставить общий доступ к вашему сегменту. - Выберите роль
Storage Object Viewer
и нажмите « Сохранить» . При появлении запроса разрешите общий доступ. - Перейдите на вкладку «Объекты» и загрузите базовые изображения и тестовые изображения для сравнения. Для этой лаборатории кода вы можете загрузить следующие общедоступные объекты: baseline.JPG , TEST1.JPG и TEST2.JPG .
Создайте таблицу объектов BigQuery.
Создайте таблицу внешних объектов из BigQuery, чтобы получить доступ к неструктурированным данным в сегменте, используя соединение и набор данных, который вы создали ранее. Для этого выполните следующий оператор DDL (язык определения данных) на панели редактора запросов BigQuery:
CREATE OR REPLACE EXTERNAL TABLE `gemini_bq_fn.image_validation`
WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(object_metadata="SIMPLE", uris=["gs://demo-bq-gemini-public-image/*.JPG"]);
Убедитесь, что в вашем наборе данных создана новая таблица объектов с именем image_validation .
Создайте удаленную функцию BigQuery
Создайте удаленную функцию в BigQuery для вызова облачной функции Java, реализующей модель Gemini Pro Vision. Создайте это в том же наборе данных. Для этого запустите следующий DDL из панели редактора SQL консоли BigQuery:
CREATE OR REPLACE FUNCTION `gemini_bq_fn.FN_IMAGE_VALIDATE` (baseline STRING, test STRING, prompt STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (
endpoint = 'https://us-central1-<your project id>.cloudfunctions.net/gemini-bq-fn',
max_batching_rows = 1
);
URL-адрес конечной точки — это URL-адрес REST, который был возвращен ранее в этом упражнении. Это создаст удаленную функцию в BigQuery. В приведенном выше DDL есть три параметра. Первые два параметра — это URL-адреса изображений, хранящихся в таблице объектов, созданной на предыдущем шаге. Последний параметр — это подсказка к модели (Gemini Pro Vision). Вы можете обратиться к коду облачных функций Java, который используется для анализа этой подписи:
Gson().fromJson(request.getReader(), JsonObject.class);
JsonArray calls_array = requestJson.getAsJsonArray("calls");
JsonArray calls = (JsonArray) calls_array.get(0);
String baseline_url = calls.get(0).toString().replace("\"", "");
String test_url = calls.get(1).toString().replace("\"", "");
String prompt_string = calls.get(2).toString();
Вызов Gemini из BigQuery
Используйте удаленную функцию в запросе SELECT
, чтобы протестировать функцию проверки изображений по запросу.
select gemini_bq_fn.FN_IMAGE_VALIDATE(
'https://storage.googleapis.com/demo-bq-gemini-public-image/Baseline.JPG',
REPLACE(uri, 'gs://', 'https://storage.googleapis.com/') ,
'You are an expert image validator who can respond with JSON result. Find 2 images here. The first one is the reference image. The second image is the test image. Compare the second image to see if the second image is similar to the first in terms of the text present in the image. Respond ONLY in JSON Format with 3 attributes namely SIMILARITY which is a \"YES\" or \"NO\", SIMILARITY_SCORE which is a percentage and DIFFERENCE_COMMENT which is a string.' ) as IMAGE_VALIDATION_RESULT
from `gemini_bq_fn.image_validation`
where uri like '%TEST1%';
Попробуйте выполнить приведенный выше запрос с объектными файлами TEST1 и TEST2 . Вы увидите результат, аналогичный следующему:
Вот изображения для вашей справки:
Базовое изображение
Тестовое изображение
Обратите внимание, что оба изображения похожи в том, что они имеют представление облачной консоли Duet AI, но текст в обоих отличается, что обусловлено моделью в формате JSON.
Таким образом, вы успешно протестировали реализацию удаленной функции.
7. Преимущества и варианты использования
Давайте рассмотрим некоторые преимущества интеграции BigQuery и Gemini для анализа структурированных и неструктурированных данных.
- Применение GenAI к вашим данным: больше не нужно перемещать данные, дублировать их и усложнять. Вы можете анализировать данные и получать ценную информацию в одной и той же среде BigQuery.
- Расширенная аналитика: объяснения Gemini на естественном языке добавляют новый уровень понимания ваших данных, и вы можете добиться этого с помощью запросов SQL.
- Масштабируемость: это решение легко справляется с большими наборами данных и сложным анализом, не требуя большого количества кода.
Применений для этого множество. Рассмотрите сценарии в сфере финансов (анализ рыночных тенденций), розничной торговли (настроения клиентов), здравоохранения (сводки медицинских отчетов) и т. д., где ваши аналитические и бизнес-команды могут реализовать их с относительно небольшими усилиями, ресурсами, знакомым языком и выбранным инструментом.
8. Очистка
Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом посте, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу «Управление ресурсами» .
- В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить» .
- В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить работу» , чтобы удалить проект.
- Если вы хотите сохранить свой проект, пропустите вышеуказанные шаги и удалите функцию облака, перейдя к функциям облака и в списке функций отметьте ту, которую хотите удалить, и нажмите «Удалить» .
9. Поздравления
Поздравляю. Благодаря интегрированным в BigQuery моделям Gemini вы больше не просто анализируете свои данные — вы рассказываете истории о данных. Вы можете создавать скрытые повествования в своих наборах данных и менять способ понимания своих идей. Начните экспериментировать! Примените этот метод к своим собственным наборам данных и откройте для себя истории в своих данных. Поскольку BigQuery поддерживает неструктурированные данные в объектных таблицах ( внешние таблицы ), попробуйте использовать Gemini Pro Vision для создания генеративного анализа данных изображений . Более подробные инструкции см. в документации по Vertex AI , удаленным функциям BigQuery и облачным функциям . Вот репозиторий GitHub для этого проекта. Дайте нам знать, что вы создадите с помощью этого обучения!