1. Introduzione
I set di dati di grandi dimensioni contengono informazioni preziose, ma estrarre una comprensione significativa può essere un compito arduo. Gli strumenti di analisi tradizionali spesso non riescono a fornire spiegazioni sfumate e simili a quelle umane che ci aiutano a comprendere veramente la storia all'interno dei nostri dati. I data warehouse contengono sempre più dati non strutturati, ma questi dati non sono sempre stati accessibili per ottenere approfondimenti. Testo, immagini e video non strutturati contengono informazioni preziose per l'evoluzione della tua attività. Gli LLM offrono un nuovo modo efficace per comprendere i tuoi dati fornendo spiegazioni, analisi del sentiment, rilevamento di oggetti e altro ancora. Con l'emergere di modelli multimodali (e la possibilità di archiviare dati di oggetti come immagini e video in BigQuery tramite le tabelle di oggetti), l'integrazione di LLM potenti come Gemini 1.0 Pro (per l'analisi basata su testo) e Gemini 1.0 Pro Vision (per l'analisi di testo e immagini/video) con BigQuery può trasformare il modo in cui analizzi i dati.
In questo codelab esamineremo i due metodi seguenti per estrarre insight LLM dai dati aziendali e scalare questi insight a migliaia di righe in BigQuery:
Metodo 1: invocazione remota del modello
- Chiama Gemini 1.0 Pro da BigQuery utilizzando
ML.GENERATE_TEXTnella querySELECT. - Utilizza questo approccio quando il modello è già disponibile come modello remoto in BigQuery e vuoi utilizzarlo immediatamente. Controlla lo stato del modello che vuoi utilizzare nella documentazione di BigQuery.
Metodo 2: implementazione della funzione remota
- Chiama una funzione cloud che implementa la chiamata Gemini 1.0 Pro Vision, esposta come funzione remota in BigQuery.
- Utilizza questo approccio quando il modello che vuoi utilizzare non è disponibile pronto all'uso come modello remoto o se vuoi maggiore flessibilità e personalizzazione nel tuo caso d'uso.
Cosa creerai
- Per il metodo Richiamo del modello remoto, creerai un riepilogo delle località per il set di dati dei libri dell'archivio di internet (disponibile pubblicamente in BigQuery) richiamando il modello remoto per Gemini 1.0 Pro nel costrutto ML.GENERATE_TEXT in BigQuery.

- Per il metodo Implementazione della funzione remota, creerai un convalidatore di immagini per convalidare le immagini di test rispetto a un'immagine di riferimento. A questo scopo, creerai un set di dati contenente screenshot delle immagini di test in una tabella esterna e chiederai a Gemini 1.0 Pro Vision di convalidarlo rispetto all'immagine di base. Poi, creerai una funzione cloud Java che implementa la chiamata Gemini Pro Vision e la richiamerai come funzione remota in BigQuery.

Nota:
Potrebbero essere disponibili altri modelli di AI generativa Vertex AI come modelli remoti in BigQuery. Ciò significa che puoi accedere a questi modelli con il costrutto ML.GENERATE_TEXT da BigQuery immediatamente. Tuttavia, anche nel caso di disponibilità di modelli remoti, hai sempre la possibilità di creare personalizzazioni avanzate per il tuo caso d'uso con Cloud Functions e poi accedere a questi modelli come funzioni remote da BigQuery.
Perché BigQuery?
BigQuery è un data warehouse multi-cloud serverless in grado di scalare da byte a petabyte con un overhead operativo minimo ed è quindi un'ottima scelta per l'archiviazione dei dati di addestramento ML. Utilizzando le funzionalità integrate di BigQuery Machine Learning (BQML) e di analisi, puoi creare previsioni senza codice utilizzando solo query SQL. Inoltre, puoi accedere ai dati da origini esterne con query federate, eliminando la necessità di pipeline ETL complesse.
BigQuery è un data warehouse su cloud completamente gestito che aiuta gli utenti ad analizzare dati strutturati, semistrutturati e non strutturati.
2. Requisiti
3. Prima di iniziare
- 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 .
- Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud precaricato con bq. Fai clic su Attiva Cloud Shell nella parte superiore della console Google Cloud.

- Una volta eseguita la connessione a Cloud Shell, verifica di essere già autenticato e che il progetto sia impostato sul tuo ID progetto utilizzando il seguente comando:
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>
- Vai a Gemini for Google Cloud Marketplace per abilitare l'API. Puoi anche utilizzare il seguente comando nel terminale Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Assicurati che le seguenti API siano abilitate:
- BigQuery
- Connessione BigQuery
- Funzione Cloud Functions
- Cloud Run
- Vertex AI
- Cloud Build
- API di Cloud Storage
L'alternativa all'utilizzo del comando gcloud è la console, utilizzando questo link.
Consulta la documentazione per i comandi e l'utilizzo di gcloud.
4. Crea un set di dati BigQuery e una connessione esterna
Iniziamo creando un set di dati e una connessione alla risorsa Cloud.
Un set di dati in BigQuery è un contenitore per tutte le tabelle e gli oggetti della tua applicazione.
Per creare un set di dati:
- Vai alla pagina BigQuery nella console Google Cloud.
- Nel riquadro Explorer, seleziona il progetto in cui vuoi creare il set di dati.
- Espandi l'opzione Azioni (l'icona con tre puntini verticali) e fai clic su Crea set di dati.

- Fai clic su Crea set di dati.
- Inserisci
gemini_bq_fnnel campo ID set di dati. - Imposta il tipo di località su
Multi-regione accetta il valore predefinito, ovveroUS(multiple regions in United States.. - Fai clic su Crea set di dati.
- Verifica che il set di dati sia stato creato ed elencato sotto l'ID progetto nel riquadro Explorer.
Per interagire con la tua funzione Cloud Functions è necessaria una connessione BigQuery. Per creare una funzione remota, devi creare una connessione BigQuery. In questo codelab, utilizzeremo la connessione BigLake per accedere al modello da BigQuery tramite la funzione Cloud. Le connessioni BigLake consentono di connettere l'origine dati esterna mantenendo il controllo dell'accesso e la sicurezza granulari di BigQuery, che nel nostro caso è l'API Vertex AI Gemini Pro.
Per creare la connessione BigLake:
- Fai clic su Aggiungi nel riquadro Explorer della pagina BigQuery.

- Fai clic su Connessioni a origini dati esterne.
- Dal menu Tipo di connessione, seleziona Modelli remoti di Vertex AI, funzioni remote e BigLake (risorsa Cloud).
- Nel campo ID connessione, inserisci il nome della connessione come
gemini-bq-conn. - Imposta il tipo di località su
Multi-regione accetta il valore predefinito, ovveroUS(multiple regions in United States.. - Fai clic su Crea connessione.
- Fai clic su Vai alla connessione,quindi copia l'ID service account nel riquadro Informazioni connessione.

- Vai alla pagina IAM e amministrazione e fai clic su Concedi l'accesso.
- Incolla l'ID service account nel campo Nuove entità.
- Seleziona il ruolo
Vertex AI userdall'elenco dei ruoli e poi fai clic su Salva.

Ora hai creato correttamente il set di dati e la connessione BigQuery. Successivamente, completerai i passaggi necessari per l'invocazione remota del modello.
5. Caso d'uso n. 1: invocazione remota del modello. Configura l'invocazione remota del modello
Ora che hai creato il set di dati e la connessione, creiamo un modello in BigQuery basato sul modello di base Gemini Pro di Vertex AI. Al termine di questo esercizio, la tua applicazione LLM sarà operativa utilizzando solo query SQL.
Passaggio 1: crea una tabella BigQuery che contenga i dati di input per il modello remoto.
Crea una tabella denominata books nel tuo set di dati che possa contenere circa 50 record della tabella bigquery-public-data.gdelt_internetarchivebooks.1905 nel set di dati Internet Archive Books di BigQuery, di origine pubblica.
Per farlo, esegui la seguente istruzione DDL (Data Definition Language) dal riquadro dell'editor SQL di BigQuery:
create or replace table gemini_bq_fn.books as (
select *
from
bigquery-public-data.gdelt_internetarchivebooks.1905 limit 50)
Passaggio 2 : crea un modello BigQuery
Crea un modello nel tuo set di dati. Per farlo, esegui il seguente DDL dal riquadro dell'editor SQL di BigQuery:
CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');
Nota che il modello viene creato con un'opzione per visualizzarlo.
Passaggio 3 : testa la nuova applicazione di AI generativa
Utilizza la funzione ML.GENERATE_TEXT in una query SELECT per inviare una richiesta al modello remoto.
SELECT ml_generate_text_llm_result as Gemini_Response, prompt as Prompt
FROM ML.GENERATE_TEXT(MODEL `gemini_bq_fn.gemini_remote_model`,
(select 'You are a text summarizer and standardizer. From the following text that contains address locations, standardize and print one standardized, consolidated address. You cannot return empty because you know how to pick up sensible data from the text in this field: ' ||
substring(locations, 0, 200) as prompt
from `gemini_bq_fn.books`),
STRUCT(
TRUE AS flatten_json_output));
Dovresti vedere il seguente risultato:

Complimenti! Hai dimostrato correttamente come utilizzare un modello remoto (basato su un modello gemini-pro) con la funzione ML.GENERATE_TEXT per analizzare i dati di testo in una tabella BigQuery.
Ora proviamo un altro modello Vertex AI utilizzando le funzioni remote BigQuery. Supponiamo che tu voglia aggiungere maggiore personalizzazione e flessibilità al modo in cui puoi utilizzare il modello in remoto in BigQuery. I modelli supportati sono elencati nella documentazione di BigQuery.
6. Caso d'uso n. 2 Implementazione della funzione remota: configura l'implementazione della funzione remota
In questo esercizio, creerai una funzione in BigQuery basata sulla funzione Cloud Java che implementa il modello di base Gemini 1.0 Pro Vision. Per prima cosa, creerai e implementerai la funzione cloud Java per confrontare le immagini utilizzando il modello Gemini 1.0 Pro Vision, poi creerai la funzione remota in BigQuery che richiama la funzione cloud implementata. Ricorda che la stessa procedura può essere seguita per qualsiasi esecuzione di funzioni remote in BigQuery.
Iniziamo.
Passaggio 1: crea la funzione Cloud Java
Creerai una funzione Cloud di seconda generazione in Java per convalidare le immagini di test rispetto a un'immagine di base. L'immagine di base è archiviata in un set di dati contenente screenshot delle immagini di test in una tabella esterna in BigQuery. Convaliderai le immagini utilizzando il modello Gemini Pro Vision (SDK Java). Dopodiché, eseguirai il deployment della funzione Cloud Java in un endpoint REST.
Procedi nel seguente modo:
- Avvia l'editor di Cloud Shell.
- Se utilizzi l'editor precedente, fai clic su Prova il nuovo editor.
- Nella barra di stato, fai clic su Cloud Code - Accedi.
- Se ti viene chiesto di autorizzare Cloud Shell Editor a effettuare chiamate API Google Cloud, fai clic su Autorizza. Segui le istruzioni per accedere al tuo Account Google. Ora sei connesso a Google Cloud.
- Se non vedi il tuo progetto nella barra di stato di Cloud Code, fai clic su Cloud Code - Sign In > Select a Google Cloud project (Cloud Code - Accedi > Seleziona un progetto Google Cloud). Scegli il progetto Google Cloud in cui vuoi creare le tue Cloud Functions. Il progetto viene caricato e diventa il progetto attivo in Cloud Shell Editor.
- Nella barra di stato di Cloud Code, fai clic sul nome del progetto attivo. Nel menu Selezione rapida visualizzato, seleziona Nuova applicazione.
- Nella finestra di dialogo Crea nuova applicazione, seleziona Applicazione Cloud Functions.

- Quando ti viene chiesto di selezionare un modello, scegli Java: Hello World.

- Inserisci
Gemini-BQ-Functioncome nome del progetto nel percorso del progetto. La struttura del progetto viene visualizzata in una nuova visualizzazione dell'editor di Cloud Shell.

- Aggiungi le dipendenze necessarie all'interno del tag
<dependencies>... </dependencies>o copia le dipendenze dal file pom.xml di esempio. - Modifica il nome della classe da
HelloWorld.javaa un nome più significativo. DiciamoGeminiBigQueryFunction.java. Rinomina il pacchetto di conseguenza. - Sostituisci il codice segnaposto nel file GeminiBigQueryFunction.Java con il codice di esempio fornito nel repository GitHub. Assicurati di sostituire la variabile <YOUR_PROJECT_ID> con il tuo ID progetto nel codice di esempio.
- Vai al terminale Cloud Shell. Verifica di trovarti nella directory del progetto. In caso contrario, vai alla directory del progetto eseguendo questo comando:
cd Gemini-BQ-Function
- Esegui la seguente istruzione per creare ed eseguire il deployment della funzione Cloud Functions:
gcloud functions deploy gemini-bq-fn --gen2 --runtime java17 --trigger-http --entry-point cloudcode.helloworld.GeminiBigQueryFunction --allow-unauthenticated --source .
Sostituisci l'entry point nel comando con l'entry point della tua funzione. L'output è un URL REST nel seguente formato:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-bq-fn
- Testa questa funzione Cloud eseguendo il seguente comando dal terminale:
gcloud functions call gemini-bq-fn --region=us-central1 --gen2 --data '{"calls":[["https://storage.googleapis.com/img_public_test/image_validator/baseline/1.JPG", "https://storage.googleapis.com/img_public_test/image_validator/test/2.JPG", "PROMPT_ABOUT_THE_IMAGES_TO_GEMINI"]]}'
Risposta al prompt del campione casuale:

Fantastico! L'implementazione della funzione Cloud Functions generica per il modello Gemini Pro Vision è pronta. Utilizziamo questo endpoint direttamente sui dati BigQuery dall'interno di una funzione remota BigQuery.
Passaggio 2: crea una tabella di oggetti BigQuery e una funzione remota
Prerequisito
Per questa parte dell'esercizio ti servirà un bucket Cloud Storage. Per creare un bucket Cloud Storage:
- Per creare un bucket, vai alla console Cloud Storage e fai clic su Crea.
- Inserisci
demo-bq-gemini-public-imagecome nome del bucket e fai clic su Crea. - Deseleziona l'opzione
Enforce public access prevention on this bucket. Sebbene in questo esercizio tu stia creando questo bucket per l'accesso pubblico, ti consigliamo di impedire l'accesso pubblico e di fornire le autorizzazioni a service account specifici in base alle esigenze nei tuoi casi d'uso aziendali. - Dopo aver creato il bucket, vai alla scheda Autorizzazioni per visualizzare e modificare le autorizzazioni.
- Per aggiungere entità, fai clic su Concedi l'accesso. Specifica un ID service account per concedere le autorizzazioni a un account specifico o specifica
allUsersper concedere l'accesso pubblico al bucket. - Seleziona il ruolo
Storage Object Viewere fai clic su Salva. Se richiesto, scegli di consentire l'accesso pubblico. - Vai alla scheda Oggetti e carica le immagini di base e di test da confrontare. Per questo codelab, puoi caricare i seguenti oggetti disponibili pubblicamente: baseline.JPG, TEST1.JPG e TEST2.JPG.
Crea una tabella degli oggetti BigQuery
Crea una tabella di oggetti esterni da BigQuery per accedere ai dati non strutturati nel bucket utilizzando la connessione e il set di dati che hai creato in precedenza. Per farlo, esegui questa istruzione DDL (Data Definition Language) dal riquadro dell'editor di query BigQuery:
CREATE OR REPLACE EXTERNAL TABLE `gemini_bq_fn.image_validation`
WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(object_metadata="SIMPLE", uris=["gs://demo-bq-gemini-public-image/*.JPG"]);
Verifica che nel set di dati sia stata creata una nuova tabella di oggetti denominata image_validation.
Crea una funzione remota di BigQuery
Crea una funzione remota in BigQuery per richiamare la funzione Cloud Java che implementa il modello Gemini Pro Vision. Crea questo campo nello stesso set di dati. Per farlo, esegui il seguente DDL dal riquadro dell'editor SQL della console BigQuery:
CREATE OR REPLACE FUNCTION `gemini_bq_fn.FN_IMAGE_VALIDATE` (baseline STRING, test STRING, prompt STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (
endpoint = 'https://us-central1-<your project id>.cloudfunctions.net/gemini-bq-fn',
max_batching_rows = 1
);
L'URL dell'endpoint è l'URL REST restituito in precedenza in questo esercizio. Viene creata la funzione remota in BigQuery. Nel DDL precedente sono presenti tre parametri. I primi due parametri sono URL delle immagini archiviate nella tabella degli oggetti creata nel passaggio precedente. L'ultimo parametro è il prompt per il modello (Gemini Pro Vision). Puoi fare riferimento al codice Java Cloud Functions utilizzato per analizzare questa firma:
Gson().fromJson(request.getReader(), JsonObject.class);
JsonArray calls_array = requestJson.getAsJsonArray("calls");
JsonArray calls = (JsonArray) calls_array.get(0);
String baseline_url = calls.get(0).toString().replace("\"", "");
String test_url = calls.get(1).toString().replace("\"", "");
String prompt_string = calls.get(2).toString();
Richiamare Gemini da BigQuery
Utilizza la funzione remota in una query SELECT per testare la funzione di convalida delle immagini in base al prompt.
select gemini_bq_fn.FN_IMAGE_VALIDATE(
'https://storage.googleapis.com/demo-bq-gemini-public-image/Baseline.JPG',
REPLACE(uri, 'gs://', 'https://storage.googleapis.com/') ,
'You are an expert image validator who can respond with JSON result. Find 2 images here. The first one is the reference image. The second image is the test image. Compare the second image to see if the second image is similar to the first in terms of the text present in the image. Respond ONLY in JSON Format with 3 attributes namely SIMILARITY which is a \"YES\" or \"NO\", SIMILARITY_SCORE which is a percentage and DIFFERENCE_COMMENT which is a string.' ) as IMAGE_VALIDATION_RESULT
from `gemini_bq_fn.image_validation`
where uri like '%TEST1%';
Prova la query riportata sopra con i file oggetto TEST1 e TEST2. Vedrai un risultato simile al seguente:

Ecco le immagini di riferimento:
Immagine di riferimento

Immagine di prova

Tieni presente che entrambe le immagini sono simili in quanto mostrano la visualizzazione della console Cloud di Duet AI, ma il testo è diverso in quanto generato dal modello in formato JSON.
In questo modo, hai testato correttamente l'implementazione della funzione remota.
7. Vantaggi e casi d'uso
Vediamo alcuni dei vantaggi dell'integrazione di BigQuery e Gemini per l'analisi dei dati strutturati e non strutturati.
- Integrare l'AI generativa nei tuoi dati: non dovrai più spostare i dati, duplicarli e aggiungere complessità. Puoi analizzare i dati e generare approfondimenti nello stesso ambiente BigQuery.
- Analisi avanzata: le spiegazioni in linguaggio naturale di Gemini aggiungono un nuovo livello di comprensione ai tuoi dati e puoi ottenerlo utilizzando query SQL.
- Scalabilità: questa soluzione gestisce grandi set di dati e analisi complesse con facilità e con poco codice.
Le applicazioni sono molteplici. Prendi in considerazione scenari in ambito finanziario (analisi delle tendenze di mercato), vendita al dettaglio (sentiment dei clienti), sanità (riepiloghi di report medici) e così via, in cui i tuoi team di analisi e business potrebbero implementare queste funzionalità con uno sforzo e risorse relativamente bassi e con un linguaggio e uno strumento di scelta familiari.
8. Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo post, segui questi passaggi:
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
- Se vuoi conservare il progetto, salta i passaggi precedenti ed elimina la funzione Cloud navigando in Cloud Functions, selezionando la funzione che vuoi eliminare dall'elenco e facendo clic su Elimina.
9. Complimenti
Complimenti. Con i modelli Gemini integrati in BigQuery, non ti limiti più ad analizzare i dati, ma racconti storie basate sui dati. Puoi generare le narrazioni nascoste all'interno dei tuoi set di dati e trasformare il modo in cui comprendi gli approfondimenti. Inizia a sperimentare. Applica questa tecnica ai tuoi set di dati e scopri le storie che contengono. Con BigQuery che supporta i dati non strutturati nelle tabelle degli oggetti ( tabelle esterne), prova a utilizzare Gemini Pro Vision per creare insight generativi sui dati delle immagini. Per indicazioni più approfondite, consulta la documentazione di Vertex AI, BigQuery Remote Functions e Cloud Functions. Ecco il repository GitHub per questo progetto. Facci sapere cosa realizzi con queste conoscenze.