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. Требования
- Браузер, например Chrome или Firefox.
- Проект Google Cloud с включенной оплатой
- Будет полезно, если у вас есть облачная функция, развернутая как часть лаборатории кода части 1. Используйте Gemini для создания облачной функции Java для лаборатории кода приложения генеративного ИИ .
- При условии: если на данный момент у вас есть доступ к бесплатной ссылке Google Cloud Credits (которая могла быть предоставлена вам организатором семинара), воспользуйтесь инструкциями на странице ниже, чтобы заранее выполнить этапы АКТИВАЦИИ КРЕДИТОВ и СОЗДАНИЯ ПРОЕКТА . Если у вас нет этой ссылки, перейдите к выполнению необходимых действий по проекту и выставлению счетов ниже:
Создайте свой проект
Вы можете пропустить приведенные ниже шаги, если вы уже активировали платежный аккаунт и создали проект по ссылке , упомянутой в условном шаге выше.
- В Google Cloud Console на странице выбора проекта выберите или создайте проект 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 Marketplace , чтобы включить API. Вы также можете использовать следующую команду:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Посетите страницу Близнецов и нажмите «Начать общение».
Включите другие необходимые 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 (заголовок)
- Темы (темы, разделенные знаком «;»)
- BookMeta_FullText (полный текст книги)
6. Создайте базовый шаблон Java Cloud Run с помощью Gemini.
Откройте редактор Cloud Shell, щелкнув значок «Открыть редактор» в правом верхнем углу терминала Cloud Shell (обычно я предпочитаю открывать терминал и редактор на отдельных вкладках параллельно, чтобы мы могли писать код в одной и встраивать в другую).
Открыв редактор, убедитесь, что логотип Gemini в правом нижнем углу консоли редактора активен (и не погашен). Также убедитесь, что ваш проект Google Cloud в левом нижнем углу указывает на текущий активный проект, с которым вы хотите работать. Если они неактивны, щелкните их, авторизируйтесь, выберите проект Google Cloud, на который вы хотите, чтобы он указывал, и активируйте их.
Как только оба станут активными, щелкните имя проекта в левом нижнем углу и в открывшемся всплывающем списке под названием «Cloud Code» прокрутите вниз до «Новое приложение».
В этом списке выберите приложение Cloud Run. В появившемся списке выберите Java:
В полученном списке введите имя проекта «bookshelf-web» вместо helloworld и нажмите «ОК».
Ура! Вы загрузили свое простое приложение Java Cloud Run с помощью Gemini и ничего не делали, кроме включения и активации конфигураций, согласны?
Вот структуру проекта, которую вы должны увидеть:
Прямо сейчас вы готовы развернуть приложение. Но мы начали это не поэтому. Нам все еще нужно включить основную функциональность веб-приложения, которая заключается в получении аналитических данных из базы данных BigQuery и их отображении в Интернете.
Для этого вы можете добавлять дополнительные запросы и постепенно разрабатывать свой код с помощью Gemini или написать логику самостоятельно. Я собираюсь смешать и то, и другое.
7. Добавьте зависимости для использования BigQuery в веб-приложении.
Теперь, когда приложение загружено, мы готовы внести изменения в исходный код и свойства приложения. Во-первых, давайте добавим зависимости. Давайте попросим Близнецов порекомендовать его.
В редакторе кода Cloud убедитесь, что в строке состояния в правом нижнем углу отображается активный Gemini, а в левом нижнем углу выбран активный проект Google Cloud.
В редакторе кода Cloud перейдите к файлу pom.xml, прямо над тегом </dependent> и введите следующий комментарий:
<!-- 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, выполнение запроса, который извлекает данные для вывода названия и тем книги.
- Вместо возврата шаблона индексного представления при загрузке он обновляется и возвращает ответ в виде строки в Интернет.
Важное примечание: не забудьте обновить приведенную ниже информацию.
- Обновите файл HelloWorldControllerTests.Java , чтобы закомментировать текущий вызов mvc.perform(...).
Близнецы для пояснения кода
Мы предоставили вам код и описали изменения, которые мы внесли в исходные файлы. Вы также могли бы использовать Gemini для получения пояснений к коду и/или комментариев к коду, если это необходимо. Вот несколько вещей, которые вы можете попробовать:
- Открыв файл HelloWorldController.java в IDE, перейдите на панель чата в IDE и введите следующую подсказку: Объясните это . Ознакомьтесь с подробным объяснением, которое предоставляют Близнецы. Вы можете использовать его в любое время для получения пояснений по коду.
- Вы можете выделить любой конкретный фрагмент или строку в коде (например, @GetMapping("/") ), а затем использовать следующую подсказку: Объясните это. Это предоставит подробное объяснение только для выбранной вами строки кода или фрагмента.
- Вы даже можете попробовать некоторые запросы, которые запрашивают код другим способом. Например, вы можете выбрать следующую строку кода
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
и задайте следующий запрос : «Что произойдет, если переменная bigquery будет равна нулю?» 4. Вы также можете запросить улучшение кода или рефакторинг с помощью Gemini. Например, вы можете выбрать весь код для метода helloWorld() и дать следующую подсказку: «Как мне улучшить или реорганизовать этот код?» . Ознакомьтесь с предложениями, которые предлагает Близнецы.
9. Сборка и развертывание
Перейдите к терминалу Cloud Shell. Убедитесь, что он указывает на идентификатор вашего проекта в терминале.
Перейдите в каталог проекта с помощью команды cd:
cd bookshelf-web
Выполните приведенные ниже команды одну за другой, чтобы убедиться, что ваше приложение работает локально.
mvn package
mvn spring-boot:run
Теперь нажмите кнопку «Предварительный просмотр в Интернете» и выберите опцию «Предварительный просмотр на порту 8080», как показано ниже:
Убедитесь, что вы можете видеть приложение, работающее локально на вашем компьютере с облачной оболочкой.
Теперь давайте спросим 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?
Ниже приведен ответ:
Давайте заменим имя службы и заполнители региона в команде 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 Console, и следуйте инструкциям, которые она ответит, чтобы очистить ресурс.