Comprendre un exemple de workflow d'embeddings

Cette page fournit un exemple de workflow qui montre comment la fonctionnalité embedding() fonctionne à la fois avec les données stockées dans les tables et avec la fonctionnalité de requête 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 workflow d'embedding

Imaginons une base de données qui s'exécute sur Cloud SQL pour PostgreSQL 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 enregistre les réclamations des acheteurs qui sont enregistrées sur chaque article en texte brut.

  • La base de données s'intègre à Vertex AI Model Garden, ce qui lui donne accès au LLM 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 dans laquelle 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 représentations vectorielles continues basées sur un LLM peuvent aider à combler ce fossé. En appliquant des représentations vectorielles continues, 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 scénario décrit précédemment.

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 représentations vectorielles continues en fonction de vos données existantes.

Créer une colonne pour stocker les représentations vectorielles continues

Ajoutez une colonne à la table pour stocker les représentations vectorielles continues.

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 le LLM 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 simplifier l'utilisation des fonctions et opérateurs pgvector avec les valeurs de la colonne.

Remplir la nouvelle colonne

Utilisez la fonction embedding() pour renseigner cette nouvelle colonne avec des embeddings en fonction de la valeur du texte de chaque ligne qui apparaît dans la colonne complaints. Dans cet exemple, Cloud SQL génère les embeddings à l'aide du LLM dont l'ID est textembedding-gecko et la version 001.

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

Cet exemple convertit la valeur real[] renvoyée pour embedding() en valeur vector implicite pour stocker la valeur dans la colonne vector que vous avez créée dans Créer une colonne pour stocker les embeddings.

Créer un index

Pour améliorer les performances, ajoutez un index à la table items. Cet index utilise les techniques de quantification scalaire présentées dans la section Créer un index optimisé des plus proches voisins.

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 effectuer les actions suivantes :

  • Triez les lignes de la table en fonction de la proximité sémantique du texte de It was the wrong color.
  • Renvoie les dix principales 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
  <-> embedding('textembedding-gecko@001', 'It was the wrong color')::vector LIMIT 10;

Étapes suivantes