Realiza una búsqueda semántica y una generación de aumento de recuperación
En este instructivo, se explica el proceso completo para crear y usar incorporaciones de texto, lo que incluye usar índices vectoriales para mejorar el rendimiento de la búsqueda.
En este instructivo, se abarcan las siguientes tareas:
- Crea un modelo remoto de BigQuery ML en un modelo de incorporación de Vertex AI.
- Usar el modelo remoto con la
función
ML.GENERATE_EMBEDDING
para generar incorporaciones a partir de texto en una tabla de BigQuery - Crear un índice vectorial para indexar las incorporaciones.
- Usar la
función
VECTOR_SEARCH
con las incorporaciones para buscar texto similar - Realizar la generación de aumento de recuperación (RAG) a través de la generación de texto con la
función
ML.GENERATE_TEXT
y el uso de los resultados de la búsqueda vectorial para aumentar la entrada de instrucciones y mejorar los resultados.
En este instructivo, se usa la tabla pública de BigQuery
patents-public-data.google_patents_research.publications
.
Roles y permisos requeridos
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
En este instructivo, los permisos de IAM necesarios para las operaciones de BigQuery restantes se incluyen en los siguientes dos roles:
- Editor de datos de BigQuery (
roles/bigquery.dataEditor
) para crear modelos, índices y tablas - Usuario de BigQuery (
roles/bigquery.user
) para ejecutar trabajos de BigQuery.
- Editor de datos de BigQuery (
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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
Crea un conjunto de datos
Crea un conjunto de datos de BigQuery para almacenar tu modelo de AA:
En la consola de Google Cloud, ve a la página de 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).
Los conjuntos de datos públicos se almacenan en la multirregión
US
. Para que sea más simple, almacena tu conjunto de datos en la misma ubicación.Deja la configuración predeterminada restante como está y haz clic en Crear conjunto de datos.
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.
Selecciona una de las opciones siguientes:
Console
Ve a la página de BigQuery.
Para crear una conexión, haz clic en
Agregar y, luego, en Conexiones a fuentes de datos externas.En la lista Tipo de conexión, selecciona Modelos remotos de Vertex AI, funciones remotas y BigLake (Cloud Resource).
En el campo ID de conexión, escribe un nombre para tu conexión.
Haz clic en Crear conexión (Create connection).
Haz clic en Ir a la conexión.
En el panel Información de conexión, copia el ID de la cuenta de servicio para usarlo en un paso posterior.
bq
En un entorno de línea de comandos, crea una conexión:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
El parámetro
--project_id
anula el proyecto predeterminado.Reemplaza lo siguiente:
REGION
: tu región de conexiónPROJECT_ID
: El ID del proyecto de Google Cloud.CONNECTION_ID
: Es un ID para tu conexión.
Cuando creas un recurso de conexión, BigQuery crea una cuenta de servicio del sistema única y la asocia con la conexión.
Solución de problemas: Si recibes el siguiente error de conexión, actualiza el SDK de Google Cloud:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
Recupera y copia el ID de cuenta de servicio para usarlo en un paso posterior:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
El resultado es similar a este:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
Usa el recurso google_bigquery_connection
.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
En el siguiente ejemplo, se crea una conexión de recursos de Cloud llamada my_cloud_resource_connection
en la región US
:
Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf
, por ejemplo,main.tf
. En este instructivo, el archivo se denominamain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tf
recién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgrade
para usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yes
cuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
Otorga acceso a la cuenta de servicio
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 para la generación de incorporaciones de texto
Crea un modelo remoto que represente un modelo de generación de incorporación de texto de Vertex AI alojado:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente declaración:
CREATE OR REPLACE MODEL `bqml_tutorial.embedding_model` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT = 'text-embedding-004');
Reemplaza lo siguiente:
LOCATION
: la ubicación de la conexiónCONNECTION_ID
por el ID de la conexión de BigQueryCuando veas los detalles de conexión en la consola de Google Cloud, el
CONNECTION_ID
es el valor en la última sección del ID de conexión completamente calificado que se muestra en ID de conexión, por ejemploprojects/myproject/locations/connection_location/connections/myconnection
La consulta tarda varios segundos en completarse, después de eso, el modelo
embedding_model
aparece en el conjunto de datosbqml_tutorial
en el panel Explorador. Debido a que la consulta usa una declaraciónCREATE MODEL
para crear un modelo, no hay resultados de consultas.
Generar incorporaciones de texto
Genera incorporaciones de texto a partir de resúmenes de patentes con la
función ML.GENERATE_EMBEDDING
y, luego, escríbelos en una tabla de BigQuery para que se puedan
buscar.
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente declaración:
CREATE OR REPLACE TABLE `bqml_tutorial.embeddings` AS SELECT * FROM ML.GENERATE_EMBEDDING( MODEL `bqml_tutorial.embedding_model`, ( SELECT *, abstract AS content FROM `patents-public-data.google_patents_research.publications` WHERE LENGTH(abstract) > 0 AND LENGTH(title) > 0 AND country = 'Singapore' ) ) WHERE LENGTH(ml_generate_embedding_status) = 0;
La generación de embedding con la función ML.GENERATE_EMBEDDING
puede fallar debido a cuotas de Vertex AI LLM o a la falta de disponibilidad del servicio. Los detalles del error se muestran en la columna ml_generate_embedding_status
. Una columna ml_generate_embedding_status
vacía indica que la generación de embeddings se realizó de forma correcta.
Para conocer métodos alternativos de generación de incorporaciones de texto en BigQuery, consulta el instructivo Incorpora texto con modelos de TensorFlow previamente entrenados.
Crea un índice vectorial
Para crear un índice vectorial, usa la declaración de lenguaje de definición de datos (DDL) CREATE VECTOR INDEX
:
Ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente instrucción de SQL:
CREATE OR REPLACE VECTOR INDEX my_index ON `bqml_tutorial.embeddings`(ml_generate_embedding_result) OPTIONS(index_type = 'IVF', distance_type = 'COSINE', ivf_options = '{"num_lists":500}')
Verifica la creación de índices vectoriales
El índice vectorial se propaga de forma asíncrona. Para verificar si el índice está
listo para usarse, consulta la
vista INFORMATION_SCHEMA.VECTOR_INDEXES
y verifica que el valor de la columna coverage_percentage
sea mayor que 0
y que el valor de la columna last_refresh_time
no sea NULL
.
Ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente instrucción de SQL:
SELECT table_name, index_name, index_status, coverage_percentage, last_refresh_time, disable_reason FROM `PROJECT_ID.bqml_tutorial.INFORMATION_SCHEMA.VECTOR_INDEXES`
Reemplaza
PROJECT_ID
con el ID del proyecto.
Realiza una búsqueda de similitud de texto con el índice vectorial
Usa la función VECTOR_SEARCH
para buscar las 5 patentes relevantes principales que coincidan con las incorporaciones generadas a partir de una consulta de texto. El modelo que uses para generar las incorporaciones en esta consulta debe ser el mismo que usas para generar las incorporaciones en la tabla con la que comparas; de lo contrario, los resultados de la búsqueda no serán precisos.
Ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente instrucción de SQL:
SELECT query.query, base.publication_number, base.title, base.abstract FROM VECTOR_SEARCH( TABLE `bqml_tutorial.embeddings`, 'ml_generate_embedding_result', ( SELECT ml_generate_embedding_result, content AS query FROM ML.GENERATE_EMBEDDING( MODEL `bqml_tutorial.embedding_model`, (SELECT 'improving password security' AS content)) ), top_k => 5, options => '{"fraction_lists_to_search": 0.01}')
El resultado es similar al siguiente:
+-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+ | query | publication_number | title | abstract | +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+ | improving password security | SG-120868-A1 | Data storage device security method and a... | Methods for improving security in data stora... | | improving password security | SG-10201610585W-A | Passsword management system and process... | PASSSWORD MANAGEMENT SYSTEM AND PROCESS ... | | improving password security | SG-148888-A1 | Improved system and method for... | IMPROVED SYSTEM AND METHOD FOR RANDOM... | | improving password security | SG-194267-A1 | Method and system for protecting a password... | A system for providing security for a... | | improving password security | SG-120868-A1 | Data storage device security... | Methods for improving security in data... | +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
Crea el modelo remoto para la generación de texto
Crea un modelo remoto que represente un modelo de generación de texto de Vertex AI alojado:
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente declaración:
CREATE OR REPLACE MODEL `bqml_tutorial.text_model` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT = 'gemini-1.5-flash-002');
Reemplaza lo siguiente:
LOCATION
: la ubicación de la conexiónCONNECTION_ID
por el ID de la conexión de BigQueryCuando veas los detalles de conexión en la consola de Google Cloud, el
CONNECTION_ID
es el valor en la última sección del ID de conexión completamente calificado que se muestra en ID de conexión, por ejemploprojects/myproject/locations/connection_location/connections/myconnection
La consulta tarda varios segundos en completarse, después de eso, el modelo
text_model
aparece en el conjunto de datosbqml_tutorial
en el panel Explorador. Debido a que la consulta usa una declaraciónCREATE MODEL
para crear un modelo, no hay resultados de consultas.
Genera texto aumentado por resultados de la búsqueda vectorial
Proporciona los resultados de la búsqueda como instrucciones para generar texto con la
función ML.GENERATE_TEXT
.
En la consola de Google Cloud, ve a la página de BigQuery.
En el editor de consultas, ejecuta la siguiente declaración:
SELECT ml_generate_text_llm_result AS generated, prompt FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.text_model`, ( SELECT CONCAT( 'Propose some project ideas to improve user password security using the context below: ', STRING_AGG( FORMAT("patent title: %s, patent abstract: %s", base.title, base.abstract), ',\n') ) AS prompt, FROM VECTOR_SEARCH( TABLE `bqml_tutorial.embeddings`, 'ml_generate_embedding_result', ( SELECT ml_generate_embedding_result, content AS query FROM ML.GENERATE_EMBEDDING( MODEL `bqml_tutorial.embedding_model`, (SELECT 'improving password security' AS content) ) ), top_k => 5, options => '{"fraction_lists_to_search": 0.01}') ), STRUCT(600 AS max_output_tokens, TRUE AS flatten_json_output));
El resultado es similar al siguiente:
+------------------------------------------------+------------------------------------------------------------+ | generated | prompt | +------------------------------------------------+------------------------------------------------------------+ | These patents suggest several project ideas to | Propose some project ideas to improve user password | | improve user password security. Here are | security using the context below: patent title: Active | | some, categorized by the patent they build | new password entry dialog with compact visual indication | | upon: | of adherence to password policy, patent abstract: | | | An active new password entry dialog provides a compact | | **I. Projects based on "Active new password | visual indication of adherence to password policies. A | | entry dialog with compact visual indication of | visual indication of progress towards meeting all | | adherence to password policy":** | applicable password policies is included in the display | | | and updated as new password characters are being... | +------------------------------------------------+------------------------------------------------------------+
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.
¿Qué sigue?
- Prueba el instructivo Cómo analizar archivos PDF en una canalización de generación de aumento de recuperación para aprender a crear una canalización de RAG basada en el contenido de PDF analizado.