Ajustar un modelo con tus datos
En este documento se explica cómo crear un modelo remoto de BigQuery ML que haga referencia a un modelo de Vertex AI y, a continuación, cómo configurar el modelo para realizar un ajuste supervisado. El modelo de Vertex AI debe ser uno de los siguientes:
gemini-2.5-pro
gemini-2.5-flash-lite
gemini-2.0-flash-001
gemini-2.0-flash-lite-001
gemini-1.5-pro-002
gemini-1.5-flash-002
Después de crear el modelo remoto, usa la función ML.EVALUATE
para evaluar el modelo y confirmar que su rendimiento se adapta a tu caso de uso. Después, puedes usar el modelo junto con la función ML.GENERATE_TEXT
para analizar texto en una tabla de BigQuery.
Para obtener más información, consulta Ajuste supervisado de modelos de la API de Gemini de Vertex AI.
Roles obligatorios
Para crear y evaluar un modelo ajustado, necesitas los siguientes roles de Gestión de Identidades y Accesos (IAM):
- Crear y usar conjuntos de datos, tablas y modelos de BigQuery:
Editor de datos de BigQuery (
roles/bigquery.dataEditor
) en tu proyecto. Crear, delegar y usar conexiones de BigQuery: Administrador de conexiones de BigQuery (
roles/bigquery.connectionsAdmin
) en tu proyecto.Si no tiene configurada una conexión predeterminada, puede crear una y definirla al ejecutar la instrucción
CREATE MODEL
. Para ello, debes tener el rol Administrador de BigQuery (roles/bigquery.admin
) en tu proyecto. Para obtener más información, consulta Configurar la conexión predeterminada.Concede permisos a la cuenta de servicio de la conexión: administrador de gestión de identidades y accesos del proyecto (
roles/resourcemanager.projectIamAdmin
) en el proyecto que contiene el endpoint de Vertex AI. Este es el proyecto actual de los modelos remotos que creas especificando el nombre del modelo como endpoint. Es el proyecto identificado en la URL de los modelos remotos que creas especificando una URL como endpoint.Crear tareas de BigQuery: Usuario de tareas de BigQuery (
roles/bigquery.jobUser
) en tu proyecto.
Estos roles predefinidos contienen los permisos necesarios para realizar las tareas descritas en este documento. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
- Crea un conjunto de datos:
bigquery.datasets.create
- Crear, delegar y usar una conexión:
bigquery.connections.*
- Define los permisos de la cuenta de servicio:
resourcemanager.projects.getIamPolicy
yresourcemanager.projects.setIamPolicy
- Crea un modelo y ejecuta la inferencia:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
Antes de empezar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection,Vertex AI, and Compute Engine APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.
Crear conjunto de datos
Crea un conjunto de datos de BigQuery para que contenga tus recursos:
Consola
En la Google Cloud consola, ve a la página BigQuery.
En el panel Explorador, haz clic en el nombre de tu proyecto.
Haz clic en
Ver acciones > Crear conjunto de datos.En la página Crear conjunto de datos, haz lo siguiente:
En ID del conjunto de datos, escribe un nombre para el conjunto de datos.
En Tipo de ubicación, seleccione una ubicación para el conjunto de datos.
Haz clic en Crear conjunto de datos.
bq
Para crear un conjunto de datos, usa el comando
bq mk
con la marca--location
:bq --location=LOCATION mk -d DATASET_ID
Haz los cambios siguientes:
LOCATION
: la ubicación del conjunto de datos.DATASET_ID
es el ID del conjunto de datos que vas a crear.
Confirma que se ha creado el conjunto de datos:
bq ls
Crear una conexión
Puedes saltarte este paso si tienes una conexión predeterminada configurada o si tienes el rol Administrador de BigQuery.
Crea una conexión de recursos de Cloud para que la use el modelo remoto y obtén la cuenta de servicio de la conexión. Crea la conexión en la misma ubicación que el conjunto de datos que has creado en el paso anterior.
Selecciona una de las opciones siguientes:
Consola
Ve a la página BigQuery.
En el panel Explorador, haga clic en
Añadir datos:Se abrirá el cuadro de diálogo Añadir datos.
En el panel Filtrar por, en la sección Tipo de fuente de datos, selecciona Aplicaciones empresariales.
También puede introducir
Vertex AI
en el campo Buscar fuentes de datos.En la sección Fuentes de datos destacadas, haga clic en Vertex AI.
Haz clic en la tarjeta de solución Modelos de Vertex AI: federación de BigQuery.
En la lista Tipo de conexión, selecciona Modelos remotos, funciones remotas y BigLake (recurso de Cloud) de Vertex AI.
En el campo ID de conexión, introduce un nombre para la conexión.
Haga clic en Crear conexión.
Haz clic en Ir a la conexión.
En el panel Información de conexión, copia el ID de la cuenta de servicio para usarlo en un paso posterior.
bq
En un entorno de línea de comandos, crea una conexión:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
El parámetro
--project_id
anula el proyecto predeterminado.Haz los cambios siguientes:
REGION
: tu región de conexiónPROJECT_ID
: tu ID de proyecto Google CloudCONNECTION_ID
: un ID para tu conexión
Cuando creas un recurso de conexión, BigQuery crea una cuenta de servicio del sistema única y la asocia a la conexión.
Solución de problemas: si aparece el siguiente error de conexión, actualiza el SDK de Google Cloud:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
Obtén y copia el ID de la cuenta de servicio para usarlo en un paso posterior:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
El resultado debería ser similar al siguiente:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
Usa el recurso google_bigquery_connection
.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar la autenticación para bibliotecas de cliente.
En el siguiente ejemplo se crea una conexión de recursos de Cloud llamada my_cloud_resource_connection
en la región US
:
Para aplicar la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud
Preparar Cloud Shell
- Abre Cloud Shell.
-
Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.
Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.
Preparar el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo en ese directorio. El nombre del archivo debe tener la extensión
.tf
. Por ejemplo,main.tf
. En este tutorial, nos referiremos al archivo comomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.
Copia el código de ejemplo en el archivo
main.tf
que acabas de crear.También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.
- Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
terraform init
Si quieres usar la versión más reciente del proveedor de Google, incluye la opción
-upgrade
:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
terraform plan
Haga las correcciones necesarias en la configuración.
-
Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo
yes
en la petición:terraform apply
Espera hasta que Terraform muestre el mensaje "Apply complete!".
- Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.
Dar acceso a la cuenta de servicio de la conexión
Asigna el rol Agente de servicio de Vertex AI a la cuenta de servicio de la conexión.
Si tiene previsto especificar el endpoint como una URL al crear el modelo remoto (por ejemplo, endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/gemini-2.0-flash'
),
asigne este rol en el mismo proyecto que especifique en la URL.
Si tienes previsto especificar el endpoint usando el nombre del modelo al crear el modelo remoto (por ejemplo, endpoint = 'gemini-2.0-flash'
), otorga este rol en el mismo proyecto en el que vayas a crear el modelo remoto.
Si se asigna el rol en otro proyecto, se produce el error
bqcx-1234567890-wxyz@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource
.
Para conceder el rol, sigue estos pasos:
Consola
Ve a la página IAM y administración.
Haz clic en
Conceder acceso.En Principales nuevas, introduce el ID de la cuenta de servicio que has copiado anteriormente.
Haz clic en Seleccionar un rol.
En Filtro, escribe
Vertex AI Service Agent
y, a continuación, selecciona ese rol.Haz clic en Guardar.
gcloud
Usa el comando gcloud projects add-iam-policy-binding
:
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.serviceAgent' --condition=None
Haz los cambios siguientes:
PROJECT_NUMBER
: tu número de proyecto.MEMBER
: el ID de la cuenta de servicio que has copiado anteriormente.
La cuenta de servicio asociada a tu conexión es una instancia de BigQuery Connection Delegation Service Agent, por lo que puedes asignarle un rol de agente de servicio.
Crear un modelo con ajuste supervisado
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente consulta para crear un modelo remoto:
CREATE OR REPLACE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`} OPTIONS ( ENDPOINT = 'ENDPOINT', MAX_ITERATIONS = MAX_ITERATIONS, LEARNING_RATE_MULTIPLIER = LEARNING_RATE_MULTIPLIER, DATA_SPLIT_METHOD = 'DATA_SPLIT_METHOD', DATA_SPLIT_EVAL_FRACTION = DATA_SPLIT_EVAL_FRACTION, DATA_SPLIT_COL = 'DATA_SPLIT_COL', EVALUATION_TASK = 'EVALUATION_TASK', PROMPT_COL = 'INPUT_PROMPT_COL', INPUT_LABEL_COLS = INPUT_LABEL_COLS) AS SELECT PROMPT_COLUMN, LABEL_COLUMN FROM `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`;
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto en el que se creará el modelo.DATASET_ID
: ID del conjunto de datos que contendrá el modelo. Este conjunto de datos debe estar en una región de Vertex AI admitida.MODEL_NAME
: el nombre del modelo.REGION
: la región que usa la conexión.CONNECTION_ID
: el ID de tu conexión de BigQuery. Esta conexión debe estar en la misma ubicación que el conjunto de datos que estés usando.Cuando consultas los detalles de la conexión en la consola de Google Cloud , este es el valor de la última sección del ID de conexión completo que se muestra en ID de conexión, por ejemplo,
projects/myproject/locations/connection_location/connections/myconnection
.ENDPOINT
: un valorSTRING
que especifica el nombre del modelo que se va a usar.MAX_ITERATIONS
: un valor deINT64
que especifica el número de pasos que se deben ejecutar para la optimización supervisada. El valor deMAX_ITERATIONS
debe estar entre1
y∞
.Los modelos de Gemini se entrenan mediante épocas en lugar de pasos, por lo que BigQuery ML convierte el valor de
MAX_ITERATIONS
en épocas. El valor predeterminado deMAX_ITERATIONS
es el número de filas de los datos de entrada, que equivale a una época. Para usar varias épocas, especifica un múltiplo del número de filas de tus datos de entrenamiento. Por ejemplo, si tienes 100 filas de datos de entrada y quieres usar dos épocas, especifica200
como valor del argumento. Si proporciona un valor que no es múltiplo del número de filas de los datos de entrada, BigQuery ML redondea al número de épocas más cercano. Por ejemplo, si tiene 100 filas de datos de entrada y especifica101
para el valorMAX_ITERATIONS
, el entrenamiento se realiza con dos épocas.Para obtener más información sobre los parámetros que se usan para ajustar los modelos de Gemini, consulta Crear un trabajo de ajuste.
DATA_SPLIT_METHOD
: un valorSTRING
que especifica el método usado para dividir los datos de entrada en conjuntos de entrenamiento y evaluación. Las opciones válidas son las siguientes:AUTO_SPLIT
: BigQuery ML divide los datos automáticamente. La forma en que se dividen los datos varía en función del número de filas de la tabla de entrada. Este es el valor predeterminado.RANDOM
: los datos se aleatorizan antes de dividirse en conjuntos. Para personalizar la división de datos, puedes usar esta opción junto con la opciónDATA_SPLIT_EVAL_FRACTION
.CUSTOM
: los datos se dividen mediante la columna proporcionada en la opciónDATA_SPLIT_COL
. El valor deDATA_SPLIT_COL
debe ser el nombre de una columna de tipoBOOL
. Las filas con el valorTRUE
oNULL
se usan como datos de evaluación, y las filas con el valorFALSE
se usan como datos de entrenamiento.SEQ
: divide los datos usando la columna proporcionada en la opciónDATA_SPLIT_COL
. El valor deDATA_SPLIT_COL
debe ser el nombre de una columna de uno de los siguientes tipos:NUMERIC
BIGNUMERIC
STRING
TIMESTAMP
Los datos se ordenan de menor a mayor en función de la columna especificada.
Las primeras n filas se usan como datos de evaluación, donde n es el valor especificado para
DATA_SPLIT_EVAL_FRACTION
. Las filas restantes se usan como datos de entrenamiento.NO_SPLIT
: no se dividen los datos; todos los datos de entrada se usan como datos de entrenamiento.
Para obtener más información sobre estas opciones de división de datos, consulta
DATA_SPLIT_METHOD
.DATA_SPLIT_EVAL_FRACTION
: un valor deFLOAT64
que especifica la fracción de los datos que se va a usar como datos de evaluación al realizar el ajuste supervisado. Debe ser un valor del intervalo[0, 1.0]
. El valor predeterminado es0.2
.Usa esta opción cuando especifiques
RANDOM
oSEQ
como valor de la opciónDATA_SPLIT_METHOD
. Para personalizar la división de datos, puede usar la opciónDATA_SPLIT_METHOD
con la opciónDATA_SPLIT_EVAL_FRACTION
.DATA_SPLIT_COL
: un valor deSTRING
que especifica el nombre de la columna que se va a usar para ordenar los datos de entrada en el conjunto de entrenamiento o de evaluación. Usa cuando especifiquesCUSTOM
oSEQ
como valor de la opciónDATA_SPLIT_METHOD
.EVALUATION_TASK
: un valorSTRING
que especifica el tipo de tarea para la que quieres optimizar el modelo. Las opciones válidas son las siguientes:TEXT_GENERATION
CLASSIFICATION
SUMMARIZATION
QUESTION_ANSWERING
UNSPECIFIED
El valor predeterminado es
UNSPECIFIED
.INPUT_PROMPT_COL
: un valorSTRING
que contiene el nombre de la columna de peticiones de la tabla de datos de entrenamiento que se va a usar al realizar el ajuste supervisado. El valor predeterminado esprompt
.INPUT_LABEL_COLS
: un valorARRAY<<STRING>
que contiene el nombre de la columna de etiquetas de la tabla de datos de entrenamiento que se va a usar en el ajuste supervisado. Solo puedes especificar un elemento en la matriz. El valor predeterminado es un array vacío. Esto hace quelabel
sea el valor predeterminado del argumentoLABEL_COLUMN
.PROMPT_COLUMN
: columna de la tabla de datos de entrenamiento que contiene la petición para evaluar el contenido de la columnaLABEL_COLUMN
. Esta columna debe ser de tipoSTRING
o convertirse aSTRING
. Si especificas un valor para la opciónINPUT_PROMPT_COL
, debes especificar el mismo valor paraPROMPT_COLUMN
. De lo contrario, este valor debe serprompt
. Si tu tabla no tiene una columnaprompt
, usa un alias para especificar una columna de tabla. Por ejemplo,AS SELECT hint AS prompt, label FROM mydataset.mytable
.LABEL_COLUMN
: columna de la tabla de datos de entrenamiento que contiene los ejemplos con los que se entrenará el modelo. Esta columna debe ser de tipoSTRING
o convertirse aSTRING
. Si especificas un valor para la opciónINPUT_LABEL_COLS
, debes especificar el mismo valor paraLABEL_COLUMN
. De lo contrario, este valor debe serlabel
. Si tu tabla no tiene una columnalabel
, usa un alias para especificar una columna de tabla. Por ejemplo,AS SELECT prompt, feature AS label FROM mydataset.mytable
.TABLE_PROJECT_ID
: el ID del proyecto que contiene la tabla de datos de entrenamiento.TABLE_DATASET
: el nombre del conjunto de datos que contiene la tabla de datos de entrenamiento.TABLE_NAME
: el nombre de la tabla que contiene los datos que se usarán para entrenar el modelo.
Evaluar el modelo optimizado
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente consulta para evaluar el modelo ajustado:
SELECT * FROM ML.EVALUATE( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, TABLE `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`, STRUCT('TASK_TYPE' AS task_type, TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_K AS top_k, TOP_P AS top_p));
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto que contiene el modelo.DATASET_ID
: el ID del conjunto de datos que contiene el modelo.MODEL_NAME
: el nombre del modelo.TABLE_PROJECT_ID
: el ID del proyecto que contiene la tabla de datos de evaluación.TABLE_DATASET
: el nombre del conjunto de datos que contiene la tabla de datos de evaluación.TABLE_NAME
: el nombre de la tabla que contiene los datos de evaluación.La tabla debe tener una columna cuyo nombre coincida con el nombre de la columna de petición que se proporciona durante el entrenamiento del modelo. Puede proporcionar este valor mediante la opción
prompt_col
durante el entrenamiento del modelo. Si no se especificaprompt_col
, se usa la columna llamadaprompt
en los datos de entrenamiento. Se devuelve un error si no hay ninguna columna llamadaprompt
.La tabla debe tener una columna cuyo nombre coincida con el nombre de la columna de etiquetas que se proporciona durante el entrenamiento del modelo. Puede proporcionar este valor mediante la opción
input_label_cols
durante el entrenamiento del modelo. Si no se especificainput_label_cols
, se usa la columna llamadalabel
en los datos de entrenamiento. Se devuelve un error si no hay ninguna columna llamadalabel
.TASK_TYPE
: un valorSTRING
que especifica el tipo de tarea para la que quieres evaluar el modelo. Las opciones válidas son las siguientes:TEXT_GENERATION
CLASSIFICATION
SUMMARIZATION
QUESTION_ANSWERING
UNSPECIFIED
TOKENS
: un valorINT64
que define el número máximo de tokens que se pueden generar en la respuesta. Este valor debe estar en el intervalo[1,1024]
. Especifica un valor inferior para las respuestas más cortas y un valor superior para las respuestas más largas. El valor predeterminado es128
.TEMPERATURE
: un valorFLOAT64
en el intervalo[0.0,1.0]
que controla el grado de aleatoriedad en la selección de tokens. El valor predeterminado es0
.Los valores más bajos de
temperature
son adecuados para las peticiones que requieren una respuesta más determinista y menos abierta o creativa, mientras que los valores más altos detemperature
pueden dar lugar a resultados más diversos o creativos. El valor de0
paratemperature
es determinista, lo que significa que siempre se selecciona la respuesta con la probabilidad más alta.TOP_K
: un valorINT64
del intervalo[1,40]
que determina el conjunto inicial de tokens que el modelo tiene en cuenta para la selección. Especifica un valor más bajo para obtener respuestas menos aleatorias y un valor más alto para obtener respuestas más aleatorias. El valor predeterminado es40
.TOP_P
: un valorFLOAT64
del intervalo[0.0,1.0]
ayuda a determinar qué tokens del grupo determinado porTOP_K
se seleccionan. Especifica un valor más bajo para obtener respuestas menos aleatorias y un valor más alto para obtener respuestas más aleatorias. El valor predeterminado es0.95
.
Generar texto
Generar texto con la función ML.GENERATE_TEXT
:
Columna de petición
Genera texto usando una columna de una tabla para proporcionar la petición.
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_P AS top_p, FLATTEN_JSON AS flatten_json_output, STOP_SEQUENCES AS stop_sequences) );
Haz los cambios siguientes:
PROJECT_ID
: tu ID de proyecto.DATASET_ID
: el ID del conjunto de datos que contiene el modelo.MODEL_NAME
: el nombre del modelo.TABLE_NAME
: el nombre de la tabla que contiene la petición. Esta tabla debe tener una columna cuyo nombre coincida con el nombre de la columna de características del modelo optimizado. El nombre de la columna de características del modelo se puede definir mediante la opciónPROMPT_COL
al crear el modelo. De lo contrario, el nombre de la columna de características del modelo esprompt
de forma predeterminada, o bien puedes usar un alias para usar una columna con otro nombre.TOKENS
: un valorINT64
que define el número máximo de tokens que se pueden generar en la respuesta. Este valor debe estar en el intervalo[1,8192]
. Especifica un valor inferior para las respuestas más cortas y un valor superior para las respuestas más largas. El valor predeterminado es128
.TEMPERATURE
: un valorFLOAT64
en el intervalo[0.0,1.0]
que controla el grado de aleatoriedad en la selección de tokens. El valor predeterminado es0
.Los valores más bajos de
temperature
son adecuados para las peticiones que requieren una respuesta más determinista y menos abierta o creativa, mientras que los valores más altos detemperature
pueden dar lugar a resultados más diversos o creativos. El valor de0
paratemperature
es determinista, lo que significa que siempre se selecciona la respuesta con la probabilidad más alta.TOP_P
: un valorFLOAT64
en el intervalo[0.0,1.0]
ayuda a determinar la probabilidad de los tokens seleccionados. Especifica un valor más bajo para obtener respuestas menos aleatorias y un valor más alto para obtener respuestas más aleatorias. El valor predeterminado es0.95
.FLATTEN_JSON
: valorBOOL
que determina si se deben devolver el texto generado y los atributos de seguridad en columnas independientes. El valor predeterminado esFALSE
.STOP_SEQUENCES
: un valorARRAY<STRING>
que elimina las cadenas especificadas si se incluyen en las respuestas del modelo. Las cadenas deben coincidir exactamente, incluidas las mayúsculas y las minúsculas. El valor predeterminado es un array vacío.GROUND_WITH_GOOGLE_SEARCH
: un valorBOOL
que determina si el modelo de Vertex AI usa Grounding con la Búsqueda de Google al generar respuestas. La fundamentación permite que el modelo use información adicional de Internet al generar una respuesta para que las respuestas del modelo sean más específicas y factuales. Si tantoflatten_json_output
como este campo tienen el valorTrue
, se incluye una columnaml_generate_text_grounding_result
adicional en los resultados, que proporciona las fuentes que ha usado el modelo para obtener información adicional. El valor predeterminado esFALSE
.SAFETY_SETTINGS
: valorARRAY<STRUCT<STRING AS category, STRING AS threshold>>
que configura los umbrales de seguridad del contenido para filtrar las respuestas. El primer elemento de la estructura especifica una categoría de contenido dañino y el segundo elemento especifica un umbral de bloqueo correspondiente. El modelo filtra el contenido que infringe estos ajustes. Solo puedes especificar cada categoría una vez. Por ejemplo, no puedes especificarSTRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold)
ySTRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_ONLY_HIGH' AS threshold)
. Si no hay ningún ajuste de seguridad para una categoría determinada, se utiliza el ajuste de seguridadBLOCK_MEDIUM_AND_ABOVE
.Las categorías admitidas son las siguientes:
HARM_CATEGORY_HATE_SPEECH
HARM_CATEGORY_DANGEROUS_CONTENT
HARM_CATEGORY_HARASSMENT
HARM_CATEGORY_SEXUALLY_EXPLICIT
Los umbrales admitidos son los siguientes:
BLOCK_NONE
(Restringido)BLOCK_LOW_AND_ABOVE
BLOCK_MEDIUM_AND_ABOVE
(predeterminado)BLOCK_ONLY_HIGH
HARM_BLOCK_THRESHOLD_UNSPECIFIED
Para obtener más información, consulta la definición de categoría de seguridad y umbral de bloqueo.
REQUEST_TYPE
: un valorSTRING
que especifica el tipo de solicitud de inferencia que se enviará al modelo de Gemini. El tipo de solicitud determina qué cuota usa la solicitud. Estos son los valores válidos:DEDICATED
: la funciónML.GENERATE_TEXT
solo usa la cuota de rendimiento aprovisionado. La funciónML.GENERATE_TEXT
devuelve el errorProvisioned throughput is not purchased or is not active
si no hay cuota de capacidad de procesamiento aprovisionada disponible.SHARED
: La funciónML.GENERATE_TEXT
solo usa la cuota compartida dinámica (DSQ), aunque hayas comprado cuota de rendimiento aprovisionado.UNSPECIFIED
: La funciónML.GENERATE_TEXT
usa la cuota de la siguiente manera:- Si no has comprado cuota de rendimiento aprovisionado,
la función
ML.GENERATE_TEXT
usa la cuota de DSQ. - Si has comprado cuota de capacidad de procesamiento aprovisionada, la función
ML.GENERATE_TEXT
usará primero esa cuota. Si las solicitudes superan la cuota de capacidad de procesamiento aprovisionada, el tráfico de desbordamiento utiliza la cuota de DSQ.
- Si no has comprado cuota de rendimiento aprovisionado,
la función
El valor predeterminado es
UNSPECIFIED
.Para obtener más información, consulta Usar el rendimiento aprovisionado de Vertex AI.
En el ejemplo siguiente se muestra una solicitud con estas características:
- Usa la columna
prompt
de la tablaprompts
para la petición. - Devuelve una respuesta breve y moderadamente probable.
- Devuelve el texto generado y los atributos de seguridad en columnas independientes.
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.mymodel`, TABLE mydataset.prompts, STRUCT( 0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p, TRUE AS flatten_json_output));
Consulta de petición
Genera texto mediante una consulta para proporcionar la petición.
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, (PROMPT_QUERY), STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output, STOP_SEQUENCES AS stop_sequences) );
Haz los cambios siguientes:
PROJECT_ID
: tu ID de proyecto.DATASET_ID
: el ID del conjunto de datos que contiene el modelo.MODEL_NAME
: el nombre del modelo.PROMPT_QUERY
: una consulta que proporciona los datos de la petición.TOKENS
: un valorINT64
que define el número máximo de tokens que se pueden generar en la respuesta. Este valor debe estar en el intervalo[1,8192]
. Especifica un valor inferior para las respuestas más cortas y un valor superior para las respuestas más largas. El valor predeterminado es128
.TEMPERATURE
: un valorFLOAT64
en el intervalo[0.0,1.0]
que controla el grado de aleatoriedad en la selección de tokens. El valor predeterminado es0
.Los valores más bajos de
temperature
son adecuados para las peticiones que requieren una respuesta más determinista y menos abierta o creativa, mientras que los valores más altos detemperature
pueden dar lugar a resultados más diversos o creativos. El valor de0
paratemperature
es determinista, lo que significa que siempre se selecciona la respuesta con la probabilidad más alta.TOP_P
: un valorFLOAT64
en el intervalo[0.0,1.0]
ayuda a determinar la probabilidad de los tokens seleccionados. Especifica un valor más bajo para obtener respuestas menos aleatorias y un valor más alto para obtener respuestas más aleatorias. El valor predeterminado es0.95
.FLATTEN_JSON
: valorBOOL
que determina si se deben devolver el texto generado y los atributos de seguridad en columnas independientes. El valor predeterminado esFALSE
.STOP_SEQUENCES
: un valorARRAY<STRING>
que elimina las cadenas especificadas si se incluyen en las respuestas del modelo. Las cadenas deben coincidir exactamente, incluidas las mayúsculas y las minúsculas. El valor predeterminado es un array vacío.GROUND_WITH_GOOGLE_SEARCH
: un valorBOOL
que determina si el modelo de Vertex AI usa Grounding con la Búsqueda de Google al generar respuestas. La fundamentación permite que el modelo use información adicional de Internet al generar una respuesta para que las respuestas del modelo sean más específicas y factuales. Si tantoflatten_json_output
como este campo tienen el valorTrue
, se incluye una columnaml_generate_text_grounding_result
adicional en los resultados, que proporciona las fuentes que ha usado el modelo para obtener información adicional. El valor predeterminado esFALSE
.SAFETY_SETTINGS
: valorARRAY<STRUCT<STRING AS category, STRING AS threshold>>
que configura los umbrales de seguridad del contenido para filtrar las respuestas. El primer elemento de la estructura especifica una categoría de contenido dañino y el segundo elemento especifica un umbral de bloqueo correspondiente. El modelo filtra el contenido que infringe estos ajustes. Solo puedes especificar cada categoría una vez. Por ejemplo, no puedes especificarSTRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold)
ySTRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_ONLY_HIGH' AS threshold)
. Si no hay ningún ajuste de seguridad para una categoría determinada, se utiliza el ajuste de seguridadBLOCK_MEDIUM_AND_ABOVE
.Las categorías admitidas son las siguientes:
HARM_CATEGORY_HATE_SPEECH
HARM_CATEGORY_DANGEROUS_CONTENT
HARM_CATEGORY_HARASSMENT
HARM_CATEGORY_SEXUALLY_EXPLICIT
Los umbrales admitidos son los siguientes:
BLOCK_NONE
(Restringido)BLOCK_LOW_AND_ABOVE
BLOCK_MEDIUM_AND_ABOVE
(predeterminado)BLOCK_ONLY_HIGH
HARM_BLOCK_THRESHOLD_UNSPECIFIED
Para obtener más información, consulta la definición de categoría de seguridad y umbral de bloqueo.
REQUEST_TYPE
: un valorSTRING
que especifica el tipo de solicitud de inferencia que se enviará al modelo de Gemini. El tipo de solicitud determina qué cuota usa la solicitud. Estos son los valores válidos:DEDICATED
: la funciónML.GENERATE_TEXT
solo usa la cuota de rendimiento aprovisionado. La funciónML.GENERATE_TEXT
devuelve el errorProvisioned throughput is not purchased or is not active
si no hay cuota de capacidad de procesamiento aprovisionada disponible.SHARED
: La funciónML.GENERATE_TEXT
solo usa la cuota compartida dinámica (DSQ), aunque hayas comprado cuota de rendimiento aprovisionado.UNSPECIFIED
: La funciónML.GENERATE_TEXT
usa la cuota de la siguiente manera:- Si no has comprado cuota de rendimiento aprovisionado,
la función
ML.GENERATE_TEXT
usa la cuota de DSQ. - Si has comprado cuota de capacidad de procesamiento aprovisionada, la función
ML.GENERATE_TEXT
usará primero esa cuota. Si las solicitudes superan la cuota de capacidad de procesamiento aprovisionada, el tráfico de desbordamiento utiliza la cuota de DSQ.
- Si no has comprado cuota de rendimiento aprovisionado,
la función
El valor predeterminado es
UNSPECIFIED
.Para obtener más información, consulta Usar el rendimiento aprovisionado de Vertex AI.
Ejemplo 1
En el ejemplo siguiente se muestra una solicitud con estas características:
- Pide un resumen del texto de la columna
body
de la tablaarticles
. - Devuelve una respuesta moderadamente larga y más probable.
- Devuelve el texto generado y los atributos de seguridad en columnas independientes.
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.mymodel`, ( 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, TRUE AS flatten_json_output));
Ejemplo 2
En el ejemplo siguiente se muestra una solicitud con estas características:
- Usa una consulta para crear los datos de la petición concatenando cadenas que proporcionan prefijos de la petición con columnas de la tabla.
- Devuelve una respuesta breve y moderadamente probable.
- No devuelve el texto generado ni los atributos de seguridad en columnas independientes.
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.mytuned_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, FALSE AS flatten_json_output));