1. Wprowadzenie
Czy uwielbiasz czytać książki, ale przytłacza Cię ich ogromna liczba? Wyobraź sobie, że masz aplikację opartą na AI, która nie tylko rekomenduje idealną lekturę, ale też zawiera zwięzłe podsumowanie na podstawie wybranego przez Ciebie gatunku, co daje rzut oka na znaczenie książki. W ramach tego ćwiczenia w programie przeprowadzę Cię przez proces tworzenia takiej aplikacji za pomocą BigQuery, Gemini i Cloud Functions w technologii Gemini.
Omówienie projektu
Nasz przypadek użycia koncentruje się na 4 głównych komponentach:
- Książkowa baza danych: ogromny publiczny zbiór danych BigQuery z książkami z internetowego archiwum będzie służyć jako obszerny katalog książek.
- Silnik podsumowywania AI: funkcje Google Cloud, korzystające z modelu językowego Gemini 1.0 Pro, będą generować trafne podsumowania dostosowane do zapytań użytkowników.
- Integracja z BigQuery: funkcja zdalna w BigQuery, która wywołuje na żądanie naszą funkcję w Cloud Functions, aby dostarczać podsumowania i motywy książek.
- Interfejs użytkownika: aplikacja internetowa hostowana w Cloud Run, która będzie oferować użytkownikom aplikację internetową do wyświetlania wyników.
Ćwiczenia z kodem podzieliliśmy na 3 części:
Codelab 1: użyj Gemini do utworzenia funkcji Cloud Functions w Javie dla aplikacji Gemini.
Codelab 2: tworzenie aplikacji SQL za pomocą Gemini, BigQuery i generatywnej AI.
Codelab 3: użyj Gemini do utworzenia aplikacji internetowej Java Spring Boot, która będzie współpracować z BigQuery.
2. Tworzenie aplikacji SQL za pomocą Gemini, BigQuery i generatywnej AI
Co utworzysz
Utwórz
- Zdalny model w BigQuery, który wywołuje punkt końcowy Vertex AI text-bison-32k w celu identyfikowania gatunku (lub tematu) książki na podstawie listy słów kluczowych oddzielonych znakiem „"” w tabeli.
- Zdalną funkcję w BigQuery, która zdalnie wywoła wdrożony element generatywnej AI Cloud Function.
- Za pomocą zdalnego modelu i funkcji możesz podsumować motyw i tekst książki za pomocą zapytań SQL oraz zapisać wyniki w nowej tabeli w zbiorze danych półki na książki.
- Wykonaj te czynności za pomocą Gemini
3. Wymagania
- przeglądarka, np. Chrome lub Firefox;
- Projekt Google Cloud z włączonymi płatnościami
- Warto mieć wdrożoną funkcję w Cloud Functions w ramach ćwiczenia z programowania dostępnego w części 1: Ćwiczenie z programowania za pomocą Gemini w celu utworzenia funkcji w Cloud Functions dla aplikacji Gemini (w języku angielskim).
- Warunkowe: jeśli masz obecnie dostęp do linku do bezpłatnych środków w Google Cloud (które zostały Ci udostępnione przez organizatora warsztatów), postępuj zgodnie z instrukcjami na stronie poniżej, aby wcześniej wykonać czynności AKTYWACJI ŚRODKÓW i utworzenia projektu. Jeśli nie masz tego linku, wykonaj te czynności:
Tworzenie projektu
Jeśli masz już aktywne konto rozliczeniowe i utworzyłeś(-aś) projekt za pomocą linku wymienionego w warunkowym kroku powyżej, możesz pominąć czynności opisane poniżej.
- W konsoli Google Cloud na stronie selektora projektu wybierz lub utwórz projekt Google Cloud.
- Sprawdź, czy w projekcie Cloud włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności.
Aktywowanie Cloud Shell
- Użyjesz Cloud Shell – środowiska wiersza poleceń działającego w Google Cloud, które ma wstępnie zainstalowane narzędzie bq:
W prawym górnym rogu konsoli Cloud kliknij Aktywuj Cloud Shell:
- Po nawiązaniu połączenia z Cloud Shell powinno pojawić się informacja, że użytkownik jest już uwierzytelniony i że projekt jest już ustawiony na identyfikator Twojego projektu. Aby potwierdzić uwierzytelnianie, uruchom w Cloud Shell to polecenie:
gcloud auth list
- Aby sprawdzić, czy polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project
- Jeśli projekt nie jest ustawiony, użyj tego polecenia:
gcloud config set project <YOUR_PROJECT_ID>
Więcej informacji o poleceniach i użytkowaniu gcloud znajdziesz w dokumentacji.
4. Włączanie Gemini for Google Cloud i niezbędnych interfejsów API
Włącz Gemini
- Aby włączyć interfejs API, otwórz Marketplace Gemini for Google Cloud. Możesz też użyć tego polecenia:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Otwórz stronę Gemini i kliknij „Rozpocznij czat”.
Włączanie innych wymaganych interfejsów API
Jak to zrobić? Zapytajmy o to Gemini. Pamiętaj jednak, że:
Uwaga: modele LLM nie są deterministyczne. Dlatego podczas testowania tych promptów otrzymane odpowiedzi mogą wyglądać inaczej niż na moim zrzucie ekranu.
Otwórz konsolę czatu z Gemini, klikając ikonę „Otwórz Gemini” w prawym górnym rogu obok paska wyszukiwania w konsoli Google Cloud.
Wpisz to pytanie w sekcji „Wpisz prompt tutaj”:
Jak włączyć interfejsy API BigQuery i Vertex AI za pomocą polecenia gcloud?
Otrzymasz odpowiedź widoczną na tym obrazie:
Skopiuj to polecenie (możesz użyć ikony kopiowania u góry fragmentu kodu polecenia) i uruchom je w terminalu Cloud Shell, aby włączyć odpowiednie usługi:
- bigquery.googleapis.com
- aiplatform.googleapis.com
5. Przeglądaj publiczny zbiór danych BigQuery z danymi książek
Zacznij od zapoznania się z publicznym zbiorem danych BigQuery zawierającym informacje o licznych książkach z internetowego archiwum.
Ten publiczny zbiór danych znajdziesz w panelu Eksplorator BigQuery. Znajdziesz je po lewej stronie, gdy otworzysz konsolę BigQuery.
Na pasku wyszukiwania wpisz „gdelt-bq” lub „internetarchivebooks” i kliknij SZUKAJ WE WSZYSTKICH PROJEKTACH. Rozwiń wynik i oznacz gwiazdką książki z archiwum internetowego, jak pokazano na obrazku poniżej:
.
Rozwiń zbiór danych, kliknij gdelt-bq.internetarchivebooks, a następnie wyświetl podgląd danych w tabeli 1920. Ta tabela zawiera zarchiwizowane książki z roku 1920.
Aby przyjrzeć się schematowi, którego użyjemy w kolejnych sekcjach, uruchom to zapytanie:
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
W ćwiczeniach z programowania użyjemy tych 3 pól:
- BookMeta_Title (title)
- Tematy (tematy rozdzielone znakiem ‘;')
- BookMeta_FullText (pełny tekst książki)
6. Utwórz nowy zbiór danych BigQuery o nazwie bookshelf.
Chcemy utworzyć w ramach projektu zbiór danych, w którym będziemy przechowywać wszystkie obiekty bazy danych i analityki, które utworzymy w ramach tego laboratorium. Zapytajmy Gemini, jak utworzyć zbiór danych BigQuery. Czat Gemini powinien być już otwarty w innej karcie przeglądarki z kroku włączania interfejsów API. Jeśli nie, możesz to zrobić teraz. Otwórz konsolę Google Cloud, wpisując adres https://console.cloud.google.com. Ikona Gemini powinna pojawić się obok paska wyszukiwania u góry. Kliknij go, aby otworzyć czat.
Wpisz prompt jak pokazano poniżej.
Oto prompt:
How to create a BigQuery dataset?
Oto odpowiedź:
Wykonaj czynności opisane w odpowiedzi, aby utworzyć w aktywnym projekcie zbiór danych o nazwie „półka na książki”.
Aby utworzyć zbiór danych BigQuery, wykonaj te czynności:
- Otwórz stronę BigQuery w konsoli Google Cloud.
- W panelu Eksplorator kliknij identyfikator projektu.
- Kliknij Utwórz zbiór danych (ta opcja powinna być widoczna w grupie opcji, która pojawia się po kliknięciu 3 kropek obok identyfikatora projektu).
- Jako nazwę zbioru danych wpisz „bookshelf”.
- Ustaw lokalizację jako „Stany Zjednoczone(wiele regionów)”.
- W przypadku kroków 3, 4, 5 i 6 z opisu odpowiedzi pozostaw domyślne opcje.
- Kliknij UTWÓRZ ZBIÓR DANYCH.
Zbiór danych zostanie utworzony i pojawi się w panelu Eksplorator. Zbiór danych „półka na książki” może wyglądać tak:
7. Tworzenie modelu zdalnego do wywoływania modelu LLM Vertex AI (text-bison-32k)
Następnie musimy utworzyć w BigQuery model, który wywołuje model Vertex AI „text-bison-32k”. Model pomoże Ci zidentyfikować wspólny motyw, czyli kontekst książki, na podstawie listy słów kluczowych dla każdej książki w zbiorze danych.
Zapytajmy o to Gemini. Aby to zrobić, przejdź na kartę, na której masz otwartą konsolę czatu z Gemini, i wpisz ten prompt:
Jak połączysz BigQuery i Vertex AI, aby wywołać punkt końcowy LLM (text-bison-32k) w BigQuery?
Odpowiedź wygląda tak:
Odpowiedź zawiera dokładne informacje, takie jak kroki obejmujące użycie instrukcji CREATE MODEL, użycie połączenia z BigQuery i zdefiniowanie punktu końcowego. Zapytanie jest prawidłowe w moim przypadku, ale nie oznacza to, że otrzymasz dokładnie takie samo wyjście, ponieważ jest to duży model językowy, więc odpowiedzi mogą mieć inny format, objętość i głębię. Jeśli nie widzisz wszystkich otrzymanych przeze mnie informacji, możesz zadawać pytania w czacie. Na przykład: podaj więcej informacji o tym, jak utworzyć zasób połączenia, dlaczego brakuje atrybutu połączenia lub jak połączyć się z BigQuery z Vertex AI itp.
Oto przykładowy komunikat do wysłania w następnym kroku (użyj go tylko wtedy, gdy potrzebujesz kolejnego komunikatu; jeśli pierwsza odpowiedź jest wystarczająca, kontynuuj):
What about the connection? How will I connect from BigQuery to Vertex AI?
Oto odpowiedź:
Aby utworzyć połączenie z BigQuery, wykonaj te czynności:
- Otwórz konsolę BigQuery.
- W panelu Eksplorator BigQuery kliknij kolejno przycisk „+DODAJ” i „Połączenia z zewnętrznymi źródłami danych”.
- W tym momencie pojawi się prośba o włączenie interfejsu BigQuery Connection API. Kliknij WŁĄCZ API:
- Kliknij „Połączenia z zewnętrznych źródeł danych” i powinieneś zobaczyć widoczny poniżej slajd „Zewnętrzne źródło danych”. Na liście źródeł zewnętrznych wybierz źródło „Vertex AI”.
- Wpisz identyfikator połączenia (może to być dowolny identyfikator, ale na razie ustaw go jako „bq-vx”) i region (wieloregionowy „US”).
- Kliknij „Utwórz połączenie”.
- Po utworzeniu połączenia kliknij „Przejdź do połączenia”.
- Na stronie z informacjami o połączeniu skopiuj identyfikator konta usługi, ponieważ będzie on używany w kolejnych krokach.
- Po utworzeniu połączenia skopiuj identyfikator konta usługi i przypisz mu uprawnienia, aby móc korzystać z Vertex AI.
- Na stronie konsoli Google Cloud otwórz Google Cloud IAM lub przejdź do linku.
- W sekcji Wyświetl według podmiotów zabezpieczeń kliknij Przyznaj dostęp.
- W oknie Przyznaj dostęp wpisz identyfikator konta usługi w polu tekstowym Nowe podmioty zabezpieczeń.
- Ustaw rolę na „Użytkownik Vertex AI”.
Wymagane połączenie zostało utworzone. Uprawnienia są przyznawane podmiotowi (konto usługi połączenia) na potrzeby korzystania z Vertex AI w BigQuery.
W edytorze zapytań BigQuery uruchom poniższą instrukcję DDL(język definiowania danych), która odpowiada za tworzenie obiektu bazy danych, w tym przypadku MODEL.
CREATE OR REPLACE MODEL bookshelf.llm_model
REMOTE WITH CONNECTION `us.bq-vx`
OPTIONS (ENDPOINT = 'text-bison-32k');
Możesz też poprosić Gemini o zaproponowanie zapytania, które pozwoli utworzyć model do wywołania modelu „text-bison-32k”.
Uwaga: jeśli w przypadku połączenia została użyta inna nazwa, zastąp nią „us.bq-vx” w poprzednim poleceniu DDL. To zapytanie tworzy w zbiorze danych „bookshelf”, który został utworzony wcześniej, model zdalny.
8. Utwórz funkcję zdalną, która wywołuje funkcję w Cloud Functions w Javie
Teraz utworzymy w BigQuery funkcję zdalną, korzystając z funkcji Java Cloud Function utworzonej w ćwiczeniu 1 z tej serii na potrzeby implementacji modelu Gemini. Ta funkcja zdalna będzie używana do podsumowywania treści książki.
Uwaga: jeśli nie udało Ci się uruchomić tego laboratorium kodu lub nie wdrożyłeś tej funkcji w Cloud Functions, możesz pominąć ten krok i przejść do następnego tematu (podsumowanie tematu książek za pomocą modelu zdalnego).
Otwórz konsolę BigQuery i wklej w Edytorze zapytań to wyrażenie DDL (możesz utworzyć nową kartę Edytora zapytań, klikając przycisk +).
Poniżej znajduje się kod DDL, który możesz skopiować. Pamiętaj, aby zastąpić punkt końcowy wdrożonym punktem końcowym funkcji w Cloud Functions (utworzonym w ćwiczeniu 1). Jeśli nie masz punktu końcowego, możesz zastąpić zamaskowane znaki w tym poniżej pliku DDL ciągiem „abis-345004” na potrzeby demonstracyjne.
CREATE OR REPLACE FUNCTION
`bookshelf.GEMINI_REMOTE_CALL` (context STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.bq-vx`
OPTIONS (
endpoint = 'https://us-central1-****-******.cloudfunctions.net/remote-gemini-call' );
Otwórz konsolę BigQuery w Google Cloud Platform i otwórz nową kartę Edytor zapytań. W edytorze zapytań BigQuery wklej powyższą instrukcję DDL. Po wykonaniu zapytania otrzymasz taką odpowiedź:
Po utworzeniu modelu i funkcji przetestujmy te 2 obiekty BigQuery, uruchamiając je w zapytaniu SELECT.
9. Podsumowywanie tematów za pomocą modelu zdalnego
Użyjemy utworzonego przez nas modelu zdalnego „bookshelf.llm_model”, aby wygenerować skonsolidowane słowo kluczowe dla książki z podanej listy tematów:
SELECT * FROM ML.GENERATE_TEXT(MODEL `bookshelf.llm_model`,
(
SELECT
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` LIMIT 1
));
Opcjonalny krok: wynik w polu wyników wygenerowanym przez LLM jest zagnieżdżony. Dodajmy do zapytania kilka parametrów LLM i atrybut „flatten_json_output”. Użycie atrybutu „flatten_json_output” pomaga usunąć zagnieżdżoną strukturę z pola wyników wygenerowanych przez LLM.
SELECT * FROM ML.GENERATE_TEXT ( MODEL `bookshelf.llm_model`, (
SELECT CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt FROM `gdelt-bq.internetarchivebooks.1920` limit 1),
STRUCT( 0.2 AS temperature, 100 AS max_output_tokens, TRUE AS flatten_json_output));
Teraz uruchom zapytanie SELECT w edytorze BigQuery i sprawdź wynik. Ze względu na testy ograniczyliśmy wynik zapytania do 1. Wynik jest wyświetlany w ten sposób:
10. Podsumowanie pełnego tekstu książek za pomocą funkcji zdalnej
Teraz spróbujemy podsumować książkę, uruchamiając utworzoną wcześniej funkcję Cloud Functions bookshelf.GEMINI_REMOTE_CALL.
Uwaga: jeśli pominęliśmy tworzenie zdalnej funkcji (poprzedni temat w tym CodeLab), pamiętaj, aby pominąć też wywołanie funkcji bookshelf.GEMINI_REMOTE_CALL w zapytaniu SELECT.
Użyj zapytania SELECT, które wywołuje utworzoną wcześniej funkcję zdalną (GEMINI_REMOTE_CALL). Wywołanie tej funkcji, GEMINI_REMOTE_CALL, zawiera prompt z prośbą o podanie podsumowania tekstu książki:
select BookMeta_Title, `bookshelf.GEMINI_REMOTE_CALL` (
CONCAT('This is about a book. The title of the book is this: ', BookMeta_Title, ' . The theme of the book is as follows: ', Themes, 'The following text contains an excerpt from the book. Summarize it in less than 5 lines to create the gist. If you do not have a summary, use the title and themes to make up a short summary. DO NOT RETURN EMPTY RESPONSE. ', SUBSTR(BookMeta_FullText, 5000, 10000))) Summary
from `gdelt-bq.internetarchivebooks.1920` where Themes like '%EDUCATION%' limit 1;
Pamiętaj, że aby wygenerować podsumowanie, wykorzystaliśmy podciąg tekstu z pełnego tekstu książki.
Wynik zapytania:
11. Przechowywanie danych książek w tabeli
Po przetestowaniu obu wywołań LLM (modelu zdalnego i funkcji) z BigQuery tylko przy użyciu zapytań SQL utworzymy tabelę BigQuery, w której dane „półki” z statystykami motywu są w tym samym zbiorze danych co model zdalny i funkcja.
W tym kroku możemy uwzględnić zarówno wywołanie modelu LLM, jak i wywołanie funkcji zdalnej. Ponieważ jednak wywołanie funkcji zdalnej (które wywołuje funkcję Cloud Functions) zostało oznaczone jako opcjonalne, użyjemy tylko statystyk z modelu zdalnego.
Oto zapytanie, którego użyjemy:
SELECT
BookMeta_Title, Themes, ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output));
Gdy uruchomisz zapytanie w edytorze BigQuery, otrzymasz taki wynik:
Poproś Gemini o utworzenie tabeli o nazwie „półka na książki.książki” z powyższego zapytania. Otwórz konsolę czatu Gemini w konsoli Google Cloud i wpisz ten prompt.
Użyjemy takiego promptu:
Create a BigQuery table named bookshelf.books from this SELECT query:
SELECT
BookMeta_Title, Themes, ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output));
Odpowiedź czatu z Gemini wygląda tak:
Oto zapytanie, które możesz skopiować bezpośrednio z tego miejsca:
CREATE TABLE bookshelf.books (
BookMeta_Title STRING,
Themes STRING,
ml_generate_text_llm_result STRING
) AS (
SELECT
BookMeta_Title,
Themes,
ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,
BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920`
LIMIT 5
),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output
)
)
);
Po wykonaniu zapytania w Edytorze BigQuery otrzymasz taki wynik:
Znakomicie. Teraz wykonaj zapytanie na tabeli i wypróbuj dane, aby uzyskać więcej informacji.
12. Gratulacje
Gratulacje! Udało nam się wykonać te czynności i wykorzystać Gemini w niektórych etapach procesu:
- Utworzono model zdalny w BigQuery, który wywołuje punkt końcowy „text-bison-32k” Vertex AI w celu zidentyfikowania gatunku (lub motywu) książki na podstawie listy słów kluczowych rozdzielonych „;” w tabeli.
- Utworzono w BigQuery funkcję zdalną, która zdalnie wywoła wdrożoną funkcję generatywnej AI w Cloud Functions. Ta funkcja przyjmuje prompt jako dane wejściowe, a jako dane wyjściowe zwraca ciąg znaków podsumowujący książkę w 5 wierszach.
- Użyto modelu i funkcji zdalnej, aby za pomocą zapytań SQL podsumować temat i tekst książki oraz zapisać wyniki w nowej tabeli w zbiorze danych bookshelf.
- W ramach dalszych projektów spróbuj użyć Gemini, aby uzyskać kod SQL do usunięcia obiektów utworzonych w BigQuery. Dotyczy to etapu sprzątania.