1. Introducción
¿Te gusta leer libros, pero te abruma la cantidad de opciones? Imagina tener una app potenciada por IA que no solo recomiende la lectura perfecta, sino que también ofrezca un resumen conciso según el género que elijas para darte una idea de la esencia del libro. En este codelab, te guiaré para que compiles una app de este tipo con BigQuery, Gemini y Cloud Functions con la tecnología de Gemini.
Descripción general del proyecto
Nuestro caso de uso se centra en estos 4 componentes clave:
- Base de datos de libros: El vasto conjunto de datos públicos de BigQuery de libros de archivo en Internet funcionará como nuestro catálogo de libros completo.
- Motor de resúmenes con IA: Google Cloud Functions, equipado con el modelo de lenguaje Gemini 1.0 Pro, generará resúmenes detallados y personalizados para las solicitudes de los usuarios.
- Integración con BigQuery: Una función remota en BigQuery que llama a nuestra Cloud Function para ofrecer resúmenes de libros y temas a pedido.
- Interfaz de usuario: Una app web alojada en Cloud Run que ofrecerá una aplicación web para que los usuarios vean los resultados.
Dividiremos la implementación en 3 codelabs:
Codelab 1: Usa Gemini para compilar una Cloud Function en Java para una aplicación de Gemini.
Codelab 2: Usa Gemini para compilar apps de SQL con BigQuery y la IA generativa.
Codelab 3: Usa Gemini para crear una aplicación web de Spring Boot en Java que interactúe con BigQuery.
2. Usa Gemini para compilar apps de SQL con BigQuery y la IA generativa
Qué compilarás
Crearás un
- Modelo remoto en BigQuery que invoca el extremo text-bison-32k de Vertex AI para identificar el género (o tema) del libro a partir de una lista de palabras clave separadas “;” en la tabla.
- Función remota en BigQuery que invocará la Cloud Function de IA generativa implementada de forma remota.
- Usa el modelo y la función remotos para resumir el tema y el texto de un libro con consultas de SQL y escribir los resultados en una tabla nueva del conjunto de datos de biblioteca.
- Implementarás estos pasos con la ayuda de Gemini.
3. Requisitos
- Un navegador, como Chrome o Firefox.
- Un proyecto de Google Cloud con la facturación habilitada.
- Resulta útil si tienes implementada una Cloud Function como parte del codelab de la parte 1 Usa Gemini para compilar una Cloud Function en Java para una aplicación de Gemini.
- Condicional: Si en este momento tienes acceso al vínculo sin cargo de créditos de Google Cloud (que te proporcionó el organizador del taller), sigue las instrucciones de la siguiente página para completar los pasos ACTIVACIÓN DE CRÉDITOS y CREACIÓN DEL PROYECTO con antelación. Si no tienes ese vínculo, continúa con los pasos que se indican a continuación para los requisitos previos del proyecto y la facturación:
Crea tu proyecto
Puedes omitir los pasos que se indican a continuación si ya activaste una cuenta de facturación y creaste un proyecto con el vínculo mencionado en el paso condicional anterior.
- En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
- Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
Activa Cloud Shell
- Usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud y que viene precargado con bq:
En la consola de Cloud, haz clic en Activar Cloud Shell en la esquina superior derecha:
- Una vez que te conectes a Cloud Shell, deberías ver que ya se te autenticó y que el proyecto ya se configuró con el ID de tu proyecto. En Cloud Shell, ejecuta el siguiente comando para confirmar que tienes la autenticación:
gcloud auth list
- En Cloud Shell, ejecuta el siguiente comando para confirmar que el comando gcloud conoce tu proyecto.
gcloud config list project
- Si tu proyecto no está configurado, usa el siguiente comando para hacerlo:
gcloud config set project <YOUR_PROJECT_ID>
Consulta la documentación para ver los comandos y el uso de gcloud.
4. Habilita Gemini para Google Cloud y las APIs necesarias
Habilitar Gemini
- Navega a Marketplace de Gemini para Google Cloud para habilitar la API. También puedes usar el siguiente comando:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Visita la página de Gemini y haz clic en "Comenzar a chatear".
Habilita otras APIs necesarias
¿Cómo haríamos eso? Preguntémosle a Gemini, ¿de acuerdo? Pero antes de eso, recuerda lo siguiente:
Nota: Los LLMs no son determinísticos. Así que, mientras pruebas estas instrucciones, la respuesta que recibas podría ser diferente a las que se muestran en la captura de pantalla.
Para ir a la consola de chat de Gemini, haz clic en el ícono "Abrir Gemini" que está en la esquina superior derecha, junto a la barra de búsqueda, en la consola de Google Cloud.
Escribe esta pregunta en la sección "Ingresa una instrucción aquí":
¿Cómo habilito las APIs de BigQuery y Vertex AI con el comando gcloud?
Obtienes la respuesta como se ve en la siguiente imagen:
Cópiala (puedes usar el ícono de copiar en la parte superior del fragmento de comando) y ejecútala en la terminal de Cloud Shell para habilitar los servicios correspondientes:
- bigquery.googleapis.com
- aiplatform.googleapis.com
5. Explora el conjunto de datos públicos de BigQuery para los datos de los libros
Para comenzar, familiarízate con el conjunto de datos públicos de BigQuery que contiene información de numerosos libros de archivo de Internet.
Puedes encontrar este conjunto de datos públicos en el panel del explorador de BigQuery. Podrás encontrarlo a la izquierda cuando llegues a la consola de BigQuery.
Escribe "gdelt-bq" o "internetarchivebooks" en la barra de búsqueda y haz clic en BUSCAR EN TODOS LOS PROYECTOS. Expande el resultado y destaca libros de archivo de Internet como se muestra en la siguiente imagen:
.
Expande el conjunto de datos, haz clic en gdelt-bq.internetarchivebooks y, luego, obtén una vista previa de los datos de la tabla 1920. Esta tabla incluye libros de archivo del año 1920.
Para ver el esquema que usaremos en secciones posteriores, ejecuta la siguiente consulta:
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
Utilizaremos los siguientes tres campos para nuestro codelab:
- BookMeta_Title (título)
- Themes (temas separados por ";")
- BookMeta_FullText (texto completo del libro)
6. Crea un nuevo conjunto de datos de BigQuery llamado biblioteca
Queremos crear un conjunto de datos en el proyecto para almacenar todos los objetos de base de datos y análisis que crearemos en este lab. Preguntemos a Gemini cómo crear un conjunto de datos de BigQuery. Ya deberías tener el chat de Gemini abierto en otra pestaña de tu navegador desde el paso de habilitación de las APIs. De lo contrario, puedes hacerlo ahora. Ve a la consola de Google Cloud navegando a https://console.cloud.google.com. Deberías ver el ícono de Gemini junto a la barra de búsqueda en la parte superior. Haz clic en él para abrir el chat.
Ingresa la instrucción como se muestra a continuación.
Esta es mi instrucción:
How to create a BigQuery dataset?
Esta es la respuesta:
Sigamos los pasos que se describen en la respuesta para crear un conjunto de datos llamado "biblioteca" en tu proyecto activo.
Para crear un conjunto de datos de BigQuery, sigue estos pasos:
- Ve a la página de BigQuery en la consola de Google Cloud.
- En el panel Explorador, haz clic en el ID de tu proyecto.
- Haz clic en Crear conjunto de datos (debería aparecer en las opciones enumeradas al hacer clic en los 3 puntos junto al ID del proyecto).
- Ingresa el nombre del conjunto de datos como “biblioteca”.
- Establece la ubicación como "EE.UU. (multirregión)".
- Para los pasos 3, 4, 5 y 6 de la respuesta, deja las opciones predeterminadas.
- Haz clic en CREAR CONJUNTO DE DATOS.
Se creará tu conjunto de datos y aparecerá en el panel Explorador. El conjunto de datos de la “biblioteca” puede verse de la siguiente manera:
7. Crea un modelo remoto para invocar Vertex AI LLM (text-bison-32k)
A continuación, debemos crear un modelo en BigQuery que invoque el modelo “text-bison-32k” de Vertex AI. El modelo ayudará a identificar un tema común, el contexto del libro, a partir de la lista de palabras clave de cada libro del conjunto de datos.
Preguntémosle a Gemini. Para ello, navega a la pestaña en la que tienes abierta la consola de chat de Gemini y escribe el siguiente mensaje:
¿Cómo conectarás BigQuery y Vertex AI para llamar al extremo de LLM (text-bison-32k) en BigQuery?
La respuesta es la siguiente:
La respuesta incluye información precisa, como los pasos que incluyen el uso de la sentencia CREATE MODEL, la conexión de BigQuery y la definición del extremo. La sentencia de consulta es precisa para mí, pero eso no significa que recibirás el mismo resultado exacto, ya que este es un modelo de lenguaje extenso y es posible que obtengas respuestas en diferentes formatos, volúmenes y profundidades. Si no ves todos los detalles que recibí, no dudes en hacer preguntas adicionales en el chat. Por ejemplo, brinda más detalles sobre cómo crear el recurso de conexión o por qué falta ese atributo, cómo me conecto desde BigQuery a Vertex AI, etcétera.
Este es un ejemplo de mensaje de seguimiento (utilízalo solo si necesitas más información; si la primera respuesta que recibiste es suficiente, continúa con ella):
What about the connection? How will I connect from BigQuery to Vertex AI?
A continuación, se muestra la respuesta:
Sigamos los pasos de la respuesta para crear una conexión de BigQuery:
- Navega a la consola de BigQuery.
- En el panel Explorador de BigQuery, haz clic en el botón "+AGREGAR" y, luego, en "Conexiones a fuentes de datos externas".
- En este punto, se te pedirá que habilites la API de BigQuery Connection. Haz clic en HABILITAR API:
- Haz clic en "Conexiones a fuentes de datos externas" y deberías ver la diapositiva Fuente de datos externa, como se muestra a continuación . En la lista de fuentes externas, selecciona la fuente “Vertex AI”.
- Escribe un ID de conexión (puede ser el que elijas, pero, por ahora, configúralo como "bq-vx") y la región (multirregión "US").
- Haz clic en “Crear conexión”.
- Después de crear la conexión, haz clic en "Ir a la conexión".
- En la página de información de conexión, copia el ID de la cuenta de servicio, ya que lo usaremos en los pasos posteriores.
- Ahora que se creó la conexión, asigne permisos a este ID de cuenta de servicio que copiamos para poder usar Vertex AI.
- En la página de la consola de Google Cloud, abre el IAM de Google Cloud o navega al vínculo.
- Haz clic en Otorgar acceso en la sección Ver por principales.
- En el cuadro de diálogo Otorgar acceso, ingresa el ID de la cuenta de servicio que anotamos antes en el cuadro de texto Principales nuevas.
- Establece el rol como "Usuario de Vertex AI".
Se crea la conexión requerida. Se otorga el permiso necesario para que el principal (cuenta de servicio de la conexión) use Vertex AI desde BigQuery.
Ejecuta la siguiente declaración DDL(lenguaje de definición de datos) que representa la creación de un objeto DB, en este caso, MODEL en el editor de consultas de BigQuery.
CREATE OR REPLACE MODEL bookshelf.llm_model
REMOTE WITH CONNECTION `us.bq-vx`
OPTIONS (ENDPOINT = 'text-bison-32k');
Como alternativa al paso anterior, puedes pedirle a Gemini que sugiera una consulta para crear el modelo de invocación de "text-bison-32k".
Nota: Si usaste un nombre diferente para tu conexión, reemplaza "us.bq-vx" por ese nombre en la sentencia DDL anterior. Esta consulta crea el modelo remoto en el conjunto de datos, "biblioteca", que creamos antes.
8. Crea una función remota que invoque la función de Cloud Functions de Java
Ahora, crearemos una función remota en BigQuery con la Cloud Function de Java que creamos en el codelab 1 de esta serie para implementar el modelo de Gemini. Esta función remota se usará para resumir el contenido del libro.
Nota: Si no completaste este codelab o no implementaste esta función de Cloud Functions, puedes omitir este paso y pasar al siguiente tema (que es Resumir el tema de los libros con el modelo remoto).
Ve a la consola de BigQuery y pega la siguiente declaración DDL en el Editor de consultas (puedes crear una nueva pestaña del Editor de consultas haciendo clic en el botón +)
A continuación, se muestra la DDL que puedes copiar. Recuerda reemplazar el extremo por el extremo de Cloud Function que implementaste (creado a partir del codelab 1). Si no tienes un extremo, puedes reemplazar los caracteres enmascarados en la siguiente DDL por "abis-345004" con fines de demostración.
CREATE OR REPLACE FUNCTION
`bookshelf.GEMINI_REMOTE_CALL` (context STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.bq-vx`
OPTIONS (
endpoint = 'https://us-central1-****-******.cloudfunctions.net/remote-gemini-call' );
Navega a la consola de BigQuery en la plataforma de Google Cloud y abre una nueva pestaña del editor de consultas. En el editor de consultas de BigQuery, pega la sentencia DDL anterior. Después de ejecutar la consulta, puedes ver la siguiente respuesta:
Ahora que se crearon el modelo y la función, probemos estos dos objetos de BigQuery ejecutándolos en una consulta SELECT.
9. Resumir temas con el modelo remoto
Usemos el modelo remoto que creamos “biblioteca.llm_model” para generar una palabra clave consolidada para el libro a partir de la lista de temas proporcionada:
SELECT * FROM ML.GENERATE_TEXT(MODEL `bookshelf.llm_model`,
(
SELECT
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` LIMIT 1
));
Paso opcional: El resultado para el campo de resultado generado por LLM está anidado. Agreguemos algunos parámetros de LLM y el atributo "flatten_json_output" a la consulta. El uso del atributo "flatten_json_output" ayuda a quitar la estructura anidada del campo de resultados generado por el LLM.
SELECT * FROM ML.GENERATE_TEXT ( MODEL `bookshelf.llm_model`, (
SELECT CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt FROM `gdelt-bq.internetarchivebooks.1920` limit 1),
STRUCT( 0.2 AS temperature, 100 AS max_output_tokens, TRUE AS flatten_json_output));
Ahora, ejecuta la consulta SELECT en el editor de BigQuery y verifica el resultado. Limitamos el resultado de la consulta a 1 para las pruebas. El resultado se muestra de la siguiente manera:
10. Resume el texto completo de los libros con la función remota
Ahora, intentaremos resumir el libro ejecutando la Cloud Function bookshelf.GEMINI_REMOTE_CALL que creamos antes.
Nota: Si omites la creación de la función remota (el tema anterior en este codelab), recuerda omitir también la llamada a la función bookshelf.GEMINI_REMOTE_CALL en la consulta SELECT.
Usa la consulta SELECT que llama a la función remota (GEMINI_REMOTE_CALL) que creamos antes. La llamada a esta función, GEMINI_REMOTE_CALL, incluye una instrucción que solicita un resumen del texto del libro:
select BookMeta_Title, `bookshelf.GEMINI_REMOTE_CALL` (
CONCAT('This is about a book. The title of the book is this: ', BookMeta_Title, ' . The theme of the book is as follows: ', Themes, 'The following text contains an excerpt from the book. Summarize it in less than 5 lines to create the gist. If you do not have a summary, use the title and themes to make up a short summary. DO NOT RETURN EMPTY RESPONSE. ', SUBSTR(BookMeta_FullText, 5000, 10000))) Summary
from `gdelt-bq.internetarchivebooks.1920` where Themes like '%EDUCATION%' limit 1;
Ten en cuenta que tomamos una subcadena del texto completo del libro para generar el resumen.
El resultado de la consulta es el siguiente:
11. Almacena los datos de los libros en una tabla
Ahora que probamos ambas llamadas a LLM (modelo y función remotos) desde BigQuery solo con consultas SQL, creemos una tabla de BigQuery para almacenar los datos de la "biblioteca" con estadísticas de temas, en el mismo conjunto de datos que el modelo y la función remotos.
En realidad, podríamos incluir la llamada al modelo de LLM y la llamada a la función remota en este paso. Sin embargo, como marcamos la llamada a función remota (que invoca la función de Cloud Functions) como un paso opcional, solo usaremos las estadísticas del modelo remoto.
Esta es la consulta que usaremos:
SELECT
BookMeta_Title, Themes, ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output));
Cuando ejecutas la consulta en el editor de BigQuery, el resultado es el siguiente:
Ahora, vamos a pedirle a Gemini que cree una tabla llamada “biblioteca.books” a partir de la consulta anterior. Navega a la consola de chat de Gemini en la consola de Google Cloud y, luego, ingresa el siguiente mensaje.
Esta es la indicación que usaremos:
Create a BigQuery table named bookshelf.books from this SELECT query:
SELECT
BookMeta_Title, Themes, ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output));
La respuesta del chat de Gemini es la siguiente:
Esta es la consulta en caso de que quieras copiarla directamente desde aquí:
CREATE TABLE bookshelf.books (
BookMeta_Title STRING,
Themes STRING,
ml_generate_text_llm_result STRING
) AS (
SELECT
BookMeta_Title,
Themes,
ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,
BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920`
LIMIT 5
),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output
)
)
);
Después de ejecutar la consulta en el Editor de BigQuery, el resultado es el siguiente:
Eso es todo. Ahora, consulta la tabla y prueba los datos para obtener más estadísticas.
12. ¡Felicitaciones!
¡Felicitaciones! Completamos correctamente lo siguiente y también usamos Gemini en algunos pasos del proceso:
- Creaste un modelo remoto en BigQuery que invoca el extremo "text-bison-32k" de Vertex AI para identificar el género (o tema) del libro a partir de una lista de palabras clave separadas por ";" en la tabla.
- Creaste una función remota en BigQuery que invocará esta Cloud Function de IA generativa implementada de forma remota. Esta función tomará la instrucción como entrada y mostrará una cadena que resuma el libro en 5 líneas.
- Usaste el modelo y la función remotos para resumir el tema y el texto de un libro con consultas de SQL y escribir los resultados en una tabla nueva del conjunto de datos de la biblioteca.
- Como tarea de seguimiento, intenta usar Gemini para obtener la sentencia SQL que borra los objetos creados en BigQuery. En este artículo, se abordará el paso de limpieza.