1. Introduzione
Ti piace leggere, ma ti senti sopraffatto dalla quantità di scelte? Immagina di avere un'app basata sull'AI che non solo ti consiglia la lettura perfetta, ma ti offre anche un riepilogo conciso in base al genere che preferisci, dandoti un'idea dell'essenza del libro. In questo codelab, ti guiderò nella creazione di un'app di questo tipo con BigQuery, Gemini e Cloud Functions basate 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 pubblici BigQuery dei libri dell'Internet Archive fungerà da catalogo completo di libri.
- Motore di riepilogo AI: Google Cloud Functions, dotato del modello linguistico Gemini 1.0 Pro, genererà riepiloghi approfonditi personalizzati in base alle richieste degli utenti.
- Integrazione BigQuery: una funzione remota all'interno di 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.
Dividiamo l'implementazione in tre codelab:
Codelab 1: utilizza Gemini per creare una funzione Java Cloud per un'applicazione Gemini.
Codelab 2: utilizza 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. Utilizzare Gemini per creare app SQL con BigQuery e l'AI generativa
Cosa creerai
Creerai un
- Modello remoto in BigQuery che richiama l'endpoint text-bison-32k di Vertex AI per identificare il genere (o il tema) del libro da un elenco di parole chiave separate da ";" nella tabella.
- Funzione remota in BigQuery che richiamerà la funzione cloud di AI generativa di cui è stato eseguito il deployment in modalità remota.
- Utilizza il modello e la funzione remoti per riassumere il tema e il testo di un libro con query SQL e scrivere i risultati in una nuova tabella nel set di dati della libreria.
- 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 se hai eseguito il deployment della funzione Cloud Functions nell'ambito del codelab della parte 1 Utilizzare Gemini per creare una funzione Cloud Functions Java per un'applicazione Gemini.
- Condizionale:se in questo momento hai accesso al link ai crediti Google Cloud senza costi (che potrebbero esserti stati forniti dall'organizzatore del workshop), segui le istruzioni nella pagina seguente per completare in anticipo i passaggi ATTIVAZIONE DEI CREDITI e CREAZIONE DEL PROGETTO. Se non hai questo link, procedi con i passaggi preliminari relativi al progetto e alla fatturazione riportati di seguito:
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 menzionato 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 verificare se la fatturazione è abilitata per un progetto.
Attiva Cloud Shell
- Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud precaricato con bq:
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 questo comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto.
gcloud config list project
- Se il progetto non è impostato, utilizza il seguente comando 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 Gemini for Google Cloud Marketplace per abilitare 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 facciamo? Chiediamolo a Gemini. Ma prima di farlo, ricorda:
Nota: i LLM non sono deterministici. Pertanto, mentre provi questi prompt, la risposta che ricevi potrebbe essere diversa da quelle nel mio screenshot.
Vai alla console di chat Gemini facendo clic sull'icona "Apri Gemini" nell'angolo in alto a destra, accanto alla barra di ricerca nella console Google Cloud.
Digita questa domanda nella sezione "Inserisci un prompt qui":
Come faccio ad abilitare le API BigQuery e Vertex AI utilizzando il comando gcloud?
Ricevi la risposta mostrata nell'immagine seguente:

Copia il comando (puoi utilizzare l'icona di copia nella parte superiore dello snippet di comando) ed eseguilo nel terminale Cloud Shell per abilitare i rispettivi servizi:
- bigquery.googleapis.com
- aiplatform.googleapis.com
5. Esplora il set di dati pubblico BigQuery per i dati sui libri
Inizia acquisendo familiarità con il set di dati pubblico BigQuery contenente informazioni su numerosi libri dell'Internet Archive.
Puoi trovare questo set di dati pubblico nel riquadro dell'explorer 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. Espandi il risultato e aggiungi una stella ai libri dell'Internet Archive come mostrato nell'immagine di seguito:
.
Espandi il set di dati, fai clic su gdelt-bq.internetarchivebooks e poi visualizza l'anteprima dei dati nella tabella 1920. Questa tabella include i libri archiviati dell'anno 1920.
Per dare un'occhiata allo schema che utilizzeremo nelle sezioni successive, esegui la seguente query:
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
Per il nostro codelab utilizzeremo i seguenti tre campi:
- BookMeta_Title (title)
- Temi (separati da ";")
- BookMeta_FullText (testo integrale del libro)
6. Crea un nuovo set di dati BigQuery chiamato bookshelf
Vogliamo creare un set di dati nel progetto per archiviare tutti gli oggetti di database e Analytics che creeremo in questo lab. Chiediamo a Gemini come creare un set di dati BigQuery. Dovresti già avere la chat con Gemini aperta in un'altra scheda del browser dal passaggio di attivazione delle API. In caso contrario, puoi farlo ora. Vai alla console Google Cloud all'indirizzo https://console.cloud.google.com e dovresti vedere l'icona di Gemini accanto alla barra di ricerca in alto. Fai clic e la chat si apre.

Inserisci il prompt come mostrato di seguito.
Ecco il mio prompt:
How to create a BigQuery dataset?
Ecco la risposta:

Seguiamo i passaggi descritti nella risposta per creare un set di dati denominato "bookshelf" nel 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 progetto).
- Inserisci "bookshelf" come nome del set di dati.
- Imposta la località su "Stati Uniti(multiregionale)".
- 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 nel seguente modo:
7. Crea un modello remoto per richiamare Vertex AI LLM (text-bison-32k)
Successivamente, 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 delle parole chiave per ogni libro nel set di dati.
Chiediamo a Gemini di rispondere a questa domanda. Per farlo, vai alla scheda in cui è aperta la console di chat di Gemini e digita il seguente prompt:
Come collegherai 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 della query è accurata per me, ma non significa che riceverai esattamente lo stesso output, poiché si tratta di un modello linguistico di grandi dimensioni e potresti ricevere risposte in formato, volume e profondità diversi. Se non vedi tutti i dettagli che ho ricevuto, non esitare a fare domande aggiuntive nella chat. Ad esempio: Fornisci maggiori dettagli su come creare la risorsa di connessione o sul motivo per cui l'attributo di connessione non è presente o su come connettersi da BigQuery a Vertex AI e così via.
Ecco un esempio di prompt di follow-up (utilizzalo 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:

Seguiamo i passaggi della risposta per creare una connessione BigQuery:
- Accedi alla console BigQuery.
- Nel riquadro Explorer 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 visualizzare la slide Origine dati esterna come mostrato di seguito . Dall'elenco delle origini esterne, seleziona l'origine "Vertex AI".

- Digita un ID connessione (può essere un ID a tua scelta, ma per ora impostalo su "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 service account, poiché lo utilizzeremo nei passaggi successivi.
- Ora che la connessione è stata creata, assegniamo le autorizzazioni a questo ID service account che abbiamo copiato per poter utilizzare Vertex AI.
- Dalla pagina della console Google Cloud, apri Google Cloud IAM o vai al link.
- Fai clic su Concedi l'accesso nella sezione Visualizza per entità.

- Nella finestra di dialogo Concedi accesso, inserisci l'ID service account che abbiamo annotato in precedenza nella casella di testo Nuove entità.
- Imposta il ruolo su "Vertex AI User".

La connessione richiesta viene creata. L'autorizzazione necessaria viene concessa all'entità (service account 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');
In alternativa al passaggio precedente, puoi chiedere a Gemini di suggerire una query per creare il modello per richiamare il modello "text-bison-32k".
Nota:se hai utilizzato un nome diverso per la connessione, sostituisci " us.bq-vx" con questo nome nell'istruzione DDL precedente. Questa query crea il modello remoto nel set di dati "bookshelf" che abbiamo creato in precedenza.
8. Crea una funzione remota che richiama la funzione Cloud Functions Java
Ora creeremo una funzione remota in BigQuery utilizzando la funzione Cloud Java che abbiamo creato nel codelab 1 di questa serie per implementare il modello Gemini. Questa funzione remota verrà utilizzata per riassumere 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 (riassumere il tema dei libri utilizzando il modello remoto).
Vai alla console BigQuery e incolla la seguente istruzione DDL nell'editor di query (puoi creare una nuova scheda dell'editor di query facendo clic sul pulsante +).

Di seguito è riportata l'istruzione DDL che puoi copiare. Ricorda di sostituire l'endpoint con l'endpoint Cloud Functions di cui è stato eseguito il deployment (creato dal codelab 1). Se non hai un endpoint, puoi sostituire i caratteri mascherati nel DDL riportato 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 su Google Cloud e apri una nuova scheda dell'editor di query. Nell'editor di query di BigQuery, incolla l'istruzione DDL riportata sopra. Dopo aver eseguito la query, puoi visualizzare la seguente risposta:

Ora che il modello e la funzione sono stati creati, testiamo questi due oggetti BigQuery eseguendoli in una query SELECT.
9. Riassumere i temi utilizzando il modello remoto
Utilizziamo il modello remoto che abbiamo creato "bookshelf.llm_model " per generare una parola chiave consolidata per il libro dall'elenco di temi fornito:
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 dal modello linguistico di grandi dimensioni è 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 dei risultati generati 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. Abbiamo limitato il risultato della query a 1 per i test. Il risultato viene visualizzato come segue:

10. Riassumere il testo integrale dei libri utilizzando la funzione remota
Ora proveremo a riassumere il libro eseguendo la funzione Cloud bookshelf.GEMINI_REMOTE_CALL che abbiamo creato in precedenza.
Nota:se hai saltato la creazione della FUNCTION remota (l'argomento precedente di questo codelab), ricordati di saltare anche la chiamata alla funzione bookshelf.GEMINI_REMOTE_CALL 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 chiede 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. Archivia i dati dei libri in una tabella
Ora che abbiamo testato sia le chiamate LLM (modello remoto e funzione) da BigQuery utilizzando solo query SQL, creiamo una tabella BigQuery per archiviare i dati della "libreria" con gli approfondimenti sui temi, nello stesso set di dati del modello remoto e della funzione.
In questo passaggio potremmo includere sia la chiamata del modello LLM sia la chiamata di funzione remota. Tuttavia, poiché abbiamo contrassegnato la chiamata di funzione remota (che richiama la funzione Cloud) come passaggio facoltativo, utilizzeremo solo gli approfondimenti 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 "bookshelf.books" dalla query precedente. Vai alla console di chat Gemini in Google Cloud Console e inserisci il seguente prompt.
Ecco il prompt che useremo:
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 nel caso in cui tu voglia 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 gioca con i dati per ottenere ulteriori approfondimenti.
12. Complimenti
Complimenti! Abbiamo completato correttamente le seguenti operazioni e utilizzato Gemini in alcuni passaggi della procedura:
- Ha creato un modello remoto in BigQuery che richiama l'endpoint "text-bison-32k" di Vertex AI per identificare il genere (o il tema) del libro da un elenco di parole chiave separate da ";" nella tabella.
- È stata creata una funzione remota in BigQuery che richiamerà questa funzione Cloud di AI generativa di cui è stato eseguito il deployment da remoto. Questa funzione accetta il prompt come input e restituisce una stringa che riassume il libro in 5 righe.
- Ha utilizzato il modello e la funzione remoti per riassumere il tema e il testo di un libro con query SQL e scrivere i risultati in una nuova tabella nel set di dati bookshelf.
- Come attività di follow-up, prova a utilizzare Gemini per ottenere l'SQL per eliminare gli oggetti creati in BigQuery. Questo passaggio coprirà la pulizia.