Cette page explique comment utiliser Cloud SQL pour PostgreSQL pour effectuer les actions suivantes :
Générer et stocker des embeddings basées sur un modèle
Indexer et interroger des embeddings à l'aide de l'extension
pgvector
.
Pour en savoir plus, consultez la page Créer des applications d'IA générative à l'aide de Cloud SQL.
Cloud SQL vous permet d'utiliser un modèle d'embedding hébergé par Vertex AI pour traduire une chaîne de texte en embedding, qui est la représentation par le modèle de la signification sémantique du texte donné en tant que vecteur numérique.
Cloud SQL implémente les embeddings sous forme de tableaux de valeurs real
. Cela vous permet d'utiliser des embeddings générées en tant qu'entrées pour les fonctions de l'extension pgvector
.
Avant de commencer
Certaines exigences varient selon que vous souhaitez utiliser Cloud SQL pour générer des embeddings, ou que vous devez simplement exploiter des embeddings qui sont stockées dans votre base de données, à partir d'une autre source.
Restrictions régionales
Pour générer des embeddings avec Cloud SQL, votre instance doit se trouver dans une région où generative AI foundational models are supported
.
Les modèles Vertex AI text-embedding
et textembedding-gecko
que Cloud SQL peut utiliser pour les embeddings sont situés dans cette région.
Extensions de base de données requises
Pour utiliser des embeddings, vous devez avoir installé l'extension google_ml_integration
, version 1.2
ou ultérieure, sur votre instance Cloud SQL.
Si vous souhaitez stocker ces embeddings, et utiliser sur celles-ci des fonctions vectorielles et des opérateurs, vous aurez également besoin de l'extension pgvector
.
Cloud SQL inclut ces deux extensions. Vous pouvez les installer sur n'importe quelle base de données de votre instance. Pour en savoir plus, consultez la section Configurer des extensions PostgreSQL.
Configurer l'accès au modèle
Avant de pouvoir générer des embeddings à partir d'une instance Cloud SQL, vous devez configurer Cloud SQL pour qu'il fonctionne avec un modèle d'embedding de texte.
Pour utiliser le modèle cloud text-embedding
ou textembedding-gecko
, vous devez intégrer Cloud SQL à Vertex AI.
Autoriser les utilisateurs de la base de données à générer des embeddings
Accordez aux utilisateurs de la base de données l'autorisation d'utiliser la fonction embedding
pour exécuter des prédictions :
Connectez un client
psql
à l'instance principale, comme décrit dans la section Se connecter à l'aide d'un client psql.À l'invite de commande
psql
, connectez-vous à la base de données et accordez les autorisations :\c DB_NAME GRANT EXECUTE ON FUNCTION embedding TO USER_NAME;
Remplacez les éléments suivants :
DB_NAME : nom de la base de données pour laquelle vous accordez des autorisations.
USER_NAME : nom de l'utilisateur auquel vous accordez des autorisations.
Générer des embeddings
Cloud SQL fournit une fonction qui vous permet de traduire du texte en un embedding vectoriel. Vous pouvez ensuite stocker cet embedding dans votre base de données en tant que données vectorielles, et éventuellement utiliser des fonctions pgvector
pour exécuter des requêtes sur ces données vectorielles.
Générer un embedding
Pour générer un embedding à l'aide de Cloud SQL, utilisez la fonction embedding()
fournie par l'extension google_ml_integration
:
SELECT embedding( 'MODEL_IDVERSION_TAG', 'TEXT');
Effectuez les remplacements suivants :
MODEL_ID : ID du modèle à interroger.
Si vous utilisez la plate-forme Vertex AI Model Garden, spécifiez
text-embedding-004
outext-multilingual-embedding-002
. Il s'agit des modèles cloud que Cloud SQL peut utiliser pour les embeddings de texte. Pour en savoir plus, consultez Embeddings de texte.VERSION_TAG (facultatif) : tag de version du modèle à interroger. Pour les versions de
textembedding-gecko
antérieures àtext-embedding-004
outext-multilingual-embedding-002
,Prepend the tag with
@.Si vous utilisez l'un des modèles
textembedding-gecko
avec Vertex AI, spécifiez l'un des tags de version listés dans la section Versions de modèle.TEXT : texte à traduire en embedding vectoriel.
L'exemple suivant utilise le modèle text-embedding-004
pour générer un embedding basé sur une chaîne littérale fournie :
SELECT embedding( 'text-embedding-004', 'Cloud SQL is a managed, cloud-hosted SQL database service.');
Stocker un embedding généré
La valeur renvoyée par la fonction embedding()
est un tableau de valeurs real
.
Pour stocker cette valeur dans une table, ajoutez une colonne real[]
:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[DIMENSIONS];
Effectuez les remplacements suivants :
TABLE : nom de la table
EMBEDDING_COLUMN : nom de la nouvelle colonne d'embeddings
DIMENSIONS : nombre de dimensions acceptées par le modèle
Si vous utilisez l'un des modèles
text-embedding
outextembedding-gecko
avec Vertex AI, spécifiez la valeur768
.
Si vous avez installé l'extension pgvector
, vous pouvez éventuellement stocker les embeddings sous la forme de valeurs vector
:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN vector(DIMENSIONS);
Après avoir créé une colonne pour stocker des embeddings, vous pouvez la renseigner en fonction des valeurs déjà stockées dans une autre colonne de la même table :
UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_IDVERSION_TAG', SOURCE_TEXT_COLUMN);
Effectuez les remplacements suivants :
TABLE : nom de la table.
EMBEDDING_COLUMN : nom de la colonne d'embeddings.
MODEL_ID : ID du modèle à interroger.
Si vous utilisez la plate-forme Vertex AI Model Garden, spécifiez
text-embedding-004
outext-multilingual-embedding-002
. Il s'agit des modèles cloud que Cloud SQL peut utiliser pour les embeddings de texte. Pour en savoir plus, consultez Embeddings de texte.VERSION_TAG (facultatif) : tag de version du modèle à interroger. Pour les versions de
textembedding-gecko
antérieures àtext-embedding-004
outext-multilingual-embedding-002
,Prepend the tag with
@.Si vous utilisez l'un des modèles
textembedding-gecko
avec Vertex AI, spécifiez l'un des tags de version listés dans la section Versions de modèle.SOURCE_TEXT_COLUMN : nom de la colonne qui stocke le texte, qui sera traduit en embeddings.
La commande précédente fonctionne à la fois pour les colonnes d'embeddings real[]
et vector
. Si votre colonne d'embeddings est de type vector
, Cloud SQL convertit implicitement la valeur renvoyée par embedding()
, partant d'un tableau real
pour obtenir une valeur vector
.
L'exemple suivant utilise le modèle text-embedding-004
pour renseigner la colonne messages.message_vector
avec des embeddings en fonction du contenu de la colonne messages.message
:
UPDATE messages SET message_vector = embedding( 'text-embedding-004', message);
Interroger et indexer des embeddings à l'aide de pgvector
L'extension PostgreSQL pgvector
vous permet d'utiliser des opérateurs et des fonctions spécifiques aux vecteurs lorsque vous stockez, indexez et interrogez des embeddings de texte dans votre base de données. Cloud SQL dispose de ses propres optimisations pour exploiter l'extension pgvector
, ce qui vous permet de créer des index pouvant accélérer les requêtes impliquant des embeddings.
Créer un index des plus proches voisins optimisé
L'extension pgvector
est compatible avec la recherche des plus proches voisins approximatifs via l'indexation. Cloud SQL étend cette compatibilité avec une fonctionnalité de quantification scalaire, que vous pouvez spécifier lorsque vous créez un index. Lorsque vous activez cette fonctionnalité, la quantification scalaire peut accélérer les requêtes ayant des vecteurs dimensionnels plus importants. En outre, cette fonctionnalité vous permet de stocker des vecteurs comportant jusqu'à 8 000 dimensions.
Pour activer la quantification scalaire sur un index basé sur l'extension pgvector
, spécifiez ivf
comme méthode d'index et SQ8
comme quantificateur :
CREATE INDEX ON TABLE
USING ivf (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT, quantizer = 'SQ8');
Effectuez les remplacements suivants :
TABLE : table à laquelle vous ajoutez l'index.
EMBEDDING_COLUMN : colonne qui stocke les données
vector
.DISTANCE_FUNCTION : fonction de distance à utiliser avec cet index. Choisissez l'une des options suivantes :
Distance L2 :
vector_l2_ops
Produit interne :
vector_ip_ops
Distance de cosinus :
vector_cosine_ops
LIST_COUNT : nombre de listes à utiliser avec cet index.
Pour créer cet index sur une colonne d'embeddings qui utilise le type de données real[]
au lieu de vector
, convertissez la colonne en type de données vector
:
CREATE INDEX ON TABLE
USING ivf ((CAST(EMBEDDING_COLUMN AS vector(DIMENSIONS)))'}} DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT, quantizer = 'SQ8');
Remplacez DIMENSIONS par la largeur dimensionnelle de la colonne d'embeddings.
La section suivante présente un exemple de ce type d'index.
Envoyer une requête de type plus proches voisins avec un texte donné
Une fois que vous avez stocké et indexé les embeddings dans votre base de données, toutes les fonctionnalités de requête pgvector
sont à votre disposition.
Pour trouver les plus proches voisins sémantiques d'un texte, utilisez la fonction embedding()
pour traduire le texte en vecteur. Dans la même requête, appliquez ce vecteur à l'opérateur pgvector
correspondant aux plus proches voisins, <->
, afin de rechercher les lignes de la base de données présentant les embeddings les plus similaires sur le plan de la sémantique.
Comme embedding()
renvoie un tableau real
, vous devez convertir l'appel embedding()
en type de données vector
pour utiliser ces valeurs avec les opérateurs pgvector
.
SELECT RESULT_COLUMNS FROM TABLE
ORDER BY EMBEDDING_COLUMN
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
LIMIT ROW_COUNT
Effectuez les remplacements suivants :
RESULT_COLUMNS : colonnes à afficher à partir de lignes sémantiquement similaires.
TABLE : table contenant l'embedding auquel vous comparez le texte.
EMBEDDING_COLUMN : colonne contenant les embeddings stockées.
MODEL_ID : ID du modèle à interroger.
Si vous utilisez la plate-forme Vertex AI Model Garden, spécifiez
text-embedding-004
outext-embedding-multilingual-002
. Il s'agit des modèles cloud que Cloud SQL peut utiliser pour les embeddings de texte. Pour en savoir plus, consultez Embeddings de texte.VERSION_TAG (facultatif) : tag de version du modèle à interroger. Ajoutez le préfixe
@
au tag.Si vous utilisez l'un des modèles
textembedding-gecko
avec Vertex AI, spécifiez l'un des tags de version listés dans la section Versions de modèle.TEXT : texte sur la base duquel vous souhaitez trouver les plus proches voisins sémantiques qui sont stockés.
ROW_COUNT : nombre de lignes à afficher. Si vous souhaitez n'obtenir que la meilleure correspondance, spécifiez
1
comme valeur pour ce paramètre.
Pour exécuter cette requête avec une colonne d'embeddings stockées qui utilise le type de données real[]
au lieu de vector
, convertissez la colonne en type de données vector
:
SELECT RESULT_COLUMNS::vector FROM TABLE
ORDER BY EMBEDDING_COLUMN
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
LIMIT ROW_COUNT
Utiliser des tags de version de modèle pour éviter les erreurs
Google vous recommande vivement de toujours utiliser une version stable du modèle d'embeddings que vous avez choisi. Pour la plupart des modèles, cela signifie définir explicitement un tag de version.
Le fait d'appeler la fonction embedding()
sans spécifier de tag de version du modèle est certes valide d'un point de vue syntaxique, mais cela peut également entraîner des erreurs.
Si vous omettez le tag de version lorsque vous utilisez un modèle sur la plate-forme Vertex AI Model Garden, Vertex AI va utiliser la dernière version en date du modèle. Il ne s'agit peut-être pas de la dernière version stable. Pour en savoir plus sur les versions de modèle Vertex AI disponibles, consultez la section Versions de modèle.
Une version donnée de modèle Vertex AI renvoie toujours la même réponse embedding()
à une entrée de texte donnée. Si vous ne spécifiez pas de versions de modèle dans vos appels à embedding()
, une nouvelle version de modèle publiée peut modifier soudainement le vecteur renvoyé pour une entrée donnée. Cela peut entraîner des erreurs ou d'autres comportements inattendus dans vos applications.
Pour éviter ces problèmes, spécifiez toujours la version du modèle.
Étapes suivantes
Apprenez à créer des applications d'IA générative à l'aide de Cloud SQL.
Découvrez comment appeler des prédictions en ligne à partir d'instances Cloud SQL.