Générer des embeddings

Sélectionnez une version de la documentation :

Cette page explique comment utiliser AlloyDB Omni comme outil de grand modèle de langage (LLM) et générer des embeddings vectoriels basés sur un LLM.

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

AlloyDB Omni 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 compatibilité de Vertex AI avec les embeddings de texte, consultez Embeddings de texte.

Avant de commencer

Pour permettre à AlloyDB Omni de générer des embeddings, assurez-vous de remplir les conditions suivantes :

Restrictions régionales

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

Pour AlloyDB Omni, assurez-vous que le cluster AlloyDB Omni 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 Omni.

    CREATE EXTENSION IF NOT EXISTS google_ml_integration;
    

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

  • Définissez l'option 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 Omni, vous devez configurer AlloyDB Omni pour qu'il fonctionne avec un modèle d'embedding de texte.

Pour utiliser le modèle cloud text-embedding-005, 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 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 pour lequel les autorisations doivent être accordées

Générer un embedding

AlloyDB Omni 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 baser des requêtes sur ces données vectorielles.

Pour générer un embedding à l'aide d'AlloyDB Omni, 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 text-embedding-005 comme ID de modèle. Il s'agit des modèles cloud qu'AlloyDB Omni 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 text-embedding en anglais avec Vertex AI, spécifiez l'un des tags de version (par exemple, text-embedding-005) listés dans la section 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 005 des modèles anglais text-embedding pour générer un embedding basé sur une chaîne littérale fournie :

SELECT embedding('text-embedding-005', 'AlloyDB is a managed, cloud-hosted SQL database service.');

Stockage 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ées sont transmises 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 text-embedding-005 comme ID de modèle. Il s'agit des modèles cloud qu'AlloyDB Omni 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 text-embedding en anglais avec Vertex AI, spécifiez l'un des tags de version (par exemple, text-embedding-005) listés dans la section 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 IF NOT EXISTS google_ml_integration;
  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <-> 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, 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

ERREUR : Modèle introuvable pour model_id

Message d'erreur

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

ERROR: 'Model not found for model_id:

  • Mettez à niveau l'extension google_ml_integration et réessayez de générer des embeddings.

    ALTER EXTENSION IF NOT EXISTS 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 bon model_id dans la requête.

Étapes suivantes