Genera texto con un modelo de Gemini y la función ML.GENERATE_TEXT
En este instructivo, se muestra cómo crear un modelo remoto basado en el modelo gemini-2.0-flash
y, luego, cómo usar ese modelo con la función ML.GENERATE_TEXT
para extraer palabras clave y realizar análisis de opiniones en reseñas de películas de la tabla pública bigquery-public-data.imdb.reviews
.
Roles requeridos
Para ejecutar este instructivo, necesitas los siguientes roles de Identity and Access Management (IAM):
- Crear y usar conjuntos de datos, conexiones y modelos de BigQuery: Administrador de BigQuery (
roles/bigquery.admin
) - Otorga permisos a la cuenta de servicio de la conexión: Administrador de IAM del proyecto (
roles/resourcemanager.projectIamAdmin
).
Estos roles predefinidos contienen los permisos necesarios para realizar las tareas de este documento. Para ver los permisos exactos que son necesarios, expande la sección Permisos necesarios:
Permisos necesarios
- Crea un conjunto de datos:
bigquery.datasets.create
- Crea, delega y usa una conexión:
bigquery.connections.*
- Establece la conexión predeterminada:
bigquery.config.*
- Configura 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 o con otros roles predefinidos.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- BigQuery ML: You incur costs for the data that you process in BigQuery.
- Vertex AI: You incur costs for calls to the Vertex AI service that's represented by the remote model.
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Para obtener más información sobre los precios de BigQuery, consulta Precios de BigQuery en la documentación de BigQuery.
Para obtener más información sobre los precios de Vertex AI, consulta la página Precios de Vertex AI.
Antes de comenzar
-
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, and Vertex AI 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.
Crea un conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA.
Console
En la consola de Google Cloud , 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, ingresa
bqml_tutorial
.En Tipo de ubicación, selecciona Multirregión y, luego, EE.UU. (varias regiones en Estados Unidos).
Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.
bq
Para crear un conjunto de datos nuevo, usa el comando bq mk
con la marca --location
. Para obtener una lista completa de los parámetros posibles, consulta la
referencia del
comando bq mk --dataset
.
Crea un conjunto de datos llamado
bqml_tutorial
con la ubicación de los datos establecida enUS
y una descripción deBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
En lugar de usar la marca
--dataset
, el comando usa el acceso directo-d
. Si omites-d
y--dataset
, el comando crea un conjunto de datos de manera predeterminada.Confirma que se haya creado el conjunto de datos:
bq ls
API
Llama al método datasets.insert
con un recurso de conjunto de datos definido.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Permite trabajar con BigQuery DataFrames.
Antes de probar este ejemplo, sigue las instrucciones de configuración de BigQuery DataFrames en la guía de inicio rápido de BigQuery con BigQuery DataFrames. Para obtener más información, consulta la documentación de referencia de BigQuery DataFrames.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local.
Crear una conexión
Crea una conexión de recurso de Cloud 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 creaste en el paso anterior.
Puedes omitir este paso si tienes configurada una conexión predeterminada o si tienes el rol de administrador de BigQuery.
Crea una conexión de recurso 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 creaste en el paso anterior.
Selecciona una de las siguientes opciones:
Console
Ve a la página de BigQuery.
En el panel Explorador, haz clic en
Agregar datos:Se abrirá el diálogo Agregar datos.
En el panel Filtrar por, en la sección Tipo de fuente de datos, selecciona Aplicaciones empresariales.
También puedes ingresar
Vertex AI
en el campo Buscar fuentes de datos.En la sección Fuentes de datos destacadas, haz clic en Vertex AI.
Haz clic en la tarjeta de solución Vertex AI Models: BigQuery Federation.
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, ingresa 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 de tu proyecto de Google CloudCONNECTION_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 Google Cloud , completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto 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 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 permisos a la cuenta de servicio de las conexiones
Otorga a la cuenta de servicio de la conexión el rol de usuario de Vertex AI. Debes otorgar este rol en el mismo proyecto que creaste o seleccionaste en la sección Antes de comenzar. Si otorgas el rol en un proyecto diferente, se produce el error bqcx-1234567890-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource
.
Para otorgar el rol, sigue estos pasos:
Ir a la página IAM y administración
Haz clic en
Otorgar acceso.En el campo Principales nuevas, escribe el ID de la cuenta de servicio que copiaste antes.
En el campo Selecciona un rol, elige Vertex AI y, luego, selecciona Rol del usuario de Vertex AI.
Haz clic en Guardar.
Crea el modelo remoto
Crea un modelo remoto que represente un modelo de Vertex AI alojado:
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, ejecuta la siguiente declaración:
CREATE OR REPLACE MODEL `bqml_tutorial.gemini_model` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT = 'gemini-2.0-flash');
Reemplaza lo siguiente:
LOCATION
: la ubicación de la conexiónCONNECTION_ID
por el ID de la conexión de BigQueryCuando 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 ID de conexión, por ejemplo,
projects/myproject/locations/connection_location/connections/myconnection
.
La consulta tarda varios segundos en completarse, después de eso, el modelo gemini_model
aparece en el conjunto de datos bqml_tutorial
en el panel Explorador.
Debido a que la consulta usa una declaración CREATE MODEL
para crear un modelo, no hay resultados de consultas.
Realiza la extracción de palabras clave
Realiza la extracción de palabras clave en reseñas de películas de IMDB con el modelo remoto y la función ML.GENERATE_TEXT
:
En la consola de Google Cloud , ve a la página BigQuery.
En el Editor de consultas, ingresa la siguiente declaración para realizar la extracción de palabras clave en cinco reseñas de películas:
SELECT ml_generate_text_result['candidates'][0]['content'] AS generated_text, * EXCEPT (ml_generate_text_result) FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini_model`, ( SELECT CONCAT('Extract the key words from the text below: ', review) AS prompt, * FROM `bigquery-public-data.imdb.reviews` LIMIT 5 ), STRUCT( 0.2 AS temperature, 100 AS max_output_tokens));
El resultado es similar al siguiente, con las columnas no generadas omitidas para mayor claridad:
+----------------------------------------+-------------------------+----------------------------+-----+ | generated_text | ml_generate_text_status | prompt | ... | +----------------------------------------+-------------------------+----------------------------+-----+ | {"parts":[{"text":"## Key words:\n\n* | | Extract the key words from | | | **Negative sentiment:** \"terribly | | the text below: I had to | | | bad acting\", \"dumb story\", \"not | | see this on the British | | | even a kid would enjoy this\", | | Airways plane. It was | | | \"something to switch off\"\n* | | terribly bad acting and | | | **Context:** \"British Airways plane\" | | a dumb story. Not even | | | \n* **Genre:** \"movie\" (implied)... | | a kid would enjoy this... | | +----------------------------------------+-------------------------+----------------------------+-----+ | {"parts":[{"text":"## Key words:\n\n* | | Extract the key words from | | | **Movie:** The Real Howard Spitz\n* | | the text below: This is | | | **Genre:** Family movie\n* | | a family movie that was | | | **Broadcast:** ITV station, 1.00 am\n* | | broadcast on my local | | | **Director:** Vadim Jean\n* | | ITV station at 1.00 am a | | | **Main character:** Howard Spitz, | | couple of nights ago. | | | a children's author who hates... | | This might be a strange... | | +----------------------------------------+-------------------------+----------------------------+-----+
Los resultados incluyen las siguientes columnas:
generated_text
: es el texto generado.ml_generate_text_status
: el estado de la respuesta de la API para la fila correspondiente. Si la operación se realizó correctamente, este valor estará vacío.prompt
: el mensaje que se usa para el análisis de opiniones.- Todas las columnas de la tabla
bigquery-public-data.imdb.reviews
.
Opcional: En lugar de analizar manualmente el JSON que muestra la función, como lo hiciste en el paso anterior, usa el argumento
flatten_json_output
para mostrar el texto generado y los atributos de seguridad en columnas separadas.En el editor de consultas, ejecuta la siguiente declaración:
SELECT * FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini_model`, ( SELECT CONCAT('Extract the key words from the text below: ', review) AS prompt, * FROM `bigquery-public-data.imdb.reviews` LIMIT 5 ), STRUCT( 0.2 AS temperature, 100 AS max_output_tokens, TRUE AS flatten_json_output));
El resultado es similar al siguiente, con las columnas no generadas omitidas para mayor claridad:
+----------------------------------------+----------------------------------------------+-------------------------+----------------------------+-----+ | ml_generate_text_llm_result | ml_generate_text_rai_result | ml_generate_text_status | prompt | ... | +----------------------------------------+----------------------------------------------+-------------------------+----------------------------+-----+ | ## Keywords: | | | Extract the key words from | | | | | | the text below: I had to | | | * **Negative sentiment:** | | | see this on the British | | | "terribly bad acting", "dumb | | | Airways plane. It was | | | story", "not even a kid would | | | terribly bad acting and | | | enjoy this", "switch off" | | | a dumb story. Not even | | | * **Context:** "British | | | a kid would enjoy this... | | +----------------------------------------+----------------------------------------------+-------------------------+----------------------------+-----+ | ## Key words: | | | Extract the key words from | | | | | | the text below: This is | | | * **Movie:** The Real Howard Spitz | | | a family movie that was | | | * **Genre:** Family movie | | | broadcast on my local | | | * **Broadcast:** ITV, 1.00 | | | ITV station at 1.00 am a | | | am | | | couple of nights ago. | | | - ... | | | This might be a strange... | | +----------------------------------------+----------------------------------------------+-------------------------+----------------------------+-----+
Los resultados incluyen las siguientes columnas:
ml_generate_text_llm_result
: es el texto generado.ml_generate_text_rai_result
: los atributos de seguridad, junto con información sobre si el contenido está bloqueado debido a una de las categorías de bloqueo. Para obtener más información sobre los atributos de seguridad, consulta Configura filtros de seguridad.ml_generate_text_status
: el estado de la respuesta de la API para la fila correspondiente. Si la operación se realizó correctamente, este valor estará vacío.prompt
: el mensaje que se usa para la extracción de palabras clave.- Todas las columnas de la tabla
bigquery-public-data.imdb.reviews
.
Realiza análisis de opiniones
Realiza análisis de opiniones en reseñas de películas de IMDB con el modelo remoto y la función ML.GENERATE_TEXT
:
En la consola de Google Cloud , ve a la página BigQuery.
En el Editor de consultas, ejecuta la siguiente declaración para realizar un análisis de opiniones en cinco reseñas de películas:
SELECT ml_generate_text_result['candidates'][0]['content'] AS generated_text, * EXCEPT (ml_generate_text_result) FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini_model`, ( SELECT CONCAT( 'perform sentiment analysis on the following text, return one the following categories: positive, negative: ', review) AS prompt, * FROM `bigquery-public-data.imdb.reviews` LIMIT 5 ), STRUCT( 0.2 AS temperature, 100 AS max_output_tokens));
El resultado es similar al siguiente, con las columnas no generadas omitidas para mayor claridad:
+--------------------------------------------+-------------------------+----------------------------+-----+ | generated_text | ml_generate_text_status | prompt | ... | +--------------------------------------------+-------------------------+----------------------------+-----+ | {"parts":[{"text":"## Sentiment Analysis: | | perform sentiment analysis | | | Negative \n\nThis text expresses a | | on the following text, | | | strongly negative sentiment towards the | | return one the following | | | movie. Here's why:\n\n* **Negative | | negative: I had to see | | | like \"terribly,\" \"dumb,\" and | | this on the British | | | \"not even\" to describe the acting... | | Airways plane. It was... | | +--------------------------------------------+-------------------------+----------------------------+-----+ | {"parts":[{"text":"## Sentiment Analysis: | | perform sentiment analysis | | | Negative \n\nThis review expresses a | | on the following text, | | | predominantly negative sentiment towards | | return one the following | | | the movie \"The Real Howard Spitz.\" | | categories: positive, | | | Here's why:\n\n* **Criticism of the film's | | negative: This is a family | | | premise:** The reviewer finds it strange | | movie that was broadcast | | | that a film about a children's author... | | on my local ITV station... | | +--------------------------------------------+-------------------------+----------------------------+-----+
Los resultados incluyen las mismas columnas documentadas para Realizar la extracción de palabras clave.
Limpia
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.