1. Introduzione
Ti piace leggere libri, ma sei sopraffatto dall'enorme quantità di scelta? Immaginate di avere un'app basata sull'IA che non solo consiglia la lettura perfetta, ma offre anche un riassunto conciso in base al genere di scelta, per darvi un'idea dell'essenza del libro. In questo codelab, ti guiderò attraverso la creazione di un'app di questo tipo con BigQuery, Gemini e Cloud Functions basati su Gemini.
Panoramica del progetto
Il nostro caso d'uso si basa su questi quattro componenti chiave:
- Database di libri: il vasto set di dati pubblico BigQuery dei libri di archivio internet fungerà da catalogo di libri completo.
- Motore di sintesi dell'IA: Google Cloud Functions, dotato del modello linguistico Gemini 1.0 Pro, genererà riepiloghi utili personalizzati in base alle richieste degli utenti.
- Integrazione di BigQuery:una funzione remota in BigQuery che chiama la nostra funzione Cloud per fornire riassunti e temi dei libri on demand.
- Interfaccia utente:un'app web ospitata su Cloud Run che offrirà un'applicazione web per consentire agli utenti di visualizzare i risultati.
Dividiremo l'implementazione in tre codelab:
Codelab 1: utilizza Gemini per creare una funzione Cloud Java per un'applicazione Gemini.
Codelab 2:usa Gemini per creare app SQL con BigQuery e l'AI generativa.
Codelab 3: utilizza Gemini per creare un'applicazione web Java Spring Boot che interagisce con BigQuery.
2. Utilizza Gemini per creare app SQL con BigQuery e IA generativa
Cosa creerai
Dovrai creare un
- Modello remoto in BigQuery che richiama l'endpoint di Vertex AI text-bison-32k per identificare il genere (o tema) del libro da un elenco di parole chiave separate da ";" nella tabella.
- Funzione remota in BigQuery che richiama la funzione Cloud di IA generativa di cui è stato eseguito il deployment da remoto.
- Usa la funzione e il modello remoti per riepilogare il tema e il testo di un libro con query SQL e scrivere i risultati in una nuova tabella nel set di dati dello scaffale.
- Implementerai questi passaggi con l'aiuto di Gemini
3. Requisiti
- Un browser, ad esempio Chrome o Firefox
- Un progetto Google Cloud con la fatturazione abilitata
- È utile avere eseguito il deployment della funzione Cloud nell'ambito del codelab della parte 1 Utilizzare Gemini per creare una funzione Cloud Java per un'applicazione Gemini.
- Condizionale: se al momento hai accesso al link per i crediti Google Cloud senza costi (che potrebbero essere stati configurati per te dall'organizzatore del workshop), segui le istruzioni riportate nella pagina di seguito per completare in anticipo i passaggi di ATTIVAZIONE DEI CREDITI e CREAZIONE DEL PROGETTO. Se non disponi di questo link, segui i passaggi di seguito relativi ai prerequisiti del progetto e della fatturazione:
Creare il progetto
Puoi saltare i passaggi riportati di seguito se hai già attivato un account di fatturazione e creato un progetto utilizzando il link indicato nel passaggio condizionale precedente.
- Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
- Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come controllare se la fatturazione è abilitata per un progetto.
Attivare Cloud Shell
- Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud con bq preinstallato:
Nella console Cloud, fai clic su Attiva Cloud Shell nell'angolo in alto a destra:
- Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo ID progetto. Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list
- Esegui il seguente comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto.
gcloud config list project
- Se il progetto non è configurato, utilizza il comando seguente per impostarlo:
gcloud config set project <YOUR_PROJECT_ID>
Consulta la documentazione per i comandi e l'utilizzo di gcloud.
4. Abilitazione di Gemini for Google Cloud e delle API necessarie
Abilita Gemini
- Vai a Marketplace di Gemini for Google Cloud per attivare l'API. Puoi anche utilizzare il seguente comando:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Visita la pagina di Gemini e fai clic su "Inizia a chattare".
Abilita altre API necessarie
Come possiamo farlo? Chiediamolo a Gemini, d'accordo? Tuttavia, prima di procedere, ricordati che:
Nota: gli LLM non sono deterministici. Pertanto, mentre provi questi prompt, la risposta che ricevi potrebbe essere diversa da quella mostrata nel mio screenshot.
Vai alla console di chat di Gemini facendo clic sull'icona "Apri Gemini" nell'angolo in alto a destra adiacente alla barra di ricerca nella console Google Cloud.
Digita questa domanda nella sezione "Inserisci un prompt qui":
Come faccio ad attivare le API BigQuery e Vertex AI utilizzando il comando gcloud?
Riceverai la risposta mostrata nell'immagine seguente:
Copialo (puoi utilizzare l'icona di copia nella parte superiore dello snippet di comando) ed eseguilo nel terminal Cloud Shell per attivare i rispettivi servizi:
- bigquery.googleapis.com
- aiplatform.googleapis.com
5. Esplorare il set di dati pubblico di BigQuery per i dati dei libri
Inizia ad acquisire familiarità con il set di dati pubblico di BigQuery, che contiene informazioni su numerosi archivio di internet.
Puoi trovare questo set di dati pubblico nel riquadro di esplorazione di BigQuery. Puoi trovarlo sul lato sinistro quando accedi alla console BigQuery.
Digita "gdelt-bq" o "internetArchivebooks" nella barra di ricerca e fai clic su CERCA IN TUTTI I PROGETTI. Espandere il risultato e aggiungere a Speciali i libri nell'archivio internet come illustrato nell'immagine di seguito:
.
Espandi il set di dati, fai clic su gdelt-bq.internetarchivebooks e visualizza l'anteprima dei dati nella tabella 1920. Questa tabella include i libri archiviati dell'anno 1920.
Per vedere lo schema che utilizzeremo nelle sezioni successive, esegui questa query:
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
Per il nostro codelab utilizzeremo i seguenti tre campi:
- BookMeta_Title (titolo)
- Temi (temi separati da ;")
- BookMeta_FullText (testo completo del libro)
6. Crea un nuovo set di dati BigQuery denominato bookshelf
Vogliamo creare un set di dati all'interno del progetto per archiviare tutti gli oggetti di database e di analisi che creeremo in questo lab. Chiediamo a Gemini come creare un set di dati BigQuery. La chat di Gemini dovrebbe essere già aperta in un'altra scheda del browser dal passaggio di attivazione delle API. In caso contrario, puoi farlo subito. Vai alla console Google Cloud all'indirizzo https://console.cloud.google.com e dovresti vedere l'icona di Gemini proprio accanto alla barra di ricerca in alto. Fai clic sul nome per aprire la chat.
Inserisci il prompt come mostrato di seguito.
Ecco il mio prompt:
How to create a BigQuery dataset?
Ecco la risposta:
Segui i passaggi descritti nella risposta per creare un set di dati denominato "libreria" nel tuo progetto attivo.
Per creare un set di dati BigQuery:
- Vai alla pagina BigQuery nella console Google Cloud.
- Nel riquadro Explorer, fai clic sull'ID progetto.
- Fai clic su Crea set di dati (dovrebbe essere tra le opzioni elencate quando fai clic sui tre puntini accanto all'ID del progetto)
- Inserisci il nome del set di dati come "libreria".
- Imposta la località su "US(Multi-region)".
- Per i passaggi 3, 4, 5 e 6 della risposta, lascia le opzioni predefinite.
- Fai clic su CREA SET DI DATI.
Il set di dati verrà creato e visualizzato nel riquadro Explorer. Il set di dati "libreria" può essere visualizzato come segue:
7. Crea un modello remoto per richiamare l'LLM di Vertex AI (text-bison-32k)
Poi, dobbiamo creare un modello in BigQuery che richiami il modello Vertex AI "text-bison-32k". Il modello aiuterà a identificare un tema comune, il contesto del libro, dall'elenco di parole chiave per ogni libro nel set di dati.
Facciamo questa domanda a Gemini. Per farlo, vai alla scheda in cui è aperta la console di Gemini Chat e digita il seguente prompt:
Come connetterai BigQuery e Vertex AI per chiamare l'endpoint LLM (text-bison-32k) in BigQuery?
La risposta è la seguente:
La risposta include informazioni accurate, ad esempio i passaggi che includono l'utilizzo dell'istruzione CREATE MODEL, l'utilizzo della connessione BigQuery e la definizione dell'endpoint. L'istruzione di query è precisa per me, ma non significa che riceverai esattamente lo stesso output poiché si tratta di un modello linguistico di grandi dimensioni (LLM) che potresti ottenere risposte in formato, volume e profondità diversi. Se non trovi tutti i dettagli che ho ricevuto, non esitare a chiedere altre domande nella chat. Ad esempio: fornisci ulteriori dettagli su come creare la risorsa di connessione o sul motivo per cui manca l'attributo di connessione o su come eseguire la connessione da BigQuery a Vertex AI e così via.
Ecco un esempio di richiesta di follow-up (utilizzala solo se hai bisogno di un follow-up; se la prima risposta che hai ricevuto è sufficiente, procedi con quella):
What about the connection? How will I connect from BigQuery to Vertex AI?
Ecco la risposta:
Segui i passaggi della risposta per creare una connessione BigQuery:
- Accedi alla console BigQuery.
- Nel riquadro Esploratore di BigQuery, fai clic sul pulsante "+ AGGIUNGI" e poi su "Connessioni a origini dati esterne".
- A questo punto ti verrà chiesto di abilitare l'API BigQuery Connection. Fai clic su ABILITA API:
- Fai clic su "Connessioni a origini dati esterne" e dovresti vedere la diapositiva Origine dati esterna come mostrato di seguito . Nell'elenco delle origini esterne, seleziona l'origine "Vertex AI".
- Digita un ID connessione (può essere un ID a tua scelta, ma per il momento impostalo come "bq-vx") e la regione (multiregione "US").
- Fai clic su "Crea connessione".
- Dopo aver creato la connessione, fai clic su "Vai alla connessione".
- Nella pagina delle informazioni sulla connessione, copia l'ID account di servizio, poiché lo utilizzeremo nei passaggi successivi.
- Ora che la connessione è stata creata, assegniamo le autorizzazioni a questo ID account di servizio che abbiamo copiato per poter utilizzare Vertex AI.
- Nella pagina della console Google Cloud, apri Google Cloud IAM o vai al link.
- Fai clic su Concedi accesso nella sezione Visualizza per entità.
- Nella finestra di dialogo Concedi l'accesso, inserisci l'ID account di servizio che abbiamo annotato in precedenza all'interno della casella di testo Nuovi principi.
- Imposta il ruolo su "Utente Vertex AI".
Viene creata la connessione richiesta. L'autorizzazione necessaria viene concessa al principale (account di servizio della connessione) per utilizzare Vertex AI da BigQuery.
Esegui la seguente istruzione DDL(Data Definition Language) che rappresenta la creazione di un oggetto DB, in questo caso MODEL, nell'editor di query BigQuery.
CREATE OR REPLACE MODEL bookshelf.llm_model
REMOTE WITH CONNECTION `us.bq-vx`
OPTIONS (ENDPOINT = 'text-bison-32k');
Come alternativa al passaggio precedente, puoi chiedere a Gemini di suggerire una query per creare il modello per l'invocazione del modello "text-bison-32k".
Nota:se hai utilizzato un nome diverso per la connessione, sostituisci "us.bq-vx" con il nome in questione nell'istruzione DDL precedente. Questa query crea il modello remoto nel set di dati, "libreria", che abbiamo creato in precedenza.
8. Crea una funzione remota che invoca la funzione Cloud Java
Ora creeremo una funzione remota in BigQuery utilizzando la funzione Cloud Functions Java che abbiamo creato nel codelab 1 di questa serie per implementare il modello Gemini. Questa funzione remota verrà utilizzata per riepilogare i contenuti del libro.
Nota: se non hai seguito questo codelab o non hai eseguito il deployment di questa funzione Cloud, puoi saltare questo passaggio e passare all'argomento successivo (Riepiloga il tema dei libri utilizzando il modello remoto).
Vai alla console BigQuery e incolla il seguente statement DDL nell'editor di query (puoi creare una nuova scheda dell'editor di query facendo clic sul pulsante +)
Di seguito è riportato il DDL che puoi copiare. Ricordati di sostituire l'endpoint con l'endpoint della funzione Cloud Functions di cui hai eseguito il deployment (creato dal codelab 1). Se non hai un endpoint, puoi sostituire i caratteri mascherati nel DDL di seguito con "abis-345004" a scopo dimostrativo.
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' );
Vai alla console BigQuery sulla piattaforma Google Cloud e apri una nuova scheda Editor di query. Nell'editor di query di BigQuery, incolla l'istruzione DDL riportata sopra. Dopo aver eseguito la query, puoi vedere la seguente risposta:
Ora che il modello e la funzione sono stati creati, testiamo questi due oggetti BigQuery eseguendoli in una query SELECT.
9. Riepiloga i temi utilizzando il modello remoto
Utilizziamo il modello remoto "libreria.llm_model " che abbiamo creato per generare una parola chiave consolidata per il libro dall'elenco di temi specificato:
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
));
Passaggio facoltativo: il risultato per il campo del risultato generato da LLM è nidificato. Aggiungiamo alcuni parametri LLM e l'attributo "flatten_json_output" alla query. L'utilizzo dell'attributo "flatten_json_output" consente di rimuovere la struttura nidificata dal campo del risultato generato dall'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));
Ora esegui la query SELECT nell'editor di BigQuery e verifica il risultato. Per i test, abbiamo limitato il risultato della query a 1. Il risultato viene visualizzato come segue:
10. Riassumere il testo completo dei libri utilizzando la funzione remota
Ora proveremo a riassumere il libro eseguendo lo scaffale.GEMINI_REMOTE_CALL la funzione Cloud Functions che abbiamo creato in precedenza.
Nota: se hai saltato la creazione remota di FEATURE (l'argomento precedente in questo codelab), ricordati di saltare la chiamata di funzione BookSheet.GEMINI_REMOTE_CALL anche nella query SELECT.
Utilizza la query SELECT che chiama la funzione remota (GEMINI_REMOTE_CALL) che abbiamo creato in precedenza. La chiamata a questa funzione, GEMINI_REMOTE_CALL, include un prompt che richiede un riepilogo del testo del libro:
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;
Tieni presente che abbiamo preso una sottostringa del testo completo del libro per generare il riepilogo.
Il risultato della query è il seguente:
11. Memorizzare i dati dei libri in una tabella
Ora che abbiamo testato entrambe le chiamate LLM (modello e funzione remoti) da BigQuery utilizzando solo query SQL, creiamo una tabella BigQuery per archiviare i dati "scaffali" con insight sui temi, nello stesso set di dati del modello remoto e della funzione.
In questo passaggio potremmo includere sia la chiamata al modello LLM sia la chiamata di funzione remota. Tuttavia, poiché abbiamo contrassegnato la chiamata della funzione remota (che richiama la funzione Cloud) come passaggio facoltativo, utilizzeremo solo le informazioni del modello remoto.
Ecco la query che utilizzeremo:
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));
Quando esegui la query nell'editor di BigQuery, il risultato è il seguente:
Ora chiediamo a Gemini di creare una tabella denominata "libreria.libri" dalla query precedente. Vai alla console di chat di Gemini nella console Google Cloud e inserisci il prompt che segue.
Ecco il prompt che utilizzeremo:
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));
La risposta di Gemini Chat è la seguente:
Ecco la query, se vuoi copiarla direttamente da qui:
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
)
)
);
Dopo aver eseguito la query nell'editor di BigQuery, il risultato è il seguente:
È tutto. Ora esegui una query sulla tabella e prova i dati per ottenere ulteriori approfondimenti.
12. Complimenti
Complimenti! Abbiamo completato quanto segue e utilizzato Gemini anche in alcuni passaggi della procedura:
- È stato creato un modello remoto in BigQuery che richiama l'endpoint "text-bison-32k" di Vertex AI per identificare il genere (o tema) del libro da un elenco di parole chiave separate da ";" nella tabella.
- È stata creata una funzione remota in BigQuery che richiama da remoto questa funzione Cloud Functions di IA generativa di cui è stato eseguito il deployment. Questa funzione prende il prompt come input e restituisce una stringa che riassume il libro in 5 righe.
- Sono stati utilizzati il modello e la funzione remoti per riepilogare il tema e il testo di un libro con query SQL e scrivere i risultati in una nuova tabella nel set di dati dello scaffale.
- Come compito successivo, prova a utilizzare Gemini per ottenere il codice SQL per l'eliminazione degli oggetti creati in BigQuery. Questa operazione riguarda il passaggio di pulizia.