Questa pagina fornisce un esempio di flusso di lavoro che dimostra come funziona la funzione embedding()
con i dati archiviati nelle tabelle e la funzionalità di query pgvector
. L'esempio
utilizza un input di testo normale per recuperare un risultato da un database che si basa su un'analisi
semantica del significato del testo basata su un modello linguistico di grandi dimensioni (LLM).
Scenario di esempio di un flusso di lavoro di incorporamento
Immagina un database in esecuzione su Cloud SQL per PostgreSQL con i seguenti aspetti:
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
. In questa colonna vengono memorizzati i reclami degli acquirenti registrati in merito a ciascun articolo come testo normale.Il database si integra con Vertex AI Model Garden, consentendogli di accedere all'LLM
textembedding-gecko
.
Anche se questo database archivia i reclami sugli elementi, questi vengono archiviati come testo normale, il che rende difficile l'esecuzione di query. Ad esempio, se vuoi sapere quali articoli presentano il maggior numero di reclami da parte dei clienti che hanno ricevuto il colore sbagliato del merchandising, puoi eseguire query SQL ordinarie sulla tabella, cercando diverse corrispondenze di parole chiave. Tuttavia, questo approccio corrisponde solo alle righe che contengono quelle parole chiave esatte.
Ad esempio, una query SQL di base come SELECT * FROM item WHERE complaints LIKE
"%wrong color%"
non restituisce una riga in cui il campo complaints
contiene solo The picture shows a blue one, but the one I received was red
.
Le query SQL che utilizzano incorporamenti basati su LLM possono aiutare a colmare questo divario. Se applichi gli incorporamenti, puoi eseguire query nella tabella di questo esempio per elementi in cui i reclami hanno una somiglianza semantica con un determinato prompt di testo, ad esempio "Era il colore sbagliato".
I passaggi seguenti mostrano come attivare questa opzione nello scenario di esempio descritto in precedenza.
Prepara la tabella
Prima di eseguire query basate su LLM sui contenuti della tabella items
, devi
preparare la tabella per archiviare e indicizzare gli incorporamenti in base ai dati
esistenti.
Crea una colonna per archiviare gli incorporamenti
Aggiungi una colonna alla tabella per archiviare gli incorporamenti.
ALTER TABLE items ADD COLUMN complaint_embedding vector(768);
In questo esempio viene specificato 768
come argomento perché questo è il numero di dimensioni supportate dall'LLM textembedding-gecko
. Per maggiori informazioni, consulta
Generare un incorporamento.
Nell'esempio viene applicato il tipo di dati vector
alla colonna per semplificare l'utilizzo di funzioni e operatori di pgvector
con i valori della colonna.
Compila la nuova colonna
Utilizza la funzione embedding()
per completare questa nuova colonna con gli incorporamenti basati sul valore del testo di ogni riga visualizzato nella colonna complaints
. In questo esempio, Cloud SQL genera gli incorporamenti utilizzando l'LLM con l'ID textembedding-gecko
, versione 001
.
UPDATE items SET complaint_embedding = embedding('textembedding-gecko@001', complaints);
Questo esempio trasmette il valore restituito real[]
di embedding()
in un valore vector
implicitamente per archiviare il valore nella colonna vector
creata in Creare una colonna per archiviare gli incorporamenti.
Crea un indice
Per migliorare le prestazioni, aggiungi un indice alla tabella items
. Questo indice utilizza le
tecniche di quantizzazione scalabile mostrate in Creare un indice ottimizzato per il vicino più prossimo.
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 per il vicino più prossimo approssimato, consulta Indicizzazione.
Esecuzione di query basate su LLM con il testo fornito
Ora puoi eseguire query semantiche del vicino più prossimo nella tabella items
. La
seguente query utilizza l'operatore <->
fornito da pgvector
per completare le seguenti azioni:
- Ordina le righe della tabella in base alla vicinanza semantica al testo di
It was the wrong color
. - Restituisci i primi dieci reclami.
La query mostra i valori id
e name
della prima riga ordinata.
SELECT id, name FROM items
ORDER BY complaint_embedding
<-> embedding('textembedding-gecko@001', 'It was the wrong color')::vector LIMIT 10;