Ce document explique comment effectuer des recherches de similarité vectorielle dans AlloyDB pour PostgreSQL à l'aide de l'extension pgvector
. La recherche de similarité vectorielle, également appelée recherche de voisins les plus proches, vous permet de trouver les points de données les plus similaires à un vecteur de requête donné.
Vous pouvez interroger votre base de données AlloyDB pour obtenir des vecteurs sémantiquement similaires après avoir stocké et indexé des représentations vectorielles continues. Utilisez les fonctionnalités de requête pgvector
pour trouver les voisins les plus proches d'un vecteur d'embedding.
Pour en savoir plus sur le stockage des embeddings vectoriels et la création d'un index, consultez Stocker des embeddings vectoriels et Créer des index, respectivement.
Effectuer une recherche de similarité avec une entrée vectorielle
Pour effectuer une recherche de similarité, spécifiez la table, la colonne d'embedding, la fonction de distance, l'embedding cible et le nombre de lignes à renvoyer. Vous pouvez également utiliser la fonction embedding()
pour traduire du texte en vecteur, puis comparer le vecteur aux embeddings stockés à l'aide d'opérateurs pgvector
.
Pour trouver les voisins sémantiques les plus proches d'un vecteur d'embedding, vous pouvez exécuter l'exemple de requête suivant, dans lequel vous définissez la même fonction de distance que celle que vous avez utilisée lors de la création de l'index.
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
LIMIT ROW_COUNT
Remplacez les éléments suivants :
TABLE
: table contenant l'embedding à comparer au texte.EMBEDDING_COLUMN
: colonne contenant les embeddings stockées.DISTANCE_FUNCTION_QUERY
: fonction de distance à utiliser avec cette requête. Choisissez l'une des options suivantes en fonction de la fonction de distance utilisée lors de la création de l'index:Distance L2:
<->
Produit interne:
<#>
Distance de cosinus:
<=>
EMBEDDING
: vecteur d'embedding pour lequel vous souhaitez trouver les voisins sémantiques stockés les plus proches.ROW_COUNT
: nombre de lignes à afficher.Spécifiez
1
si vous souhaitez n'obtenir que la meilleure correspondance.
Pour en savoir plus sur d'autres exemples de requêtes, consultez la section Interrogation.
Effectuer une recherche de similarité à l'aide de pgvector
avec une entrée textuelle
Vous pouvez également utiliser la fonction embedding()
pour traduire le texte en vecteur. L'extension PostgreSQL pgvector
standard est personnalisée pour AlloyDB et est appelée vector
. Vous appliquez le vecteur à l'un des opérateurs pgvector
correspondant aux plus proches voisins, par exemple <->
pour la distance L2, afin de rechercher les lignes de la base de données présentant les embeddings les plus similaires sur le plan de la sémantique.
Comme embedding()
renvoie un tableau real
, vous devez convertir explicitement l'appel embedding()
en type de données vector
afin d'utiliser ces valeurs avec les opérateurs 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
Remplacez les éléments suivants :
MODEL_ID
: ID du modèle à interroger.Si vous utilisez Vertex AI Model Garden, spécifiez
text-embedding-005
comme ID de modèle. Il s'agit des modèles cloud que AlloyDB peut utiliser pour les embeddings de texte. Pour en savoir plus, consultez Embeddings de texte.Facultatif:
VERSION_TAG
: balise de version du modèle à interroger. Ajoutez le préfixe@
au tag.Si vous utilisez l'un des modèles
text-embedding-005
en anglais avec Vertex AI, spécifiez l'un des tags de version (par exemple,text-embedding-005
) listés dans la section Versions de modèle.Google vous recommande vivement de toujours spécifier le tag de version. Si vous ne spécifiez pas la balise de version, AlloyDB utilise la dernière version du modèle, ce qui peut entraîner des résultats inattendus.
TEXT
: texte à traduire en embedding vectoriel.
Étape suivante
- Suivre le tutoriel sur la recherche vectorielle
- Régler les performances des requêtes vectorielles
- Métriques de l'index vectoriel
- Découvrez comment créer un assistant d'achat intelligent avec AlloyDB, pgvector et la gestion des points de terminaison de modèle.