Generare incorporamenti di testo

L'estensione google_ml_integration in AlloyDB per PostgreSQL consente di generare text embedding direttamente in SQL utilizzando le funzioni negli schemi public e google_ml. Puoi chiamare la funzione embedding() nello schema public con qualsiasi modello di embedding di Gemini Enterprise Agent Platform senza registrare un endpoint. Per passare parametri personalizzati come i tipi di attività o utilizzare modelli di terze parti, registra l'endpoint del modello e chiama la funzione google_ml.embedding() nello schema google_ml.

Come funzionano gli embedding

Immagina un database in esecuzione su AlloyDB con le seguenti caratteristiche:

  • Il database contiene una tabella, items. Ogni riga di questa tabella descrive un articolo venduto dalla tua attività.

  • La tabella items contiene una colonna, complaints. Questa colonna TEXT memorizza i reclami degli acquirenti registrati per ogni articolo.

  • Il database si integra con Model Garden, consentendo l'accesso ai modelli gemini-embedding-001 in inglese.

Anche se questo database memorizza i reclami sugli articoli, questi vengono archiviati come testo normale, il che rende difficile eseguire query. Ad esempio, per vedere quali articoli hanno ricevuto il maggior numero di reclami da parte dei clienti che hanno ricevuto la merce del colore sbagliato, puoi eseguire query SQL ordinarie sulla tabella, che cercano varie corrispondenze di parole chiave. Tuttavia, questo approccio trova corrispondenze solo per le righe che contengono esattamente queste parole chiave.

Ad esempio, una query SQL di base come SELECT * FROM item WHERE complaints LIKE "%wrong color%" non restituisce una riga il cui campo complaints contiene solo The picture shows a blue one, but the one I received was red.

Le query SQL che utilizzano gli incorporamenti basati su LLM possono aiutare a restituire risposte semanticamente simili per queste query. Applicando gli embedding, puoi eseguire query sulla tabella in questo esempio per trovare elementi i cui reclami hanno una somiglianza semantica con un determinato prompt testuale, ad esempio It was the wrong color.

Per la generazione di embedding di base, seleziona uno dei seguenti schemi.

Prima di iniziare

Per consentire ad AlloyDB di generare embedding, segui questi passaggi:

  • Connettiti al database utilizzando psql o AlloyDB Studio come utente postgres.

  • Verifica che l'estensione google_ml_integration sia installata.

    Per controllare la versione dell'estensione con il seguente comando:

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    

    Se devi aggiornare l'estensione, utilizza il comando ALTER EXTENSION google_ml_integration UPDATE;.

  • Prima di poter generare embedding da un database AlloyDB, devi configurare AlloyDB in modo che funzioni con Agent Platform. Per saperne di più, consulta Integra il database con Agent Platform.

  • Concedi agli utenti del database le autorizzazioni per generare gli embedding.

    Se utilizzi psql, connettiti al database a cui vuoi concedere le autorizzazioni:

    \c DB_NAME
    GRANT EXECUTE ON FUNCTION embedding TO "USER_NAME";
    

    Sostituisci quanto segue:

    • DB_NAME: il nome del database a cui vuoi concedere le autorizzazioni.

    • USER_NAME: il nome dell'utente a cui vuoi concedere le autorizzazioni.

    Se utilizzi AlloyDB Studio, seleziona il nome del database per cui vuoi concedere le autorizzazioni nell'elenco Database. Concedi all'utente l'autorizzazione EXECUTE sulla funzione google_ml.embedding:

    GRANT EXECUTE ON FUNCTION google_ml.embedding TO "USER_NAME";
    

    Sostituisci USER_NAME con il nome dell'utente a cui vuoi concedere le autorizzazioni.

Genera embedding

Utilizza la funzione SQL google_ml.embedding() per chiamare i modelli di text embedding.

Per chiamare il modello e generare gli embedding, esegui questa query:

SELECT
 google_ml.embedding(
   model_id => 'MODEL_ID',
   content => 'CONTENT');

Sostituisci quanto segue:

  • MODEL_ID: l'ID modello qualificato, ad esempio gemini-embedding-001.

  • CONTENT: il testo da tradurre in un vector embedding.

Esempi di generazione di embedding

In questa sezione sono elencati alcuni esempi per la generazione di embedding utilizzando l'endpoint del modello registrato.

Modelli di embedding di Gemini

Per generare embedding per un endpoint del modello gemini-embedding-001 registrato, esegui la seguente istruzione:

   SELECT
     google_ml.embedding(
       model_id => 'gemini-embedding-001',
       content => 'AlloyDB is a managed, cloud-hosted SQL database service');

Se il cluster AlloyDB e l'endpoint di Gemini Enterprise Agent Platform si trovano in progetti diversi, segui questi passaggi:

  1. Esegui la seguente istruzione CALL.

       CALL
         google_ml.create_model(
           model_id => 'gemini-embedding-001',
           model_request_url => 'https://REGION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/gemini-embedding-001:predict',
           model_provider => 'google',
           model_type => 'text_embedding',
           model_auth_type => 'alloydb_service_agent_iam',
           model_in_transform_fn => 'google_ml.vertexai_text_embedding_input_transform',
           model_out_transform_fn => 'google_ml.vertexai_text_embedding_output_transform'
         );
    
  2. Per generare embedding per un endpoint del modello gemini-embedding-001 registrato, esegui la seguente istruzione:

      SELECT
        google_ml.embedding(
          model_id => 'gemini-embedding-001',
          content => 'AlloyDB is a managed, cloud-hosted SQL database service');
    

Modello di embedding OpenAI

Per generare embedding per un endpoint del modello text-embedding-ada-002 registrato di OpenAI, esegui la seguente istruzione:

   SELECT
     google_ml.embedding(
       model_id => 'text-embedding-ada-002',
       content => 'e-mail spam');

Per generare embedding per gli endpoint dei modelli text-embedding-3-small o text-embedding-3-large registrati di OpenAI, esegui la seguente istruzione:

 SELECT
   google_ml.embedding(
     model_id => 'text-embedding-3-small',
     content => 'Vector embeddings in AI');

Passaggi successivi