1. Введение
Любите ли вы погружаться в мир книг, но вас пугает огромное количество вариантов? Представьте себе приложение на основе искусственного интеллекта, которое не только рекомендует идеальную книгу, но и предлагает краткое описание в зависимости от жанра, позволяя заглянуть в суть произведения. В этом практическом занятии я покажу вам, как создать такое приложение с помощью BigQuery, Vertex AI и Cloud Run при поддержке Gemini.
Обзор проекта
В основе нашего сценария использования лежат следующие 4 ключевых компонента:
- База данных книг: Обширный общедоступный набор данных книг из интернет-архивов BigQuery послужит нашим всеобъемлющим каталогом книг.
- Механизм создания кратких обзоров на основе ИИ: Google Cloud Functions, оснащенный языковой моделью Gemini-Pro, будет генерировать информативные резюме, адаптированные к запросам пользователей.
- Интеграция с BigQuery: удаленная функция в BigQuery, которая вызывает нашу облачную функцию для предоставления по запросу кратких обзоров книг и тематических подборок.
- Пользовательский интерфейс: Веб-приложение, размещенное на платформе Cloud Run, которое предоставит пользователям возможность просматривать результаты в веб-формате.
Мы разделили весь процесс реализации проекта на 3 практических занятия, и данное практическое занятие охватывает третье занятие из приведенного ниже списка:
Практическое задание 1: Используйте Gemini для создания облачной функции Java для приложения Gemini.
Практическое занятие 2: Используйте Gemini для создания генеративных приложений искусственного интеллекта, работающих исключительно с SQL, с помощью BigQuery.
Практическое задание 3: Используйте Gemini для создания веб-приложения на Java Spring Boot, взаимодействующего с BigQuery.
2. Используйте Gemini для создания веб-приложения Spring Boot с BigQuery.
Что вы построите
- Создайте необходимый набор данных и таблицу BigQuery.
- Веб-приложение на Java Spring Boot, взаимодействующее с BigQuery для получения данных о книгах и отображения их в интернете.
- Это приложение развернуто на платформе Cloud Run.
- Вы выполните эти шаги с помощью Gemini.
3. Требования
- Браузер, например Chrome или Firefox.
- Проект Google Cloud с включенной функцией выставления счетов.
- Будет полезно, если вы развернули облачную функцию в рамках первой части практического занятия «Использование Gemini для создания облачной функции Java для приложения генеративного ИИ» .
- Условие: Если у вас уже есть доступ к бесплатной ссылке на Google Cloud Credits (возможно, предоставленной организатором семинара), воспользуйтесь инструкциями на странице ниже, чтобы предварительно выполнить шаги по активации кредитов и созданию проекта . Если у вас нет этой ссылки, выполните шаги по подготовке проекта и оплате, описанные ниже:
Создайте свой проект
Вы можете пропустить следующие шаги, если у вас уже активирован платежный аккаунт и создан проект с использованием ссылки , указанной в условном шаге выше.
- В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
Активировать Cloud Shell
- Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud и поставляемую с предустановленным bq :
В консоли Cloud Console нажмите кнопку «Активировать Cloud Shell» в правом верхнем углу:

- После подключения к Cloud Shell вы увидите, что ваша аутентификация пройдена и проект уже настроен на ваш идентификатор проекта. Для подтверждения аутентификации выполните следующую команду в Cloud Shell:
gcloud auth list
- Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте.
gcloud config list project
- Если ваш проект не задан, используйте следующую команду для его установки:
gcloud config set project <YOUR_PROJECT_ID>
Для получения информации о командах gcloud и их использовании обратитесь к документации .
4. Включение Gemini и необходимых API.
Включить Gemini
- Перейдите на Gemini Marketplace , чтобы включить API. Вы также можете использовать следующую команду:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Перейдите на страницу Gemini и нажмите «Начать чат».
Включите другие необходимые API.
Как бы мы это сделали? Давайте спросим об этом Близнецов, хорошо? Но прежде чем это сделать, помните:
Примечание: LLM-ы являются недетерминированными. Поэтому при выполнении этих заданий полученные ответы могут отличаться от тех, что показаны на моем скриншоте.
Перейдите в консоль чата Gemini, нажав на значок «Открыть Gemini» в правом верхнем углу рядом со строкой поиска в консоли Google Cloud.

Введите этот вопрос в поле "Введите подсказку здесь":
How do I enable the BigQuery and Cloud Run apis using gcloud command?
В результате вы получите изображение, показанное ниже:

Скопируйте этот фрагмент (вы можете использовать значок копирования в верхней части команды) и запустите его в терминале Cloud Shell , чтобы включить соответствующие службы:
- bigquery.googleapis.com
- run.googleapis.com
5. Изучите общедоступный набор данных BigQuery для поиска информации о книгах.
Для начала ознакомьтесь с общедоступным набором данных BigQuery, содержащим информацию о многочисленных книгах из интернет-архива . Если вам не удается перейти к набору данных internetarchivebooks по этой ссылке, выполните следующие шаги для изучения набора данных или воспользуйтесь этой документацией :
Этот общедоступный набор данных можно найти в панели обозревателя BigQuery. Он расположен слева при открытии консоли BigQuery .

Введите в строку поиска "gdelt-bq" или "internetarchivebooks" и нажмите "ПОИСК ПО ВСЕМ ПРОЕКТАМ". Разверните результаты и отметьте "книги интернет-архива" звездочкой, как показано на изображении ниже:
.
Разверните набор данных, щелкните gdelt-bq.internetarchivebooks, а затем просмотрите данные в таблице за 1920 год. Эта таблица включает книги, архивированные за 1920 год.
Чтобы ознакомиться со схемой, которую мы будем использовать в последующих разделах, выполните следующий запрос:
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
Для нашей практической работы мы будем использовать следующие три поля:
- BookMeta_Title (title)
- Темы (темы, разделённые точкой с запятой)
- BookMeta_FullText (полный текст книги)
6. Создайте базовый шаблон Java Cloud Run с помощью Gemini.
Откройте редактор Cloud Shell, нажав на значок «Открыть редактор» в правом верхнем углу терминала Cloud Shell (я обычно предпочитаю открывать терминал и редактор в отдельных вкладках параллельно, чтобы мы могли писать код в одной, а выполнять сборку в другой).

Once you have the editor open, make sure the Gemini logo in the bottom right corner of the editor console is active (and not canceled out). Also make sure that your Google Cloud Project on the bottom left corner is pointing to your current active project that you want to work with. If they are inactive, click them, authorize, select the Google Cloud Project that you want it to point to and get them activated.
После активации обоих компонентов щелкните название проекта в левом нижнем углу, и во всплывающем списке под названием «Cloud Code» прокрутите вниз до пункта «New Application».

В этом списке выберите приложение Cloud Run. Из появившегося списка выберите Java:

В появившемся списке вместо helloworld введите название проекта "bookshelf-web" и нажмите OK.

Ура! Вы успешно запустили своё простое Java-приложение Cloud Run с помощью Gemini, и, кроме включения и активации настроек, почти ничего не делали, согласны?
Вот структура проекта, которую вы должны увидеть:

На данный момент вы можете развернуть приложение. Но мы начали не с этого. Нам еще нужно добавить основную функциональность веб-приложения, а именно — получать аналитические данные из базы данных BigQuery и отображать их в интернете.
Для этого вы можете добавить больше подсказок и постепенно разрабатывать свой код с помощью Gemini, или же написать логику самостоятельно. Я собираюсь использовать оба подхода.
7. Добавьте зависимости для использования BigQuery в веб-приложении.
Теперь, когда приложение запущено, мы готовы внести изменения в исходный код и свойства приложения. Для начала добавим зависимости. Попросим Gemini порекомендовать их.
В редакторе кода Cloud убедитесь, что в правом нижнем углу строки состояния отображается сообщение «Gemini активен», а в левом нижнем углу выбран активный проект Google Cloud.
В редакторе кода Cloud перейдите к файлу pom.xml, сразу после тега </dependencies> , и введите следующий комментарий:

<!-- What maven dependency should I include to access BigQuery in the app-->
В результате я получил изображение, показанное ниже:

Для удобства вставляю сюда список зависимостей. Если в вашем случае предлагается вариант с указанием версии, можете его проигнорировать.
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-bigquery</artifactId>
</dependency>
8. Обновите исходный код, чтобы данные о книжных полках отображались в веб-версии.
Замените код в файле HelloWorldController.java следующим:
package cloudcode.helloworld.web;
import java.util.UUID;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;
import com.google.cloud.bigquery.FieldValueList;
@RestController
public final class HelloWorldController {
/**
* Create an endpoint for the landing page
* @return the BigQuery analytics results string to the web
*/
@GetMapping("/")
public String helloWorld() throws Exception {
/* Connect to bigquery and write a select SQL to fetch Title, Theme and Summary fields from the table `bookshelf.bookshelf_theme` if you have executed the codelab 1 of this series, if not just directly use records from gdelt-bq.internetarchivebooks.1920 table */
String query = "SELECT BookMeta_Title || ' (' || Themes || ') ' as summary from gdelt-bq.internetarchivebooks.1920 limit 10 ";
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
QueryJobConfiguration queryConfig =
QueryJobConfiguration.newBuilder(query)
.setUseLegacySql(false)
.build();
// Create a job ID so that we can safely retry.
JobId jobId = JobId.of(UUID.randomUUID().toString());
Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());
// Wait for the query to complete.
queryJob = queryJob.waitFor();
// Check for errors
if (queryJob == null) {
throw new RuntimeException("Job no longer exists");
} else if (queryJob.getStatus().getError() != null) {
throw new RuntimeException(queryJob.getStatus().getError().toString());
}
// Get the results.
TableResult result = queryJob.getQueryResults();
String responseString = "";
// Print all pages of the results.
for (FieldValueList row : result.iterateAll()) {
responseString += row.get("summary").getStringValue() + ". \n";
System.out.printf("%s\n", row.get("summary").getStringValue());
}
return responseString;
}
}
Мы внесли следующие изменения в исходные файлы:
- В файле HelloWorldController.java заменена аннотация @Controller на @RestController.
- Заменено содержимое метода helloWorld(), чтобы включить вызов BigQuery, выполнение запроса, который извлекает данные для вывода названия и тем книги.
- Вместо возврата шаблона представления index при загрузке, он обновляется таким образом, чтобы возвращать ответ в виде строки на веб-сайт.
Важное примечание: Не забудьте обновить указанные ниже данные.
- Обновите файл HelloWorldControllerTests.Java , закомментировав текущий вызов mvc.perform(...).
Близнецы для пояснения кода
Мы предоставили вам код и описали изменения, которые внесли в исходные файлы. Вы также могли бы использовать Gemini для получения пояснений и/или комментариев к коду по мере необходимости. Вот несколько вещей, которые вы можете попробовать:
- Откройте файл HelloWorldController.java в IDE, перейдите в панель чата и введите следующее сообщение: «Поясните это» . Ознакомьтесь с подробным объяснением, которое предоставляет Gemini. Вы можете использовать это в любое время, чтобы получить разъяснения по коду.
- Вы можете выделить любой конкретный фрагмент или строку кода (например, `@GetMapping("/") )`, а затем использовать следующую подсказку: «Пояснить это». Это даст подробное объяснение только для выбранной вами строки кода или фрагмента.
- Вы даже можете попробовать несколько запросов, которые описывают код по-другому. Например, вы можете выбрать следующую строку кода.
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
и задать следующий вопрос: «Что произойдет, если переменная bigquery будет равна null?» 4. Вы также можете запросить улучшение или рефакторинг кода с помощью Gemini. Например, вы можете выбрать весь код метода helloWorld() и задать следующий вопрос: «Как мне улучшить или рефакторизовать этот код?» . Ознакомьтесь с предложениями, которые предоставляет Gemini.
9. Сборка и развертывание
Перейдите в терминал Cloud Shell. Убедитесь, что в терминале указан идентификатор вашего проекта.

Перейдите в каталог проекта с помощью команды `cd`:
cd bookshelf-web
Выполните указанные ниже команды по очереди, чтобы убедиться, что ваше приложение запущено локально.
mvn package
mvn spring-boot:run
Теперь нажмите кнопку «Предварительный просмотр в интернете» и выберите опцию «Предварительный просмотр на порту 8080», как показано ниже:

Убедитесь, что вы видите запущенное локально приложение на вашей облачной машине.
Теперь давайте спросим у Gemini, как развернуть это веб-приложение в Cloud Run. Перейдите в Gemini Chat, нажав кнопку «Открыть Gemini» в консоли Google Cloud.
Это моя тема для обсуждения:
What is the gcloud command to deploy my app to cloud run without having to containerize, only by giving the source file?
Ниже приведён ответ:

Заменим заполнители имени службы и региона в команде gcloud, как показано в приведенном ниже фрагменте кода:
gcloud run deploy bookshelf-web --source . --allow-unauthenticated --region $REGION
Выполните эту команду в терминале Cloud Shell. Вы увидите несколько дополнительных вопросов, выберите соответствующие ответы, и вы сможете увидеть процесс развертывания:

Это займет всего несколько минут, и приложение будет развернуто в Google Cloud без использования серверов. Щелкните по развернутому приложению в Cloud Run и просмотрите результат в веб-браузере:

10. Поздравляем!
Поздравляем! Мы успешно разработали, развернули и протестировали веб-приложение Java Cloud Run для анализа содержимого книжной полки с помощью Gemini. В качестве следующей задачи, спросите у Gemini, как удалить развернутый сервис Cloud Run из консоли Google Cloud, и следуйте инструкциям в ответе, чтобы очистить ресурс.