LLM solo SQL con BigQuery ML utilizzando l'API Vertex AI PaLM

1. Introduzione

In questo codelab, ho elencato i passaggi per eseguire il riepilogo del codice sorgente dai repository GitHub e l'identificazione del linguaggio di programmazione nel repository, utilizzando Vertex AI Large Language Model per la generazione di testo ( text-bison) come funzione remota ospitata in BigQuery. Grazie al Archive Project di GitHub, ora disponiamo di uno snapshot completo di oltre 2,8 milioni di repository GitHub open source nei set di dati pubblici di Google BigQuery. Ecco l'elenco dei servizi utilizzati:

  1. BigQuery ML
  2. API Vertex AI PaLM

Cosa creerai

Creerai

  • Un set di dati BigQuery per contenere il modello
  • Un modello BigQuery che ospita l'API Vertex AI PaLM come funzione remota
  • Una connessione esterna per stabilire la connessione tra BigQuery e Vertex AI

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. Assicurati che tutte le API necessarie (API BigQuery, API Vertex AI, API BigQuery Connection) siano abilitate.
  4. Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione su Google Cloud in cui è precaricato bq. Consulta la documentazione per i comandi e l'utilizzo di gcloud

Dalla console Cloud, fai clic su Attiva Cloud Shell nell'angolo in alto a destra:

51622c00acec2fa.png

Se il progetto non è configurato, utilizza il comando seguente per impostarlo:

gcloud config set project <YOUR_PROJECT_ID>
  1. Vai direttamente alla console BigQuery inserendo il seguente URL nel tuo browser: https://console.cloud.google.com/bigquery

4. Preparazione dei dati in corso…

In questo caso d'uso, utilizziamo i contenuti del codice sorgente del set di dati github_repos nei set di dati pubblici di Google BigQuery. Per utilizzarlo, nella console BigQuery, cerca "github_repos" e premi Invio. Fai clic sulla stella accanto al set di dati elencato come risultato di ricerca. Fai clic su "MOSTRA SOLO SPECIALI". per vedere il set di dati solo dai set di dati pubblici.

dc6bf1e2fa6bba8a.png

Espandi le tabelle nel set di dati per visualizzare lo schema e l'anteprima dei dati. Useremo sample_contents, che contiene solo un campione (10%) dei dati completi nella tabella contenuti. Ecco un'anteprima dei dati:

e021c689c56abf22.png

5. Creazione del set di dati BigQuery

Un set di dati BigQuery è una raccolta di tabelle. Tutte le tabelle di un set di dati sono archiviate nella stessa località dei dati. Puoi anche collegare controlli di accesso personalizzati per limitare l'accesso a un set di dati e alle relative tabelle.

Crea un set di dati nella regione "US" (o qualsiasi regione di nostra preferenza) denominata bq_llm

c67e9f929629739a.png

Questo set di dati ospiterà il modello ML che creeremo nei passaggi successivi. Tipicamente archiviamo anche i dati che utilizziamo nell'applicazione ML in una tabella del set di dati stesso, tuttavia nel nostro caso d'uso i dati risiedono già in un set di dati pubblico BigQuery, faremo riferimento direttamente dal nostro set di dati appena creato, come richiesto. Se vuoi eseguire questo progetto sul tuo set di dati all'interno di un file CSV (o qualsiasi altro file), puoi caricare i tuoi dati in un set di dati BigQuery nella tabella eseguendo il comando in basso dal terminale Cloud Shell:

bq load --source_format=CSV --skip_leading_rows=1 bq_llm.table_to_hold_your_data \
./your_file.csv \ text:string,label:string

6. Creazione della connessione esterna in corso...

Crea una connessione esterna (abilita l'API BQ Connection se non l'hai già fatto) e prendi nota dell'ID dell'account di servizio nei dettagli di configurazione della connessione:

  1. Fai clic sul pulsante + AGGIUNGI nel riquadro Explorer di BigQuery (a sinistra della console BigQuery) e poi su "Connessione a origini dati esterne" nelle fonti più popolari elencate
  2. Seleziona il tipo di connessione come "BigLake e funzioni remote" e fornirà "llm-conn" come ID connessione

6b75042881eaec5f.png

  1. Dopo aver creato la connessione, prendi nota dell'account di servizio generato dai dettagli di configurazione della connessione

7. Concedi le autorizzazioni

In questo passaggio concederemo le autorizzazioni all'account di servizio per accedere al servizio Vertex AI:

Apri IAM e aggiungi l'account di servizio che hai copiato dopo aver creato la connessione esterna come entità, quindi seleziona "Utente Vertex AI" Ruolo

ff8e1d730879f972.png

8. crea un modello ML remoto

Crea il modello remoto che rappresenta un modello linguistico di grandi dimensioni Vertex AI ospitato:

CREATE OR REPLACE MODEL bq_llm.llm_model
  REMOTE WITH CONNECTION `us.llm-conn`
  OPTIONS (remote_service_type = 'CLOUD_AI_LARGE_LANGUAGE_MODEL_V1');

Crea un modello denominato llm_model nel set di dati bq_llm che utilizza l'API CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 di Vertex AI come funzione remota. Il completamento dell'operazione richiede alcuni secondi.

9. Genera testo utilizzando il modello ML

Una volta creato il modello, utilizzalo per generare, riassumere o classificare il testo.

SELECT
  ml_generate_text_result['predictions'][0]['content'] AS generated_text,
  ml_generate_text_result['predictions'][0]['safetyAttributes']
    AS safety_attributes,
  * EXCEPT (ml_generate_text_result)
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
    ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens));

**Spiegazione:

ml_generate_text_result** è la risposta dal modello di generazione di testo in formato JSON che contiene sia contenuti che attributi di sicurezza: a. Il contenuto rappresenta il risultato di testo generato (b. Gli attributi di sicurezza rappresentano il filtro dei contenuti integrato con una soglia regolabile che è abilitata nell'API Vertex AI Palm per evitare risposte indesiderate o impreviste dal modello LLM. La risposta viene bloccata se viola la soglia di sicurezza

ML.GENERATE_TEXT è il costrutto che utilizzi in BigQuery per accedere all'LLM Vertex AI per eseguire attività di generazione di testo

CONCAT aggiunge l'istruzione PROMPT e il record del database

github_repos è il nome del set di dati, mentre sample_contents è il nome della tabella che contiene i dati che utilizzeremo nella progettazione del prompt

Temperatura è il parametro del prompt per controllare la casualità della risposta: minore è la temperatura, migliore è il risultato in termini di pertinenza

Max_output_tokens è il numero di parole che vuoi nella risposta

La risposta alla query ha il seguente aspetto:

1156f6eecb548cd5.png

10. Appiattisci il risultato della query

Appiattiamo il risultato in modo da non dover decodificare il codice JSON in modo esplicito nella query:

SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
        ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

**Spiegazione:

Flatten_json_output** rappresenta il valore booleano che, se impostato su true restituisce un testo semplice comprensibile estratto dalla risposta JSON.

La risposta alla query ha il seguente aspetto:

3b662ef7d3ba9263.png

11. 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 Arresta per eliminare il progetto

12. Complimenti

Complimenti! Hai utilizzato correttamente un LLM di generazione del testo Vertex AI in modo programmatico per eseguire l'analisi del testo sui tuoi dati solo utilizzando query SQL. Consulta la documentazione del prodotto LLM Vertex AI per saperne di più sui modelli disponibili.