Un esempio di flusso di lavoro di incorporamento

Questa pagina fornisce un esempio di flusso di lavoro che mostra come la funzione embedding() interagisce con i dati archiviati in tabella e con la funzionalità pgvector. L'esempio utilizza un input in testo normale per recuperare un risultato da un database che si basa sulla parsing semantica basata su modelli linguistici di grandi dimensioni (LLM) del significato del testo.

Uno scenario di esempio

Immagina un database in esecuzione su AlloyDB con i seguenti aspetti:

  • Il database contiene una tabella, items. Ogni riga di questa tabella descrive un elemento 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 Vertex AI Model Garden, dandogli accesso ai modelli in textembedding-gecko inglese.

Anche se questo database memorizza i reclami relativi agli articoli, questi reclami sono memorizzati come testo normale, il che rende difficile eseguire query. Ad esempio, se vuoi vedere quali articoli hanno ricevuto il maggior numero di reclami da parte dei clienti che hanno ricevuto la merce nel colore sbagliato, puoi eseguire normali query SQL sulla tabella cercando varie corrispondenze delle parole chiave. Tuttavia, questo approccio corrisponde solo alle righe che contengono queste parole chiave esatte.

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 embedding basati su LLM possono contribuire a colmare questo divario. Applicando gli embedding, puoi eseguire query sulla tabella in questo esempio per gli articoli i cui reclami hanno una somiglianza semantica a un determinato prompt di testo, ad esempio "Il colore era sbagliato".

I passaggi riportati di seguito mostrano come attivare questa opzione nella configurazione di esempio descritta in precedenza.

Prima di iniziare

Assicurati di soddisfare i seguenti requisiti:

Estensione del database obbligatoria

  • Assicurati che le seguenti estensioni siano installate sul database AlloyDB.

    • google_ml_integration estensione

    • Estensione vector, versione 0.5.0.google-1 o successive

Per ulteriori informazioni sull'installazione e sulla gestione delle estensioni, vedi Configurare le estensioni del database.

  • 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.

Prepara la tabella

Prima di eseguire query basate su LLM sui contenuti della tabella items, devi preparare la tabella per archiviare e indicizzare gli embedding in base ai dati esistenti.

Crea una colonna per archiviare gli embedding

Aggiungi una colonna alla tabella per archiviare gli embedding.

ALTER TABLE items ADD COLUMN complaint_embedding vector(768);

Questo esempio specifica 768 come argomento, perché è il numero di dimensioni supportate dai modelli in inglese textembedding-gecko. Per ulteriori informazioni, consulta Generare un'evidenziazione.

L'esempio applica il tipo di dati vector alla colonna per facilitare l'utilizzo delle funzioni e degli operatori pgvector con i relativi valori.

Compila la nuova colonna

Se hai già incorporamenti in formato CSV, segui la procedura descritta in Archiviare gli incorporamenti vettoriali per archiviarli.

Se vuoi, utilizza la funzione embedding() per compilare questa nuova colonna con gli embedding nel caso in cui tu abbia del testo archiviato nella colonna complaints. In questa configurazione di esempio, AlloyDB genera gli embedding utilizzando il modello textembedding-gecko, versione 003.

UPDATE items SET complaint_embedding = embedding('textembedding-gecko@003', complaints);

Questo esempio esegue il casting implicito del valore restituito real[] di embedding() in un valore vector, per memorizzare il valore nella colonna vector creata in precedenza.

Creare un indice

Per migliorare il rendimento, aggiungi un indice a items che utilizzi le tecniche di quantizzazione scalare.

CREATE INDEX complaint_embed_idx ON items
  USING ivf (complaint_embedding vector_l2_ops)
  WITH (lists = 20, quantizer = 'SQ8');

Per ulteriori informazioni sulla creazione di indici approssimativi del vicino più vicino, consulta Indicizzazione.

Esegui query basate su LLM con il testo fornito

Ora puoi eseguire query sui vicini semantici più prossimi nella tabella items. La seguente query utilizza l'operatore <-> fornito da pgvector per ordinare le righe della tabella in base alla vicinanza semantica al testo It was the wrong color e restituire i dieci reclami principali. La query mostra i valori id e name della prima riga ordinata.

SELECT id, name FROM items
  ORDER BY complaint_embedding::vector
  <-> embedding('textembedding-gecko@003', 'It was the wrong color') LIMIT 10;

Passaggi successivi