Exemple de workflow d'embedding

Cette page fournit un exemple de workflow qui montre comment la fonction embedding() fonctionne avec vos données stockées dans des tables et la fonctionnalité pgvector. Cet exemple utilise une entrée en texte brut pour extraire un résultat d'une base de données qui repose sur l'analyse sémantique de la signification du texte basée sur un grand modèle de langage (LLM).

Exemple de scénario

Imaginons une base de données qui s'exécute sur AlloyDB avec les aspects suivants:

  • La base de données contient une table, items. Chaque ligne de ce tableau décrit un article que votre entreprise vend.

  • La table items contient une colonne, complaints. Cette colonne TEXT stocke les réclamations des acheteurs enregistrées pour chaque article.

  • La base de données s'intègre à Vertex AI Model Garden, ce qui lui donne accès aux modèles en anglais textembedding-gecko.

Même si cette base de données stocke les réclamations concernant des articles, celles-ci sont stockées en texte brut, ce qui rend leur interrogation difficile. Par exemple, si vous souhaitez voir les articles qui reçoivent le plus de réclamations de la part des clients ayant reçu la mauvaise couleur des produits, vous pouvez effectuer des requêtes SQL ordinaires sur la table, à la recherche de différentes correspondances de mots clés. Toutefois, cette approche ne correspond qu'aux lignes contenant ces mots clés exacts.

Par exemple, une requête SQL de base telle que SELECT * FROM item WHERE complaints LIKE "%wrong color%" ne renvoie pas de ligne dont le champ complaints ne contient que The picture shows a blue one, but the one I received was red.

Les requêtes SQL utilisant des embeddings basés sur un LLM peuvent aider à combler ce fossé. En appliquant des embeddings, vous pouvez interroger la table de cet exemple pour les éléments dont les réclamations présentent une similarité sémantique avec une requête de texte donnée, par exemple "La couleur n'était pas la bonne".

Les étapes suivantes montrent comment activer cette fonctionnalité dans l'exemple de configuration décrit précédemment.

Avant de commencer

Assurez-vous de remplir les conditions suivantes:

Extension de base de données requise

  • Assurez-vous que les extensions suivantes sont installées sur votre base de données AlloyDB.

    • google_ml_integration extension

    • Extension vector, version 0.5.0.google-1 ou ultérieure

Pour en savoir plus sur l'installation et la gestion des extensions, consultez Configurer des extensions de base de données.

  • Définissez l'indicateur de base de données google_ml_integration.enable_model_support sur off.

Configurer l'accès au modèle

Avant de pouvoir générer des embeddings à partir d'une base de données AlloyDB, vous devez configurer AlloyDB pour qu'il fonctionne avec un modèle d'embedding de texte.

Pour utiliser le modèle cloud textembeddings-gecko, vous devez intégrer votre base de données à Vertex AI.

Préparer la table

Avant d'exécuter des requêtes basées sur LLM sur le contenu de la table items, vous devez préparer cette table pour stocker et indexer les des embeddings en fonction de vos données existantes.

Créer une colonne pour stocker les embeddings

Ajoutez une colonne à la table pour stocker les embeddings.

ALTER TABLE items ADD COLUMN complaint_embedding vector(768);

Cet exemple spécifie 768 en tant qu'argument, car il s'agit du nombre de dimensions acceptées par les modèles en anglais textembedding-gecko. Pour en savoir plus, consultez la section Générer un embedding.

L'exemple applique le type de données vector à la colonne pour faciliter l'utilisation des fonctions et opérateurs pgvector avec ses valeurs.

Remplir la nouvelle colonne

Si vous disposez déjà d'embeddings au format CSV, suivez la procédure décrite dans Stocker des représentations vectorielles continues pour les stocker.

Si vous le souhaitez, utilisez la fonction embedding() pour renseigner cette nouvelle colonne avec des embeddings au cas où vous auriez stocké du texte dans la colonne complaints. Dans cet exemple de configuration, AlloyDB génère les embeddings à l'aide du modèle textembedding-gecko, version 003.

UPDATE items SET complaint_embedding = embedding('textembedding-gecko@003', complaints);

Cet exemple convertit implicitement la valeur renvoyée real[] de embedding() en valeur vector, afin de stocker la valeur dans la colonne vector créée précédemment.

Créer un index

Pour améliorer les performances, ajoutez un indice à items qui utilise les techniques de quantification scalaire.

CREATE INDEX complaint_embed_idx ON items
  USING ivf (complaint_embedding vector_l2_ops)
  WITH (lists = 20, quantizer = 'SQ8');

Pour en savoir plus sur la création d'index des plus proches voisins approximatifs, consultez la section Indexation.

Exécuter des requêtes basées sur un LLM avec le texte fourni

Vous pouvez maintenant effectuer des requêtes sémantiques des plus proches voisins sur la table items. La requête suivante utilise l'opérateur <-> fourni par pgvector pour trier les lignes du tableau en fonction de la proximité sémantique avec le texte It was the wrong color et renvoyer les dix premières réclamations. La requête affiche les valeurs id et name de la première ligne triée.

SELECT id, name FROM items
  ORDER BY complaint_embedding::vector
  <-> embedding('textembedding-gecko@003', 'It was the wrong color') LIMIT 10;

Étape suivante