Questo documento spiega come eseguire ricerche di somiglianza vettoriale in AlloyDB per PostgreSQL
utilizzando l'estensione pgvector
. La ricerca di somiglianza vettoriale, nota anche come ricerca del vicino più prossimo, consente di trovare i punti dati più simili a un determinato vettore di query.
Puoi eseguire query sul tuo database AlloyDB per trovare vettori semanticamente simili dopo aver archiviato e indicizzato gli embedding. Utilizza le funzionalità di query pgvector
per trovare i vicini più prossimi per un vettore di incorporamento.
Per saperne di più su come archiviare gli embedding di vettori e creare un indice, consulta rispettivamente Archiviare gli embedding di vettori e Creare gli indici.
Esegui una ricerca di similarità con input vettoriale
Per eseguire una ricerca di somiglianza, specifica la tabella, la colonna di embedding, la funzione di distanza, l'embedding target e il numero di righe da restituire. Puoi anche utilizzare la funzione embedding()
per tradurre il testo in un vettore e poi confrontare il vettore con gli incorporamenti archiviati utilizzando gli operatori pgvector
.
Per trovare i vicini semantici più vicini per un vettore di incorporamento, puoi eseguire la seguente query di esempio, in cui imposti la stessa funzione di distanza utilizzata durante la creazione dell'indice.
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
LIMIT ROW_COUNT
Sostituisci quanto segue:
TABLE
: la tabella contenente l'embedding con cui confrontare il testo.EMBEDDING_COLUMN
: la colonna contenente gli embedding memorizzati.DISTANCE_FUNCTION_QUERY
: la funzione di distanza da utilizzare con questa query. Scegli una delle seguenti opzioni in base alla funzione di distanza utilizzata durante la creazione dell'indice:Distanza L2:
<->
Prodotto interno:
<#>
Distanza coseno:
<=>
EMBEDDING
: il vettore di incorporamento di cui vuoi trovare i vicini semantici memorizzati più vicini.ROW_COUNT
: il numero di righe da restituire.Specifica
1
se vuoi solo la singola corrispondenza migliore.
Per ulteriori informazioni su altri esempi di query, consulta la sezione Esecuzione di query.
Eseguire una ricerca di similarità utilizzando pgvector
con input di testo
Puoi anche utilizzare la funzione embedding()
per tradurre il testo in un vettore. L'estensione PostgreSQL pgvector
di serie è personalizzata per AlloyDB e viene chiamata vector
. Applicchi
il vettore a uno degli operatori pgvector
di ricerca del vicino più prossimo, ad esempio
<->
per la distanza L2, per trovare le righe del database con gli incorporamenti più semanticamente
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 IF NOT EXISTS google_ml_integration VERSION '1.2';
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')
LIMIT ROW_COUNT
Sostituisci quanto segue:
MODEL_ID
: l'ID del modello su cui eseguire la query.Se utilizzi Vertex AI Model Garden, specifica
text-embedding-005
come ID modello. Questi sono i modelli basati su cloud che AlloyDB può utilizzare per gli embedding di testo. Per ulteriori informazioni, consulta 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
text-embedding-005
con Vertex AI, specifica uno dei tag di versione, ad esempiotext-embedding-005
, elencato in Versioni del modello.Google consiglia vivamente di specificare sempre il tag della versione. Se non specifichi il tag della versione, AlloyDB userà la versione più recente del modello, il che potrebbe portare a risultati imprevisti.
TEXT
: il testo da tradurre in un embedding vettoriale.
Passaggi successivi
- Tutorial sulla ricerca vettoriale
- Ottimizzare il rendimento delle query vettoriali
- Metriche dell'indice di vettore
- Scopri come creare un assistente per lo shopping intelligente con AlloyDB, pgvector e la gestione degli endpoint dei modelli.