Genera embedding

Questa pagina mostra come utilizzare AlloyDB come strumento per i modelli linguistici di grandi dimensioni (LLM) e generare incorporamenti vettoriali in base a un LLM.

Per ulteriori informazioni sull'utilizzo dei modelli di ML con AlloyDB Omni, consulta Creare applicazioni di AI generativa.

AlloyDB ti consente di utilizzare un modello LLM ospitato da Vertex AI per tradurre una stringa di testo in un incorporamento, ovvero la rappresentazione del significato semantico del testo dato da parte del modello come vettore numerico. Per ulteriori informazioni sul supporto di Vertex AI per gli embedding di testo, consulta Embedding di testo.

Prima di iniziare

Per consentire ad AlloyDB di generare embedding, assicurati di soddisfare i seguenti requisiti:

Limitazioni regionali

Puoi generare embedding nelle regioni in cui è disponibile l'IA generativa su Vertex AI. Per un elenco delle regioni, consulta le località dell'IA generativa su Vertex AI .

Per AlloyDB, assicurati che sia il cluster AlloyDB sia il modello Vertex AI su cui esegui la query si trovino nella stessa regione.

Estensione del database obbligatoria

  • Assicurati che l'estensione google_ml_integration sia installata nel database AlloyDB.

    CREATE EXTENSION google_ml_integration;
    

    Questa estensione è inclusa in AlloyDB. Puoi installarlo su qualsiasi database del tuo cluster.

  • Imposta il flag di database google_ml_integration.enable_model_support su off.

Configurare l'accesso al modello

Prima di poter generare embedding da un database AlloyDB, devi configurare AlloyDB in modo che funzioni con un modello di embedding del testo.

Per utilizzare il modello textembeddings-gecko basato su cloud, devi integrare il tuo database con con Vertex AI.

Concedi agli utenti del database l'accesso per generare embedding

Concedi agli utenti del database l'autorizzazione per eseguire la funzione embedding per eseguire le previsioni:

  1. Connetti un client psql all'istanza principale del cluster, come descritto in Connetti un client psql a un'istanza.

  2. Al prompt dei comandi psql, connettiti al database e concedi le autorizzazioni:

    \c DB_NAME
    
    GRANT EXECUTE ON FUNCTION embedding TO USER_NAME;
    

    Sostituisci quanto segue:

    • DB_NAME: il nome del database su cui devono essere concesse le autorizzazioni

    • USER_NAME: il nome dell'utente a cui devono essere concesse le autorizzazioni

Generare un'evidenziazione

AlloyDB fornisce una funzione che consente di tradurre il testo in un embedding vettoriale. Puoi quindi memorizzare l'embedding nel database come dati vettoriali e, facoltativamente, utilizzare le funzioni pgvector per basare le query su di esso.

Per generare un embedding utilizzando AlloyDB, utilizza la funzione embedding() fornita dall'estensione google_ml_integration:

SELECT embedding( 'MODEL_IDVERSION_TAG', 'TEXT');

Sostituisci quanto segue:

  • MODEL_ID: l'ID del modello su cui eseguire la query.

    Se utilizzi Vertex AI Model Garden, specifica textembedding-gecko@003 come ID modello. Questi sono i modelli basati su cloud che AlloyDB può utilizzare per gli embedding di testo. Per ulteriori informazioni, consulta la sezione Embedding di testo.

  • (Facoltativo) VERSION_TAG: il tag della versione del modello su cui eseguire la query. Anteponi al tag @.

    Se utilizzi uno dei modelli in inglese textembedding-gecko con Vertex AI, specifica uno dei tag di versione, ad esempio textembedding-gecko@003, elencato in Versioni dei modelli.

    Google consiglia vivamente di specificare sempre il tag della versione. Se non specifichi il tag della versione, AlloyDB utilizza sempre la versione più recente del modello, il che potrebbe portare a risultati imprevisti.

  • TEXT: il testo da tradurre in un embedding vettoriale.

L'esempio seguente utilizza la versione 003 dei modelli in inglese textembedding-gecko per generare un embedding basato su una stringa letterale fornita:

SELECT embedding('textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');

Memorizzare gli incorporamenti

Gli embedding generati utilizzando l'estensione google_ml_integration sono implementati come array di valori real. Questi incorporamenti generati vengono passati come input per le funzioni di estensione pgvector.

Per memorizzare questo valore in una tabella, aggiungi una colonna real[]:

ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[DIMENSIONS];

Dopo aver creato una colonna per memorizzare gli embedding, puoi completarla in base ai valori già memorizzati in un'altra colonna della stessa tabella:

UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_IDVERSION_TAG', SOURCE_TEXT_COLUMN);

Sostituisci quanto segue:

  • TABLE: il nome della tabella

  • EMBEDDING_COLUMN: il nome della colonna di embedding

  • MODEL_ID: l'ID del modello su cui eseguire la query.

    Se utilizzi Vertex AI Model Garden, specifica textembedding-gecko@003 come ID modello. Questi sono i modelli basati su cloud che AlloyDB può utilizzare per gli embedding di testo. Per ulteriori informazioni, consulta la sezione Embedding di testo.

  • (Facoltativo) VERSION_TAG: il tag della versione del modello su cui eseguire la query. Anteponi al tag @.

    Se utilizzi uno dei modelli in inglese textembedding-gecko con Vertex AI, specifica uno dei tag di versione, ad esempio textembedding-gecko@003, elencato in Versioni del modello.

    Google consiglia vivamente di specificare sempre il tag della versione. Se non specifichi il tag della versione, AlloyDB utilizza sempre la versione più recente del modello, il che potrebbe portare a risultati imprevisti.

  • SOURCE_TEXT_COLUMN: il nome della colonna che memorizza il testo da tradurre in embedding

Puoi anche utilizzare la funzione embedding() per tradurre il testo in un vettore. Applicano il vettore all'pgvectoroperatore del vicino più prossimo, <->, per trovare le righe del database con gli incorporamenti semanticamente più simili.

Poiché embedding() restituisce un array real, devi eseguire il casting esplicito della chiamata embedding() a vector per utilizzare questi valori con gli operatori pgvector.

  CREATE EXTENSION google_ml_integration;
  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <-> embedding('MODEL_IDVERSION_TAG', 'TEXT')
    LIMIT ROW_COUNT

Utilizzare i tag delle versioni del modello per evitare errori

Google consiglia vivamente di utilizzare sempre una versione stabile del modello di embedding scelto. Per la maggior parte dei modelli, ciò significa impostare esplicitamente un tag della versione.

La chiamata alla funzione embedding() senza specificare il tag della versione del modello è sintatticamente valida, ma è anche soggetta a errori.

Se ometti il tag della versione quando utilizzi un modello in Vertex AI Model Garden, Vertex AI utilizza la versione più recente del modello. Potrebbe non essere l'ultima versione stabile. Per ulteriori informazioni sulle versioni dei modelli Vertex AI disponibili, consulta Versioni dei modelli.

Una determinata versione del modello Vertex AI restituisce sempre la stessa rispostaembedding() a un determinato input di testo. Se non specifichi le versioni del modello nelle chiamate a embedding(), una nuova versione del modello pubblicata può modificare bruscamente il vettore restituito per un determinato input, causando errori o altri comportamenti imprevisti nelle tue applicazioni.

Per evitare questi problemi, specifica sempre la versione del modello.

Risoluzione dei problemi

ERRORE: modello non trovato per model_id

Messaggio di errore

Quando provi a generare un embedding utilizzando la funzione embedding() o google_ml.embedding(), si verifica il seguente errore:

ERROR: 'Model not found for model_id:

  • Esegui l'upgrade dell'estensione google_ml_integration e riprova a generare gli embedding.

    ALTER EXTENSION google_ml_integration UPDATE;
    

    Puoi anche eliminare l'estensione e crearla di nuovo.

    DROP extension google_ml_integration;
    CREATE EXTENSION google_ml_integration;
    
  • Se generi embedding utilizzando la funzione google_ml.embedding(), assicurati che il modello sia registrato e che tu stia utilizzando il valore model_id corretto nella query.

Passaggi successivi