Genera texto con la función ML.GENERATE_TEXT

En este documento, se muestra cómo crear un modelo remoto de BigQuery ML que hace referencia al modelo de base de Vertex AI. Luego, puedes usar ese modelo junto con la función ML.GENERATE_TEXT para analizar texto o contenido visual en una tabla de BigQuery.

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. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

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

    Enable the APIs

Si deseas usar ML.GENERATE_TEXT con un modelo gemini-pro-vision para analizar contenido visual en una tabla de objetos, debes tener una reserva de Enterprise o Enterprise Plus. Para obtener más información, consulta Crea reservas.

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. Haga clic en Crear conexión.

  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 al siguiente:

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

Terraform

Agrega la siguiente sección a tu archivo main.tf.

 ## This creates a cloud resource connection.
 ## Note: The cloud resource nested object has only one output only field - serviceAccountId.
 resource "google_bigquery_connection" "connection" {
    connection_id = "CONNECTION_ID"
    project = "PROJECT_ID"
    location = "REGION"
    cloud_resource {}
}        
Reemplaza lo siguiente:

  • CONNECTION_ID: Es un ID para tu conexión.
  • PROJECT_ID: El ID del proyecto de Google Cloud.
  • REGION: tu región de conexión

Otorga acceso a la cuenta de servicio

Otorga permiso a tu cuenta de servicio para usar la conexión. Si no se otorga permiso, se produce un error. Selecciona una de las opciones siguientes:

Console

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

    Ir a IAM y administración

  2. Haga clic en Agregar.

    Se abre el cuadro de diálogo Agregar principales.

  3. En el campo Principales nuevas (New principals), ingresa el ID de la cuenta de servicio que copiaste antes.

  4. En el campo Selecciona un rol, selecciona Vertex AI y, luego, Usuario de Vertex AI.

  5. 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.user' --condition=None

Reemplaza lo siguiente:

  • PROJECT_NUMBER: Es el número de tu proyecto.
  • MEMBER: el ID de la cuenta de servicio que copiaste antes

Crear un modelo

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

    Ir a BigQuery

  2. Crea un modelo remoto con el editor de SQL:

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

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto
    • DATASET_ID: El ID del conjunto de datos que contendrá el modelo. Este conjunto de datos debe estar en la misma ubicación que la conexión que usas
    • MODEL_NAME: Es el nombre del modelo.
    • REGION: la región que usa la conexión.
    • CONNECTION_ID por el ID de la conexión de BigQuery

      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: Es el nombre del modelo de Vertex AI compatible que se usará. Por ejemplo, ENDPOINT='gemini-pro'.

      Para algunos tipos de modelos, puedes especificar una versión particular del modelo si agregas @version al nombre del modelo. Por ejemplo, text-bison@001. A fin de obtener información sobre las versiones de modelo compatibles para diferentes tipos de modelos, consulta ENDPOINT.

Genera texto a partir de datos de texto mediante una instrucción desde una tabla

Genera texto con la función ML.GENERATE_TEXT con un modelo remoto basado en un modelo de texto de la API de Vertex AI Gemini o la API de PaLM de Vertex AI y una instrucción de una columna de la tabla:

gemini-pro

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

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 llamada prompt, 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 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.
  • 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.

Ejemplo

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.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      40 AS top_k, TRUE AS flatten_json_output));

text-bison

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

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 llamada prompt, 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,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.
  • 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.

Ejemplo

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.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      40 AS top_k, TRUE AS flatten_json_output));

text-bison32

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

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 llamada prompt, 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 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.
  • 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.

Ejemplo

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.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      40 AS top_k, TRUE AS flatten_json_output));

text-unicorn

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

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 llamada prompt, 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,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.
  • 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.

Ejemplo

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.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      40 AS top_k, TRUE AS flatten_json_output));

Genera texto a partir de datos de texto mediante una instrucción desde una consulta

Genera texto con la función ML.GENERATE_TEXT con un modelo remoto basado en un modelo de texto compatible de la API de Gemini o de la API de PaLM y una consulta que proporcione la instrucción:

gemini-pro

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

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

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.llm_model`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(
      0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p,
      15 AS top_k, TRUE AS flatten_json_output));

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.llm_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      30 AS top_k, FALSE AS flatten_json_output));

text-bison

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

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,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.
  • 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.

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.llm_model`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(
      0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p,
      15 AS top_k, TRUE AS flatten_json_output));

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.llm_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      30 AS top_k, FALSE AS flatten_json_output));

text-bison32

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

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

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.llm_model`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(
      0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p,
      15 AS top_k, TRUE AS flatten_json_output));

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.llm_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      30 AS top_k, FALSE AS flatten_json_output));

text-unicorn

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

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,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.
  • 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.

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.llm_model`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(
      0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p,
      15 AS top_k, TRUE AS flatten_json_output));

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.llm_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      30 AS top_k, FALSE AS flatten_json_output));

Genera texto que describa el contenido visual

Genera texto con la función ML.GENERATE_TEXT con un modelo remoto basado en un modelo multimodal gemini-pro-vision:

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

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 de objetos que incluye el contenido visual que se analizará. Para obtener más información sobre qué tipos de contenido visual puedes analizar, consulta Contenido visual admitido.

    El bucket de Cloud Storage que usa la tabla de objetos debe estar en el mismo proyecto en el que creaste el modelo y en el que llamas a la función ML.GENERATE_TEXT.

  • PROMPT: la instrucción que se usará para analizar el contenido visual.
  • 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,2048]. 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 2048.
  • 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.4.

    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 32.
  • 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.
  • 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: Es un valor ARRAY<STRING> que quita las strings especificadas si se incluyen en respuestas del modelo. Las strings coinciden de forma exacta, incluido el uso de mayúsculas. El valor predeterminado es un array vacío.

Ejemplo

En este ejemplo, se analiza el contenido visual de una tabla de objetos llamada videos y se describe el contenido de cada video:

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