Аналитика книжной полки: используйте Gemini для создания приложения Java Cloud Run, которое переносит данные BigQuery в Интернет.

1. Введение

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

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

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

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

Мы разделили всю реализацию проекта на 3 лаборатории кода, и эта лаборатория охватывает код 3 из списка ниже:

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

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

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

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

Что ты построишь

  • Создайте необходимый набор данных и таблицу BigQuery.
  • Веб-приложение Java Spring Boot, которое взаимодействует с BigQuery для получения данных о книгах и их отображения в Интернете.
  • Это приложение развернуто в Cloud Run.
  • Эти шаги вы осуществите с помощью Близнецов.

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

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

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

  1. В Google Cloud Console на странице выбора проекта выберите или создайте проект 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 и необходимых API

Включить Близнецов

  1. Перейдите на Gemini Marketplace , чтобы включить API. Вы также можете использовать следующую команду:

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

  1. Посетите страницу Близнецов и нажмите «Начать общение».

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

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

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

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

26e1491322855614.png

Введите этот вопрос в разделе «Введите приглашение здесь»:

How do I enable the BigQuery and Cloud Run apis using gcloud command?

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

b97a8a9fa9143b3f.png

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

  • bigquery.googleapis.com
  • run.googleapis.com

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

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

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

39e2ac03cc99cbac.png

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

68dba68a79cddfc9.png .

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

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

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

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

  • BookMeta_Title (заголовок)
  • Темы (темы, разделенные знаком «;»)
  • BookMeta_FullText (полный текст книги)

6. Создайте базовый шаблон Java Cloud Run с помощью Gemini.

Откройте редактор Cloud Shell, щелкнув значок «Открыть редактор» в правом верхнем углу терминала Cloud Shell (обычно я предпочитаю открывать терминал и редактор на отдельных вкладках параллельно, чтобы мы могли писать код в одной и встраивать в другую).

edd258384bc74f1f.png

Открыв редактор, убедитесь, что логотип Gemini в правом нижнем углу консоли редактора активен (и не погашен). Также убедитесь, что ваш проект Google Cloud в левом нижнем углу указывает на текущий активный проект, с которым вы хотите работать. Если они неактивны, щелкните их, авторизируйтесь, выберите проект Google Cloud, на который вы хотите, чтобы он указывал, и активируйте их.

Как только оба станут активными, щелкните имя проекта в левом нижнем углу и в открывшемся всплывающем списке под названием «Cloud Code» прокрутите вниз до «Новое приложение».

db998cc557e83f40.png

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

c7748de85120507b.png

В полученном списке введите имя проекта «bookshelf-web» вместо helloworld и нажмите «ОК».

7c58c764277c571f.png

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

Вот структуру проекта, которую вы должны увидеть:

e6be37bbee730bd1.png

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

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

7. Добавьте зависимости для использования BigQuery в веб-приложении.

Теперь, когда приложение загружено, мы готовы внести изменения в исходный код и свойства приложения. Во-первых, давайте добавим зависимости. Давайте попросим Близнецов порекомендовать его.

В редакторе кода Cloud убедитесь, что в строке состояния в правом нижнем углу отображается активный Gemini, а в левом нижнем углу выбран активный проект Google Cloud.

В редакторе кода Cloud перейдите к файлу pom.xml, прямо над тегом </dependent> и введите следующий комментарий:

171d1c40ff8124e8.png

<!-- What maven dependency should I include to access BigQuery in the app-->

Я получил такой результат, как показано на изображении ниже:

2df51efd655a3557.png

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

<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;
  }
}

Мы внесли следующие изменения в исходные файлы:

  1. В HelloWorldController.java @Controller обновлен до @RestController.
  2. Содержимое метода helloWorld() заменено на вызов BigQuery, выполнение запроса, который извлекает данные для вывода названия и тем книги.
  3. Вместо возврата шаблона индексного представления при загрузке он обновляется и возвращает ответ в виде строки в Интернет.

Важное примечание: не забудьте обновить приведенную ниже информацию.

  1. Обновите файл HelloWorldControllerTests.Java , чтобы закомментировать текущий вызов mvc.perform(...).

Близнецы для пояснения кода

Мы предоставили вам код и описали изменения, которые мы внесли в исходные файлы. Вы также могли бы использовать Gemini для получения пояснений к коду и/или комментариев к коду, если это необходимо. Вот несколько вещей, которые вы можете попробовать:

  1. Открыв файл HelloWorldController.java в IDE, перейдите на панель чата в IDE и введите следующую подсказку: Объясните это . Ознакомьтесь с подробным объяснением, которое предоставляют Близнецы. Вы можете использовать его в любое время для получения пояснений по коду.
  2. Вы можете выделить любой конкретный фрагмент или строку в коде (например, @GetMapping("/") ), а затем использовать следующую подсказку: Объясните это. Это предоставит подробное объяснение только для выбранной вами строки кода или фрагмента.
  3. Вы даже можете попробовать некоторые запросы, которые запрашивают код другим способом. Например, вы можете выбрать следующую строку кода

BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

и задайте следующий запрос : «Что произойдет, если переменная bigquery будет равна нулю?» 4. Вы также можете запросить улучшение кода или рефакторинг с помощью Gemini. Например, вы можете выбрать весь код для метода helloWorld() и дать следующую подсказку: «Как мне улучшить или реорганизовать этот код?» . Ознакомьтесь с предложениями, которые предлагает Близнецы.

9. Сборка и развертывание

Перейдите к терминалу Cloud Shell. Убедитесь, что он указывает на идентификатор вашего проекта в терминале.

4b3392dd050340a3.png

Перейдите в каталог проекта с помощью команды cd:

cd bookshelf-web

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

mvn package

mvn spring-boot:run

Теперь нажмите кнопку «Предварительный просмотр в Интернете» и выберите опцию «Предварительный просмотр на порту 8080», как показано ниже:

ea9464498b6bd9df.png

Убедитесь, что вы можете видеть приложение, работающее локально на вашем компьютере с облачной оболочкой.

Теперь давайте спросим Gemini, как развернуть это веб-приложение в Cloud Run. Перейдите в чат Gemini, нажав кнопку «Открыть Gemini» в Google Cloud Console.

Это моя подсказка:

What is the gcloud command to deploy my app to cloud run without having to containerize, only by giving the source file?

Ниже приведен ответ:

6f21c2d59b6dc416.png

Давайте заменим имя службы и заполнители региона в команде gcloud, как показано во фрагменте ниже:

gcloud run deploy bookshelf-web --source . --allow-unauthenticated --region $REGION

Запустите эту команду из терминала Cloud Shell. Вы должны увидеть несколько дополнительных вопросов, выбрать соответствующие ответы и увидеть ход развертывания:

66f5d6e00c16a4db.png

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

fd342d8f16e664ab.png

10. Поздравления

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