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 colonneTEXT
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
extensionExtension
vector
, version0.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
suroff
.
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
- Pour découvrir un autre exemple de workflow impliquant AlloyDB et
pgvector
, consultez Créer des applications basées sur l'IA sur les bases de données Google Cloud à l'aide de pgvector, de LLM et de LangChain.