1. Обзор
В мире оздоровительных и фитнес-приложений ключевым моментом является предоставление пользователям богатого и увлекательного опыта. Для приложения для йоги это означает выход за рамки простого текстового описания поз и предложение исчерпывающей информации, мультимедийного контента и возможностей интеллектуального поиска. В этом блоге мы рассмотрим, как создать надежную базу данных поз йоги с помощью Google Cloud Firestore, использовать расширение векторного поиска для контекстного сопоставления и интегрировать возможности Gemini 2.0 Flash (экспериментальный) для работы с мультимодальным контентом.
Почему Firestore?
Firestore, бессерверная база данных документов NoSQL от Google Cloud, является отличным выбором для создания масштабируемых и динамических приложений. Вот почему он отлично подходит для нашего приложения для йоги:
- Масштабируемость и производительность: Firestore автоматически масштабируется для обработки миллионов пользователей и огромных наборов данных, гарантируя, что ваше приложение останется отзывчивым даже по мере его роста.
- Обновления в реальном времени. Встроенная синхронизация в реальном времени обеспечивает согласованность данных на всех подключенных клиентах, что делает их идеальными для таких функций, как живые занятия или совместная практика.
- Гибкая модель данных: структура Firestore на основе документов позволяет хранить различные типы данных, включая текст, изображения и даже встраивания, что делает ее идеальной для представления сложной информации о позах йоги.
- Мощные запросы: Firestore поддерживает сложные запросы, включая равенство и неравенство, а теперь, с новым расширением, поиск векторного сходства .
- Оффлайн-поддержка: Firestore кэширует данные локально, позволяя вашему приложению работать, даже когда пользователи находятся в автономном режиме.
Улучшение поиска с помощью расширения векторного поиска Firestore
Традиционный поиск по ключевым словам может быть ограничен при работе со сложными понятиями, такими как позы йоги. Пользователь может искать позу, которая «раскрывает бедра» или «улучшает баланс», не зная конкретного названия позы. Здесь на помощь приходит векторный поиск.
Векторный поиск с помощью Firestore позволяет:
- Создание внедрений: преобразуйте текстовые описания, а в будущем, возможно, изображения и аудио, в числовые векторные представления (вложения), которые отражают их семантическое значение, используя модели, подобные тем, которые доступны в Vertex AI, или пользовательские модели.
- Хранить встроенные файлы: храните эти встроенные файлы непосредственно в документах Firestore.
- Выполняйте поиск по сходству: отправляйте запросы в базу данных, чтобы найти документы, семантически похожие на заданный вектор запроса, обеспечивая контекстное сопоставление.
Интеграция Gemini 2.0 Flash (экспериментальная)
Gemini 2.0 Flash — это передовая мультимодальная модель искусственного интеллекта от Google. Хотя он все еще является экспериментальным, он предлагает захватывающие возможности для улучшения нашего приложения для йоги:
- Генерация текста : используйте Gemini 2.0 Flash для создания подробных описаний поз йоги, включая преимущества, модификации и противопоказания.
- Генерация изображений (имитация) : Хотя прямое создание изображений с помощью Gemini еще не является общедоступным, я смоделировал это с помощью Google Imagen, генерируя изображения, которые визуально представляют позы.
- Генерация аудио (имитация) : Аналогичным образом мы можем использовать службу преобразования текста в речь (TTS) для создания аудиоинструкций для каждой позы, помогая пользователям выполнять практику.
Потенциально я предполагаю предложить интеграцию для улучшения приложения, чтобы использовать следующие функции модели:
- Мультимодальный Live API : этот новый API помогает создавать приложения для визуализации в реальном времени и потокового аудио с помощью инструментов.
- Скорость и производительность : Gemini 2.0 Flash имеет значительно улучшенное время появления первого токена (TTFT) по сравнению с Gemini 1.5 Flash.
- Улучшенный агентский опыт : Gemini 2.0 обеспечивает улучшения мультимодального понимания, кодирования, выполнения сложных инструкций и вызова функций. Эти улучшения работают вместе, чтобы улучшить работу агентов.
Более подробную информацию можно найти на странице документации %20over%20Gemini%201.5%20Flash).
Заземление с помощью поиска Google
Чтобы повысить доверие и предоставить дополнительные ресурсы, мы можем интегрировать поиск Google, чтобы обосновать информацию, предоставляемую нашим приложением. Это означает:
- Контекстный поиск: когда пользователь с правами администратора вводит данные позы, мы можем использовать название позы для выполнения поиска в Google.
- Извлечение URL-адресов: из результатов поиска мы можем извлечь соответствующие URL-адреса, такие как статьи, видео или авторитетные веб-сайты йоги, и отобразить их в приложении.
Что ты построишь
В рамках этой лабораторной работы вы:
- Создайте коллекцию Firestore и загрузите документы Yoga.
- Узнайте, как создавать CRUD-приложения с помощью Firestore.
- Создать описание позы йоги с помощью Gemini 2.0 Flash
- Включите векторный поиск Firebase с интеграцией Firestore
- Создание вложений из описания йоги
- Выполнить поиск по сходству для текста поиска пользователя
Требования
2. Прежде чем начать
Создать проект
- В Google Cloud Console на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего облачного проекта включена оплата. Узнайте, как проверить, включена ли оплата в проекте .
- Вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud, в которую предварительно загружен bq. Нажмите «Активировать Cloud Shell» в верхней части консоли Google Cloud.
- После подключения к Cloud Shell вы проверяете, что вы уже прошли аутентификацию и что для проекта установлен идентификатор вашего проекта, с помощью следующей команды:
gcloud auth list
- Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте.
gcloud config list project
- Если ваш проект не установлен, используйте следующую команду, чтобы установить его:
gcloud config set project <YOUR_PROJECT_ID>
- Включите необходимые API.
gcloud services enable firestore.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudfunctions.googleapis.com \
aiplatform.googleapis.com \
storage.googleapis.com \
secretmanager.googleapis.com \
texttospeech.googleapis.com
Альтернатива команде gcloud — через консоль, выполнив поиск по каждому продукту или воспользовавшись этой ссылкой .
Если какой-либо API пропущен, вы всегда можете включить его в ходе реализации.
Обратитесь к документации по командам и использованию gcloud.
3. Настройка базы данных
В документации есть более полные инструкции по настройке экземпляра Firestore. На высоком уровне, для начала, я выполню следующие шаги:
1. Перейдите в программу просмотра Firestore и на экране «Выберите службу базы данных» выберите Firestore в собственном режиме.
- Выберите место для вашего Firestore
- Нажмите «Создать базу данных» (если это первый раз, оставьте базу данных «(по умолчанию)»).
Когда вы создаете проект Firestore, он также включает API в Cloud API Manager.
- ВАЖНО: Выбирайте ТЕСТОВУЮ (не ПРОИЗВОДСТВЕННУЮ) версию Правил безопасности, чтобы данные были доступны.
- После настройки вы должны увидеть представление базы данных, коллекции и документов Firestore в собственном режиме, как показано на изображении ниже:
- Пока не делайте этого шага, но для справки: вы можете нажать «Начать сбор» и создать новую коллекцию. Установите идентификатор коллекции как «позы». Нажмите кнопку «Сохранить» .
Советы профессионалов по производственному применению:
- После того, как вы завершили свою модель данных и определили, кто должен иметь доступ к различным типам документов, вы сможете создавать, редактировать и отслеживать правила безопасности из интерфейса Firebase. Вы можете получить доступ к правилам безопасности по этой ссылке: https://console.firebase.google.com/u/0/project/ <<your_project_id>>/firestore/rules.
- Обязательно редактируйте, отслеживайте и тестируйте свои правила безопасности перед развертыванием/развертыванием проекта на этапе разработки, поскольку зачастую именно они являются молчаливым виновником того, почему ваше приложение работает по-другому :)
Для этой демонстрации мы будем использовать его в ТЕСТОВОМ режиме.
4. REST API Firestore
- REST API может быть полезен в следующих случаях:a. Доступ к Firestore из среды с ограниченными ресурсами, где невозможно запустить полную клиентскую библиотекуb. Автоматизация администрирования базы данных или получение подробных метаданных базы данных.
- Самый простой способ использовать Firestore — использовать одну из собственных клиентских библиотек. В некоторых ситуациях полезно напрямую вызывать REST API.
- В рамках этого блога вы увидите использование и демонстрацию REST API Firestore, а не собственных клиентских библиотек.
- Для аутентификации Firestore REST API принимает либо токен идентификатора аутентификации Firebase, либо токен Google Identity OAuth 2.0. Более подробную информацию по теме Аутентификация и Авторизация можно найти в документации .
- Все конечные точки REST API существуют по базовому URL-адресу https://firestore.googleapis.com/v1/ .
API Spring Boot и Firestore
Это решение в Spring Boot Framework предназначено для демонстрации клиентского приложения, которое использует API-интерфейсы Firestore для сбора и изменения деталей позы йоги и дыхания с помощью интерактивного взаимодействия с пользователем.
Подробное пошаговое объяснение части решения Firestore CRUD приложения Yoga Poses вы можете перейти по ссылке на блог .
Чтобы сосредоточиться на текущем решении и изучить часть CRUD на ходу, клонируйте все решение, посвященное этому блогу, из репозитория ниже из терминала Cloud Shell и получите копию кодовой базы.
git clone https://github.com/AbiramiSukumaran/firestore-poserecommender
Пожалуйста, обрати внимание:
- После того, как вы клонировали этот репозиторий, вам просто нужно внести несколько изменений в идентификатор вашего проекта, API и т. д. Никаких других изменений не требуется для запуска вашего приложения. Каждый компонент приложения описан в следующих разделах. Вот список изменений:
- В файле
src/main/java/com/example/demo/GenerateImageSample.java
замените «<<YOUR_PROJECT_ID>>» на идентификатор вашего проекта. - В файле
src/main/java/com/example/demo/GenerateEmbeddings.java
замените «<<YOUR_PROJECT_ID>>» на идентификатор вашего проекта. - В
src/main/java/com/example/demo/PoseController.java
замените все экземпляры «<<YOUR_PROJECT_ID>>"
и имя базы данных,
в данном случае"(default)",
соответствующими значениями из вашей конфигурации: - В
src/main/java/com/example/demo/PoseController.java
замените «[YOUR_API_KEY]
» на свой API-ключ для Gemini 2.0 Flash. Вы можете получить это из AI Studio . - Если вы хотите протестировать локально, выполните следующие команды из папки проекта в терминале Cloud Shell:
mvn package
mvn spring-boot:run
Прямо сейчас вы можете просмотреть работающее приложение, нажав кнопку «Предварительный просмотр в Интернете» в терминале Cloud Shell. Мы пока не готовы тестировать и опробовать приложение.
- Необязательно: если вы хотите развернуть приложение в Cloud Run, вам придется загрузить новое приложение Java Cloud Run с нуля из редактора Cloud Shell и добавить файлы src и файлы шаблонов из репозитория в новый проект в соответствующих папках (поскольку текущий проект репозитория GitHub по умолчанию не настроен для конфигурации развертывания Cloud Run). В этом случае необходимо выполнить следующие шаги (вместо клонирования существующего репо):
- Перейдите в редактор Cloud Shell (убедитесь, что открыт редактор, а не терминал), щелкните значок имени проекта Google Cloud в левой части строки состояния (заблокированная часть на снимке экрана ниже).
- Выберите «Новое приложение» -> «Приложение Cloud Run» -> «Java: Cloud Run» из списка вариантов и назовите его «firestore-poserecommender».
- Теперь вы должны увидеть полный шаблон стека для приложения Java Cloud Run, предварительно настроенный и готовый к работе.
- Удалите существующий класс Controller и скопируйте следующие файлы в соответствующие папки в структуре проекта:
firestore-poserecommender/src/main/java/com/example/demo/
- FirestoreSampleApplication.java
- GenerateEmbeddings.java
- GenerateImageSample.java
- Поза.java
- PoseController.java
- ServletInitializer.java
firestore-poserecommender/src/main/resources/static/
- Индекс.html
firestore-poserecommender/src/main/resources/templates/
- contextsearch.html
- createpose.html
- errmessage.html
- поза.html
- ryoq.html
- searchpose.html
- showmessage.html
Firestore-poserecommender/
- Докерфайл
- Вам необходимо внести изменения в соответствующие файлы, чтобы заменить PROJECT ID и API KEY соответствующими значениями. (шаги 1 a, b, c и d выше).
5. Прием данных
Данные для приложения доступны в этом файле data.json: https://github.com/AbiramiSukumaran/firestore-poserecommender/blob/main/data.json.
Если вы хотите начать с некоторых предопределенных данных, вы можете скопировать json и заменить все вхождения «<<YOUR_PROJECT_ID>>» своим значением.
- Перейти в студию Firestore
- Убедитесь, что вы создали коллекцию под названием «позы».
- Добавляйте документы из упомянутого выше файла репо вручную по одному.
Альтернативно вы можете импортировать данные за один раз из предопределенного набора, который мы создали для вас, выполнив следующие шаги:
- Перейдите в терминал Cloud Shell и убедитесь, что ваш активный проект Google Cloud установлен, и убедитесь, что вы авторизованы. Создайте корзину в своем проекте с помощью команды gsutil, приведенной ниже. Замените переменную <PROJECT_ID> в приведенной ниже команде идентификатором вашего проекта Google Cloud:
gsutil mb -l us gs:// <PROJECT_ID> -yoga-poses-bucket
- Теперь, когда корзина создана, нам нужно скопировать подготовленный нами экспорт базы данных в эту корзину, прежде чем мы сможем импортировать ее в базу данных Firebase. Используйте команду, указанную ниже:
gsutil cp -r gs://demo-bq-gemini-public/yoga_poses gs:// <PROJECT_ID> -yoga-poses-bucket
Теперь, когда у нас есть данные для импорта, мы можем перейти к последнему этапу импорта данных в созданную нами базу данных Firebase ( по умолчанию ).
- Перейдите в консоль Firestore и нажмите «Импорт/Экспорт» в меню навигации слева.
Выберите «Импорт» и выберите только что созданный путь к облачному хранилищу и перемещайтесь, пока не сможете выбрать файл «yoga_poses.overall_export_metadata»:
- Нажмите «Импортировать».
Импорт займет несколько секунд, и как только он будет готов, вы сможете проверить свою базу данных и коллекцию Firestore, посетив https://console.cloud.google.com/firestore/databases , выбрав базу данных по умолчанию и коллекцию поз , как показано ниже:
- Другой метод заключается в том, что вы также можете создавать записи вручную через приложение после развертывания с помощью действия «Создать новую позу».
6. Векторный поиск
Включить расширение векторного поиска Firestore
Используйте это расширение для автоматического встраивания и запроса документов Firestore с помощью новой функции векторного поиска! Вы попадете в Центр расширений Firebase.
При установке расширения Vector Search вы указываете коллекцию и имя поля документа. Добавление или обновление документа с этим полем запускает это расширение для расчета векторного внедрения для документа. Это векторное внедрение записывается обратно в тот же документ, и документ индексируется в хранилище векторов, готовый к запросу.
Давайте пройдемся по шагам:
Установите расширение:
Установите расширение «Векторный поиск с Firestore» из магазина расширений Firebase, нажав «Установить в консоли Firebase».
ВАЖНЫЙ:
Когда вы впервые переходите на эту страницу расширений, вам необходимо выбрать тот же проект, над которым вы работаете, в консоли Google Cloud, указанной в консоли Firebase.
Если вашего проекта нет в списке, добавьте его в Firebase ( выберите существующий проект Google Cloud из списка).
Настройте расширение:
Укажите коллекцию («позы»), поле, содержащее текст для встраивания («поза»), и другие параметры, например размеры встраивания.
Если на этом этапе перечислены API, которые необходимо включить, страница конфигурации позволит вам это сделать, следуйте соответствующим инструкциям.
Если страница некоторое время не отвечает после включения API, просто обновите ее, и вы увидите включенные API.
На одном из следующих шагов вы сможете использовать LLM по вашему выбору для создания вложений. Выберите «Вертексный AI».
Следующие несколько настроек связаны с вашей коллекцией и полем, которое вы хотите встроить:
LLM: Вершинный ИИ
Путь коллекции: позы
Ограничение запросов по умолчанию: 3
Мера расстояния: косинус
Имя поля ввода: поза
Имя выходного поля: внедрение
Имя поля статуса: статус
Встроить существующие документы: Да
Обновление существующих вложений: Да
Расположение облачных функций: us-central1
Включить события: не отмечено
После того, как все это настроено, нажмите кнопку «Установить расширение». Это займет 3–5 минут.
Создать вложения:
Когда вы добавляете или обновляете документы в коллекции «поз», расширение автоматически генерирует внедрения, используя предварительно обученную модель или модель по вашему выбору через конечную точку API. В данном случае мы выбрали Vertex AI в конфигурации расширения.
Создание индекса
Это потребует создания индекса в поле внедрения во время использования внедрения в приложении.
Firestore автоматически создает индексы для основных запросов; однако вы можете позволить Firestore генерировать синтаксис индекса, выполняя запросы, у которых нет индекса, и он предоставит вам ссылку на сгенерированный индекс в сообщении об ошибке на стороне приложения. Вот список шагов для создания векторного индекса:
- Перейдите в терминал Cloud Shell.
- Выполните следующую команду:
gcloud firestore indexes composite create --collection-group="poses" --query-scope=COLLECTION --database="(default)" --field-config vector-config='{"dimension":"768", "flat": "{}"}',field-path="embedding"
Подробнее об этом читайте здесь .
После создания векторного индекса вы можете выполнить поиск ближайшего соседа с помощью векторных вложений.
Важное примечание:
С этого момента вам не нужно вносить какие-либо изменения в исходный код. Просто следуйте инструкциям, чтобы понять, что делает приложение.
Выполнение векторного поиска
Давайте посмотрим, как ваше новое приложение подходит к векторному поиску. После сохранения вложений вы можете использовать класс VectorQuery из Firestore Java SDK для выполнения векторного поиска и получения результатов по ближайшему соседу:
CollectionReference coll = firestore.collection("poses");
VectorQuery vectorQuery = coll.findNearest(
"embedding",
userSearchTextEmbedding,
/* limit */ 3,
VectorQuery.DistanceMeasure.EUCLIDEAN,
VectorQueryOptions.newBuilder().setDistanceResultField("vector_distance")
.setDistanceThreshold(2.0)
.build());
ApiFuture<VectorQuerySnapshot> future = vectorQuery.get();
VectorQuerySnapshot vectorQuerySnapshot = future.get();
List<Pose> posesList = new ArrayList<Pose>();
// Get the ID of the closest document (assuming results are sorted by distance)
String closestDocumentId = vectorQuerySnapshot.getDocuments().get(0).getId();
Этот фрагмент сравнивает встраивание текста поиска пользователя с встраиванием документов в Firestore и извлекает наиболее близкий по контексту.
7. Близнецы 2.0 Флэш
Интеграция Gemini 2.0 Flash (для создания описания)
Давайте посмотрим, как ваше недавно созданное приложение обрабатывает интеграцию Gemini 2.0 Flash для создания описаний.
Теперь предположим, что администратор/инструктор по йоге хочет ввести подробную информацию о позах с помощью Gemini 2.0 Flash, а затем выполнить поиск, чтобы увидеть ближайшие совпадения. В результате извлекаются детали совпадающих поз вместе с мультимодальными объектами, которые подтверждают результаты.
String apiUrl = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp:generateContent?key=[YOUR_API_KEY]";
Map<String, Object> requestBody = new HashMap<>();
List<Map<String, Object>> contents = new ArrayList<>();
List<Map<String, Object>> tools = new ArrayList<>();
Map<String, Object> content = new HashMap<>();
List<Map<String, Object>> parts = new ArrayList<>();
Map<String, Object> part = new HashMap<>();
part.put("text", prompt);
parts.add(part);
content.put("parts", parts);
contents.add(content);
requestBody.put("contents", contents);
/**Setting up Grounding*/
Map<String, Object> googleSearchTool = new HashMap<>();
googleSearchTool.put("googleSearch", new HashMap<>());
tools.add(googleSearchTool);
requestBody.put("tools", tools);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
ResponseEntity<String> response = restTemplate.exchange(apiUrl, HttpMethod.POST, requestEntity, String.class);
System.out.println("Generated response: " + response);
String responseBody = response.getBody();
JSONObject jsonObject = new JSONObject(responseBody);
JSONArray candidates = jsonObject.getJSONArray("candidates");
JSONObject candidate = candidates.getJSONObject(0);
JSONObject contentResponse = candidate.getJSONObject("content");
JSONArray partsResponse = contentResponse.getJSONArray("parts");
JSONObject partResponse = partsResponse.getJSONObject(0);
String generatedText = partResponse.getString("text");
System.out.println("Generated Text: " + generatedText);
а. Имитация генерации изображения и звука
Gemini 2.0 Flash Experimental способен генерировать мультимодальные результаты, однако я еще не подписался на его ранний доступ, поэтому я имитировал вывод изображения и звука с помощью API Imagen и TTS соответственно. Представьте себе, как здорово получить все это с помощью одного вызова API Gemini 2.0 Flash!
try (PredictionServiceClient predictionServiceClient =
PredictionServiceClient.create(predictionServiceSettings)) {
final EndpointName endpointName =
EndpointName.ofProjectLocationPublisherModelName(
projectId, location, "google", "imagen-3.0-generate-001");
Map<String, Object> instancesMap = new HashMap<>();
instancesMap.put("prompt", prompt);
Value instances = mapToValue(instancesMap);
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("sampleCount", 1);
paramsMap.put("aspectRatio", "1:1");
paramsMap.put("safetyFilterLevel", "block_few");
paramsMap.put("personGeneration", "allow_adult");
Value parameters = mapToValue(paramsMap);
PredictResponse predictResponse =
predictionServiceClient.predict(
endpointName, Collections.singletonList(instances), parameters);
for (Value prediction : predictResponse.getPredictionsList()) {
Map<String, Value> fieldsMap = prediction.getStructValue().getFieldsMap();
if (fieldsMap.containsKey("bytesBase64Encoded")) {
bytesBase64Encoded = fieldsMap.get("bytesBase64Encoded").getStringValue();
}
}
return bytesBase64Encoded;
}
try {
// Create a Text-to-Speech client
try (TextToSpeechClient textToSpeechClient = TextToSpeechClient.create()) {
// Set the text input to be synthesized
SynthesisInput input = SynthesisInput.newBuilder().setText(postureString).build();
// Build the voice request, select the language code ("en-US") and the ssml
// voice gender
// ("neutral")
VoiceSelectionParams voice =
VoiceSelectionParams.newBuilder()
.setLanguageCode("en-US")
.setSsmlGender(SsmlVoiceGender.NEUTRAL)
.build();
// Select the type of audio file you want returned
AudioConfig audioConfig =
AudioConfig.newBuilder().setAudioEncoding(AudioEncoding.MP3).build();
// Perform the text-to-speech request on the text input with the selected voice
// parameters and audio file type
SynthesizeSpeechResponse response =
textToSpeechClient.synthesizeSpeech(input, voice, audioConfig);
// Get the audio contents from the response
ByteString audioContents = response.getAudioContent();
// Convert to Base64 string
String base64Audio = Base64.getEncoder().encodeToString(audioContents.toByteArray());
// Add the Base64 encoded audio to the Pose object
return base64Audio;
}
} catch (Exception e) {
e.printStackTrace(); // Handle exceptions appropriately. For a real app, log and provide user feedback.
return "Error in Audio Generation";
}
}
б. Заземление с помощью поиска Google:
Если вы проверите код вызова Gemini на шаге 6, вы заметите следующий фрагмент кода, позволяющий заземлить поиск Google для ответа LLM:
/**Setting up Grounding*/
Map<String, Object> googleSearchTool = new HashMap<>();
googleSearchTool.put("googleSearch", new HashMap<>());
tools.add(googleSearchTool);
requestBody.put("tools", tools);
Это необходимо для того, чтобы мы:
- Сопоставьте нашу модель с реальными результатами поиска
- Извлеките релевантные URL-адреса, указанные в поиске.
8. Запустите ваше приложение
Давайте рассмотрим все возможности вашего недавно созданного приложения Java Spring Boot с помощью простого веб-интерфейса Thymeleaf:
- Операции CRUD Firestore (создание, чтение, обновление, удаление)
- Поиск по ключевым словам
- Генеративное создание контекста на основе искусственного интеллекта
- Контекстный поиск (векторный поиск)
- Мультимодальный вывод для связи с поиском
- Запустите свой собственный запрос (запросы в формате структурированного запроса)
Пример: {"structuredQuery":{"select":{"fields":[{"fieldPath":"name"}]},"from":[{"collectionId":"fitness_poses"}]}}
Все эти функции, обсуждавшиеся до сих пор, являются частью приложения, которое вы только что создали из репозитория: https://github.com/AbiramiSukumaran/firestore-poserecommender.
Чтобы создать, запустить и развернуть его, выполните следующие команды из терминала Cloud Shell:
mvn package
mvn spring-boot:run
Вы должны увидеть результат и иметь возможность поиграть с функциями вашего приложения. Посмотрите видео ниже для демонстрации вывода:
Рекомендатор позы с Firestore, Vector Search и Gemini 2.0 Flash
Необязательный шаг:
Чтобы развернуть его в Cloud Run (при условии, что вы загрузили новое приложение с помощью Dockerfile и при необходимости скопировали файлы), выполните следующую команду из терминала Cloud Shell из каталога вашего проекта:
gcloud run deploy --source .
Укажите имя приложения, код региона (выберите код us-central1) и выберите неаутентифицированный вызов «Y», как будет предложено. Вы должны получить конечную точку приложения в терминале после успешного развертывания.
9. Очистка
Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом посте, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу «Управление ресурсами» .
- В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить» .
- В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить работу», чтобы удалить проект.
10. Поздравления
Поздравляем! Вы успешно использовали Firestore для создания надежного и интеллектуального приложения для управления позой в йоге. Объединив мощь Firestore, расширения векторного поиска и возможности Gemini 2.0 Flash (с имитацией генерации изображений и звука), мы создали по-настоящему интересное и информативное приложение Yoga для реализации операций CRUD, выполнения поиска по ключевым словам, контекстного векторного поиска и создания мультимедийного контента.
Этот подход не ограничивается приложениями для йоги. Поскольку модели искусственного интеллекта, такие как Gemini, продолжают развиваться, возможности для создания еще более захватывающего и персонализированного пользовательского опыта будут только расти. Не забывайте оставаться в курсе последних разработок и документации Google Cloud и Firebase, чтобы использовать весь потенциал этих технологий.
Если бы мне пришлось расширить это приложение, я бы попытался сделать с Gemini 2.0 Flash две вещи:
- Используйте Multimodal Live API, создавая изображение в реальном времени и потоковую передачу звука для конкретного варианта использования.
- Включите режим мышления , чтобы генерировать мысли, лежащие в основе ответов, для взаимодействия с данными в реальном времени, чтобы сделать процесс более реалистичным.
Не стесняйтесь попробовать и отправьте запрос на включение :>D!!!