Générer des données structurées à l'aide de la fonction AI.GENERATE_TABLE
Ce document vous explique comment générer des données structurées à l'aide d'un modèle Gemini, puis comment mettre en forme la réponse du modèle à l'aide d'un schéma SQL.
Pour ce faire, effectuez les tâches suivantes :
- Créer un modèle distant BigQuery ML sur l'un des modèles Gemini disponibles de manière générale ou en preview.
- Utiliser le modèle avec la fonction
AI.GENERATE_TABLE
pour générer des données structurées à partir des données des tables standards.
Rôles requis
Pour créer un modèle distant et utiliser la fonction AI.GENERATE_TABLE
, vous avez besoin des rôles IAM (Identity and Access Management) suivants :
- Créer et utiliser des ensembles de données, des tables et des modèles BigQuery : Éditeur de données BigQuery (
roles/bigquery.dataEditor
) sur votre projet. Créer, déléguer et utiliser des connexions BigQuery : administrateur de connexion BigQuery (
roles/bigquery.connectionsAdmin
) sur votre projet.Si vous n'avez pas configuré de connexion par défaut, vous pouvez en créer une et la définir lors de l'exécution de l'instruction
CREATE MODEL
. Pour ce faire, vous devez disposer du rôle Administrateur BigQuery (roles/bigquery.admin
) dans votre projet. Pour en savoir plus, consultez Configurer la connexion par défaut.Accordez des autorisations au compte de service de la connexion : Administrateur IAM du projet (
roles/resourcemanager.projectIamAdmin
) sur le projet contenant le point de terminaison Vertex AI. Il s'agit du projet actuel pour les modèles distants que vous créez en spécifiant le nom du modèle comme point de terminaison. Il s'agit du projet identifié dans l'URL des modèles distants que vous créez en spécifiant une URL comme point de terminaison.Créer des jobs BigQuery : rôle Utilisateur de job BigQuery (
roles/bigquery.jobUser
) sur votre projet.
Ces rôles prédéfinis contiennent les autorisations requises pour effectuer les tâches décrites dans ce document. Pour afficher les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
- Créez un ensemble de données :
bigquery.datasets.create
- Créer, déléguer et utiliser une connexion :
bigquery.connections.*
- Définissez les autorisations du compte de service :
resourcemanager.projects.getIamPolicy
etresourcemanager.projects.setIamPolicy
. - Créez un modèle et exécutez l'inférence :
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
- Interroger les données d'une table :
bigquery.tables.getData
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Avant de commencer
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
Créer un ensemble de données
Créez un ensemble de données BigQuery pour contenir vos ressources :
Console
Dans la console Google Cloud , accédez à la page BigQuery.
Dans le volet Explorateur, cliquez sur le nom de votre projet.
Cliquez sur
Afficher les actions > Créer un ensemble de données.Sur la page Créer un ensemble de données, procédez comme suit :
Pour ID de l'ensemble de données, saisissez un nom pour l'ensemble de données.
Dans Type d'emplacement, sélectionnez un emplacement pour l'ensemble de données.
Cliquez sur Créer un ensemble de données.
bq
Pour créer un ensemble de données, exécutez la commande
bq mk
en spécifiant l'option--location
:bq --location=LOCATION mk -d DATASET_ID
Remplacez les éléments suivants :
LOCATION
: emplacement de l'ensemble de données.DATASET_ID
est l'ID de l'ensemble de données que vous créez.
Vérifiez que l'ensemble de données a été créé :
bq ls
Créer une connexion
Vous pouvez ignorer cette étape si vous avez configuré une connexion par défaut ou si vous disposez du rôle Administrateur BigQuery.
Créez une connexion de ressource cloud pour que le modèle distant puisse l'utiliser, et obtenez le compte de service de la connexion. Créez la connexion dans le même emplacement que l'ensemble de données que vous avez créé à l'étape précédente.
Sélectionnez l'une des options suivantes :
Console
Accédez à la page BigQuery.
Dans le volet Explorateur, cliquez sur
Ajouter des données :La boîte de dialogue Ajouter des données s'ouvre.
Dans le panneau Filtrer par, dans la section Type de source de données, sélectionnez Applications métier.
Vous pouvez également saisir
Vertex AI
dans le champ Rechercher des sources de données.Dans la section Sources de données recommandées, cliquez sur Vertex AI.
Cliquez sur la fiche solution Modèles Vertex AI : fédération BigQuery.
Dans la liste Type de connexion, sélectionnez Modèles distants Vertex AI, fonctions à distance et BigLake (Ressource cloud).
Dans le champ ID de connexion, saisissez un nom pour votre connexion.
Cliquez sur Créer une connexion.
Cliquez sur Accéder à la connexion.
Dans le volet Informations de connexion, copiez l'ID du compte de service à utiliser à l'étape suivante.
bq
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 connexionPROJECT_ID
: ID de votre projet Google CloudCONNECTION_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...
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
Utilisez la ressource google_bigquery_connection
.
Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.
L'exemple suivant crée une connexion de ressources Cloud nommée my_cloud_resource_connection
dans la région US
:
Pour appliquer votre configuration Terraform dans un projet Google Cloud , suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez Cloud Shell.
-
Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.
Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Préparer le répertoire
Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).
-
Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code dans le fichier
main.tf
que vous venez de créer.Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
terraform init
Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option
-upgrade
:terraform init -upgrade
Appliquer les modifications
-
Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
terraform plan
Corrigez les modifications de la configuration si nécessaire.
-
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud , accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
Accorder l'accès au compte de service
Attribuez le rôle d'utilisateur Vertex AI au compte de service de la connexion.
Si vous envisagez de spécifier le point de terminaison en tant qu'URL lors de la création du modèle distant (par exemple, endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/gemini-2.5-flash'
), accordez ce rôle dans le projet que vous spécifiez dans l'URL.
Si vous envisagez de spécifier le point de terminaison à l'aide du nom du modèle lors de la création du modèle distant (par exemple endpoint = 'gemini-2.5-flash'
), accordez ce rôle dans le projet dans lequel vous prévoyez de créer le modèle distant.
L'attribution du rôle dans un autre projet génère l'erreur bqcx-1234567890-wxyz@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource
.
Pour accorder le rôle, procédez comme suit :
Console
Accédez à la page IAM et administration.
Cliquez sur
Ajouter.La boîte de dialogue Ajouter des comptes principaux s'ouvre.
Dans le champ Nouveaux comptes principaux, saisissez l'ID du compte de service que vous avez copié précédemment.
Dans le champ Sélectionner un rôle, sélectionnez Vertex AI, puis Utilisateur Vertex AI.
Cliquez sur Enregistrer.
gcloud
Utilisez 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 projetMEMBER
: ID du compte de service que vous avez copié précédemment
Créer un modèle distant BigQuery ML
Dans la console Google Cloud , accédez à la page BigQuery.
À 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 {DEFAULT | `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èleREGION
: région utilisée par la connexion.CONNECTION_ID
: ID de votre connexion BigQueryLorsque 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 Gemini à utiliser. Pour en savoir plus, consultezENDPOINT
.
Générer des données structurées
Générez des données structurées à l'aide de la fonction AI.GENERATE_TABLE
avec un modèle distant et à l'aide des données d'invite d'une colonne de table :
SELECT * FROM AI.GENERATE_TABLE( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, [TABLE `PROJECT_ID.DATASET_ID.TABLE_NAME` / (PROMPT_QUERY)], STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_P AS top_p, STOP_SEQUENCES AS stop_sequences, SAFETY_SETTINGS AS safety_settings, OUTPUT_SCHEMA AS output_schema) );
Remplacez l'élément suivant :
PROJECT_ID
: ID de votre projet.DATASET_ID
: ID de l'ensemble de données contenant le modèle.MODEL_NAME
: nom du modèleTABLE_NAME
: nom de la table contenant la requête. Cette table doit avoir une colonne nomméeprompt
. Vous pouvez également utiliser un alias pour utiliser une colonne portant un nom différent.PROMPT_QUERY
: requête GoogleSQL qui génère les données de la requête. La valeur d'invite elle-même peut être extraite d'une colonne, ou vous pouvez la spécifier en tant que valeur structurée avec un nombre arbitraire de sous-champs de nom de colonne et de chaîne. Par exemple :SELECT ('Analyze the sentiment in ', feedback_column, 'using the following categories: positive, negative, neutral') AS prompt
.TOKENS
: valeurINT64
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 est128
.TEMPERATURE
: valeurFLOAT64
comprise dans la plage[0.0,2.0]
qui contrôle le degré de randomisation dans la sélection des jetons. La valeur par défaut est1.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 pourtemperature
peuvent entraîner des résultats plus diversifiés ou créatifs. Une valeur0
pourtemperature
est déterministe, ce qui signifie que la réponse dont la probabilité est la plus élevée est toujours sélectionnée.TOP_P
: une valeurFLOAT64
comprise dans la plage[0.0,1.0]
permet de déterminer la probabilité de sélection des jetons. 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 est0.95
.STOP_SEQUENCES
: valeurARRAY<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.SAFETY_SETTINGS
: valeurARRAY<STRUCT<STRING AS category, STRING AS threshold>>
qui configure les seuils de sécurité du contenu pour filtrer les réponses. Le premier élément de la structure spécifie une catégorie de préjudice, et le second élément de la structure spécifie un seuil de blocage correspondant. Le modèle filtre les contenus qui ne respectent pas ces paramètres. Vous ne pouvez spécifier chaque catégorie qu'une seule fois. Par exemple, vous ne pouvez pas spécifier à la foisSTRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold)
etSTRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_ONLY_HIGH' AS threshold)
. S'il n'existe aucun paramètre de sécurité pour une catégorie donnée, le paramètre de sécuritéBLOCK_MEDIUM_AND_ABOVE
est utilisé.Voici les catégories acceptées :
HARM_CATEGORY_HATE_SPEECH
HARM_CATEGORY_DANGEROUS_CONTENT
HARM_CATEGORY_HARASSMENT
HARM_CATEGORY_SEXUALLY_EXPLICIT
Les seuils acceptés sont les suivants :
BLOCK_NONE
(Limité)BLOCK_LOW_AND_ABOVE
BLOCK_MEDIUM_AND_ABOVE
(par défaut)BLOCK_ONLY_HIGH
HARM_BLOCK_THRESHOLD_UNSPECIFIED
Pour en savoir plus, consultez Catégories de préjudices et Configurer des filtres de contenu.
OUTPUT_SCHEMA
: valeurSTRING
spécifiant le format de la réponse du modèle. La valeuroutput_schema
doit être une définition de schéma SQL, semblable à celle utilisée dans l'instructionCREATE TABLE
. Les types de données suivants sont acceptés :INT64
FLOAT64
BOOL
STRING
ARRAY
STRUCT
Pour les modèles Gemini 1.5, ne spécifiez un type de données
FLOAT64
que si vous êtes certain que la valeur renvoyée ne sera pas un nombre entier. Ces modèles peuvent parfois renvoyer des valeursINT64
au lieu de valeursFLOAT64
pour les nombres entiers (par exemple,2
au lieu de2.0
), ce qui peut entraîner une erreur d'analyse dans la requête.Lorsque vous utilisez l'argument
output_schema
pour générer des données structurées à partir d'invites d'un tableau, il est important de comprendre les données d'invites afin de spécifier un schéma approprié.Par exemple, supposons que vous analysiez le contenu des critiques de films à partir d'un tableau comportant les champs suivants :
- movie_id
- review
- requête
Vous pouvez ensuite créer un texte d'invite en exécutant une requête semblable à la suivante :
UPDATE
mydataset.movie_review
SET prompt = CONCAT('Extract the key words and key sentiment from the text below: ', review) WHERE review IS NOT NULL;Vous pouvez également spécifier une valeur
output_schema
semblable à"keywords ARRAY<STRING>, sentiment STRING" AS output_schema
.
Exemples
L'exemple suivant montre une requête qui extrait les données d'invite d'une table et fournit un schéma SQL pour mettre en forme la réponse du modèle :
SELECT * FROM AI.GENERATE_TABLE( MODEL `mydataset.gemini_model`, TABLE `mydataset.mytable`, STRUCT("keywords ARRAY<STRING>, sentiment STRING" AS output_schema));
L'exemple suivant montre une requête qui extrait les données d'invite d'une requête et fournit un schéma SQL pour mettre en forme la réponse du modèle :
SELECT * FROM AI.GENERATE_TABLE( MODEL `mydataset.gemini_model`, ( SELECT 'John Smith is a 20-year old single man living at 1234 NW 45th St, Kirkland WA, 98033. He has two phone numbers 123-123-1234, and 234-234-2345. He is 200.5 pounds.' AS prompt ), STRUCT("address STRUCT<street_address STRING, city STRING, state STRING, zip_code STRING>, age INT64, is_married BOOL, name STRING, phone_number ARRAY<STRING>, weight_in_pounds FLOAT64" AS output_schema, 8192 AS max_output_tokens));