Generazione autonoma di incorporamenti
Questo documento descrive come utilizzare la generazione autonoma di incorporamenti per i tuoi dati, che consente a BigQuery di gestire una colonna di incorporamenti in una tabella in base a una colonna di origine. Quando aggiungi o modifichi i dati nella colonna di origine, BigQuery genera o aggiorna automaticamente la colonna di incorporamento per questi dati utilizzando un modello di incorporamento Vertex AI. Questa opzione è utile se vuoi che BigQuery mantenga gli incorporamenti quando i dati di origine vengono aggiornati regolarmente.
Gli incorporamenti sono utili per le moderne applicazioni di AI generativa come la Retrieval Augmented Generation (RAG), ma possono essere complessi da creare, gestire ed eseguire query. Puoi utilizzare la generazione autonoma di embedding per semplificare il processo di creazione, manutenzione ed esecuzione di query sugli embedding da utilizzare nelle ricerche di somiglianza e in altre applicazioni di AI generativa.
Ad esempio, puoi utilizzare query simili alla seguente per creare una tabella con la generazione di incorporamenti autonomi abilitata, inserire dati ed eseguire la ricerca semantica:
CREATE TABLE mydataset.products (
name STRING,
description STRING,
description_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
GENERATED ALWAYS AS (
AI.EMBED(description, connection_id => 'us.example_connection',
endpoint => 'text-embedding-005'))
STORED OPTIONS( asynchronous = TRUE ));
# Values in the description_embedding column are automatically generated.
INSERT INTO mydataset.products (name, description) VALUES
("Super slingers"), ("An exciting board game for the whole family"), ...;
SELECT * FROM AI.SEARCH(TABLE mydataset.products, 'description', "A really fun toy");
Prima di iniziare
Per attivare la generazione autonoma di incorporamenti in una tabella, devi disporre delle autorizzazioni e della connessione necessarie.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per attivare la generazione autonoma di incorporamenti, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Per utilizzare una risorsa di connessione:
Utente BigQuery Connections (
roles/bigquery.connectionUser) sulla connessione -
Per creare una tabella:
BigQuery Data Editor (
roles/bigquery.dataEditor) nella tabella -
Concedi al account di servizio della connessione il seguente ruolo in modo che possa accedere ai modelli ospitati negli endpoint Vertex AI:
Utente Vertex AI (
roles/aiplatform.user) sul progetto che contiene la connessione
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Crea una connessione e concedi l'autorizzazione a un account di servizio
Per attivare la generazione autonoma di incorporamenti in una tabella, devi
creare una connessione di risorsa Cloud.
Poi, concedi
il ruolo Utente Vertex AI
(roles/aiplatform.user) al account di servizio creato quando hai
creato la connessione.
Crea una tabella con la generazione autonoma di incorporamenti
Puoi utilizzare la generazione autonoma di incorporamenti per generare incorporamenti utilizzando la
funzione AI.EMBED
in un'istruzione
CREATE TABLE.
CREATE TABLE DATASET_ID.TABLE (
[COLUMN, ...]
STRING_COL STRING,
EMBEDDING_COL_NAME STRUCT<result ARRAY<FLOAT64>, status STRING>
GENERATED ALWAYS AS (
AI.EMBED(
STRING_COL,
connection_id => CONNECTION_ID,
endpoint => ENDPOINT)
)
STORED OPTIONS (asynchronous = TRUE)
);
Sostituisci quanto segue:
DATASET_ID: il nome del set di dati in cui vuoi creare la tabella.TABLE: il nome della tabella su cui creare la generazione di incorporamenti autonomi.COLUMN, ...: le colonne che la tabella deve contenere oltre a quella che vuoi incorporare automaticamente.STRING_COL: il nome della colonnaSTRINGche vuoi incorporare automaticamente.EMBEDDING_COL_NAME: Il nome della colonna di incorporamento generata automaticamente.CONNECTION_ID: un valoreSTRINGche contiene il nome di una connessione da utilizzare, ad esempiomy_project.us.example_connection. Devi concedere il ruolo Utente Vertex AI al account di servizio della connessione nel progetto in cui crei la tabella.ENDPOINT: un valoreSTRINGche specifica un endpoint di un modello di text embedding Vertex AI supportato da utilizzare per il modello di text embedding. Il valore dell'endpoint che specifichi deve includere la versione del modello, ad esempiotext-embedding-005. Se specifichi il nome del modello anziché un URL, BigQuery ML identifica automaticamente il modello e utilizza l'endpoint completo del modello.
Il job di generazione degli incorporamenti di sfondo inizia poco dopo la creazione della tabella o dopo l'aggiornamento dei dati nella colonna di origine.
Per monitorare l'avanzamento della generazione degli incorporamenti, puoi utilizzare una query simile alla seguente:
SELECT
COUNT(*) AS total_num_rows,
COUNTIF(description_embedding IS NOT NULL
AND description_embedding.status = '') AS total_num_generated_embeddings
FROM
PROJECT_ID.DATASET_ID.TABLE;
Dopo aver creato la tabella con gli incorporamenti, puoi
creare un indice vettoriale
nella colonna STRUCT che contiene l'incorporamento generato automaticamente.
Esempio
Supponiamo che tu sia un grande rivenditore che vende molti prodotti diversi. Hai una tabella di nomi e descrizioni dei prodotti e vuoi aiutare i tuoi clienti a trovare i prodotti che stanno cercando. Le seguenti query mostrano come configurare la generazione autonoma di incorporamenti per facilitare la ricerca semantica delle descrizioni dei prodotti.
Innanzitutto, crea un set di dati:
CREATE SCHEMA mydataset;
Successivamente, crea una tabella con la generazione di incorporamenti autonomi abilitata per contenere le informazioni sui prodotti. La colonna generata automaticamente si chiama
description_embedding ed è basata sulla colonna description.
# Create a table of products and descriptions with a generated embedding column.
CREATE TABLE mydataset.products (
name STRING,
description STRING,
description_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
GENERATED ALWAYS AS (AI.EMBED(
description,
connection_id => 'us.example_connection',
endpoint => 'text-embedding-005'
))
STORED OPTIONS( asynchronous = TRUE )
);
La seguente query inserisce alcuni nomi e descrizioni di prodotti nella tabella.
Non specificare un valore per description_embedding perché viene generato
automaticamente.
# Insert product descriptions into the table.
# The description_embedding column is automatically updated.
INSERT INTO mydataset.products (name, description) VALUES
("Lounger chair", "A comfortable chair for relaxing in."),
("Super slingers", "An exciting board game for the whole family."),
("Encyclopedia set", "A collection of informational books.");
Se vuoi, puoi creare un indice vettoriale nella tabella per velocizzare la ricerca.
Un indice vettoriale richiede più di tre righe, quindi la seguente query presuppone
che tu abbia inserito dati aggiuntivi. Ogni volta che inserisci i dati, la
colonna description_embedding viene aggiornata automaticamente.
CREATE VECTOR INDEX my_index
ON mydataset.products(description_embedding)
OPTIONS(index_type = 'IVF');
Infine, puoi utilizzare la
funzione AI.SEARCH
per eseguire la ricerca semantica dei tuoi prodotti per un giocattolo divertente:
# Search for products that are fun to play with.
SELECT base.name, base.description, distance
FROM AI.SEARCH(TABLE mydataset.products, 'description', "A really fun toy");
/*------------------+----------------------------------------------+----------------------+
| name | description | distance |
+------------------+----------------------------------------------+----------------------+
| Super slingers | An exciting board game for the whole family. | 0.80954913893618929 |
| Lounger chair | A comfortable chair for relaxing in. | 0.938933930620146 |
| Encyclopedia set | A collection of informational books. | 1.1119297739353384 |
+------------------+----------------------------------------------+----------------------*/
Visualizzare informazioni sulle colonne di incorporamento generate automaticamente
Per verificare che una colonna sia una colonna di incorporamento generata automaticamente, esegui una query
sulla
visualizzazione INFORMATION_SCHEMA.COLUMNS.
La seguente query mostra informazioni su tutte le colonne di incorporamento generate automaticamente:
SELECT *
FROM PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.COLUMNS
WHERE is_generated = 'ALWAYS';
Il campo generation_expression mostra la chiamata alla funzione AI.EMBED
utilizzata per generare gli incorporamenti nella colonna.
Utilizzare una prenotazione personale
Per impostazione predefinita, BigQuery utilizza gli slot on demand per gestire l'elaborazione necessaria per mantenere la colonna di incorporamento generata. Per garantire
prestazioni prevedibili e coerenti, puoi
facoltativamente
creare una prenotazione
e impostare job_type su BACKGROUND. Quando è presente una prenotazione in background, BigQuery la utilizza per gestire la colonna di incorporamento generata.
Risoluzione dei problemi
La colonna dell'incorporamento generato contiene due campi: result e status.
Se si verifica un errore quando BigQuery tenta di generare un embedding
per una determinata riga della tabella, il campo result è NULL e il
campo status descrive l'errore. Ad esempio, se la colonna di origine è NULL,
anche l'incorporamento result è NULL e lo stato è
NULL value is not supported for embedding generation.
Un errore più grave può bloccare la generazione dell'embedding. In questo caso, puoi
interrogare la
visualizzazione INFORMATION_SCHEMA.JOBS
per il job in background e esaminare le informazioni nel campo error_result.
L'ID job di un job di incorporamento in background è preceduto da gc_. Ad esempio,
la seguente query estrae tutti i job in background il cui risultato di errore non è
NULL:
SELECT * FROM `region-REGION.INFORMATION_SCHEMA.JOBS` j
WHERE EXISTS (
SELECT 1
FROM unnest(j.referenced_tables) t
WHERE
j.project_id = 'PROJECT_ID'
AND t.dataset_id = 'DATASET_ID'
AND t.table_id = 'TABLE'
)
AND starts_with(job_id, 'gc')
AND error_result IS NOT NULL
ORDER BY j.creation_time DESC;
Monitorare i costi
La generazione autonoma di incorporamenti invia richieste a Vertex AI, che può comportare costi. Per monitorare i costi di Vertex AI sostenuti dai job di incorporamento in background:
- Visualizza i report sulla fatturazione in fatturazione Cloudg.
Utilizza i filtri per perfezionare i risultati.
Per i servizi, seleziona Vertex AI.
Per visualizzare gli addebiti per un job specifico, filtra per etichetta.
Imposta la chiave su
bigquery_ml_jobe il valore sull'ID job del job di incorporamento. Tutti i job di incorporamento in background hanno il prefissogc_.
Potrebbero essere necessarie fino a 24 ore prima che alcuni addebiti vengano visualizzati in fatturazione Cloud.
Limitazioni
- Ogni tabella supporta al massimo una colonna di incorporamento generata automaticamente.
- Non è indicato che una colonna viene generata automaticamente quando visualizzi lo schema di una tabella utilizzando la console Google Cloud , il comando
bq showo il campoddldella visualizzazioneINFORMATION_SCHEMA.TABLES. - Non puoi aggiungere colonne di incorporamento generate a una tabella esistente utilizzando
ALTER TABLE ADD COLUMN. - Se crei una copia, un clone o uno snapshot di una tabella con una colonna di incorporamento generata, vengono copiati solo i dati. La configurazione di generazione non viene applicata alla nuova tabella e gli aggiornamenti alla colonna di origine della nuova tabella non generano nuovi incorporamenti.
- Se ripristini da uno snapshot una tabella per cui era attivata la generazione autonoma di incorporamenti, la configurazione della generazione di incorporamenti non viene ripristinata.
- Puoi creare colonne di incorporamento generate solo utilizzando SQL. Non puoi utilizzare
i comandi
bq mkobq updateper creare colonne di incorporamento generate. - La colonna di origine della colonna generata deve essere una colonna
STRING. Dopo aver creato la colonna di incorporamento generato, si applicano le seguenti limitazioni:
- Non puoi eliminare o rinominare la colonna di origine, ma puoi comunque eliminare o rinominare la colonna di incorporamento generata. Se elimini la colonna di incorporamento, puoi eliminare o rinominare la colonna di origine.
- Non puoi modificare il tipo di dati della colonna di origine o della colonna di incorporamento generata.
Non puoi specificare valori predefiniti per le colonne di incorporamento generate automaticamente.
Non puoi scrivere direttamente nelle colonne di incorporamento generate utilizzando questi metodi:
- DML
- Scritture in streaming
bq insertbq copy -a
Le tabelle con colonne di incorporamento generate non supportano policy di sicurezza a livello di colonna, come i tag di policy.
Quando chiami una funzione di ricerca, ad esempio
VECTOR_SEARCHoAI.SEARCH, le righe con incorporamenti mancanti nella tabella di base vengono ignorate durante la ricerca.Non puoi creare un indice vettoriale partizionato in una tabella in cui è attivata la generazione di incorporamenti autonomi.
Se crei un indice vettoriale sulla colonna di incorporamento generata automaticamente, l'addestramento dell'indice inizia dopo che almeno l'80% delle righe ha generato incorporamenti. Puoi utilizzare la seguente query per verificare la percentuale di incorporamenti generati nella tabella:
SELECT COUNTIF(description_embedding IS NOT NULL AND description_embedding.status = '') * 100.0 / COUNT(*) AS percent FROM PROJECT_ID.DATASET_ID.TABLE;
Passaggi successivi
- Scopri di più sulla creazione e gestione degli indici vettoriali.
- Consulta l'articolo Introduzione alla ricerca vettoriale.