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 il modello LLM Vertex AI per la generazione di testo ( text-bison) come funzione remota ospitata in BigQuery. Grazie al progetto Archive Project di GitHub, ora abbiamo uno snapshot completo di oltre 2,8 milioni di repository GitHub open source nei set di dati pubblici di Google BigQuery. L'elenco dei servizi utilizzati è:
- BigQuery ML
- 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
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.
- Assicurati che tutte le API necessarie (API BigQuery, API Vertex AI, API BigQuery Connection) siano attivate.
- Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud precaricato con bq. Consulta la documentazione per i comandi e l'utilizzo di gcloud
Nella console Cloud, fai clic su Attiva Cloud Shell nell'angolo in alto a destra:

Se il progetto non è impostato, utilizza il seguente comando per impostarlo:
gcloud config set project <YOUR_PROJECT_ID>
- Vai direttamente alla console BigQuery inserendo il seguente URL nel 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 in Google BigQuery Public Datasets. 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. Quindi, fai clic sull'opzione "MOSTRA SOLO CON STELLA" per visualizzare solo quel set di dati tra i set di dati pubblici.

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

5. Creazione del set di dati BigQuery
Un set di dati BigQuery è una raccolta di tabelle. Tutte le tabelle di un set di dati vengono archiviate nella stessa posizione dei dati. Puoi anche allegare controlli dell'accesso personalizzati per limitare l'accesso a un set di dati e alle relative tabelle.
Crea un set di dati nella regione "US" (o in qualsiasi regione di tua preferenza) denominato bq_llm.

Questo set di dati ospiterà il modello ML che creeremo nei passaggi successivi. In genere, memorizziamo anche i dati che utilizziamo nell'applicazione ML in una tabella di questo set di dati, ma nel nostro caso d'uso i dati si trovano già in un set di dati pubblici di BigQuery, quindi li faremo riferimento direttamente dal set di dati appena creato, se necessario. Se vuoi eseguire questo progetto sul tuo set di dati in un file CSV (o in qualsiasi altro file), puoi caricare i dati in una tabella di un set di dati BigQuery eseguendo il comando riportato di seguito 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 di una connessione esterna
Crea una connessione esterna (abilita l'API BigQuery Connection se non l'hai già fatto) e annota l'ID service account dai dettagli di configurazione della connessione:
- Fai clic sul pulsante +AGGIUNGI nel riquadro Explorer di BigQuery (a sinistra della console BigQuery) e fai clic su "Connessione a origini dati esterne" tra le origini più utilizzate elencate.
- Seleziona Tipo di connessione come "BigLake e funzioni remote" e fornisci "llm-conn" come ID connessione

- Una volta creata la connessione, prendi nota del service account generato dai dettagli di configurazione della connessione.
7. Concedi le autorizzazioni
In questo passaggio concederemo le autorizzazioni al service account per accedere al servizio Vertex AI:
Apri IAM e aggiungi il service account che hai copiato dopo aver creato la connessione esterna come Principal e seleziona il ruolo "Utente Vertex AI".

8. Crea un modello ML remoto
Crea il modello remoto che rappresenta un modello linguistico di grandi dimensioni di 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 del modello di generazione di testo in formato JSON che contiene sia gli attributi di contenuti che di sicurezza: a. I contenuti rappresentano il risultato del testo generato b. Gli attributi di sicurezza rappresentano il filtro dei contenuti integrato con una soglia regolabile attivata nell'API Vertex AI Palm per evitare risposte non intenzionali o impreviste dal modello linguistico di grandi dimensioni. La risposta viene bloccata se viola la soglia di sicurezza.
ML.GENERATE_TEXT è il costrutto che utilizzi in BigQuery per accedere al 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 e 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. Più è basso, meglio è in termini di pertinenza.
Max_output_tokens è il numero di parole che vuoi nella risposta
La risposta alla query è simile alla seguente:

10. Appiattisci il risultato della query
Appiattiamo il risultato in modo da non dover decodificare esplicitamente il JSON 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 e comprensibile estratto dalla risposta JSON.
La risposta alla query è simile alla seguente:

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:
- 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.
12. Complimenti
Complimenti! Hai utilizzato correttamente un programma LLM di generazione di testo di Vertex AI in modo programmatico per eseguire l'analisi del testo sui tuoi dati utilizzando solo query SQL. Consulta la documentazione del prodotto Vertex AI LLM per scoprire di più sui modelli disponibili.