Appeler des prédictions en ligne à partir de bases de données AlloyDB

Cette page explique comment appeler des prédictions en ligne à partir d'une base de données AlloyDB pour PostgreSQL.

AlloyDB vous permet d'obtenir des prédictions en ligne dans votre code SQL en appelant la fonction ml_predict_row(). Pour en savoir plus sur l'utilisation de modèles de machine learning (ML) avec AlloyDB, consultez Créer des applications d'IA générative.

Avant de commencer

Avant de pouvoir appeler des prédictions en ligne à partir d'une base de données AlloyDB, vous devez préparer votre base de données et sélectionner un modèle de ML approprié.

Préparer votre base de données

  1. Configurez l'intégration entre votre base de données et Vertex AI.

  2. Accordez aux utilisateurs de la base de données l'autorisation d'exécuter la fonction ml_predict_row() 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 ml_predict_row 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.

Sélectionner un modèle de ML

Lorsque vous appelez la fonction ml_predict_row(), vous devez spécifier l'emplacement d'un modèle de ML. Le modèle que vous spécifiez peut être l'un des suivants :

  • Un modèle qui s'exécute dans le Model Garden de Vertex AI.

    La fonction ml_predict_row() ne permet d'appeler des prédictions que sur des modèles tabulaires ou personnalisés.

  • Un modèle Vertex AI avec un point de terminaison actif auquel vous avez accès via l'autorisation IAM (Identity and Access Management).

    AlloyDB ne permet pas d'utiliser les points de terminaison privés pour obtenir des prédictions en ligne.

Appeler des prédictions en ligne

Utilisez la fonction SQL ml_predict_row() pour appeler des prédictions en ligne sur vos données.

Le format de l'argument initial de la fonction dépend de la présence du modèle de ML que vous souhaitez utiliser dans Vertex AI Model Garden ou en tant que point de terminaison s'exécutant dans un projet Google Cloud .

Utiliser un modèle dans Vertex AI Model Garden

Pour appeler une prédiction en ligne à l'aide d'un modèle de ML qui s'exécute dans Vertex AI Model Garden, utilisez la syntaxe suivante pour la fonction SQL ml_predict_row() :

SELECT ml_predict_row('projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID', '{ CONTENTS }');

Remplacez les éléments suivants :

  • PROJECT_ID: ID de votre projet Google Cloud

  • REGION_ID: ID de la région Google Cloud dans laquelle se trouve le modèle (par exemple, us-central1 pour gemini-pro)

  • MODEL_ID: ID du modèle de ML à utiliser (par exemple, gemini-pro)

  • CONTENTS : entrées de l'appel de prédiction, au format JSON.

Si le modèle de ML est stocké dans le même projet et la même région que votre cluster AlloyDB, vous pouvez abréger le premier argument de cette fonction:

SELECT ml_predict_row('publishers/google/models/MODEL_ID', '{ CONTENTS }');

Pour en savoir plus sur les messages de réponse JSON du modèle, consultez la documentation de référence sur le modèle de base de l'IA générative.

Pour obtenir des exemples, consultez Exemples d'appels.

Utiliser un point de terminaison de modèle Vertex AI

Pour appeler une prédiction en ligne à l'aide d'un point de terminaison de modèle Vertex AI, utilisez la syntaxe suivante pour la fonction SQL ml_predict_row() :

SELECT ml_predict_row('projects/PROJECT_ID/locations/REGION_ID/endpoints/ENDPOINT_ID', '{ CONTENTS }');

Remplacez les éléments suivants :

  • PROJECT_ID: ID du projet Google Cloud dans lequel se trouve le modèle

  • REGION_ID: ID de la région Google Cloud dans laquelle se trouve le modèle (par exemple, us-central1)

  • ENDPOINT_ID: ID du point de terminaison du modèle

  • CONTENTS : entrées de l'appel de prédiction, au format JSON.

Si le point de terminaison se trouve dans le même projet et la même région que votre cluster AlloyDB, vous pouvez abréger le premier argument de cette fonction:

SELECT ml_predict_row('endpoints/ENDPOINT_ID', '{ CONTENTS }');

Pour en savoir plus sur les messages de réponse JSON du modèle, consultez la section PredictResponse.

Exemples d'appels

L'exemple suivant utilise gemini-pro, disponible dans Model Garden, pour générer du texte à partir d'une requête courte fournie en tant qu'argument littéral à ml_predict_row():

select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:generateContent', '{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "What is AlloyDB?"
    }]
  }]
}');

La réponse est un objet JSON. Pour en savoir plus sur le format de l'objet, consultez la section Corps de la réponse.

L'exemple suivant modifie l'exemple précédent de différentes manières :

  • L'exemple utilise le contenu de la colonne messages.message de la base de données actuelle comme entrée.

  • L'exemple montre comment utiliser la fonction json_build_object() pour faciliter la mise en forme des paramètres de la fonction.


select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:generateContent', json_build_object('contents', json_build_object('text', message))) from messages;

L'objet JSON renvoyé contient désormais une entrée dans son tableau predictions pour chaque ligne du tableau messages.

Comme la réponse est un objet JSON, vous pouvez en extraire des champs spécifiques à l'aide de l'opérateur fléché PostgreSQL :

select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:generateContent', json_build_object('contents', json_build_object('text', message)))->'predictions'->0->'content' FROM messages;

Pour obtenir d'autres exemples d'arguments pour ml_predict_row(), consultez Démarrage rapide avec l'API Vertex AI.