Insight LLM in loco: BigQuery e Gemini per l'analisi di dati strutturati e non strutturati

1. Introduzione

Set di dati enormi contengono insight preziosi, ma l'estrazione di una comprensione significativa può essere un'attività complicata. Gli strumenti di analisi tradizionali spesso non sono sufficienti per fornire spiegazioni sfaccettate, simili a quelle umane, che ci aiutino a comprendere appieno la storia all'interno dei nostri dati. I data warehouse contengono sempre più dati non strutturati, ma questi ultimi non sono sempre stati accessibili per raccogliere insight. 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 dati, fornendo spiegazioni, analisi del sentiment, rilevamento di oggetti e altro ancora. Con l'emergere di modelli multimodali (e la possibilità di archiviare dati oggetto come immagini e video in BigQuery tramite 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 testi 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 scalarli fino a migliaia di righe all'interno di BigQuery:

Metodo 1: chiamata del modello remoto

  • Chiama Gemini 1.0 Pro dall'interno di BigQuery utilizzando ML.GENERATE_TEXT nella query SELECT.
  • Utilizza questo approccio quando il modello è già disponibile come modello remoto in BigQuery e vuoi usarlo subito. Controlla lo stato del modello da utilizzare nella documentazione di BigQuery.

Metodo 2: implementazione della funzione remota

  • Chiama una funzione Cloud Functions 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 pronta come modello remoto o se vuoi maggiore flessibilità e personalizzazione nel tuo caso d'uso.

Cosa creerai

  • Per il metodo Remote Model Invocation, creerai un generatore di riassunti della posizione per il set di dati dei libri nell'archivio internet (disponibile pubblicamente in BigQuery) richiamando il modello remoto per Gemini 1.0 Pro nel costrutto ML.GENERATE_TEXT in BigQuery.

Diagramma di flusso per la chiamata del modello remoto

  • Per il metodo di implementazione delle funzioni remote, creerai uno strumento di convalida delle immagini per convalidare le immagini di test rispetto a un'immagine di riferimento. A questo scopo, dovrai creare un set di dati contenente screenshot di immagini di test in una tabella esterna e chiedere a Gemini 1.0 Pro Vision di convalidarlo rispetto all'immagine di riferimento. Quindi, creerai una funzione Cloud Functions Java che implementa la chiamata Gemini Pro Vision e la richiami come funzione remota in BigQuery.

Diagramma di flusso per l'implementazione della funzione remota

Nota:

Potrebbero essere disponibili altri modelli di IA generativa di Vertex AI come modelli remoti in BigQuery. Ciò significa che puoi accedere subito a questi modelli con il costrutto ML.GENERATE_TEXT da BigQuery. Tuttavia, anche nel caso della disponibilità remota dei modelli, hai sempre la possibilità di creare personalizzazioni avanzate per il tuo caso d'uso con Cloud Functions e di accedere a questi modelli come funzioni remote da BigQuery.

Perché BigQuery?

BigQuery è un data warehouse multi-cloud serverless che può 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 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 complicate pipeline ETL.

BigQuery è un data warehouse su cloud completamente gestito che consente agli utenti di analizzare dati strutturati, semistrutturati e non strutturati.

2. Requisiti

  • Un browser, ad esempio Chrome o Firefox
  • Un progetto Google Cloud con fatturazione abilitata.

3. Prima di iniziare

  1. Nella pagina del selettore dei progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
  2. Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come controllare se la fatturazione è abilitata su un progetto .
  3. Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione su Google Cloud in cui è precaricato bq. Fai clic su Attiva Cloud Shell nella parte superiore della console Google Cloud.

Immagine del pulsante Attiva Cloud Shell

  1. Una volta stabilita la connessione a Cloud Shell, potrai verificare di avere già eseguito l'autenticazione e che il progetto sia impostato sul tuo ID progetto utilizzando questo comando:
gcloud auth list
  1. Esegui questo comando in Cloud Shell per confermare che il comando gcloud è a conoscenza del tuo progetto.
gcloud config list project
  1. Se il progetto non è configurato, utilizza il comando seguente per impostarlo:
gcloud config set project <YOUR_PROJECT_ID>
  1. Vai a Gemini per Google Cloud Marketplace per abilitare l'API. Puoi anche utilizzare il comando seguente nel terminale Cloud Shell:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
  1. Assicurati che siano abilitate le seguenti API:
  • BigQuery
  • Connessione BigQuery
  • Funzione Cloud Functions
  • Cloud Run
  • Vertex AI
  • Cloud Build
  • API di Cloud Storage

L'alternativa all'utilizzo del comando gcloud è attraverso 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

Inizia creando un set di dati e una connessione tra risorse Cloud.

Un set di dati in BigQuery è un container per tutte le tabelle e gli oggetti della tua applicazione.

Per creare un set di dati:

  1. Vai alla pagina BigQuery nella console Google Cloud.
  2. Nel riquadro di Explorer, seleziona il progetto in cui vuoi creare il set di dati.
  3. Espandi l'opzione Azioni (l'icona con i puntini di sospensione verticali) e fai clic su Crea set di dati.

Immagine del menu Azioni e dell&#39;opzione Crea set di dati

  1. Fai clic su Crea set di dati.
  2. Inserisci gemini_bq_fn nel campo ID set di dati.
  3. Imposta il tipo di località su Multi-region e accetta il valore predefinito, ovvero US(multiple regions in United States.
  4. Fai clic su Crea set di dati.
  5. Verifica che il set di dati sia stato creato ed elencato sotto il tuo ID progetto nel riquadro Explorer.

Per interagire con la 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 Functions. Le connessioni BigLake consentono di connettere l'origine dati esterna garantendo al contempo una sicurezza e un controllo dell'accesso granulari a BigQuery, nel nostro caso l'API Gemini Pro di Vertex AI.

Per creare la connessione BigLake, segui questi passaggi:

  1. Fai clic su Aggiungi nel riquadro Explorer della pagina di BigQuery.

Console di BigQuery con il pulsante AGGIUNGI evidenziato per aggiungere una connessione esterna

  1. Fai clic su Connessioni con origini dati esterne.
  2. Dal menu Tipo di connessione, seleziona Modelli remoti Vertex AI, funzioni remote e BigLake (risorsa Cloud).
  3. Nel campo ID connessione, inserisci gemini-bq-conn come nome della connessione.
  4. Imposta il tipo di località su Multi-region e accetta il valore predefinito, ovvero US(multiple regions in United States.
  5. Fai clic su Crea connessione.
  6. Fai clic su Vai alla connessione,quindi copia l'ID account di servizio nel riquadro Informazioni sulla connessione.

Screenshot di Informazioni sulla connessione

  1. Accedi alla sezione IAM e Amministratore e fai clic su Concedi l'accesso.
  2. Incolla l'ID dell'account di servizio nel campo Nuovi principi.
  3. Seleziona il ruolo Vertex AI user dall'elenco dei ruoli e fai clic su Salva.

Screenshot di Concedi l&#39;accesso all&#39;account di servizio

Hai creato il set di dati e la connessione a BigQuery. Successivamente, completerai i passaggi necessari per la chiamata del modello remoto.

5. Caso d'uso 1: chiamata di modello remoto: configurare la chiamata di modello remoto

Ora che hai creato il set di dati e la connessione, creiamo un modello in BigQuery basato sul modello di base di Vertex AI Gemini Pro. Al termine di questo esercizio, l'applicazione LLM sarà operativa e in esecuzione utilizzando solo query SQL.

Passaggio 1: crea una tabella BigQuery contenente i dati di input per il modello remoto

Crea una tabella denominata books nel tuo set di dati che può contenere circa 50 record dalla tabella bigquery-public-data.gdelt_internetarchivebooks.1905 nel set di dati Internet Archive Books proveniente per uso pubblico da BigQuery.

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 DDL seguente dal riquadro SQL Editor di BigQuery:

CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');

Osserva che il modello viene creato con un'opzione per visualizzarlo.

Passaggio 3 : testa la nuova applicazione di IA generativa

Usa 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:

Risultato della query ML.GENERATE_TEXT in BigQuery

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.

Proviamo ora un altro modello Vertex AI utilizzando le funzioni remote di BigQuery. Supponiamo che tu voglia aggiungere più personalizzazione e flessibilità a come utilizzare il modello da remoto in BigQuery. I modelli supportati sono elencati nella documentazione di BigQuery.

6. Caso d'uso 2 Implementazione delle funzioni remote: configurare l'implementazione delle funzioni remote

In questo esercizio creerai una funzione in BigQuery basata sulla funzione Cloud Functions di Java che implementa il modello di base di Gemini 1.0 Pro Vision. Innanzitutto, creerai ed eseguirai il deployment della funzione Cloud Functions Java per confrontare le immagini utilizzando il modello Gemini 1.0 Pro Vision, quindi creerai la funzione remota in BigQuery che richiama la funzione Cloud Functions di cui è stato eseguito il deployment. Ricorda che puoi seguire la stessa procedura per qualsiasi esecuzione di funzione remota in BigQuery.

Possiamo iniziare.

Passaggio 1: crea la funzione Cloud Functions Java

Creerai una funzione Cloud Functions di seconda generazione in Java per convalidare le immagini di test rispetto a un'immagine di riferimento. L'immagine di riferimento è archiviata in un set di dati contenente screenshot di immagini di test in una tabella esterna in BigQuery. Convaliderai le immagini utilizzando il modello Gemini Pro Vision (SDK Java). Poi eseguirai il deployment della funzione Cloud Functions Java su un endpoint REST.

Segui questi passaggi:

  1. Avvia l'editor di Cloud Shell.
  2. Se utilizzi l'editor precedente, fai clic su Prova il nuovo editor.
  3. Nella barra di stato, fai clic su Cloud Code - Accedi.
  4. Se ti viene richiesto di autorizzare l'editor di Cloud Shell a effettuare chiamate API Google Cloud, fai clic su Autorizza. Segui le istruzioni per accedere al tuo Account Google. La connessione a Google Cloud è stata completata.
  5. Se non vedi il tuo progetto nella barra di stato di Cloud Code, fai clic su Cloud Code - Accedi > Seleziona un progetto Google Cloud. Scegli il progetto Google Cloud in cui vuoi creare le funzioni Cloud Functions. Il progetto viene caricato e diventa attivo nell'editor di Cloud Shell.
  6. Nella barra di stato di Cloud Code, fai clic sul nome del progetto attivo. Nel menu di scelta rapida visualizzato, seleziona Nuova applicazione.
  7. Nella finestra di dialogo Crea nuova applicazione, seleziona Applicazione Cloud Functions.

Popup Crea nuova applicazione, pagina 1

  1. Seleziona Java: Hello World quando ti viene chiesto di selezionare un modello.

Popup Crea nuova applicazione, pagina 2

  1. Inserisci Gemini-BQ-Function come nome del progetto nel percorso del progetto. La struttura del progetto appare nella nuova visualizzazione dell'editor di Cloud Shell.

Nuova struttura del progetto dell&#39;applicazione Cloud Functions Java

  1. Aggiungi le dipendenze necessarie all'interno del tag <dependencies>... </dependencies> o copia le dipendenze dal file pom.xml di esempio.
  2. Cambia il nome del corso da HelloWorld.java a un nome più significativo. Diciamo GeminiBigQueryFunction.java. Rinomina il pacchetto di conseguenza.
  3. Sostituisci il codice segnaposto nel file GeminiBigQueryFunction.Java con il codice campione fornito nel repository GitHub. Assicurati di sostituire la variabile <YOUR_PROJECT_ID> con il tuo ID progetto nel codice campione.
  4. Vai al terminale Cloud Shell. Verifica di essere nella directory del progetto. In caso contrario, passa alla directory del progetto eseguendo questo comando:
cd Gemini-BQ-Function
  1. Esegui questa 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 il punto di ingresso nel comando con il punto di ingresso della funzione. L'output è un URL REST nel seguente formato:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-bq-fn
  1. Testa questa funzione Cloud Functions eseguendo il comando seguente 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 per il prompt di esempio casuale:

Stringa di risposta JSON dalla funzione Cloud Functions

Ottimo! L'implementazione della funzione Cloud Functions generica per il modello Gemini Pro Vision è pronta. Utilizziamo questo endpoint direttamente sui dati BigQuery da una funzione remota BigQuery.

Passaggio 2: crea una tabella di oggetti BigQuery e una funzione remota

Prerequisito

Per questa parte dell'esercizio avrai bisogno di un bucket Cloud Storage. Per creare un bucket Cloud Storage, segui questi passaggi:

  1. Per creare un bucket, vai alla console di Cloud Storage e fai clic su Crea.
  2. Inserisci demo-bq-gemini-public-image come nome del bucket e fai clic su Crea.
  3. Deseleziona l'opzione Enforce public access prevention on this bucket. Anche se in questo esercizio crei il bucket per l'accesso pubblico, ti consigliamo di impedire l'accesso pubblico e di fornire autorizzazioni ad account di servizio specifici, come richiesto nei casi d'uso aziendali.
  4. Una volta creato il bucket, vai alla scheda Autorizzazioni per visualizzare e modificare le autorizzazioni.
  5. Per aggiungere entità, fai clic su Concedi l'accesso. Specifica un ID account di servizio per concedere le autorizzazioni a un account specifico oppure specifica allUsers per concedere l'accesso pubblico al tuo bucket.
  6. Seleziona il ruolo Storage Object Viewer e fai clic su Salva. Se richiesto, scegli di consentire l'accesso pubblico.
  7. Vai alla scheda Oggetti e carica immagini di riferimento e immagini di test da confrontare. Per questo codelab, puoi caricare i seguenti oggetti disponibili pubblicamente: baseline.JPG, TEST1.JPG e TEST2.JPG.

Creare una tabella di 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 la seguente istruzione DDL (Data Definition Language) dal riquadro dell'editor di query di 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 tuo set di dati venga creata una nuova tabella dell'oggetto denominata image_validation.

Crea una funzione remota BigQuery

Creare una funzione remota in BigQuery per richiamare la funzione Cloud Functions Java che implementa il modello Gemini Pro Vision. Crealo nello stesso set di dati. Per farlo, esegui il DDL seguente 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 che è stato restituito in precedenza in questo esercizio. Viene creata la funzione remota in BigQuery. Il DDL precedente contiene tre parametri. I primi due parametri sono gli URL delle immagini archiviate nella tabella degli oggetti creata nel passaggio precedente. L'ultimo parametro è il prompt al 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();

Richiama Gemini da BigQuery

Usa la funzione remota in una query SELECT per testare la funzione per convalidare le 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 precedente con i file oggetto TEST1 e TEST2. Vedrai un risultato simile al seguente:

Screenshot del risultato della funzione remota BigQuery

Ecco le immagini per riferimento futuro:

Immagine di riferimento

Immagine di riferimento di riferimento per lo scenario di test

Immagine di test

Immagine di test 1 per lo scenario di test

Nota che entrambe le immagini sono simili in quanto hanno la visualizzazione della console Cloud di Duet AI, ma il testo in entrambe è diverso in base al modello in formato JSON.

Hai quindi testato l'implementazione della funzione remota.

7. Vantaggi e casi d'uso

Diamo un'occhiata ad alcuni dei vantaggi dell'integrazione di BigQuery e Gemini per l'analisi dei dati strutturati e non strutturati.

  • Integrare l'IA generativa nei tuoi dati: non dovrai più spostare i dati, duplicare e aggiungere complessità. Puoi analizzare i dati e generare insight all'interno dello stesso ambiente BigQuery.
  • Analisi avanzata: le spiegazioni in linguaggio naturale di Gemini aggiungono un nuovo livello di comprensione ai tuoi dati e puoi farlo utilizzando le query SQL.
  • Scalabilità: questa soluzione gestisce set di dati di grandi dimensioni e analisi complesse con facilità e senza necessità di scrivere codice.

Le applicazioni sono molteplici. Prendi in considerazione scenari nei settori della finanza (analisi delle tendenze di mercato), della vendita al dettaglio (sentiment dei clienti), della sanità (riepiloghi di report medici) e così via, in cui i tuoi team di analisi e aziendali potrebbero implementarli con un impegno relativamente basso, con risorse e un linguaggio e uno strumento 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:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.
  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
  4. Se vuoi conservare il progetto, salta i passaggi precedenti ed elimina la funzione Cloud Functions accedendo a Cloud Functions e, nell'elenco delle funzioni, seleziona la funzione che vuoi eliminare e fai clic su Elimina.

9. Complimenti

Complimenti. Con i modelli Gemini integrati in BigQuery, non devi più solo analizzare i dati, ma sei anche un data storyteller. Puoi generare le narrazioni nascoste all'interno dei tuoi set di dati e trasformare il modo in cui comprendi i tuoi insight. Inizia a sperimentare. Applica questa tecnica ai tuoi set di dati e scopri le storie all'interno dei tuoi dati. Poiché BigQuery supporta i dati non strutturati nelle tabelle di oggetti ( Tabelle esterne), prova a utilizzare Gemini Pro Vision per creare insight generativi sui dati immagine. Per indicazioni più dettagliate, consulta la documentazione di Vertex AI, BigQuery Remote Functions e Cloud Functions. Ecco il repository GitHub per questo progetto. Facci sapere cosa crei con questo apprendimento.