Questa pagina fornisce un esempio di flusso di lavoro che mostra come la funzione embedding()
funzioni sia con i dati archiviati nelle tabelle sia con la funzionalità di query 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.
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 l'articolo venduto dalla tua attività.La tabella
items
contiene una colonna:complaints
. Questa colonna memorizza come testo normale i reclami degli acquirenti registrati per ogni articolo.Il database si integra con Vertex AI Model Garden, consentendogli di accedere all'LLM
textembedding-gecko
.
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 per scoprire quali articoli hanno il maggior numero di reclami da parte dei clienti che hanno ricevuto colore sbagliato, puoi eseguire delle normali query SQL per cercare varie corrispondenze delle parole chiave. Tuttavia, questo approccio corrisponde solo righe contenenti queste esatte parole chiave.
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 embedding basati su LLM possono contribuire a colmare questo divario. Di applicando gli incorporamenti, puoi eseguire una query nella tabella di questo esempio per elementi in reclami hanno una somiglianza semantica con un determinato prompt di testo, ad esempio "Era il colore sbagliato".
I passaggi riportati di seguito 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 alle tue risorse
e i dati di Google Cloud.
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 ulteriori informazioni, vedi
Genera un incorporamento.
L'esempio applica il tipo di dati vector
alla colonna per semplificare l'utilizzo di funzioni e operatori pgvector
con i valori della colonna.
Compila la nuova colonna
Utilizza la funzione embedding()
per compilare questa nuova colonna con gli embedding in base al valore del testo di ogni riga visualizzato nella colonna complaints
. In questo esempio,
Cloud SQL genera gli embedding utilizzando l'LLM con ID
textembedding-gecko
, versione 004
.
UPDATE items SET complaint_embedding = embedding('textembedding-gecko@004', complaints);
Questo esempio esegue il casting del valore restituito real[]
di embedding()
in un valore vector
in modo implicito per memorizzare il valore nella colonna vector
creata in Creare una colonna per memorizzare gli embedding.
Creare un indice
Per migliorare le prestazioni, aggiungi un indice alla tabella items
.
CREATE INDEX complaint_embed_idx ON items
USING hnsw (complaint_embedding vector_cosine_ops);
Per saperne di più sulla creazione di questo tipo di indice, vedi Creare un indice per il vicino più prossimo. Inoltre, per ulteriori informazioni sull'ottimizzazione dell'indice impostando i parametri, consulta Eseguire query e indicizzare gli embedding utilizzando pgvector
.
Esegui query basate su LLM con il testo fornito
Ora puoi eseguire query semantiche sui vicini più vicini nella tabella items
. La
questa query utilizza l'operatore <->
fornito da pgvector
per completare le azioni seguenti:
- 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@004', 'It was the wrong color')::vector LIMIT 10;