Аналитика книжной полки: используйте Gemini для создания приложений SQL с помощью BigQuery и генеративного искусственного интеллекта

1. Введение

Любите ли вы погружаться в чтение, но вас пугает огромное количество вариантов? Представьте себе приложение на основе искусственного интеллекта, которое не только рекомендует идеальную книгу, но и предлагает краткое описание в зависимости от выбранного вами жанра, позволяя заглянуть в суть произведения. В этом практическом занятии я покажу вам, как создать такое приложение с помощью BigQuery, Gemini и облачных функций на базе Gemini.

Обзор проекта

В основе нашего сценария использования лежат следующие 4 ключевых компонента:

  • База данных книг: Обширный общедоступный набор данных книг из интернет-архивов BigQuery послужит нашим всеобъемлющим каталогом книг.
  • Механизм создания кратких обзоров на основе ИИ: Google Cloud Functions, оснащенный языковой моделью Gemini 1.0 Pro, будет генерировать информативные обзоры, адаптированные к запросам пользователей.
  • Интеграция с BigQuery: удаленная функция в BigQuery, которая вызывает нашу облачную функцию для предоставления по запросу кратких обзоров книг и тематических подборок.
  • Пользовательский интерфейс: Веб-приложение, размещенное на платформе Cloud Run, которое предоставит пользователям возможность просматривать результаты в веб-формате.

Мы разделим реализацию на 3 практических занятия:

Практическое задание 1: Используйте Gemini для создания облачной функции Java для приложения Gemini.

Практическое занятие 2: Используйте Gemini для создания SQL-приложений с помощью BigQuery и генеративного ИИ.

Практическое задание 3: Используйте Gemini для создания веб-приложения на Java Spring Boot, взаимодействующего с BigQuery.

2. Используйте Gemini для создания SQL-приложений с помощью BigQuery и генеративного ИИ.

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

Вы создадите

  • Удалённая модель в BigQuery, которая вызывает конечную точку Vertex AI text-bison-32k для определения жанра (или темы) книги по списку ключевых слов в таблице, разделённых символом ";".
  • Удалённая функция в BigQuery, которая будет удалённо вызывать развёрнутую облачную функцию генеративного ИИ.
  • Используйте удаленную модель и функцию для обобщения темы и текста книги с помощью SQL-запросов и записи результатов в новую таблицу в наборе данных «Книжная полка».
  • Вы выполните эти шаги с помощью Gemini.

3. Требования

Создайте свой проект

Вы можете пропустить следующие шаги, если у вас уже активирован платежный аккаунт и создан проект с использованием ссылки , указанной в условном шаге выше.

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

Активировать Cloud Shell

  1. Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud и поставляемую с предустановленным пакетом bq :

В консоли Cloud Console нажмите кнопку «Активировать Cloud Shell» в правом верхнем углу: 6757b2fb50ddcc2d.png

  1. После подключения к Cloud Shell вы увидите, что ваша аутентификация пройдена и проект уже настроен на ваш идентификатор проекта. Для подтверждения аутентификации выполните следующую команду в Cloud Shell:

gcloud auth list

  1. Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте.

gcloud config list project

  1. Если ваш проект не задан, используйте следующую команду для его установки:

gcloud config set project <YOUR_PROJECT_ID>

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

4. Включение Gemini для Google Cloud и необходимых API.

Включить Gemini

  1. Для включения API перейдите в Gemini на Google Cloud Marketplace . Также можно использовать следующую команду:

gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID

  1. Перейдите на страницу Gemini и нажмите «Начать чат».

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

Как бы мы это сделали? Давайте спросим об этом Близнецов, хорошо? Но прежде чем это сделать, помните:

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

Перейдите в консоль чата Gemini, нажав на значок «Открыть Gemini» в правом верхнем углу рядом со строкой поиска в консоли Google Cloud.

Введите этот вопрос в поле "Введите подсказку здесь":

Как включить API BigQuery и Vertex AI с помощью команды gcloud?

В результате вы получите изображение, показанное ниже:

19c3fd78530794d9.png

Скопируйте этот фрагмент (вы можете использовать значок копирования в верхней части команды) и запустите его в терминале Cloud Shell , чтобы включить соответствующие службы:

  • bigquery.googleapis.com
  • aiplatform.googleapis.com

5. Изучите общедоступный набор данных BigQuery для поиска информации о книгах.

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

Этот общедоступный набор данных можно найти в панели обозревателя BigQuery. Он расположен слева при открытии консоли BigQuery .

39e2ac03cc99cbac.png

Введите в строку поиска "gdelt-bq" или "internetarchivebooks" и нажмите "ПОИСК ПО ВСЕМ ПРОЕКТАМ". Разверните результаты и отметьте "книги интернет-архива" звездочкой, как показано на изображении ниже:

68dba68a79cddfc9.png .

Разверните набор данных, щелкните gdelt-bq.internetarchivebooks, а затем просмотрите данные в таблице за 1920 год. Эта таблица включает книги, архивированные за 1920 год.

Чтобы ознакомиться со схемой, которую мы будем использовать в последующих разделах, выполните следующий запрос:

select * from  `gdelt-bq.internetarchivebooks.1920` limit 5;

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

  • BookMeta_Title (title)
  • Темы (темы, разделённые точкой с запятой)
  • BookMeta_FullText (полный текст книги)

6. Создайте новый набор данных BigQuery под названием "Книжная полка".

Мы хотим создать набор данных в рамках проекта для хранения всех объектов базы данных и аналитики, которые мы собираемся создать в этой лабораторной работе. Давайте спросим у Gemini, как создать набор данных BigQuery. После включения API у вас уже должен быть открыт чат Gemini в другой вкладке браузера. Если нет, вы можете сделать это сейчас. Перейдите в консоль Google Cloud по адресу https://console.cloud.google.com , и вы увидите значок Gemini рядом с поисковой строкой вверху. Щелкните по нему, и откроется чат.

26e1491322855614.png

Введите текст, как показано ниже.

Вот моя тема:

How to create a BigQuery dataset?

Вот ответ:

f7a989cc9a01009.png

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

Для создания набора данных BigQuery выполните следующие шаги:

  1. Перейдите на страницу BigQuery в консоли Google Cloud.
  2. В панели «Проводник» щелкните идентификатор своего проекта.
  3. Нажмите «Создать набор данных» (эта опция должна быть в списке после нажатия на три точки рядом с идентификатором вашего проекта).
  4. Введите название набора данных как "книжная полка".
  5. Укажите местоположение как "США (многорегиональное)".
  6. Для шагов 3, 4, 5 и 6 из полученного ответа оставьте параметры по умолчанию.
  7. Нажмите кнопку СОЗДАТЬ НАБОР ДАННЫХ.

Ваш набор данных будет создан и отобразится на панели «Проводник». Набор данных «книжная полка» выглядит следующим образом:

7. Создайте удалённую модель для вызова Vertex AI LLM (text-bison-32k)

Далее нам необходимо создать в BigQuery модель, которая будет вызывать модель Vertex AI "text-bison-32k". Эта модель поможет определить общую тему, контекст книги, на основе списка ключевых слов для каждой книги в наборе данных.

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

Как вы будете подключать BigQuery и Vertex AI для вызова конечной точки LLM (text-bison-32k) в BigQuery?

Ответ следующий:

41904e30ce92b436.png

Ответ содержит точную информацию, например, шаги, включающие использование оператора CREATE MODEL, подключение к BigQuery и определение конечной точки. Запрос для меня точен, но это не означает, что вы получите точно такой же результат, поскольку это большая языковая модель, и ответы могут отличаться по формату, объему и глубине. Если вы не видите всех полученных мною деталей, не стесняйтесь задавать дополнительные вопросы в чате. Например: Уточните, как создать ресурс подключения, почему отсутствует атрибут подключения или как подключиться из BigQuery к Vertex AI и т.д.

Вот пример дополнительного вопроса (используйте его только в том случае, если вам нужен дополнительный ответ; если первого полученного ответа достаточно, переходите к следующему):

What about the connection? How will I connect from BigQuery to Vertex AI?

Вот ответ:

2ed9b3ed96b11bc9.png

Давайте выполним шаги из полученного ответа, чтобы создать подключение к BigQuery:

  1. Перейдите в консоль BigQuery.
  2. В панели «Обозреватель BigQuery» нажмите кнопку «+ДОБАВИТЬ» и выберите «Подключения к внешним источникам данных».
  3. На этом этапе вам будет предложено включить API подключения к BigQuery. Нажмите «Включить API»:

ded96126495ffe9.png

  1. Нажмите «Подключения к внешним источникам данных», и вы увидите слайд «Внешние источники данных», как показано ниже. Из списка внешних источников выберите источник «Vertex AI».

434cdbbb3a9436f2.png

  1. Введите идентификатор соединения (это может быть любой идентификатор по вашему выбору, но пока установите его как " bq-vx " и регион (мультирегион "US").
  2. Нажмите «Создать соединение».

d3a2aeebc3ecdfae.png

  1. После создания подключения нажмите кнопку «Перейти к подключению».
  2. На странице информации о подключении скопируйте идентификатор учетной записи службы, поскольку мы будем использовать этот идентификатор на последующих шагах.
  3. Теперь, когда соединение установлено, давайте назначим права доступа к идентификатору учетной записи службы, который мы скопировали, чтобы иметь возможность использовать Vertex AI.
  4. На странице консоли Google Cloud откройте Google Cloud IAM или перейдите по соответствующей ссылке.
  5. В разделе «Просмотр руководителями» нажмите «Предоставить доступ» .

5317eed5da0bb8c5.png

  1. В диалоговом окне «Предоставление доступа» введите идентификатор учетной записи службы, который мы записали ранее, в текстовое поле «Новые принципы».
  2. Установите роль "Пользователь Vertex AI".

f213db33d220aa5f.png

Необходимое соединение установлено. Для субъекта (служебной учетной записи соединения) предоставлены необходимые разрешения на использование Vertex AI из BigQuery.

Выполните следующую инструкцию DDL (язык определения данных), которая представляет собой создание объекта базы данных, в данном случае, модели, в редакторе запросов BigQuery.

CREATE OR REPLACE MODEL bookshelf.llm_model
  REMOTE WITH CONNECTION `us.bq-vx`
  OPTIONS (ENDPOINT = 'text-bison-32k');

В качестве альтернативы описанному выше шагу вы можете попросить Gemini предложить запрос для создания модели, которая будет вызывать модель "text-bison-32k".

Примечание: Если вы использовали другое имя для подключения, замените " us.bq-vx " на это имя в предыдущем операторе DDL. Этот запрос создает удаленную модель в наборе данных "bookshelf", который мы создали ранее.

8. Создайте удалённую функцию, которая вызывает Java Cloud Function.

Теперь мы создадим удалённую функцию в BigQuery, используя Java Cloud Function, которую мы создали в первом практическом занятии этой серии, для реализации модели Gemini. Эта удалённая функция будет использоваться для обобщения содержания книги.

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

Перейдите в консоль BigQuery и вставьте следующий DDL-скрипт в редактор запросов (вы можете создать новую вкладку редактора запросов, нажав кнопку «+»).

a54c0b0014666cac.png

Ниже приведен DDL-код, который вы можете скопировать. Не забудьте заменить endpoint на вашу развернутую конечную точку Cloud Function (созданную в рамках практического задания 1 ). Если у вас нет конечной точки, вы можете заменить замаскированные символы в приведенном ниже DDL-коде на "abis-345004" для демонстрационных целей.

CREATE OR REPLACE FUNCTION
  `bookshelf.GEMINI_REMOTE_CALL` (context STRING) RETURNS STRING
  REMOTE WITH CONNECTION `us.bq-vx`
  OPTIONS (
    endpoint = 'https://us-central1-****-******.cloudfunctions.net/remote-gemini-call'  );

Перейдите в консоль BigQuery на платформе Google Cloud и откройте новую вкладку «Редактор запросов». В редакторе запросов BigQuery вставьте приведенный выше оператор DDL. После выполнения запроса вы увидите следующий ответ:

a023d5691acf6f.png

Теперь, когда модель и функция созданы, давайте протестируем эти два объекта BigQuery, выполнив их в запросе SELECT.

9. Обобщите темы, используя удаленную модель.

Давайте воспользуемся созданной нами удалённой моделью "bookshelf.llm_model", чтобы сгенерировать объединённое ключевое слово для книги из заданного списка тем:

SELECT * FROM ML.GENERATE_TEXT(MODEL `bookshelf.llm_model`,
(
SELECT
     CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
    FROM `gdelt-bq.internetarchivebooks.1920` LIMIT 1
));

Дополнительный шаг: Результат для поля, сгенерированного LLM, является вложенным. Добавим в запрос несколько параметров LLM и атрибут "flatten_json_output". Использование атрибута "flatten_json_output" помогает удалить вложенную структуру из поля результата, сгенерированного LLM.

SELECT * FROM ML.GENERATE_TEXT ( MODEL `bookshelf.llm_model`, (
 SELECT CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt FROM `gdelt-bq.internetarchivebooks.1920` limit 1),
    STRUCT( 0.2 AS temperature, 100 AS max_output_tokens, TRUE AS flatten_json_output));

Теперь выполните запрос SELECT в редакторе BigQuery и проверьте результат. Для тестирования мы ограничили количество результатов запроса одним. Результат отображается следующим образом:

9b0d33eca61a73d2.png

10. Создание краткого содержания полного текста книг с помощью удаленной функции.

Теперь мы попробуем кратко изложить содержание книги, запустив созданную ранее облачную функцию bookshelf.GEMINI_REMOTE_CALL.

Примечание: Если вы пропустили создание удаленной функции (предыдущая тема в этом практическом занятии), не забудьте также пропустить вызов функции bookshelf.GEMINI_REMOTE_CALL в запросе SELECT.

Используйте запрос SELECT, который вызывает удаленную функцию (GEMINI_REMOTE_CALL), созданную нами ранее. Вызов этой функции, GEMINI_REMOTE_CALL, включает запрос на ввод краткого содержания текста книги:

select BookMeta_Title, `bookshelf.GEMINI_REMOTE_CALL` (
  CONCAT('This is about a book. The title of the book is this: ', BookMeta_Title,  ' . The theme of the book is as follows: ', Themes, 'The following text contains an excerpt from the book. Summarize it in less than 5 lines to create the gist. If you do not have a summary, use the title and themes to make up a short summary. DO NOT RETURN EMPTY RESPONSE. ', SUBSTR(BookMeta_FullText, 5000, 10000))) Summary 
  from `gdelt-bq.internetarchivebooks.1920` where Themes like '%EDUCATION%' limit 1;

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

Результат запроса выглядит следующим образом:

658bb0a9c9cf0938.png

11. Храните данные о книгах в таблице.

Теперь, когда мы протестировали оба вызова LLM (удалённую модель и функцию) из BigQuery, используя только SQL-запросы, давайте создадим таблицу BigQuery для хранения данных "книжной полки" с информацией о темах, в том же наборе данных, что и удалённая модель и функция.

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

Вот запрос, который мы будем использовать:

SELECT
  BookMeta_Title, Themes, ml_generate_text_llm_result Context 
   FROM
  ML.GENERATE_TEXT (
    MODEL `bookshelf.llm_model`,
    (
 SELECT
      BookMeta_Title,
      Themes,BookMeta_FullText,
      CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
    FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

При выполнении запроса в редакторе BigQuery результат будет следующим:

2c6e08e75a680867.png

Теперь попросим Gemini создать таблицу с именем "bookshelf.books" на основе приведенного выше запроса. Перейдите в консоль чата Gemini в Google Cloud Console и введите следующую команду.

Вот подсказка, которую мы будем использовать:

Create a BigQuery table named bookshelf.books from this SELECT query: 
SELECT
  BookMeta_Title, Themes, ml_generate_text_llm_result Context 
   FROM
  ML.GENERATE_TEXT (
    MODEL `bookshelf.llm_model`,
    (
 SELECT
      BookMeta_Title,
      Themes,BookMeta_FullText,
      CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
    FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

Ответ пользователя Gemini в чате выглядит следующим образом:

df6595a4b14f7b9.png

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

CREATE TABLE bookshelf.books (
  BookMeta_Title STRING,
  Themes STRING,
  ml_generate_text_llm_result STRING
) AS (
  SELECT
    BookMeta_Title,
    Themes,
    ml_generate_text_llm_result Context
  FROM
    ML.GENERATE_TEXT (
      MODEL `bookshelf.llm_model`,
      (
        SELECT
          BookMeta_Title,
          Themes,
          BookMeta_FullText,
          CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
        FROM `gdelt-bq.internetarchivebooks.1920`
        LIMIT 5
      ),
      STRUCT(
        0.2 AS temperature,
        100 AS max_output_tokens,
        TRUE AS flatten_json_output
      )
    )
);

После выполнения запроса в редакторе BigQuery результат выглядит следующим образом:

2d1ce716f844b7ad.png

Вот и всё! Теперь сделайте запрос к таблице и поэкспериментируйте с данными, чтобы получить больше информации.

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

Поздравляем! Мы успешно завершили следующие этапы, используя Gemini на некоторых из них:

  • Создана удалённая модель в BigQuery, которая вызывает конечную точку Vertex AI "text-bison-32k" для определения жанра (или темы) книги по списку ключевых слов в таблице, разделённых символом ";".
  • Создана удалённая функция в BigQuery, которая будет удалённо вызывать развёрнутую облачную функцию генеративного ИИ. Эта функция будет принимать запрос в качестве входных данных и выводить строку, которая в 5 строках суммирует содержание книги.
  • Использовал удалённую модель и функцию для обобщения темы и текста книги с помощью SQL-запросов и записи результатов в новую таблицу в наборе данных «Книжная полка».
  • В качестве дополнительного задания попробуйте использовать Gemini для получения SQL-запроса на удаление объектов, созданных в BigQuery. Это охватит этап очистки.