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 colonnecomplaints
. 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 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 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 des embeddings en fonction de vos données existantes.
Créer une colonne pour stocker les des embeddings
Ajoutez une colonne à la table pour stocker les des 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 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
Apprenez à créer des applications d'IA générative à l'aide de Cloud SQL.
Appeler des prédictions en ligne à partir d'instances Cloud SQL