Générez du texte à l'aide de la fonction ML.GENERATE_TEXT

Ce document explique comment créer un modèle distant BigQuery ML faisant référence à un modèle de base Vertex AI. Vous pouvez ensuite utiliser ce modèle conjointement avec la fonction ML.GENERATE_TEXT pour analyser le contenu textuel ou visuel d'une table BigQuery.

Autorisations requises

  • Pour créer une connexion, vous devez disposer du rôle IAM (Identity and Access Management) suivant :

    • roles/bigquery.connectionAdmin
  • Pour accorder des autorisations au compte de service de la connexion, vous devez disposer de l'autorisation suivante :

    • resourcemanager.projects.setIamPolicy
  • Pour créer le modèle à l'aide de BigQuery ML, vous devez disposer des autorisations IAM suivantes :

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata
  • Pour exécuter une inférence, vous devez disposer des autorisations suivantes :

    • bigquery.tables.getData sur la table
    • bigquery.models.getData sur le modèle
    • bigquery.jobs.create

Avant de commencer

  1. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  2. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  3. Activer les API BigQuery, BigQuery Connection, and Vertex AI.

    Activer les API

Si vous souhaitez utiliser ML.GENERATE_TEXT avec un modèle gemini-pro-vision afin d'analyser le contenu visuel d'une table d'objets, vous devez disposer d'une réservation Enterprise ou Enterprise Plus. Pour en savoir plus, consultez la section Créer des réservations.

Créer une connexion

Créez une connexion de ressource cloud et obtenez le compte de service de la connexion.

Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Pour créer une connexion, cliquez sur Ajouter, puis sur Connexions aux sources de données externes.

  3. Dans la liste Type de connexion, sélectionnez Modèles distants Vertex AI, fonctions distantes et BigLake (ressource Cloud).

  4. Dans le champ ID de connexion, saisissez un nom pour votre connexion.

  5. Cliquez sur Créer une connexion.

  6. Cliquez sur Accéder à la connexion.

  7. Dans le volet Informations de connexion, copiez l'ID du compte de service à utiliser à l'étape suivante.

bq

  1. Dans un environnement de ligne de commande, créez une connexion :

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID
    

    Le paramètre --project_id remplace le projet par défaut.

    Remplacez les éléments suivants :

    • REGION : votre région de connexion
    • PROJECT_ID : ID de votre projet Google Cloud
    • CONNECTION_ID : ID de votre connexion

    Lorsque vous créez une ressource de connexion, BigQuery crée un compte de service système unique et l'associe à la connexion.

    Dépannage : Si vous obtenez l'erreur de connexion suivante, mettez à jour le Google Cloud SDK :

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Récupérez et copiez l'ID du compte de service pour l'utiliser lors d'une prochaine étape :

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID
    

    Le résultat ressemble à ce qui suit :

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Ajoutez la section suivante à votre fichier main.tf.

 ## This creates a cloud resource connection.
 ## Note: The cloud resource nested object has only one output only field - serviceAccountId.
 resource "google_bigquery_connection" "connection" {
    connection_id = "CONNECTION_ID"
    project = "PROJECT_ID"
    location = "REGION"
    cloud_resource {}
}        
Remplacez les éléments suivants :

  • CONNECTION_ID : ID de votre connexion
  • PROJECT_ID : ID de votre projet Google Cloud
  • REGION : votre région de connexion

Accorder l'accès au compte de service

Autorisez votre compte de service à utiliser la connexion. L'impossibilité de fournir des autorisations génère une erreur. Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page IAM et administration.

    Accéder à IAM et administration

  2. Cliquez sur Ajouter.

    La boîte de dialogue Ajouter des comptes principaux s'ouvre.

  3. Dans le champ Nouveaux comptes principaux, saisissez l'ID du compte de service que vous avez copié précédemment.

  4. Dans le champ Sélectionner un rôle, sélectionnez Vertex AI, puis Utilisateur Vertex AI.

  5. Cliquez sur Enregistrer.

gcloud

Exécutez la commande gcloud projects add-iam-policy-binding :

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None

Remplacez les éléments suivants :

  • PROJECT_NUMBER : votre numéro de projet
  • MEMBER : ID du compte de service que vous avez copié précédemment

Créer un modèle

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. À l'aide de l'éditeur SQL, créez un modèle distant :

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
    OPTIONS (ENDPOINT = 'ENDPOINT');
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • DATASET_ID : ID de l'ensemble de données pour contenir le modèle. Cet ensemble de données doit se trouver dans le même emplacement que la connexion que vous utilisez.
    • MODEL_NAME : nom du modèle
    • REGION : région utilisée par la connexion.
    • CONNECTION_ID : ID de votre connexion BigQuery

      Lorsque vous affichez les détails de la connexion dans la console Google Cloud, il s'agit de la valeur de la dernière section de l'ID de connexion complet affiché dans ID de connexion (par exemple, projects/myproject/locations/connection_location/connections/myconnection).

    • ENDPOINT: nom du modèle Vertex AI compatible à utiliser. Exemple :ENDPOINT='gemini-pro'

      Pour certains types de modèles, vous pouvez spécifier une version particulière du modèle en ajoutant @version au nom du modèle. Exemple :text-bison@001 Pour en savoir plus sur les versions de modèle compatibles avec les différents types de modèles, consultez la page ENDPOINT.

Générer du texte à partir de données textuelles à l'aide d'une invite depuis une table

Générez du texte à l'aide de la fonction ML.GENERATE_TEXT avec un modèle distant basé sur un modèle de texte de l'API Vertex AI Gemini ou de l'API Vertex AI PaLM compatible et une requête provenant d'une colonne de table:

gemini-pro

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  TABLE PROJECT_ID.DATASET_ID.TABLE_NAME,
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données contenant le modèle.
  • MODEL_NAME : nom du modèle
  • TABLE_NAME : nom de la table contenant la requête. Cette table doit avoir une colonne nommée prompt. Vous pouvez également utiliser un alias pour utiliser une colonne portant un nom différent.
  • TOKENS : valeur INT64 qui définit le nombre maximal de jetons pouvant être générés dans la réponse. Cette valeur doit être comprise dans la plage [1,8192]. Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses plus longues. La valeur par défaut est 128.
  • TEMPERATURE : valeur FLOAT64 comprise dans la plage [0.0,1.0] qui contrôle le degré d'aléatoire dans la sélection des jetons. La valeur par défaut est 0.

    Des valeurs inférieures pour temperature conviennent aux requêtes qui nécessitent une réponse plus déterministe et moins ouverte ou créative, tandis que des valeurs plus élevées pour temperature peuvent entraîner des résultats plus diversifiés ou créative. Une valeur 0 pour temperature est déterministe, ce qui signifie que la réponse dont la probabilité est la plus élevée est toujours sélectionnée.

  • TOP_K : valeur INT64 comprise dans la plage [1,40] qui détermine le pool initial de jetons pris en compte par le modèle pour la sélection. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 40.
  • TOP_P : une valeur FLOAT64 comprise dans la plage [0.0,1.0] permet de déterminer quels jetons du pool déterminés par TOP_K sont sélectionnés. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 0.95.
  • FLATTEN_JSON : valeur BOOL qui détermine si le texte généré et les attributs de sécurité doivent être renvoyés dans des colonnes distinctes. La valeur par défaut est FALSE.
  • STOP_SEQUENCES : valeur ARRAY<STRING> qui supprime les chaînes spécifiées si elles sont incluses dans les réponses du modèle. Les chaînes correspondent exactement, y compris la casse. La valeur par défaut est un tableau vide.

Exemple

L'exemple suivant montre une requête avec ces caractéristiques :

  • Elle utilise la colonne prompt de la table prompts pour la requête.
  • Elle renvoie une réponse courte et relativement probable.
  • Elle renvoie le texte généré et les attributs de sécurité dans des colonnes distinctes.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      40 AS top_k, TRUE AS flatten_json_output));

text-bison

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  TABLE PROJECT_ID.DATASET_ID.TABLE_NAME,
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données contenant le modèle.
  • MODEL_NAME : nom du modèle
  • TABLE_NAME : nom de la table contenant la requête. Cette table doit avoir une colonne nommée prompt. Vous pouvez également utiliser un alias pour utiliser une colonne portant un nom différent.
  • TOKENS : valeur INT64 qui définit le nombre maximal de jetons pouvant être générés dans la réponse. Cette valeur doit être comprise dans la plage [1,1024]. Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses plus longues. La valeur par défaut est 128.
  • TEMPERATURE : valeur FLOAT64 comprise dans la plage [0.0,1.0] qui contrôle le degré d'aléatoire dans la sélection des jetons. La valeur par défaut est 0.

    Des valeurs inférieures pour temperature conviennent aux requêtes qui nécessitent une réponse plus déterministe et moins ouverte ou créative, tandis que des valeurs plus élevées pour temperature peuvent entraîner des résultats plus diversifiés ou créative. Une valeur 0 pour temperature est déterministe, ce qui signifie que la réponse dont la probabilité est la plus élevée est toujours sélectionnée.

  • TOP_K : valeur INT64 comprise dans la plage [1,40] qui détermine le pool initial de jetons pris en compte par le modèle pour la sélection. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 40.
  • TOP_P : une valeur FLOAT64 comprise dans la plage [0.0,1.0] permet de déterminer quels jetons du pool déterminés par TOP_K sont sélectionnés. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 0.95.
  • FLATTEN_JSON : valeur BOOL qui détermine si le texte généré et les attributs de sécurité doivent être renvoyés dans des colonnes distinctes. La valeur par défaut est FALSE.
  • STOP_SEQUENCES : valeur ARRAY<STRING> qui supprime les chaînes spécifiées si elles sont incluses dans les réponses du modèle. Les chaînes correspondent exactement, y compris la casse. La valeur par défaut est un tableau vide.

Exemple

L'exemple suivant montre une requête avec ces caractéristiques :

  • Elle utilise la colonne prompt de la table prompts pour la requête.
  • Elle renvoie une réponse courte et relativement probable.
  • Elle renvoie le texte généré et les attributs de sécurité dans des colonnes distinctes.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      40 AS top_k, TRUE AS flatten_json_output));

text-bison32

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  TABLE PROJECT_ID.DATASET_ID.TABLE_NAME,
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données contenant le modèle.
  • MODEL_NAME : nom du modèle
  • TABLE_NAME : nom de la table contenant la requête. Cette table doit avoir une colonne nommée prompt. Vous pouvez également utiliser un alias pour utiliser une colonne portant un nom différent.
  • TOKENS : valeur INT64 qui définit le nombre maximal de jetons pouvant être générés dans la réponse. Cette valeur doit être comprise dans la plage [1,8192]. Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses plus longues. La valeur par défaut est 128.
  • TEMPERATURE : valeur FLOAT64 comprise dans la plage [0.0,1.0] qui contrôle le degré d'aléatoire dans la sélection des jetons. La valeur par défaut est 0.

    Des valeurs inférieures pour temperature conviennent aux requêtes qui nécessitent une réponse plus déterministe et moins ouverte ou créative, tandis que des valeurs plus élevées pour temperature peuvent entraîner des résultats plus diversifiés ou créative. Une valeur 0 pour temperature est déterministe, ce qui signifie que la réponse dont la probabilité est la plus élevée est toujours sélectionnée.

  • TOP_K : valeur INT64 comprise dans la plage [1,40] qui détermine le pool initial de jetons pris en compte par le modèle pour la sélection. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 40.
  • TOP_P : une valeur FLOAT64 comprise dans la plage [0.0,1.0] permet de déterminer quels jetons du pool déterminés par TOP_K sont sélectionnés. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 0.95.
  • FLATTEN_JSON : valeur BOOL qui détermine si le texte généré et les attributs de sécurité doivent être renvoyés dans des colonnes distinctes. La valeur par défaut est FALSE.
  • STOP_SEQUENCES : valeur ARRAY<STRING> qui supprime les chaînes spécifiées si elles sont incluses dans les réponses du modèle. Les chaînes correspondent exactement, y compris la casse. La valeur par défaut est un tableau vide.

Exemple

L'exemple suivant montre une requête avec ces caractéristiques :

  • Elle utilise la colonne prompt de la table prompts pour la requête.
  • Elle renvoie une réponse courte et relativement probable.
  • Elle renvoie le texte généré et les attributs de sécurité dans des colonnes distinctes.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      40 AS top_k, TRUE AS flatten_json_output));

text-unicorn

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  TABLE PROJECT_ID.DATASET_ID.TABLE_NAME,
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données contenant le modèle.
  • MODEL_NAME : nom du modèle
  • TABLE_NAME : nom de la table contenant la requête. Cette table doit avoir une colonne nommée prompt. Vous pouvez également utiliser un alias pour utiliser une colonne portant un nom différent.
  • TOKENS : valeur INT64 qui définit le nombre maximal de jetons pouvant être générés dans la réponse. Cette valeur doit être comprise dans la plage [1,1024]. Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses plus longues. La valeur par défaut est 128.
  • TEMPERATURE : valeur FLOAT64 comprise dans la plage [0.0,1.0] qui contrôle le degré d'aléatoire dans la sélection des jetons. La valeur par défaut est 0.

    Des valeurs inférieures pour temperature conviennent aux requêtes qui nécessitent une réponse plus déterministe et moins ouverte ou créative, tandis que des valeurs plus élevées pour temperature peuvent entraîner des résultats plus diversifiés ou créative. Une valeur 0 pour temperature est déterministe, ce qui signifie que la réponse dont la probabilité est la plus élevée est toujours sélectionnée.

  • TOP_K : valeur INT64 comprise dans la plage [1,40] qui détermine le pool initial de jetons pris en compte par le modèle pour la sélection. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 40.
  • TOP_P : une valeur FLOAT64 comprise dans la plage [0.0,1.0] permet de déterminer quels jetons du pool déterminés par TOP_K sont sélectionnés. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 0.95.
  • FLATTEN_JSON : valeur BOOL qui détermine si le texte généré et les attributs de sécurité doivent être renvoyés dans des colonnes distinctes. La valeur par défaut est FALSE.
  • STOP_SEQUENCES : valeur ARRAY<STRING> qui supprime les chaînes spécifiées si elles sont incluses dans les réponses du modèle. Les chaînes correspondent exactement, y compris la casse. La valeur par défaut est un tableau vide.

Exemple

L'exemple suivant montre une requête avec ces caractéristiques :

  • Elle utilise la colonne prompt de la table prompts pour la requête.
  • Elle renvoie une réponse courte et relativement probable.
  • Elle renvoie le texte généré et les attributs de sécurité dans des colonnes distinctes.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      40 AS top_k, TRUE AS flatten_json_output));

Générer du texte à partir de données textuelles à l'aide d'une invite d'une requête

Générez du texte à l'aide de la fonction ML.GENERATE_TEXT avec un modèle distant basé sur un modèle de texte de l'API Gemini ou de l'API PaLM compatible et une recherche fournissant la requête:

gemini-pro

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  (PROMPT_QUERY),
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données contenant le modèle.
  • MODEL_NAME : nom du modèle
  • PROMPT_QUERY : fournit les données de la requête.
  • TOKENS : valeur INT64 qui définit le nombre maximal de jetons pouvant être générés dans la réponse. Cette valeur doit être comprise dans la plage [1,8192]. Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses plus longues. La valeur par défaut est 128.
  • TEMPERATURE : valeur FLOAT64 comprise dans la plage [0.0,1.0] qui contrôle le degré d'aléatoire dans la sélection des jetons. La valeur par défaut est 0.

    Des valeurs inférieures pour temperature conviennent aux requêtes qui nécessitent une réponse plus déterministe et moins ouverte ou créative, tandis que des valeurs plus élevées pour temperature peuvent entraîner des résultats plus diversifiés ou créative. Une valeur 0 pour temperature est déterministe, ce qui signifie que la réponse dont la probabilité est la plus élevée est toujours sélectionnée.

  • TOP_K : valeur INT64 comprise dans la plage [1,40] qui détermine le pool initial de jetons pris en compte par le modèle pour la sélection. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 40.
  • TOP_P : une valeur FLOAT64 comprise dans la plage [0.0,1.0] permet de déterminer quels jetons du pool déterminés par TOP_K sont sélectionnés. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 0.95.
  • FLATTEN_JSON : valeur BOOL qui détermine si le texte généré et les attributs de sécurité doivent être renvoyés dans des colonnes distinctes. La valeur par défaut est FALSE.
  • STOP_SEQUENCES : valeur ARRAY<STRING> qui supprime les chaînes spécifiées si elles sont incluses dans les réponses du modèle. Les chaînes correspondent exactement, y compris la casse. La valeur par défaut est un tableau vide.

Exemple 1

L'exemple suivant montre une requête avec ces caractéristiques :

  • Elle demande le résumé du texte dans la colonne body de la table articles.
  • Elle renvoie une réponse relativement longue et plus probable.
  • Elle renvoie le texte généré et les attributs de sécurité dans des colonnes distinctes.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(
      0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p,
      15 AS top_k, TRUE AS flatten_json_output));

Exemple 2

L'exemple suivant montre une requête avec ces caractéristiques :

  • Elle utilise une requête pour créer les données de requête en concaténant les chaînes qui fournissent des préfixes de requête avec des colonnes de table.
  • Elle renvoie une réponse courte et relativement probable.
  • Elle ne renvoie pas le texte généré et les attributs de sécurité dans des colonnes distinctes.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      30 AS top_k, FALSE AS flatten_json_output));

text-bison

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  (PROMPT_QUERY),
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données contenant le modèle.
  • MODEL_NAME : nom du modèle
  • PROMPT_QUERY : fournit les données de la requête.
  • TOKENS : valeur INT64 qui définit le nombre maximal de jetons pouvant être générés dans la réponse. Cette valeur doit être comprise dans la plage [1,1024]. Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses plus longues. La valeur par défaut est 128.
  • TEMPERATURE : valeur FLOAT64 comprise dans la plage [0.0,1.0] qui contrôle le degré d'aléatoire dans la sélection des jetons. La valeur par défaut est 0.

    Des valeurs inférieures pour temperature conviennent aux requêtes qui nécessitent une réponse plus déterministe et moins ouverte ou créative, tandis que des valeurs plus élevées pour temperature peuvent entraîner des résultats plus diversifiés ou créative. Une valeur 0 pour temperature est déterministe, ce qui signifie que la réponse dont la probabilité est la plus élevée est toujours sélectionnée.

  • TOP_K : valeur INT64 comprise dans la plage [1,40] qui détermine le pool initial de jetons pris en compte par le modèle pour la sélection. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 40.
  • TOP_P : une valeur FLOAT64 comprise dans la plage [0.0,1.0] permet de déterminer quels jetons du pool déterminés par TOP_K sont sélectionnés. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 0.95.
  • FLATTEN_JSON : valeur BOOL qui détermine si le texte généré et les attributs de sécurité doivent être renvoyés dans des colonnes distinctes. La valeur par défaut est FALSE.
  • STOP_SEQUENCES : valeur ARRAY<STRING> qui supprime les chaînes spécifiées si elles sont incluses dans les réponses du modèle. Les chaînes correspondent exactement, y compris la casse. La valeur par défaut est un tableau vide.

Exemple 1

L'exemple suivant montre une requête avec ces caractéristiques :

  • Elle demande le résumé du texte dans la colonne body de la table articles.
  • Elle renvoie une réponse relativement longue et plus probable.
  • Elle renvoie le texte généré et les attributs de sécurité dans des colonnes distinctes.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(
      0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p,
      15 AS top_k, TRUE AS flatten_json_output));

Exemple 2

L'exemple suivant montre une requête avec ces caractéristiques :

  • Elle utilise une requête pour créer les données de requête en concaténant les chaînes qui fournissent des préfixes de requête avec des colonnes de table.
  • Elle renvoie une réponse courte et relativement probable.
  • Elle ne renvoie pas le texte généré et les attributs de sécurité dans des colonnes distinctes.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      30 AS top_k, FALSE AS flatten_json_output));

text-bison32

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  (PROMPT_QUERY),
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données contenant le modèle.
  • MODEL_NAME : nom du modèle
  • PROMPT_QUERY : fournit les données de la requête.
  • TOKENS : valeur INT64 qui définit le nombre maximal de jetons pouvant être générés dans la réponse. Cette valeur doit être comprise dans la plage [1,8192]. Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses plus longues. La valeur par défaut est 128.
  • TEMPERATURE : valeur FLOAT64 comprise dans la plage [0.0,1.0] qui contrôle le degré d'aléatoire dans la sélection des jetons. La valeur par défaut est 0.

    Des valeurs inférieures pour temperature conviennent aux requêtes qui nécessitent une réponse plus déterministe et moins ouverte ou créative, tandis que des valeurs plus élevées pour temperature peuvent entraîner des résultats plus diversifiés ou créative. Une valeur 0 pour temperature est déterministe, ce qui signifie que la réponse dont la probabilité est la plus élevée est toujours sélectionnée.

  • TOP_K : valeur INT64 comprise dans la plage [1,40] qui détermine le pool initial de jetons pris en compte par le modèle pour la sélection. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 40.
  • TOP_P : une valeur FLOAT64 comprise dans la plage [0.0,1.0] permet de déterminer quels jetons du pool déterminés par TOP_K sont sélectionnés. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 0.95.
  • FLATTEN_JSON : valeur BOOL qui détermine si le texte généré et les attributs de sécurité doivent être renvoyés dans des colonnes distinctes. La valeur par défaut est FALSE.
  • STOP_SEQUENCES : valeur ARRAY<STRING> qui supprime les chaînes spécifiées si elles sont incluses dans les réponses du modèle. Les chaînes correspondent exactement, y compris la casse. La valeur par défaut est un tableau vide.

Exemple 1

L'exemple suivant montre une requête avec ces caractéristiques :

  • Elle demande le résumé du texte dans la colonne body de la table articles.
  • Elle renvoie une réponse relativement longue et plus probable.
  • Elle renvoie le texte généré et les attributs de sécurité dans des colonnes distinctes.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(
      0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p,
      15 AS top_k, TRUE AS flatten_json_output));

Exemple 2

L'exemple suivant montre une requête avec ces caractéristiques :

  • Elle utilise une requête pour créer les données de requête en concaténant les chaînes qui fournissent des préfixes de requête avec des colonnes de table.
  • Elle renvoie une réponse courte et relativement probable.
  • Elle ne renvoie pas le texte généré et les attributs de sécurité dans des colonnes distinctes.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      30 AS top_k, FALSE AS flatten_json_output));

text-unicorn

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  (PROMPT_QUERY),
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_K AS top_k, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données contenant le modèle.
  • MODEL_NAME : nom du modèle
  • PROMPT_QUERY : fournit les données de la requête.
  • TOKENS : valeur INT64 qui définit le nombre maximal de jetons pouvant être générés dans la réponse. Cette valeur doit être comprise dans la plage [1,1024]. Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses plus longues. La valeur par défaut est 128.
  • TEMPERATURE : valeur FLOAT64 comprise dans la plage [0.0,1.0] qui contrôle le degré d'aléatoire dans la sélection des jetons. La valeur par défaut est 0.

    Des valeurs inférieures pour temperature conviennent aux requêtes qui nécessitent une réponse plus déterministe et moins ouverte ou créative, tandis que des valeurs plus élevées pour temperature peuvent entraîner des résultats plus diversifiés ou créative. Une valeur 0 pour temperature est déterministe, ce qui signifie que la réponse dont la probabilité est la plus élevée est toujours sélectionnée.

  • TOP_K : valeur INT64 comprise dans la plage [1,40] qui détermine le pool initial de jetons pris en compte par le modèle pour la sélection. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 40.
  • TOP_P : une valeur FLOAT64 comprise dans la plage [0.0,1.0] permet de déterminer quels jetons du pool déterminés par TOP_K sont sélectionnés. Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires. La valeur par défaut est 0.95.
  • FLATTEN_JSON : valeur BOOL qui détermine si le texte généré et les attributs de sécurité doivent être renvoyés dans des colonnes distinctes. La valeur par défaut est FALSE.
  • STOP_SEQUENCES : valeur ARRAY<STRING> qui supprime les chaînes spécifiées si elles sont incluses dans les réponses du modèle. Les chaînes correspondent exactement, y compris la casse. La valeur par défaut est un tableau vide.

Exemple 1

L'exemple suivant montre une requête avec ces caractéristiques :

  • Elle demande le résumé du texte dans la colonne body de la table articles.
  • Elle renvoie une réponse relativement longue et plus probable.
  • Elle renvoie le texte généré et les attributs de sécurité dans des colonnes distinctes.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(
      0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p,
      15 AS top_k, TRUE AS flatten_json_output));

Exemple 2

L'exemple suivant montre une requête avec ces caractéristiques :

  • Elle utilise une requête pour créer les données de requête en concaténant les chaînes qui fournissent des préfixes de requête avec des colonnes de table.
  • Elle renvoie une réponse courte et relativement probable.
  • Elle ne renvoie pas le texte généré et les attributs de sécurité dans des colonnes distinctes.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      30 AS top_k, FALSE AS flatten_json_output));

Générer du texte décrivant du contenu visuel

Générez du texte à l'aide de la fonction ML.GENERATE_TEXT avec un modèle distant basé sur un modèle multimodal gemini-pro-vision:

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  TABLE PROJECT_ID.DATASET_ID.TABLE_NAME,
  STRUCT(PROMPT AS prompt, TOKENS AS max_output_tokens,
  TEMPERATURE AS temperature, TOP_K AS top_k,
  TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données contenant le modèle.
  • MODEL_NAME : nom du modèle
  • TABLE_NAME: nom de la table d'objets qui comporte le contenu visuel à analyser. Pour en savoir plus sur les types de contenu visuel que vous pouvez analyser, consultez Contenu visuel compatible.

    Le bucket Cloud Storage utilisé par la table d'objets doit se trouver dans le même projet que celui où vous avez créé le modèle et où vous appelez la fonction ML.GENERATE_TEXT.

  • PROMPT: invite à utiliser pour analyser le contenu visuel.
  • TOKENS : valeur INT64 qui définit le nombre maximal de jetons pouvant être générés dans la réponse. Cette valeur doit être comprise dans la plage [1,2048]. Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses plus longues. La valeur par défaut est 2048.
  • TEMPERATURE : valeur FLOAT64 comprise dans la plage [0.0,1.0] qui contrôle le degré d'aléatoire dans la sélection des jetons. La valeur par défaut est 0.4.

    Des valeurs inférieures pour temperature conviennent aux requêtes qui nécessitent une réponse plus déterministe et moins ouverte ou créative, tandis que des valeurs plus élevées pour temperature peuvent entraîner des résultats plus diversifiés ou créatifs. Une valeur 0 pour temperature est déterministe, ce qui signifie que la réponse dont la probabilité est la plus élevée est toujours sélectionnée.

  • TOP_K : valeur INT64 comprise dans la plage [1,40] qui détermine le pool initial de jetons pris en compte par le modèle pour la sélection. Spécifiez une valeur inférieure pour obtenir des réponses moins aléatoires et une valeur supérieure pour des réponses plus aléatoires. La valeur par défaut est 32.
  • TOP_P : une valeur FLOAT64 comprise dans la plage [0.0,1.0] permet de déterminer quels jetons du pool déterminés par TOP_K sont sélectionnés. Spécifiez une valeur inférieure pour obtenir des réponses moins aléatoires et une valeur supérieure pour des réponses plus aléatoires. La valeur par défaut est 0.95.
  • FLATTEN_JSON : valeur BOOL qui détermine si le texte généré et les attributs de sécurité doivent être renvoyés dans des colonnes distinctes. La valeur par défaut est FALSE.
  • STOP_SEQUENCES : valeur ARRAY<STRING> qui supprime les chaînes spécifiées si elles sont incluses dans les réponses du modèle. Les chaînes correspondent exactement, y compris la casse. La valeur par défaut est un tableau vide.

Exemple

Cet exemple analyse le contenu visuel d'une table d'objets nommée videos et décrit le contenu de chaque vidéo:

SELECT
  uri,
  ml_generate_text_llm_result
FROM
  ML.GENERATE_TEXT(
    MODEL
      `mydataset.gemini_pro_vision_model`
        TABLE `mydataset.videos`
          STRUCT('What is happening in this video?' AS PROMPT,
          TRUE AS FLATTEN_JSON_OUTPUT));