Ajusta un modelo con tus datos
En este documento, se muestra cómo crear un modelo remoto de BigQuery ML que haga referencia a un modelo de Vertex AI y, luego, configurar el modelo para que realice un ajuste supervisado. El modelo de Vertex AI debe ser uno de los siguientes:
gemini-1.5-pro-002
gemini-1.5-flash-002
gemini-1.0-pro-002
(vista previa)
Después de crear el modelo remoto, usa la
función ML.EVALUATE
para evaluar el modelo y confirmar que el rendimiento del modelo se adapte a tu caso
de uso. Luego, 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.
Permisos necesarios
Para crear una conexión, necesitas membresía en el siguiente rol de Identity and Access Management (IAM):
roles/bigquery.connectionAdmin
Para otorgar permisos a la cuenta de servicio de la conexión, necesitas el siguiente permiso:
resourcemanager.projects.setIamPolicy
Para crear el modelo con BigQuery ML, necesitas los siguientes permisos de IAM:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
Para ejecutar inferencias, necesitas los siguientes permisos:
bigquery.tables.getData
en la tablabigquery.models.getData
en el modelobigquery.jobs.create
Antes de comenzar
-
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,Vertex AI, and Compute Engine APIs.
Crear una conexión
Crea una conexión de recurso de Cloud y obtén la cuenta de servicio de la conexión.
Selecciona una de las opciones siguientes:
Console
Ve a la página de BigQuery.
Para crear una conexión, haz clic en
Agregar y, luego, en Conexiones a fuentes de datos externas.En la lista Tipo de conexión, selecciona Modelos remotos de Vertex AI, funciones remotas y BigLake (Cloud Resource).
En el campo ID de conexión, escribe un nombre para tu conexión.
Haz clic en Crear conexión (Create connection).
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.Reemplaza lo siguiente:
REGION
: tu región de conexiónPROJECT_ID
: El ID del proyecto de Google Cloud.CONNECTION_ID
: Es 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 con la conexión.
Solución de problemas: Si recibes 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...
Recupera y copia el ID de cuenta de servicio para usarlo en un paso posterior:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
El resultado es similar a este:
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. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas 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 tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara 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 dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf
, por ejemplo,main.tf
. En este instructivo, el archivo se denominamain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tf
recién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgrade
para usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yes
cuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
Otorga acceso a la cuenta de servicio de la conexión
Otorga permiso a tu cuenta de servicio para acceder a Vertex AI. Si no se otorga permiso, se produce un error. Selecciona una de las siguientes opciones:
Console
Ir a la página IAM y administración
Haz clic en
Otorgar acceso.En Principales nuevas, ingresa el ID de la cuenta de servicio que copiaste antes.
Haga clic en Selecciona un rol.
En Filtro, escribe
Vertex AI Service Agent
y, luego, 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
Reemplaza lo siguiente:
PROJECT_NUMBER
: Es el número de tu proyecto.MEMBER
: Es el ID de la cuenta de servicio que copiaste antes.
La cuenta de servicio asociada con tu conexión es una instancia del agente de servicio de delegación de conexión de BigQuery, por lo que está bien asignarle un rol de agente de servicio.
Crea un modelo con ajuste supervisado
En la consola de Google Cloud, ve a la página de 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 `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`;
Reemplaza lo siguiente:
PROJECT_ID
: el ID del proyecto en el que se creará el modelo.DATASET_ID
: El ID del conjunto de datos que contendrá el modelo. Este conjunto de datos debe estar en un trabajo de canalización y una región de carga de modelos compatibles.MODEL_NAME
: el nombre del modeloREGION
: Es la región que usa la conexión.CONNECTION_ID
por el ID de la conexión de BigQuery. Esta conexión debe estar en la misma ubicación que el conjunto de datos que usas.Cuando ves los detalles de conexión en la consola de Google Cloud, este es el valor en la última sección del ID de conexión completamente calificado que se muestra en Conexión ID, por ejemplo,
projects/myproject/locations/connection_location/connections/myconnection
.ENDPOINT
: Un valorSTRING
que especifica el nombre del modelo que se usará.MAX_ITERATIONS
: un valorINT64
que especifica la cantidad de pasos que se deben ejecutar para el ajuste supervisado. El valorMAX_ITERATIONS
debe ser de entre1
y∞
.Los modelos de Gemini se entrenan con épocas en lugar de pasos, por lo que BigQuery ML convierte el valor de
MAX_ITERATIONS
en épocas. El valor predeterminado deMAX_ITERATIONS
es la cantidad de filas en los datos de entrada, que equivale a una época. Para usar varias épocas, especifica un múltiplo de la cantidad de filas en tus datos de entrenamiento. Por ejemplo, si tienes 100 filas de datos de entrada y quieres usar dos épocas, especifica200
para el valor del argumento. Si proporcionas un valor que no es un múltiplo de la cantidad de filas en los datos de entrada, BigQuery ML lo redondea hacia arriba a la época más cercana. Por ejemplo, si tienes 100 filas de datos de entrada y especificas101
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 Cómo 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 de forma automática. La forma en que se dividen los datos varía según la cantidad de filas en la tabla de entrada. Este es el valor predeterminado.RANDOM
: los datos son aleatorios antes de dividirse en conjuntos. Para personalizar la división de datos, puedes usar esta opción con la opciónDATA_SPLIT_EVAL_FRACTION
.CUSTOM
: los datos se dividen con la columna proporcionada en la opciónDATA_SPLIT_COL
. El valorDATA_SPLIT_COL
debe ser el nombre de una columna de tipoBOOL
. Las filas con un valor deTRUE
oNULL
se utilizan como datos de evaluación y las filas con un valor deFALSE
se utilizan como datos de entrenamiento.SEQ
: divide los datos con la columna proporcionada en la opciónDATA_SPLIT_COL
. El valorDATA_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 según la columna especificada.
Las primeras n filas se utilizan como datos de evaluación, en los que n es el valor especificado para
DATA_SPLIT_EVAL_FRACTION
. Las siguientes filas se usan como datos de entrenamiento.NO_SPLIT
: sin división de datos; todos los datos de entrada se usan como datos de entrenamiento.
Para obtener más información acerca de estas opciones de división de datos, consulta
DATA_SPLIT_METHOD
.DATA_SPLIT_EVAL_FRACTION
: un valorFLOAT64
que especifica la fracción de los datos que se usarán como datos de evaluación cuando se realice un ajuste supervisado. Debe ser un valor en el rango[0, 1.0]
. El valor predeterminado es0.2
.Usa esta opción cuando especifiques
RANDOM
oSEQ
como el valor para la opciónDATA_SPLIT_METHOD
. Para personalizar la división de datos, puedes usar la opciónDATA_SPLIT_METHOD
con la opciónDATA_SPLIT_EVAL_FRACTION
.DATA_SPLIT_COL
: un valorSTRING
que especifica el nombre de la columna que se usará para ordenar los datos de entrada en el conjunto de entrenamiento o evaluación. Úsalo cuando especifiquesCUSTOM
oSEQ
como el valor de la opciónDATA_SPLIT_METHOD
.EVALUATION_TASK
: un valorSTRING
que especifica el tipo de tarea que deseas ajustar para que realice 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 instrucciones en la tabla de datos de entrenamiento que se usará cuando se realice el ajuste supervisado. El valor predeterminado esprompt
.INPUT_LABEL_COLS
: un valorARRAY<<STRING>
que contiene el nombre de la columna de etiqueta en la tabla de datos de entrenamiento para usar en el ajuste supervisado. Solo puedes especificar un elemento en el array. El valor predeterminado es un array vacío. Esto hace quelabel
sea el valor predeterminado del argumentoLABEL_COLUMN
.PROMPT_COLUMN
: la columna de la tabla de datos de entrenamiento que contiene la instrucción para evaluar el contenido de la columnaLABEL_COLUMN
. Esta columna debe ser del tipoSTRING
o convertirse enSTRING
. 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 existente. Por ejemplo,AS SELECT hint AS prompt, label FROM mydataset.mytable
LABEL_COLUMN
: la columna de la tabla de datos de entrenamiento que contiene los ejemplos con los que se entrenará el modelo. Esta columna debe ser del tipoSTRING
o convertirse enSTRING
. 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 existente. 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.
Evalúa el modelo ajustado
En la consola de Google Cloud, ve a la página de 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));
Reemplaza lo siguiente:
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 modeloTABLE_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 instrucciones que se proporciona durante el entrenamiento de modelos. Puedes proporcionar este valor a través de la opción
prompt_col
durante el entrenamiento de modelos. Si no se especificaprompt_col
, se usa la columnaprompt
en los datos de entrenamiento. Se muestra un error si no hay una 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 de modelos. Puedes proporcionar este valor a través de la opción
input_label_cols
durante el entrenamiento de modelos. Si no se especificainput_label_cols
, se usa la columnalabel
en los datos de entrenamiento. Se muestra un error si no hay una columna llamadalabel
.TASK_TYPE
: un valorSTRING
que especifica el tipo de tarea para la que deseas evaluar el modelo. Las opciones válidas son las siguientes:TEXT_GENERATION
CLASSIFICATION
SUMMARIZATION
QUESTION_ANSWERING
UNSPECIFIED
TOKENS
: un valorINT64
que establece la cantidad máxima de tokens que se pueden generar en la respuesta. Este valor debe estar en el rango[1,1024]
. Especifica un valor más bajo para respuestas más cortas y un valor más alto para respuestas más largas. El valor predeterminado es128
.TEMPERATURE
: un valorFLOAT64
en el rango[0.0,1.0]
que controla el grado de aleatorización en la selección de tokens. El valor predeterminado es0
.Los valores más bajos para
temperature
son buenos para los mensajes que requieren una respuesta más determinística y menos abierta o creativa, mientras que los valores más altos paratemperature
pueden generar resultados más diversos o creativos. Un valor de0
paratemperature
es determinístico, lo que significa que siempre se selecciona la respuesta de mayor probabilidad.TOP_K
: un valorINT64
en el rango[1,40]
que determina el grupo inicial de tokens que el modelo considera para la selección. Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias. El valor predeterminado es40
.TOP_P
: un valorFLOAT64
en el rango[0.0,1.0]
ayuda a determinar qué tokens del grupo determinado porTOP_K
están seleccionados. Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias. El valor predeterminado es0.95
.
Generar texto
Genera texto con la función ML.GENERATE_TEXT
:
Columna de mensajes
Genera texto usando una columna de tabla para proporcionar el mensaje.
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) );
Reemplaza lo siguiente:
PROJECT_ID
: el ID de tu proyectoDATASET_ID
: El ID del conjunto de datos que contiene el modelo.MODEL_NAME
: el nombre del modeloTABLE_NAME
: el nombre de la tabla que contiene el mensaje. Esta tabla debe tener una columna cuyo nombre coincida con el de la columna de atributos en el modelo ajustado. El nombre de la columna de atributos en el modelo se puede configurar con la opciónPROMPT_COL
cuando creas el modelo. De lo contrario, el nombre de la columna de atributos en el modelo esprompt
de forma predeterminada, o puedes usar un alias para usar una columna con nombre diferente.TOKENS
: un valorINT64
que establece la cantidad máxima de tokens que se pueden generar en la respuesta. Este valor debe estar en el rango[1,8192]
. Especifica un valor más bajo para respuestas más cortas y un valor más alto para respuestas más largas. El valor predeterminado es128
.TEMPERATURE
: un valorFLOAT64
en el rango[0.0,1.0]
que controla el grado de aleatorización en la selección de tokens. El valor predeterminado es1.0
.Los valores más bajos para
temperature
son buenos para los mensajes que requieren una respuesta más determinística y menos abierta o creativa, mientras que los valores más altos paratemperature
pueden generar resultados más diversos o creativos. Un valor de0
paratemperature
es determinístico, lo que significa que siempre se selecciona la respuesta de mayor probabilidad.TOP_P
: Un valorFLOAT64
en el rango[0.0,1.0]
ayuda a determinar la probabilidad de los tokens seleccionados. Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias. El valor predeterminado es0.95
.FLATTEN_JSON
: un valorBOOL
que determina si se debe mostrar el texto generado y los atributos de seguridad en columnas separadas. El valor predeterminado esFALSE
.STOP_SEQUENCES
: un valorARRAY<STRING>
que quita las cadenas especificadas si se incluyen en respuestas del modelo. Las cadenas coinciden de forma exacta, incluido el uso de mayúsculas. El valor predeterminado es un array vacío.GROUND_WITH_GOOGLE_SEARCH
: Un valorBOOL
que determina si el modelo de Vertex AI usa Fundamentación con la Búsqueda de Google cuando genera respuestas. La fundamentación permite que el modelo use información adicional de Internet cuando genera una respuesta para que las respuestas del modelo sean más específicas y fácticas. Cuandoflatten_json_output
y este campo se configuran enTrue
, se incluye una columnaml_generate_text_grounding_result
adicional en los resultados, que proporciona las fuentes que el modelo usó para recopilar información adicional. El valor predeterminado esFALSE
.SAFETY_SETTINGS
: Un valorARRAY<STRUCT<STRING AS category, STRING AS threshold>>
que configura umbrales de seguridad del contenido para filtrar las respuestas. El primer elemento del struct especifica una categoría de daño, y el segundo elemento especifica un umbral de bloqueo correspondiente. El modelo filtra el contenido que incumple esta configuración. 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)
a la vez. Si no hay un parámetro de configuración de seguridad para una categoría determinada, se usa el parámetro de configuración 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.
En el siguiente ejemplo, se muestra una solicitud con estas características:
- Usa la columna
prompt
de la tablaprompts
para el mensaje. - Muestra una respuesta corta y moderadamente probable.
- Muestra el texto generado y los atributos de seguridad en columnas diferentes.
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 mensajes
Genera texto usando una consulta para proporcionar el mensaje.
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) );
Reemplaza lo siguiente:
PROJECT_ID
: el ID de tu proyectoDATASET_ID
: El ID del conjunto de datos que contiene el modelo.MODEL_NAME
: el nombre del modeloPROMPT_QUERY
: una consulta que proporciona los datos del mensaje.TOKENS
: un valorINT64
que establece la cantidad máxima de tokens que se pueden generar en la respuesta. Este valor debe estar en el rango[1,8192]
. Especifica un valor más bajo para respuestas más cortas y un valor más alto para respuestas más largas. El valor predeterminado es128
.TEMPERATURE
: un valorFLOAT64
en el rango[0.0,1.0]
que controla el grado de aleatorización en la selección de tokens. El valor predeterminado es1.0
.Los valores más bajos para
temperature
son buenos para los mensajes que requieren una respuesta más determinística y menos abierta o creativa, mientras que los valores más altos paratemperature
pueden generar resultados más diversos o creativos. Un valor de0
paratemperature
es determinístico, lo que significa que siempre se selecciona la respuesta de mayor probabilidad.TOP_P
: Un valorFLOAT64
en el rango[0.0,1.0]
ayuda a determinar la probabilidad de los tokens seleccionados. Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias. El valor predeterminado es0.95
.FLATTEN_JSON
: un valorBOOL
que determina si se debe mostrar el texto generado y los atributos de seguridad en columnas separadas. El valor predeterminado esFALSE
.STOP_SEQUENCES
: un valorARRAY<STRING>
que quita las cadenas especificadas si se incluyen en respuestas del modelo. Las cadenas coinciden de forma exacta, incluido el uso de mayúsculas. El valor predeterminado es un array vacío.GROUND_WITH_GOOGLE_SEARCH
: Un valorBOOL
que determina si el modelo de Vertex AI usa Fundamentación con la Búsqueda de Google cuando genera respuestas. La fundamentación permite que el modelo use información adicional de Internet cuando genera una respuesta para que las respuestas del modelo sean más específicas y fácticas. Cuandoflatten_json_output
y este campo se configuran enTrue
, se incluye una columnaml_generate_text_grounding_result
adicional en los resultados, que proporciona las fuentes que el modelo usó para recopilar información adicional. El valor predeterminado esFALSE
.SAFETY_SETTINGS
: Un valorARRAY<STRUCT<STRING AS category, STRING AS threshold>>
que configura umbrales de seguridad del contenido para filtrar las respuestas. El primer elemento del struct especifica una categoría de daño, y el segundo elemento especifica un umbral de bloqueo correspondiente. El modelo filtra el contenido que incumple esta configuración. 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)
a la vez. Si no hay un parámetro de configuración de seguridad para una categoría determinada, se usa el parámetro de configuración 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.
Ejemplo 1
En el siguiente ejemplo, se muestra una solicitud con estas características:
- Solicita un resumen del texto en la columna
body
de la tablaarticles
. - Muestra una respuesta moderadamente larga y más probable.
- Muestra el texto generado y los atributos de seguridad en columnas diferentes.
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 siguiente ejemplo, se muestra una solicitud con estas características:
- Usa una consulta para crear los datos del mensaje con la concatenación de cadenas que proporcionan prefijos del mensaje con columnas de la tabla.
- Muestra una respuesta corta y moderadamente probable.
- No muestra el texto generado y los atributos de seguridad en columnas separadas.
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));