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 tabla
    • bigquery.models.getData en el modelo
    • bigquery.jobs.create

Antes de comenzar

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery, BigQuery Connection,Vertex AI, and Compute Engine APIs.

    Enable the 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

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Para crear una conexión, haz clic en Agregar y, luego, en Conexiones a fuentes de datos externas.

  3. En la lista Tipo de conexión, selecciona Modelos remotos de Vertex AI, funciones remotas y BigLake (Cloud Resource).

  4. En el campo ID de conexión, escribe un nombre para tu conexión.

  5. Haz clic en Crear conexión (Create connection).

  6. Haz clic en Ir a la conexión.

  7. En el panel Información de conexión, copia el ID de la cuenta de servicio para usarlo en un paso posterior.

bq

  1. 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ón
    • PROJECT_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...
    
  2. 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:


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.

Prepara Cloud Shell

  1. Inicia Cloud Shell
  2. 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).

  1. 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 denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. 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

  1. 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.

  2. 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!”.

  3. 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

  1. Ir a la página IAM y administración

    Ir a IAM y administración

  2. Haz clic en Otorgar acceso.

  3. En Principales nuevas, ingresa el ID de la cuenta de servicio que copiaste antes.

  4. Haga clic en Selecciona un rol.

  5. En Filtro, escribe Vertex AI Service Agent y, luego, selecciona ese rol.

  6. 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

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. 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 modelo
    • REGION: 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 valor STRING que especifica el nombre del modelo que se usará.
    • MAX_ITERATIONS: un valor INT64 que especifica la cantidad de pasos que se deben ejecutar para el ajuste supervisado. El valor MAX_ITERATIONS debe ser de entre 1 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 de MAX_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, especifica 200 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 especificas 101 para el valor MAX_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 valor STRING 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ón DATA_SPLIT_EVAL_FRACTION.
      • CUSTOM: los datos se dividen con la columna proporcionada en la opción DATA_SPLIT_COL. El valor DATA_SPLIT_COL debe ser el nombre de una columna de tipo BOOL. Las filas con un valor de TRUE o NULL se utilizan como datos de evaluación y las filas con un valor de FALSE se utilizan como datos de entrenamiento.
      • SEQ: divide los datos con la columna proporcionada en la opción DATA_SPLIT_COL. El valor DATA_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 valor FLOAT64 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 es 0.2.

      Usa esta opción cuando especifiques RANDOM o SEQ como el valor para la opción DATA_SPLIT_METHOD. Para personalizar la división de datos, puedes usar la opción DATA_SPLIT_METHOD con la opción DATA_SPLIT_EVAL_FRACTION.

    • DATA_SPLIT_COL: un valor STRING 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 especifiques CUSTOM o SEQ como el valor de la opción DATA_SPLIT_METHOD.
    • EVALUATION_TASK: un valor STRING 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 valor STRING 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 es prompt.
    • INPUT_LABEL_COLS: un valor ARRAY<<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 que label sea el valor predeterminado del argumento LABEL_COLUMN.
    • PROMPT_COLUMN: la columna de la tabla de datos de entrenamiento que contiene la instrucción para evaluar el contenido de la columna LABEL_COLUMN. Esta columna debe ser del tipo STRING o convertirse en STRING. Si especificas un valor para la opción INPUT_PROMPT_COL, debes especificar el mismo valor para PROMPT_COLUMN. De lo contrario, este valor debe ser prompt. Si tu tabla no tiene una columna prompt, 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 tipo STRING o convertirse en STRING. Si especificas un valor para la opción INPUT_LABEL_COLS, debes especificar el mismo valor para LABEL_COLUMN. De lo contrario, este valor debe ser label. Si tu tabla no tiene una columna label, 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

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. 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 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 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 especifica prompt_col, se usa la columna prompt en los datos de entrenamiento. Se muestra un error si no hay una columna llamada prompt.

      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 especifica input_label_cols, se usa la columna label en los datos de entrenamiento. Se muestra un error si no hay una columna llamada label.

    • TASK_TYPE: un valor STRING 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 valor INT64 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 es 128.
    • TEMPERATURE: un valor FLOAT64 en el rango [0.0,1.0] que controla el grado de aleatorización en la selección de tokens. El valor predeterminado es 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 para temperature pueden generar resultados más diversos o creativos. Un valor de 0 para temperature es determinístico, lo que significa que siempre se selecciona la respuesta de mayor probabilidad.

    • TOP_K: un valor INT64 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 es 40.
    • TOP_P: un valor FLOAT64 en el rango [0.0,1.0] ayuda a determinar qué tokens del grupo determinado por TOP_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 es 0.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 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 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ón PROMPT_COL cuando creas el modelo. De lo contrario, el nombre de la columna de atributos en el modelo es prompt de forma predeterminada, o puedes usar un alias para usar una columna con nombre diferente.
  • TOKENS: un valor INT64 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 es 128.
  • TEMPERATURE: un valor FLOAT64 en el rango [0.0,1.0] que controla el grado de aleatorización en la selección de tokens. El valor predeterminado es 1.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 para temperature pueden generar resultados más diversos o creativos. Un valor de 0 para temperature es determinístico, lo que significa que siempre se selecciona la respuesta de mayor probabilidad.

  • TOP_P: Un valor FLOAT64 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 es 0.95.
  • FLATTEN_JSON: un valor BOOL que determina si se debe mostrar el texto generado y los atributos de seguridad en columnas separadas. El valor predeterminado es FALSE.
  • STOP_SEQUENCES: un valor ARRAY<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 valor BOOL 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. Cuando flatten_json_output y este campo se configuran en True, se incluye una columna ml_generate_text_grounding_result adicional en los resultados, que proporciona las fuentes que el modelo usó para recopilar información adicional. El valor predeterminado es FALSE.
  • SAFETY_SETTINGS: Un valor ARRAY<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 especificar STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold) y STRUCT('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 seguridad BLOCK_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 tabla prompts 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 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 del mensaje.
  • TOKENS: un valor INT64 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 es 128.
  • TEMPERATURE: un valor FLOAT64 en el rango [0.0,1.0] que controla el grado de aleatorización en la selección de tokens. El valor predeterminado es 1.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 para temperature pueden generar resultados más diversos o creativos. Un valor de 0 para temperature es determinístico, lo que significa que siempre se selecciona la respuesta de mayor probabilidad.

  • TOP_P: Un valor FLOAT64 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 es 0.95.
  • FLATTEN_JSON: un valor BOOL que determina si se debe mostrar el texto generado y los atributos de seguridad en columnas separadas. El valor predeterminado es FALSE.
  • STOP_SEQUENCES: un valor ARRAY<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 valor BOOL 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. Cuando flatten_json_output y este campo se configuran en True, se incluye una columna ml_generate_text_grounding_result adicional en los resultados, que proporciona las fuentes que el modelo usó para recopilar información adicional. El valor predeterminado es FALSE.
  • SAFETY_SETTINGS: Un valor ARRAY<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 especificar STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold) y STRUCT('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 seguridad BLOCK_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 tabla articles.
  • 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));