1. Введение
Вы любите копаться в книгах, но вас ошеломляет огромный выбор? Представьте себе, что у вас есть приложение на базе искусственного интеллекта, которое не только рекомендует идеальное чтение, но и предлагает краткое изложение, основанное на выбранном вами жанре, что дает вам представление о сути книги. В этой лабораторной работе я расскажу вам, как создать такое приложение с помощью BigQuery, Gemini и облачных функций на базе Gemini.
Обзор проекта
Наш вариант использования сосредоточен вокруг этих 4 ключевых компонентов:
- База данных книг. Обширный общедоступный набор данных интернет-архивов книг BigQuery будет служить нашим всеобъемлющим каталогом книг.
- Механизм суммирования AI: Google Cloud Functions, оснащенный языковой моделью Gemini 1.0 Pro, будет генерировать подробные сводки, адаптированные к запросам пользователей.
- Интеграция BigQuery: удаленная функция в BigQuery, которая вызывает нашу облачную функцию для предоставления по запросу аннотаций книг и тем.
- Пользовательский интерфейс: веб-приложение, размещенное в Cloud Run, которое предлагает пользователям веб-приложение для просмотра результатов.
Мы разделим реализацию на 3 кодовых лаборатории:
Codelab 1: используйте Gemini для создания облачной функции Java для приложения Gemini.
Codelab 2: используйте Gemini для создания приложений SQL с помощью BigQuery и генеративного искусственного интеллекта.
Codelab 3: используйте Gemini для создания веб-приложения Java Spring Boot, которое взаимодействует с BigQuery.
2. Используйте Gemini для создания приложений SQL с помощью BigQuery и генеративного искусственного интеллекта.
Что ты построишь
Вы создадите
- Удаленная модель в BigQuery, которая вызывает конечную точку Vertex AI text-bison-32k для определения жанра (или темы) книги из списка ";" отдельные ключевые слова в таблице.
- Удаленная функция в BigQuery, которая будет удаленно вызывать развернутую генеративную облачную функцию искусственного интеллекта.
- Используйте удаленную модель и функцию, чтобы обобщить тему и текст книги с помощью SQL-запросов и записать результаты в новую таблицу в наборе данных книжной полки.
- Вы осуществите эти шаги с помощью Gemini.
3. Требования
- Браузер, например Chrome или Firefox.
- Проект Google Cloud с включенной оплатой
- Будет полезно, если у вас есть облачная функция, развернутая как часть лаборатории кода части 1. Используйте Gemini для создания облачной функции Java для лаборатории кода приложения Gemini .
- При условии: если на данный момент у вас есть доступ к бесплатной ссылке Google Cloud Credits (которая могла быть предоставлена вам организатором семинара), воспользуйтесь инструкциями на странице ниже, чтобы заранее выполнить этапы АКТИВАЦИИ КРЕДИТОВ и СОЗДАНИЯ ПРОЕКТА . Если у вас нет этой ссылки, перейдите к выполнению необходимых действий по проекту и выставлению счетов ниже:
Создайте свой проект
Вы можете пропустить приведенные ниже шаги, если вы уже активировали платежный аккаунт и создали проект по ссылке , упомянутой в условном шаге выше.
- В Google Cloud Console на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего облачного проекта включена оплата. Узнайте, как проверить, включена ли оплата в проекте .
Активировать Cloud Shell
- Вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud, в которую предварительно загружен bq :
В Cloud Console нажмите «Активировать Cloud Shell» в правом верхнем углу:
- После подключения к Cloud Shell вы увидите, что вы уже прошли аутентификацию и что для проекта уже установлен идентификатор вашего проекта. Выполните следующую команду в Cloud Shell, чтобы подтвердить, что вы прошли аутентификацию:
список аутентификации gcloud
- Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте.
проект списка конфигурации gcloud
- Если ваш проект не установлен, используйте следующую команду, чтобы установить его:
проект набора конфигурации gcloud <YOUR_PROJECT_ID>
Обратитесь к документации по командам и использованию gcloud.
4. Включение Gemini для Google Cloud и необходимых API.
Включить Близнецов
- Перейдите в Gemini для Google Cloud Marketplace , чтобы включить API. Вы также можете использовать следующую команду:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Посетите страницу Близнецов и нажмите «Начать общение».
Включите другие необходимые API
Как бы мы это сделали? Давайте спросим об этом Близнецов, ладно? Но перед этим запомни:
Примечание. LLM не являются детерминированными. Поэтому, пока вы пробуете использовать эти подсказки, полученный ответ может отличаться от показанного на моем снимке экрана.
Перейдите в консоль чата Gemini, щелкнув значок «Открыть Gemini» в правом верхнем углу рядом с панелью поиска в консоли Google Cloud.
Введите этот вопрос в разделе «Введите приглашение здесь»:
Как включить API BigQuery и Vertex AI с помощью команды gcloud?
Вы получите ответ, как показано на следующем изображении:
Скопируйте его (вы можете использовать значок копирования в верхней части фрагмента команды) и запустите его в терминале Cloud Shell, чтобы включить соответствующие службы:
- bigquery.googleapis.com
- aiplatform.googleapis.com
5. Изучите общедоступный набор данных BigQuery для данных о книгах.
Начните с ознакомления с общедоступным набором данных BigQuery, содержащим информацию о многочисленных интернет-архивных книгах .
Этот общедоступный набор данных можно найти в панели обозревателя BigQuery. Вы можете найти это слева, когда перейдете в консоль BigQuery .
Введите «gdelt-bq» или «internetarchivebooks» в строке поиска и нажмите «ПОИСК ВСЕХ ПРОЕКТОВ». Разверните результат и пометьте книги интернет-архивов, как показано на изображении ниже:
.
Разверните набор данных, щелкните gdelt-bq.internetarchivebooks, а затем просмотрите данные в таблице 1920 года. В этой таблице представлены архивные книги 1920 года.
Чтобы взглянуть на схему, которую мы будем использовать в последующих разделах, выполните следующий запрос:
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
Мы будем использовать следующие три поля для нашей лаборатории кода:
- BookMeta_Title (заголовок)
- Темы (темы, разделенные знаком «;»)
- BookMeta_FullText (полный текст книги)
6. Создайте новый набор данных BigQuery под названием «книжная полка».
Мы хотим создать набор данных в рамках проекта для хранения всех объектов базы данных и аналитики, которые мы собираемся создать в этой лабораторной работе. Давайте спросим Gemini, как создать набор данных BigQuery. Чат Gemini уже должен быть открыт на другой вкладке браузера на этапе включения API. Если нет, вы можете сделать это сейчас. Перейдите в консоль Google Cloud, перейдя по адресу https://console.cloud.google.com , и вы увидите значок Gemini рядом с панелью поиска вверху. Нажмите на нее, и чат откроется.
Введите приглашение, как показано ниже.
Вот моя подсказка:
How to create a BigQuery dataset?
Вот ответ:
Давайте выполним шаги, описанные в ответе, чтобы создать набор данных с именем «книжная полка» в вашем активном проекте.
Чтобы создать набор данных BigQuery, выполните следующие действия:
- Перейдите на страницу BigQuery в консоли Google Cloud.
- На панели «Проводник» щелкните идентификатор своего проекта.
- Нажмите «Создать набор данных» (он должен быть в списке параметров, когда вы нажимаете 3 точки рядом с идентификатором вашего проекта).
- Введите имя набора данных как «книжная полка».
- Установите местоположение «США (несколько регионов)».
- Для шагов 3, 4, 5 и 6 ответа оставьте параметры по умолчанию.
- Нажмите СОЗДАТЬ НАБОР ДАННЫХ.
Ваш набор данных будет создан и появится на панели Проводника. Набор данных «книжная полка» можно увидеть следующим образом:
7. Создайте удаленную модель для вызова Vertex AI LLM (text-bison-32k).
Далее нам нужно создать модель в BigQuery, которая вызывает модель Vertex AI «text-bison-32k». Модель поможет определить общую тему и контекст книги из списка ключевых слов для каждой книги в наборе данных.
Давайте зададим Близнецам этот вопрос. Для этого перейдите на вкладку, на которой открыта консоль чата Gemini, и введите следующую подсказку:
Как вы подключите BigQuery и Vertex AI для вызова конечной точки LLM (text-bison-32k) в BigQuery?
Ответ следующий:
Ответ включает точную информацию, например, шаги, включающие использование оператора CREATE MODEL, использование соединения BigQuery и определение конечной точки. Для меня оператор запроса является точным, но это не означает, что вы получите точно такой же результат, поскольку это большая языковая модель, и вы можете получить ответы в другом формате, объеме и глубине. Если вы не видите всех подробностей, которые я получил, не стесняйтесь задавать в чате дополнительные вопросы. Например: дайте более подробную информацию о том, как создать ресурс подключения или почему атрибут соединения отсутствует или как мне подключиться из BigQuery к Vertex AI и т. д.
Вот пример запроса на продолжение (используйте его только в том случае, если вам нужно продолжение; если первого полученного вами ответа достаточно, продолжайте его):
What about the connection? How will I connect from BigQuery to Vertex AI?
Вот ответ:
Давайте выполним шаги из ответа, чтобы создать соединение с BigQuery:
- Перейдите в консоль BigQuery.
- На панели BigQuery Explorer нажмите кнопку «+ДОБАВИТЬ» и выберите «Подключения к внешним источникам данных».
- На этом этапе вас попросят включить API подключения BigQuery. Нажмите ВКЛЮЧИТЬ API:
- Нажмите «Подключения к внешним источникам данных», и вы должны увидеть слайд «Внешний источник данных», как показано ниже. Из списка внешних источников выберите источник «Vertex AI».
- Введите идентификатор соединения (это может быть идентификатор по вашему выбору, но сейчас установите его как « bq-vx » и регион (мультирегион «США»).
- Нажмите «Создать соединение».
- После создания подключения нажмите «Перейти к подключению».
- На странице информации о подключении скопируйте идентификатор учетной записи службы, поскольку мы будем использовать этот идентификатор на последующих шагах.
- Теперь, когда соединение создано, давайте назначим разрешения этому идентификатору учетной записи службы, который мы скопировали, чтобы иметь возможность использовать Vertex AI.
- На странице Google Cloud Console откройте Google Cloud IAM или перейдите по ссылке.
- Нажмите «Предоставить доступ» в разделе «Просмотр по принципалам» .
- В диалоговом окне «Предоставить доступ» введите идентификатор учетной записи службы, который мы указали ранее, в текстовом поле «Новые принципы».
- Установите роль «Пользователь Vertex AI».
Необходимое соединение создано. Принципалу (служебному аккаунту соединения) предоставляется необходимое разрешение на использование Vertex AI из BigQuery.
Запустите следующий оператор DDL (язык определения данных), который представляет создание объекта БД, в данном случае MODEL, в редакторе запросов 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. Этот запрос создает удаленную модель в наборе данных «книжная полка», который мы создали ранее.
8. Создайте удаленную функцию, которая вызывает функцию Java Cloud.
Теперь мы создадим удаленную функцию в BigQuery, используя облачную функцию Java, которую мы создали в лаборатории кода 1 этой серии для реализации модели Gemini. Эта удаленная функция будет использоваться для обобщения содержания книги.
Примечание. Если вы пропустили эту лабораторную работу по коду или не развернули эту облачную функцию, вы можете пропустить этот шаг и перейти к следующей теме (а именно: суммировать тему книг с использованием удаленной модели).
Перейдите в консоль BigQuery и вставьте следующий оператор DDL в редактор запросов (вы можете создать новую вкладку редактора запросов, нажав кнопку +).
Ниже приведен DDL, который вы можете скопировать. Не забудьте заменить конечную точку развернутой конечной точкой облачной функции (созданной из лаборатории кода 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. После выполнения запроса вы можете увидеть следующий ответ:
Теперь, когда модель и функция созданы, давайте протестируем эти два объекта 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 и проверьте результат. Для тестирования мы ограничили результат запроса до 1. Результат отображается следующим образом:
10. Обобщить полный текст книги с помощью функции удаленного доступа.
Теперь мы попробуем суммировать книгу, запустив облачную функцию bookshelf.GEMINI_REMOTE_CALL, которую мы создали ранее.
Примечание. Если вы пропустили удаленное создание FUNCTION (предыдущий раздел в этой лаборатории), не забудьте также пропустить вызов функции 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;
Обратите внимание, что для создания резюме мы взяли подстроку полного текста книги.
Результат запроса следующий:
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, результат будет следующим:
Теперь давайте попросим 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));
Ответ в чате Близнецов следующий:
Вот запрос на случай, если вы захотите скопировать его напрямую отсюда:
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 результат будет следующим:
Вот и все! Теперь запросите таблицу и поиграйте с данными, чтобы получить больше информации.
12. Поздравления
Поздравляем! Мы успешно выполнили следующие задачи и также использовали Gemini на некоторых этапах процесса:
- Создана удаленная модель в BigQuery, которая вызывает конечную точку Vertex AI "text-bison-32k" для определения жанра (или темы) книги из списка ";" отдельные ключевые слова в таблице.
- Создана удаленная функция в BigQuery, которая будет удаленно вызывать эту развернутую генеративную облачную функцию искусственного интеллекта. Эта функция примет приглашение в качестве входных данных и выведет строку, описывающую книгу в 5 строках.
- Использовал удаленную модель и функцию для обобщения темы и текста книги с помощью SQL-запросов и записи результатов в новую таблицу в наборе данных книжной полки.
- В качестве последующего задания попробуйте использовать Gemini, чтобы получить SQL для удаления объектов, созданных в BigQuery. Это будет охватывать этап очистки.