Exécuter une recherche de similarité vectorielle

La recherche de similarité vectorielle, également appelée recherche des voisins les plus proches, dans AlloyDB pour PostgreSQL vous permet de trouver les lignes de votre base de données qui sont les plus similaires sur le plan sémantique à un vecteur de requête. Après avoir stocké et indexé les embeddings, vous pouvez utiliser les opérateurs pgvector et les fonctions de distance pour interroger votre base de données AlloyDB afin de trouver les voisins les plus proches.

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.

Pour exécuter une recherche de similarité, spécifiez la table, la colonne d'embedding, la fonction de distance, l'embedding cible et le nombre de lignes à afficher. Vous pouvez également utiliser la fonction embedding() pour traduire du texte en vecteur, puis comparer le vecteur aux embeddings stockés à l'aide des 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 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 auquel comparer le texte.

  • EMBEDDING_COLUMN: colonne contenant les embeddings stockés.

  • DISTANCE_FUNCTION_QUERY : fonction de distance à utiliser avec cette requête. Choisissez l'une des options suivantes, selon 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 plus proches voisins sémantiques qui sont stockés.

  • ROW_COUNT : nombre de lignes à afficher.

    Spécifiez 1 si vous souhaitez n'obtenir que la meilleure correspondance.

Pour d'autres exemples de requêtes, consultez Effectuer des requêtes.

Vous pouvez également utiliser la fonction embedding() pour traduire le texte en vecteur et rechercher les lignes de la base de données présentant les embeddings les plus approchants sur le plan sémantique. L'extension pgvector PostgreSQL standard est personnalisée pour AlloyDB et est appelée vector. Vous appliquez le vecteur à l'un des pgvector opérateurs correspondant aux plus proches voisins, par exemple <=> pour la distance de cosinus.

Comme embedding() renvoie un tableau real, vous devez convertir explicitement l'appel embedding() en type de données vector pour utiliser ces valeurs avec les opérateurs pgvector.

  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')
    LIMIT ROW_COUNT

Remplacez les éléments suivants :

  • MODEL_ID : ID du modèle à interroger

    Si vous utilisez le Model Garden, spécifiez text-embedding-005 comme ID de modèle. Il s'agit des modèles cloud qu' AlloyDB peut utiliser pour les embeddings textuels. Pour en savoir plus, consultez Embeddings textuels.

  • (Facultatif) VERSION_TAG : tag de version du modèle à interroger. Ajoutez le préfixe @ au tag.

    Si vous utilisez l'un des text-embedding-005 modèles anglais avec Gemini Enterprise Agent Platform, spécifiez l'un des tags de version, par exemple text-embedding-005, listés dans Versions de modèle.

    Google vous recommande vivement de toujours spécifier le tag de version. Si vous ne spécifiez pas le tag de version, AlloyDB utilise la dernière version du modèle, ce qui peut entraîner des résultats inattendus.

  • TABLE : table à interroger.

  • EMBEDDING_COLUMN: colonne contenant les embeddings stockés.

  • TEXT : texte à traduire en embedding vectoriel.

  • ROW_COUNT : nombre de lignes à afficher.

Pour accélérer votre recherche KNN filtrée, vous pouvez utiliser le moteur de données en colonnes AlloyDB. Pour en savoir plus, consultez Accélérer votre recherche vectorielle filtrée (aperçu) et Configurer le moteur de données en colonnes.

Étape suivante