Analityka półek na książki: używaj Gemini do tworzenia aplikacji SQL za pomocą BigQuery i generatywnej AI

1. Wprowadzenie

Lubisz czytać książki, ale przytłacza Cię ogromny wybór? Wyobraź sobie aplikację opartą na AI, która nie tylko poleca idealną lekturę, ale też oferuje zwięzłe podsumowanie na podstawie wybranego gatunku, dając Ci wgląd w treść książki. W tym module pokażę Ci, jak utworzyć taką aplikację za pomocą BigQuery, Gemini i Cloud Functions z Gemini.

Project Overview

Nasz przypadek użycia opiera się na tych 4 kluczowych komponentach:

  • Baza danych książek: obszerny publiczny zbiór danych BigQuery zawierający książki z archiwum internetowego będzie służyć jako nasz kompleksowy katalog książek.
  • Silnik podsumowań oparty na AI: Google Cloud Functions, wyposażone w model językowy Gemini 1.0 Pro, będą generować trafne podsumowania dostosowane do żądań użytkowników.
  • Integracja z BigQuery: funkcja zdalna w BigQuery, która wywołuje naszą funkcję Cloud Functions, aby dostarczać podsumowania i motywy książek na żądanie.
  • Interfejs użytkownika: aplikacja internetowa hostowana w Cloud Run, która będzie udostępniać użytkownikom aplikację internetową do wyświetlania wyników.

Implementację podzielimy na 3 warsztaty:

Codelab 1. Użyj Gemini do utworzenia funkcji w Cloud Functions w języku Java na potrzeby aplikacji Gemini.

Codelab 2: używanie Gemini do tworzenia aplikacji SQL z BigQuery i generatywną AI.

Codelab 3: użyj Gemini do utworzenia aplikacji internetowej Java Spring Boot, która wchodzi w interakcję z BigQuery.

2. Tworzenie aplikacji SQL za pomocą Gemini w BigQuery i generatywnej AI

Co utworzysz

Utworzysz

  • Zdalny model w BigQuery, który wywołuje punkt końcowy Vertex AI text-bison-32k, aby zidentyfikować gatunek (lub temat) książki na podstawie listy słów kluczowych rozdzielonych znakiem „;” w tabeli.
  • Zdalna funkcja w BigQuery, która będzie zdalnie wywoływać wdrożoną funkcję Cloud Function generatywnej AI.
  • Użyj modelu zdalnego i funkcji, aby podsumować temat i tekst książki za pomocą zapytań SQL, a następnie zapisać wyniki w nowej tabeli w zbiorze danych półki na książki.
  • Wykonasz te czynności z pomocą Gemini

3. Wymagania

Tworzenie projektu

Jeśli masz już aktywne konto rozliczeniowe i utworzony projekt, możesz pominąć poniższe czynności. W tym celu kliknij link podany w kroku warunkowym powyżej.

  1. W konsoli Google Cloud na stronie selektora projektów 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.

Aktywuj Cloud Shell

  1. Będziesz używać Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud, które jest wstępnie załadowane narzędziem bq:

W konsoli Cloud kliknij Aktywuj Cloud Shell w prawym górnym rogu: 6757b2fb50ddcc2d.png

  1. Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu. Aby potwierdzić, że uwierzytelnianie zostało przeprowadzone, uruchom w Cloud Shell to polecenie:

gcloud auth list

  1. Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:

gcloud config list project

  1. Jeśli projekt nie jest ustawiony, użyj tego polecenia, aby go ustawić:

gcloud config set project <YOUR_PROJECT_ID>

Informacje o poleceniach gcloud i ich użyciu znajdziesz w dokumentacji.

4. Włączanie Gemini for Google Cloud i niezbędnych interfejsów API

Włącz Gemini

  1. Aby włączyć interfejs API, przejdź do Marketplace w Gemini for Google Cloud. Możesz też użyć tego polecenia:

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

  1. Odwiedź stronę Gemini i kliknij „Rozpocznij czat”.

Włącz inne niezbędne interfejsy API

Jak to zrobić? Zapytajmy o to Gemini. Pamiętaj jednak, że:

Uwaga: duże modele językowe nie są deterministyczne. Dlatego podczas testowania tych promptów otrzymana odpowiedź może wyglądać inaczej niż na moim zrzucie ekranu.

Otwórz konsolę rozmowy 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 „Tutaj wpisz prompta”:

Jak włączyć interfejsy BigQuery i Vertex AI API za pomocą polecenia gcloud?

Otrzymasz odpowiedź widoczną na tym obrazie:

19c3fd78530794d9.png

Skopiuj to polecenie (możesz użyć ikony kopiowania u góry fragmentu kodu) i uruchom je w terminalu Cloud Shell, aby włączyć odpowiednie usługi:

  • bigquery.googleapis.com
  • aiplatform.googleapis.com

5. Przeglądanie publicznego zbioru danych BigQuery z danymi o książkach

Zacznij od zapoznania się z publicznym zbiorem danych BigQuery zawierającym informacje o wielu książkach z archiwum internetowego.

Ten publiczny zbiór danych znajdziesz w panelu eksploratora BigQuery. Znajduje się ona po lewej stronie konsoli BigQuery.

39e2ac03cc99cbac.png

Wpisz „gdelt-bq” lub „internetarchivebooks” na pasku wyszukiwania i kliknij SZUKAJ WE WSZYSTKICH PROJEKTACH. Rozwiń wynik i oznacz gwiazdką książki z archiwum internetowego, jak pokazano na ilustracji poniżej:

68dba68a79cddfc9.png.

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 1920 roku.

Aby zapoznać się ze schematem, którego będziemy używać w kolejnych sekcjach, uruchom to zapytanie:

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

W tym samouczku będziemy używać tych 3 pól:

  • BookMeta_Title (title)
  • Tematy (rozdzielone znakiem „;'”)
  • BookMeta_FullText (pełny tekst książki)

6. Utwórz nowy zbiór danych BigQuery o nazwie bookshelf

Chcemy utworzyć w projekcie zbiór danych, w którym będziemy przechowywać wszystkie obiekty bazy danych i analityczne, które utworzymy w tym laboratorium. Zapytajmy Gemini, jak utworzyć zbiór danych BigQuery. Rozmowa z Gemini powinna być już otwarta 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, przechodząc na stronę https://console.cloud.google.com. Obok paska wyszukiwania u góry powinna być widoczna ikona Gemini. Kliknij go, aby otworzyć czat.

26e1491322855614.png

Wpisz prompta w sposób pokazany poniżej.

Oto mój prompt:

How to create a BigQuery dataset?

Oto odpowiedź:

f7a989cc9a01009.png

Wykonaj czynności opisane w odpowiedzi, aby utworzyć w aktywnym projekcie zbiór danych o nazwie „bookshelf”.

Aby utworzyć zbiór danych BigQuery, wykonaj te czynności:

  1. Otwórz stronę BigQuery w konsoli Google Cloud.
  2. W panelu Eksplorator kliknij identyfikator projektu.
  3. Kliknij Utwórz zbiór danych (powinna to być jedna z opcji wyświetlanych po kliknięciu 3 kropek obok identyfikatora projektu).
  4. Jako nazwę zbioru danych wpisz „bookshelf” („półka na książki”).
  5. Ustaw lokalizację jako „Stany Zjednoczone(wiele regionów)”.
  6. W przypadku kroków 3, 4, 5 i 6 z odpowiedzi pozostaw opcje domyślne.
  7. 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 zidentyfikować wspólny motyw i kontekst książki na podstawie listy słów kluczowych dla każdej książki w zbiorze danych.

Zadajmy Gemini to pytanie. Aby to zrobić, otwórz kartę z konsolą rozmowy 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ź jest taka:

41904e30ce92b436.png

Odpowiedź zawiera dokładne informacje, takie jak kroki obejmujące użycie instrukcji CREATE MODEL, połączenie z BigQuery i zdefiniowanie punktu końcowego. Zapytanie jest dla mnie dokładne, ale nie oznacza to, że otrzymasz dokładnie takie same wyniki, ponieważ jest to duży model językowy, który może generować odpowiedzi w różnych formatach, o różnej objętości i głębokości. Jeśli nie widzisz wszystkich otrzymanych przeze mnie szczegółów, możesz zadać dodatkowe pytania na czacie. Na przykład: podaj więcej szczegółów o tym, jak utworzyć zasób połączenia lub dlaczego brakuje atrybutu połączenia, albo jak połączyć BigQuery z Vertex AI itp.

Oto przykładowy prompt uzupełniający (użyj go tylko wtedy, gdy potrzebujesz dodatkowych informacji, a pierwsza odpowiedź jest niewystarczająca):

What about the connection? How will I connect from BigQuery to Vertex AI?

Oto odpowiedź:

2ed9b3ed96b11bc9.png

Wykonajmy czynności z odpowiedzi, aby utworzyć połączenie z BigQuery:

  1. Otwórz konsolę BigQuery.
  2. W panelu Eksplorator BigQuery kliknij przycisk „+DODAJ” i wybierz „Połączenia ze zewnętrznymi źródłami danych”.
  3. Na tym etapie pojawi się prośba o włączenie interfejsu BigQuery Connection API. Kliknij WŁĄCZ API:

ded96126495ffe9.png

  1. Kliknij „Połączenia z zewnętrznymi źródłami danych”. Powinien pojawić się slajd „Zewnętrzne źródło danych” jak poniżej. Z listy źródeł zewnętrznych wybierz źródło „Vertex AI”.

434cdbbb3a9436f2.png

  1. Wpisz identyfikator połączenia (może to być dowolny identyfikator, ale na razie ustaw go jako „bq-vx”) i region (wiele regionów „US”).
  2. Kliknij „Utwórz połączenie”.

d3a2aeebc3ecdfae.png

  1. Po utworzeniu połączenia kliknij „Przejdź do połączenia”.
  2. Na stronie informacji o połączeniu skopiuj identyfikator konta usługi, ponieważ użyjemy go w kolejnych krokach.
  3. Po utworzeniu połączenia przypiszmy do skopiowanego identyfikatora konta usługi uprawnienia umożliwiające korzystanie z Vertex AI.
  4. Na stronie konsoli Google Cloud otwórz Google Cloud IAM lub przejdź do linku.
  5. W sekcji Wyświetl według podmiotów zabezpieczeń kliknij Przyznaj dostęp.

5317eed5da0bb8c5.png

  1. W oknie dialogowym Przyznaj dostęp w polu tekstowym Nowe podmioty zabezpieczeń wpisz identyfikator konta usługi, który został wcześniej zapisany.
  2. Ustaw rolę „Użytkownik Vertex AI”.

f213db33d220aa5f.png

Wymagane połączenie zostanie utworzone. Główny użytkownik (konto usługi połączenia) ma przyznane niezbędne uprawnienia do korzystania z Vertex AI w BigQuery.

W edytorze zapytań BigQuery uruchom tę instrukcję DDL(język definiowania danych), która reprezentuje tworzenie obiektu bazy danych, w tym przypadku MODELU.

CREATE OR REPLACE MODEL bookshelf.llm_model
  REMOTE WITH CONNECTION `us.bq-vx`
  OPTIONS (ENDPOINT = 'text-bison-32k');

Zamiast wykonywać powyższy krok, możesz poprosić Gemini o zaproponowanie zapytania do utworzenia modelu wywołującego model „text-bison-32k”.

Uwaga: jeśli połączenie ma inną nazwę, zastąp nią ciąg znaków „ us.bq-vx” w poprzedniej instrukcji DDL. To zapytanie tworzy w utworzonym wcześniej zbiorze danych „bookshelf” model zdalny.

8. Utwórz funkcję zdalną, która wywołuje funkcję Cloud Functions w języku Java

Teraz utworzymy w BigQuery funkcję zdalną, korzystając z funkcji Cloud Functions w Javie, którą utworzyliśmy w codelabie 1 tej serii, aby wdrożyć model Gemini. Ta funkcja zdalna będzie używana do podsumowywania treści książki.

Uwaga: jeśli nie udało Ci się wykonać tego codelabu lub nie udało Ci się wdrożyć tej funkcji Cloud Functions, możesz pominąć ten krok i przejść do następnego tematu (czyli podsumowania tematu książek za pomocą modelu zdalnego).

Otwórz konsolę BigQuery i wklej w edytorze zapytań to polecenie DDL (nową kartę edytora zapytań możesz utworzyć, klikając przycisk +):

a54c0b0014666cac.png

Poniżej znajdziesz instrukcję DDL, którą możesz skopiować. Pamiętaj, aby zastąpić punkt końcowy wdrożonym punktem końcowym funkcji w Cloud Functions (utworzonym na podstawie ćwiczenia 1). Jeśli nie masz punktu końcowego, możesz w celach demonstracyjnych zastąpić zamaskowane znaki w poniższym języku DDL ciągiem „abis-345004”.

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 na platformie Google Cloud i otwórz nową kartę edytora zapytań. Wklej powyższą instrukcję DDL w edytorze zapytań BigQuery. Po uruchomieniu zapytania zobaczysz tę odpowiedź:

a023d5691acf6f.png

Model i funkcja zostały utworzone, więc przetestujmy te 2 obiekty BigQuery, uruchamiając je w zapytaniu SELECT.

9. Podsumowywanie tematów za pomocą modelu zdalnego

Użyjmy 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
));

Krok opcjonalny: wynik w polu wyniku wygenerowanego przez LLM jest zagnieżdżony. Dodajmy do zapytania parametry LLM i atrybut „flatten_json_output”. Użycie atrybutu „flatten_json_output” pomaga usunąć zagnieżdżoną strukturę z pola wyniku wygenerowanego 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. Na potrzeby testów ograniczyliśmy wynik zapytania do 1. Wynik jest wyświetlany w ten sposób:

9b0d33eca61a73d2.png

10. Podsumowywanie pełnego tekstu książek za pomocą funkcji zdalnej

Teraz spróbujemy podsumować książkę, uruchamiając utworzoną wcześniej funkcję w Cloud Functions bookshelf.GEMINI_REMOTE_CALL.

Uwaga: jeśli pominięto tworzenie funkcji zdalnej (poprzedni temat w tym laboratorium), pamiętaj, aby pominąć 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 podsumowanie 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 do wygenerowania podsumowania użyliśmy fragmentu pełnego tekstu książki.

Wynik zapytania wygląda tak:

658bb0a9c9cf0938.png

11. Przechowywanie danych o książkach w tabeli

Po przetestowaniu wywołań LLM (modelu zdalnego i funkcji) z BigQuery za pomocą zapytań SQL utwórzmy tabelę BigQuery do przechowywania danych „półki na książki” z informacjami o tematach 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ę w Cloud Functions) zostało oznaczone jako krok opcjonalny, będziemy używać tylko statystyk z modelu zdalnego.

Użyjemy tego zapytania:

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, uzyskasz ten wynik:

2c6e08e75a680867.png

Teraz poprośmy Gemini o utworzenie na podstawie powyższego zapytania tabeli o nazwie „bookshelf.books”. Otwórz konsolę rozmowy z Gemini w konsoli Google Cloud i wpisz ten prompt:

Użyjemy tego prompta:

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ź rozmowy z Gemini jest następująca:

df6595a4b14f7b9.png

Oto zapytanie, które możesz skopiować bezpośrednio stąd:

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 uruchomieniu zapytania w edytorze BigQuery wynik będzie wyglądać tak:

2d1ce716f844b7ad.png

To wszystko. Teraz możesz wysyłać zapytania do tabeli i eksperymentować z danymi, aby uzyskać więcej informacji.

12. Gratulacje

Gratulacje! Wykonaliśmy te czynności, a w niektórych z nich użyliśmy Gemini:

  • Utworzono w BigQuery model zdalny, który wywołuje punkt końcowy „text-bison-32k” Vertex AI, aby zidentyfikować gatunek (lub temat) książki na podstawie listy słów kluczowych rozdzielonych znakiem „;” w tabeli.
  • Utworzono w BigQuery funkcję zdalną, która będzie zdalnie wywoływać wdrożoną funkcję Cloud Functions generatywnej AI. Ta funkcja przyjmuje prompta jako dane wejściowe i zwraca ciąg znaków, który podsumowuje książkę w 5 wierszach.
  • Użyto modelu zdalnego i funkcji do podsumowania tematu i tekstu książki za pomocą zapytań SQL oraz zapisania wyników w nowej tabeli w zbiorze danych półki na książki.
  • W ramach kolejnego zadania spróbuj użyć Gemini, aby uzyskać kod SQL do usunięcia obiektów utworzonych w BigQuery. Obejmuje to krok czyszczenia.