Dane przesyłane do generatywnej AI za pomocą interfejsów Spanner i Vertex AI Imagen API

1. Wprowadzenie

W ramach tego ćwiczenia w Codelabs dowiesz się, jak stworzyć oparty na AI generator pozycji za pomocą języka Java, Spring Boot, bazy danych Cloud Spanner i interfejsu Vertex AI Imagen API. Użytkownik poda prompt, a aplikacja wygeneruje pozę na jego podstawie. Użyjemy też danych z bazy danych Spannera udostępnianych jako interfejs API REST. To zabawny i edukacyjny sposób zaprezentowania możliwości generatywnej AI za pomocą Spring Boot w Google Cloud.

Lista wykorzystywanych usług:

  1. Cloud Spanner
  2. Interfejs Vertex AI Imagen API
  3. Cloud Run

Ogólny schemat przepływu

60192bcbff4c39de.png

Co utworzysz

Tworzenie:

  • Aplikacja Java Spring Boot dla interfejsu API danych Spannera jako usługi
  • Aplikacja Spring Boot w Javie na potrzeby generowania obrazów przy użyciu Imagen
  • Interaktywny interfejs do wprowadzania danych i odpowiedzi na prompty

2. Wymagania

  • przeglądarki, na przykład Chrome lub Firefox;
  • Projekt Google Cloud z włączonymi płatnościami

Zanim zaczniesz

  1. Na stronie selektora projektów w konsoli Google Cloud wybierz lub utwórz projekt Google Cloud.
  2. Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności.
  3. Upewnij się, że wszystkie niezbędne interfejsy API (Cloud Spanner API, Vertex AI API, Cloud Run API i Cloud Functions API) są włączone
  4. Użyjesz Cloud Shell – środowiska wiersza poleceń działającego w Google Cloud, które ma wstępnie zainstalowane narzędzie bq. Więcej informacji o poleceniach i korzystaniu z gcloud znajdziesz w dokumentacji

W prawym górnym rogu konsoli Cloud kliknij Aktywuj Cloud Shell:

51622c00acec2fa.png

Jeśli Twój projekt nie jest skonfigurowany, ustaw go za pomocą tego polecenia:

gcloud config set project <YOUR_PROJECT_ID>
  1. Aby rozpocząć, otwórz stronę Cloud Spanner z aktywnym projektem Google Cloud

3. Przygotowywanie danych w usłudze Spanner

Zanim utworzysz aplikację, zakończmy konfigurowanie bazy danych, tworząc instancję, bazę danych i tabelę Cloud Spanner. W tym blogu znajdziesz więcej informacji o funkcjach Cloud Spanner, DDL, DML i innych zagadnieniach. Aby utworzyć obiekty bazy danych wymagane w tym projekcie, wykonaj te czynności:

  1. Utwórz instancję, klikając UTWÓRZ INSTANCJĘ na stronie instancji.
  2. Podaj dane widoczne na obrazie poniżej i kliknij UTWÓRZ:

f869fcbb922027a5.png

  1. Po utworzeniu na stronie przeglądu instancji kliknij UTWÓRZ BAZĘ DANYCH.
  2. Podaj nazwę bazy danych „first-spanner-db” i wpisz następujący tekst DDL w sekcji SZABLONY DDL, a następnie kliknij PRZEŚLIJ:
CREATE TABLE Yoga_Poses(
  Pose_Id   INT64 NOT NULL,
  Name  STRING(1024),
  Breath STRING(1024),
  Description STRING(1024)
) PRIMARY KEY(Pose_Id);

Baza danych i tabela powinny zostać utworzone w wyniku wykonania ostatniego kroku. Wstawmy teraz kilka wierszy do tabeli Yoga_Poses, abyśmy mogli przejść do tworzenia aplikacji Spring Boot.

  1. Kliknij Spanner Studio w panelu Baza danych po lewej stronie i otwórz nową kartę edytora zapytań, tak jak na ilustracji poniżej:

c86774e8fd32eca0.png

  1. Uruchom następujące zapytania INSERT:
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(1, 'STAND', 'INHALE AND EXHALE', 
'STAND WITH YOUR FEET HIP WIDTH APART AND ARMS RESTING BY THE SIDES');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(2, 'PLANK', 'INHALE OR EXHALE', 
'PLANT YOUR TOES AND PALMS ON THE MAT WITH BODY PARALLEL TO THE GROUND');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(3, 'SIT', 'INHALE AND EXHALE', 
'SIT ON THE FLOOR LEGS CROSSED');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(4, 'BEND', 'EXHALE', 
'FOLD FORWARD AS YOU STAND, HANDS REACHING TO THE FLOOR');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(5, 'PUSH UP', 'EXHALE', 
'PLANK WITH ELBOWS ON MAT');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(6, 'SEATED FORWARD BEND', 'EXHALE', 
'FOLD FORWARD AS YOU SIT, HANDS TRYING TO REACH THE FEET');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(7, 'LUNGE', 'EXHALE', 
'ONE LEG TO THE FRONT 90 DEGREES TO THE FLOOR AND THE BACK LEG STRAIGHT');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(8, 'COURTESY LUNGE', 'INHALE', 
'ONE LEG TO THE FRONT 90 DEGREES TO THE FLOOR AND THE BACK KNEE TOUCHING THE FLOOR');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(9, 'BANK BEND', 'INHALE', 
'STAND WITH ARMS UP AND BODY BENT BACKWARDS, ARCHING YOUR SPINE, LOOKING AT THE SKY');

INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(10, 'BICEP ACTION', 'INHALE AND EXHALE', 
'CURL, PRESS AND WORK YOUR BICEPS');

Instancja, baza danych, tabela i dane Spannera są teraz utworzone i gotowe do działania aplikacji.

4. Tworzenie interfejsu API typu REST za pomocą Spring Boot i Spannera do przetwarzania danych o pozycji

Aby zapoznać się z usługą Spring Boot i konsolą Google Cloud, zajrzyj na tego bloga.

  1. Uruchamianie aplikacji Spring Boot Aby załadować tę aplikację od zera, obserwuj tego bloga. Aby skopiować dane z repozytorium i rozpocząć działanie, po prostu uruchom poniższe polecenie w terminalu Cloud Shell:
git clone https://github.com/AbiramiSukumaran/spanner-springb

Powinno to spowodować utworzenie projektu Spanner-springb w maszynie Cloud Shell. Aby zapoznać się z komponentami aplikacji, odwiedź bloga.

  1. Skompiluj i uruchom aplikację. Aby to zrobić, uruchom te polecenia z terminala Cloud Shell:
cd spanner-springb

./mvnw package

./mvnw spring-boot:run
  1. Wdróż aplikację w Cloud Run, aby była dostępna dla aplikacji generatora pozycji. Aby to zrobić, uruchom to polecenie w terminalu Cloud Shell:
gcloud run deploy –source .

Przekaż wymagane parametry i upewnij się, że aplikacja została wdrożona. Wygenerowany adres URL usługi powinien umożliwiać wyświetlanie listy danych utworzonych w usłudze Spanner.

5. Wczytaj aplikację do generatora pozycji za pomocą Spring Boot, Spannera i Imagen

Na tym etapie zakończyliśmy górną część schematu przepływu, czyli udostępnienie danych Spannera jako usługi (API REST). Utwórzmy teraz aplikację kliencką, która wywołuje dane Spannera, wywołuje interfejs IMAGEN API za pomocą prompta i zwraca ciąg zakodowany Base64 jako obraz do interfejsu użytkownika.

  1. Wiesz już, czym jest projekt Spring Boot i jego znaczenie. Od razu przejdź do klonowania repozytorium na komputerze Cloud Shell, uruchamiając w terminalu Cloud Shell to polecenie:
git clone https://github.com/AbiramiSukumaran/genai-posegen

Powinno to spowodować utworzenie projektu genai-posegen w maszynie Cloud Shell. Sklonowana struktura projektu będzie wyświetlana w edytorze Cloud Shell w ten sposób:

b19a94f895f74c62.png

Klasa PromptController Javy ma również wywołanie usługi bazy danych, implementację logiki biznesowej i wywołanie interfejsu API generatywnej AI dla Imagen. Ta klasa współdziała z szablonami Thymeleaf, które służą do integracji danych z interfejsem. W tej klasie są 3 metody usługi: 1) pobieranie danych wejściowych promptu, 2) przetwarzanie żądania i wywoływanie interfejsu Imagen API oraz 3) przetwarzanie odpowiedzi obrazu.

Prompt i Yoga to klasy POJO, które zawierają pola oraz elementy pobierające i ustawiający odpowiednio do interfejsu odpowiednio interfejsu Imagen API i Spannera API serwera danych.

Pliki HTML Index i getImage w folderze szablonów zawierają szablony interfejsu oraz zależności skryptów JS i css w odpowiednich folderach.

Integracja interfejsu Vertex AI Imagen API. W przypadku generowania obrazów korzystamy z interfejsu Imagen API Vertex AI w następującym formacie:

https://<<region>>- aiplatform.googleapis.com/v1/projects/<<your-project-id>>/locations/<<region>>/publishers/google/models/imagegeneration:predict

Więcej informacji o funkcjach Imagen znajdziesz tutaj. Zwraca odpowiedź w formacie ciągu znaków zakodowanym w standardzie Base64. Aby przekonwertować go na obraz, użyliśmy metody javascript setattribute (w pliku getImage.js) na obiekcie graficznym w następujący sposób w pliku getImage.HTML:

poseImage.setAttribute('src', "data:image/jpg;base64," + baseStr64);

Authorization Aby uzyskać dostęp do interfejsu Imagen API, musisz włączyć uwierzytelnianie tokenem okaziciela. W naszym przypadku zastosowaliśmy metodę JSON z domyślnymi danymi uwierzytelniającymi aplikacji. Aby go wdrożyć, uruchom poniższe polecenie w terminalu Cloud Shell i postępuj zgodnie z wyświetlanymi instrukcjami:

gcloud auth application-default login

Wpisz „Y” aby uwierzytelnić się na Twoim koncie. Zezwól na dostęp i skopiuj kod autoryzacji widoczny w wyskakującym okienku. Gdy to zrobisz, domyślne dane uwierzytelniające aplikacji zostaną zapisane w pliku JSON w lokalizacji podobnej do tej: /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json.

Pobierz plik lub skopiuj jego zawartość, uruchamiając polecenie cat (cat /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json) i użyj go w aplikacji w metodzie callImagen() klasy PromptController.java. Więcej informacji o uwierzytelnianiu znajdziesz tutaj.

Interfejs Jest podobny do kodu HTML, ale obsługuje więcej atrybutów do pracy z renderowanymi danymi. Plik index.html zawiera komponenty projektu strony docelowej. Umożliwia on użytkownikowi wybranie tematu i dodanie zastępującego promptu w celu wygenerowania wybranego obrazu.

6. Kompiluj i wdróż

Po sklonowaniu kodu zastąpiliśmy wartości obiektów zastępczych stosownymi do projektu, regionu i danych uwierzytelniających, więc możemy zająć się kompilowaniem i wdrażaniem aplikacji. W terminalu Cloud Shell przejdź do folderu projektu, używając polecenia, kompilacji, a następnie przeprowadź wdrożenie na potrzeby testów lokalnie na maszynie Cloud Shell, wykonując po kolei te 3 polecenia:

cd genai-posegen

./mvnw package

./mvnw spring-boot:run

Wdróż aplikację w Cloud Run, aby była dostępna w chmurze. W tym celu uruchom to polecenie z terminalu Cloud Shell w folderze projektu:

gcloud run deploy –source .

Przekaż wymagane parametry i upewnij się, że aplikacja została wdrożona.

7. Wersja demonstracyjna

Po wdrożeniu aplikacji w terminalu powinien pojawić się adres URL usługi. Kliknij link, aby zobaczyć, jak Twoja aplikacja do generowania obrazów pozy działa bezserwerowo w Google Cloud.

92bdb22109b2f756.gif

8. Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym poście, wykonaj te czynności:

  1. W konsoli Google Cloud otwórz stronę Zarządzanie zasobami.
  2. Na liście projektów wybierz projekt do usunięcia, a potem kliknij Usuń
  3. W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.
  4. Jeśli nie chcesz usuwać projektu, usuń instancję Spannera. Aby to zrobić, przejdź do instancji utworzonej właśnie dla tego projektu i kliknij przycisk USUŃ INSTANCJĘ w prawym górnym rogu strony przeglądu instancji.
  5. Możesz też przejść na stronę usług Cloud Run, wybrać usługi utworzone w tym projekcie i kliknąć przycisk Usuń, aby je usunąć.

9. Gratulacje

Na tym blogu udało nam się przedstawić pełny stos aplikacji Spring Boot, która przechowuje i obsługuje dane w Cloud Spanner, dzięki czemu możemy generować pózwy przy użyciu interfejsu Google Cloud Vertex AI Imagen API w interaktywnej aplikacji klienckiej wdrożonej w Cloud Run. W sekcji schematu architektury tego bloga widzisz komponent Cloud Functions (Java), którego nigdy nie trzeba było robić? Możesz to zrobić, jeśli chcesz przekazać darowiznę. Możesz zaimplementować 2 funkcje w Javy, aby wykonać 2 metody dostępne w pliku getimage.html: zapisywanie pozycji w bazie danych i przesyłanie obrazów. Więcej informacji o modelu znajdziesz w dokumentacji Imagen w Vertex AI.