Générer des embeddings

Cette page explique comment utiliser AlloyDB comme outil de grand modèle de langage (LLM) et générer des embeddings vectoriels à partir d'un LLM.

Pour en savoir plus sur l'utilisation de modèles ML avec AlloyDB Omni, consultez la page Créer des applications d'IA générative.

AlloyDB vous permet d'utiliser un LLM 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. Pour en savoir plus sur la prise en charge des embeddings de texte par Vertex AI, consultez Embeddings de texte.

Avant de commencer

Pour permettre à AlloyDB de générer des représentations vectorielles continues, assurez-vous de remplir les conditions suivantes:

Restrictions régionales

Vous pouvez générer des représentations vectorielles continues dans les régions où l'IA générative sur Vertex AI est disponible. Pour obtenir la liste des régions, consultez la section Emplacements IA générative sur Vertex AI .

Pour AlloyDB, assurez-vous que le cluster AlloyDB et le modèle Vertex AI que vous interrogez se trouvent dans la même région.

Extension de base de données requise

  • Assurez-vous que l'extension google_ml_integration est installée sur votre base de données AlloyDB.

    CREATE EXTENSION google_ml_integration;
    

    Cette extension est incluse avec AlloyDB. Vous pouvez l'installer sur n'importe quelle base de données de votre cluster.

  • 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.

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'exécuter la fonction embedding pour exécuter des prédictions:

  1. Connectez un client psql à l'instance principale du cluster, comme décrit dans la section Connecter un client psql à une instance.

  2. À 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 sur laquelle les autorisations doivent être accordées

    • USER_NAME: nom de l'utilisateur auquel les autorisations doivent être accordées

Générer un embedding

AlloyDB 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.

Pour générer un embedding à l'aide d'AlloyDB, utilisez la fonction embedding() fournie par l'extension google_ml_integration:

SELECT embedding( 'MODEL_IDVERSION_TAG', 'TEXT');

Remplacez les éléments suivants :

  • MODEL_ID : ID du modèle à interroger.

    Si vous utilisez Vertex AI Model Garden, spécifiez textembedding-gecko@003 comme ID de modèle. Il s'agit des modèles cloud que AlloyDB peut utiliser pour les embeddings de texte. Pour en savoir plus, consultez Embeddings de texte.

  • Facultatif: VERSION_TAG: balise de version du modèle à interroger. Ajoutez le préfixe @ au tag.

    Si vous utilisez l'un des modèles textembedding-gecko en anglais avec Vertex AI, spécifiez l'un des tags de version (par exemple, textembedding-gecko@003) listés dans Versions de modèle.

    Google vous recommande vivement de toujours spécifier le tag de version. Si vous ne spécifiez pas le tag de version, AlloyDB utilise toujours la dernière version du modèle, ce qui peut entraîner des résultats inattendus.

  • TEXT : texte à traduire en embedding vectoriel.

L'exemple suivant utilise la version 003 des modèles en anglais textembedding-gecko pour générer un embedding basé sur une chaîne littérale fournie:

SELECT embedding('textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');

Stocker des embeddings

Les embeddings générés à l'aide de l'extension google_ml_integration sont implémentés sous forme de tableaux de valeurs real. Ces embeddings générés sont transmis en tant qu'entrées pour les fonctions d'extension pgvector.

Pour stocker cette valeur dans une table, ajoutez une colonne real[]:

ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[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);

Remplacez les éléments suivants :

  • TABLE : nom de la table

  • EMBEDDING_COLUMN: nom de la colonne d'embeddings

  • MODEL_ID : ID du modèle à interroger.

    Si vous utilisez Vertex AI Model Garden, spécifiez textembedding-gecko@003 comme ID de modèle. Il s'agit des modèles cloud que AlloyDB peut utiliser pour les embeddings de texte. Pour en savoir plus, consultez Embeddings de texte.

  • Facultatif: VERSION_TAG: balise de version du modèle à interroger. Ajoutez le préfixe @ au tag.

    Si vous utilisez l'un des modèles textembedding-gecko en anglais avec Vertex AI, spécifiez l'un des tags de version (par exemple, textembedding-gecko@003) listés dans Versions de modèle.

    Google vous recommande vivement de toujours spécifier le tag de version. Si vous ne spécifiez pas le tag de version, AlloyDB utilise toujours la dernière version du modèle, ce qui peut entraîner des résultats inattendus.

  • SOURCE_TEXT_COLUMN: nom de la colonne stockant le texte à traduire en embeddings

Vous pouvez également utiliser la fonction embedding() pour traduire le texte en vecteur. Vous appliquez le 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 explicitement l'appel embedding() en type de données vector pour utiliser ces valeurs avec les opérateurs pgvector.

  CREATE EXTENSION google_ml_integration;
  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <-> embedding('MODEL_IDVERSION_TAG', 'TEXT')
    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, ce qui 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.

Résoudre les problèmes

ERROR: Model not found for model_id

Message d'erreur

Lorsque vous essayez de générer un embedding à l'aide de la fonction embedding() ou google_ml.embedding(), l'erreur suivante se produit:

ERROR: 'Model not found for model_id:

  • Mettez à niveau l'extension google_ml_integration, puis réessayez de générer des représentations vectorielles continues.

    ALTER EXTENSION google_ml_integration UPDATE;
    

    Vous pouvez également supprimer l'extension, puis la recréer.

    DROP extension google_ml_integration;
    CREATE EXTENSION google_ml_integration;
    
  • Si vous générez des embeddings à l'aide de la fonction google_ml.embedding(), assurez-vous que le modèle est enregistré et que vous utilisez le model_id approprié dans la requête.

Étape suivante