En este instructivo, usarás un modelo remoto
con la función AI.GENERATE_EMBEDDING
para generar incorporaciones de texto
en una tabla de BigQuery. Luego, crearás un índice vectorial
para indexar las incorporaciones y mejorar el rendimiento de la búsqueda.
Usarás la VECTOR_SEARCHfunción
con las incorporaciones para buscar texto similar. La búsqueda vectorial es una técnica para comparar objetos similares con incorporaciones, que son vectores numéricos de alta dimensión que representan una entidad determinada, como un fragmento de texto.
Por último, realizarás la Generación mejorada por recuperación (RAG)
a través de la generación de texto con la función AI.GENERATE_TEXT.
RAG es un framework de IA que combina las fortalezas de los sistemas tradicionales de recuperación de información (como las bases de datos) con las capacidades de los modelos de lenguaje grandes (LLM) generativos. Cuando combinas tus datos y el conocimiento del mundo con las habilidades de lenguaje de los LLM, la generación fundamentada es más precisa, actualizada y pertinente para tus necesidades específicas.
En este instructivo, se usan datos del conjunto de datos públicos de Patentes de Google Research.
Objetivos
- Crea un modelo remoto de BigQuery ML sobre un modelo de incorporación de Gemini Enterprise Agent Platform.
- Usa el modelo remoto con la función
AI.GENERATE_EMBEDDINGpara generar incorporaciones a partir de texto en una tabla de BigQuery. - Crea un índice vectorial para indexar las incorporaciones y mejorar el rendimiento de la búsqueda.
- Usa la función
VECTOR_SEARCHcon las incorporaciones para buscar texto similar. - Realiza la generación de aumento de recuperación (RAG) a través de la generación de texto con la función
AI.GENERATE_TEXTy el uso de los resultados de la búsqueda vectorial para aumentar la entrada de instrucciones y mejorar los resultados.
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.
- Gemini Enterprise Agent Platform: You incur costs for calls to the Agent Platform 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, consulta las siguientes páginas de precios:
Antes de comenzar
-
En la Google Cloud consola de, en la página del selector de proyectos, selecciona o crea un Google Cloud proyecto.
Roles necesarios para seleccionar o crear un proyecto
- Seleccionar un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
-
Crear un proyecto: Para crear un proyecto, necesitas el rol de creador de proyectos
(
roles/resourcemanager.projectCreator), que contiene elresourcemanager.projects.createpermiso. Obtén más información para otorgar roles.
-
Verifica que la facturación esté habilitada para tu Google Cloud proyecto.
-
Habilita las APIs de BigQuery, Cloud Storage y Gemini Enterprise Agent Platform.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el permiso
serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.
Roles obligatorios
Si quieres obtener los permisos que necesitas para completar este instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
Crear conjuntos de datos, tablas y modelos:
Propietario de datos de BigQuery (
roles/bigquery.dataOwner) -
Ejecutar trabajos de BigQuery:
Usuario de trabajo de BigQuery (
roles/bigquery.jobUser) -
Crear y administrar conexiones:
Administrador de conexión de BigQuery (
roles/bigquery.connectionAdmin)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Crea un conjunto de datos
Para crear un conjunto de datos de BigQuery, selecciona una de las siguientes opciones:
Console
En la Google Cloud consola de, ve a la BigQueryBigQuery.
En el panel de la izquierda, haz clic en Explorador:

Si no ves el panel izquierdo, haz clic en Expandir panel izquierdo para abrirlo.
En Explorer, expande tu proyecto y, luego, haz clic en Conjuntos de datos.
En la página Conjuntos de datos, haz clic en Crear conjunto de datos.
En el panel Crear conjunto de datos, haz lo siguiente:
En ID del conjunto de datos, ingresa
bqml_tutorial.En Ubicación de los datos, selecciona EE.UU.
Deja la configuración predeterminada restante como está.
Haz clic en Crear conjunto de datos.
bq
Para crear un conjunto de datos nuevo, usa el
bq mk --dataset comando.
Crea un conjunto de datos llamado
bqml_tutorialcon la ubicación de los datos establecida enUS:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Confirma que se creó el conjunto de datos:
bq ls
API
Llama al datasets.insert
método con un recurso de conjunto de datos definido:
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Crea el modelo remoto para la generación de embedding de texto
En esta sección, crearás un modelo remoto que represente un modelo de generación de embedding de texto de Agent Platform alojado.
Cuando creas el modelo, usas la conexión DEFAULT
para llamar a la API de Text embeddings
y obtener incorporaciones de texto con el modelo text-embedding-005. Si no tienes una conexión predeterminada, la instrucción CREATE MODEL crea una por ti.
Para crear el modelo de embedding de texto, sigue estos pasos:
En la Google Cloud consola de, ve a la BigQueryBigQuery.
Para crear el modelo, pega este comando en el editor de consultas y, luego, haz clic en Ejecutar:
CREATE OR REPLACE MODEL `bqml_tutorial.embedding_model` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT = 'text-embedding-005');
La consulta tarda varios segundos en completarse, después de eso, se puede acceder al modelo
embedding_modela través del panel Explorador.Recibirás un mensaje de confirmación como el siguiente:
Successfully created model named embedding_model.
Generar incorporaciones de texto
Genera incorporaciones de texto a partir de resúmenes de patentes con la
AI.GENERATE_EMBEDDING función,
y, luego, escríbelos en una tabla de BigQuery para que se puedan
buscar.
La generación de embedding con la función
AI.GENERATE_EMBEDDINGpuede fallar debido a cuotas de Agent Platform LLM o a la falta de disponibilidad del servicio.
Si falla, los detalles del error se muestran en la columna status de los resultados de la consulta.
Para obtener métodos alternativos de generación de incorporaciones de texto en BigQuery, consulta el instructivo Incorpora texto con modelos de TensorFlow previamente entrenados.
Para generar incorporaciones de texto, pega este comando en el editor de consultas y, luego, haz clic en Ejecutar:
CREATE OR REPLACE TABLEbqml_tutorial.embeddingsAS SELECT * FROM AI.GENERATE_EMBEDDING( MODELbqml_tutorial.embedding_model, ( SELECT *, abstract AS content FROMpatents-public-data.google_patents_research.publicationsWHERE LENGTH(abstract) > 0 AND LENGTH(title) > 0 AND country = 'Singapore' ) ) WHERE LENGTH(status) = 0;
Esta consulta tarda varios minutos en completarse. Recibirás un mensaje de confirmación
como el siguiente:This statement created a new table named
embeddings.
Crea un índice vectorial
Si creas un índice vectorial en una columna de incorporación, una búsqueda vectorial que se realiza en esa columna usa la técnica de búsqueda de vecino más cercano aproximado. Esta técnica mejora el rendimiento de la búsqueda vectorial y muestra resultados más aproximados, pero se reduce la recuperación.
Para crear un índice vectorial, usa la
CREATE VECTOR INDEX
instrucción de lenguaje de definición de datos (DDL). Para verificar que el índice esté disponible,
consulta la vista INFORMATION_SCHEMA.VECTOR_INDEXES
para verificar 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.
Para crear y verificar el índice vectorial, sigue estos pasos:
Para crear el índice vectorial, pega este comando en el editor de consultas y, luego, haz clic en Ejecutar:
CREATE OR REPLACE VECTOR INDEX my_index ON `bqml_tutorial.embeddings`(embedding) OPTIONS(index_type = 'IVF', distance_type = 'COSINE', ivf_options = '{"num_lists":500}');
Recibirás un mensaje de confirmación como el siguiente:
The vector index creation on table bqml_tutorial.embeddings was initiated. Please query bqml_tutorial.INFORMATION_SCHEMA.VECTOR_INDEXES to check the progress of the index.Por lo general, la creación de un índice vectorial solo tarda unos segundos. El índice vectorial tarda entre dos y tres minutos más en propagarse de forma asíncrona.
Para verificar si el índice está listo para usarse, pega este comando en el editor de consultas y, luego, haz clic en Ejecutar:
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_IDcon el ID del proyecto.Después de ejecutar la consulta, el índice estará disponible si la columna
index_statusde los resultados muestra que el índice estáACTIVEy si el valor decoverage_percentagees100.
Realiza una búsqueda de similitud de texto con el índice vectorial
Usa la
VECTOR_SEARCH función
para buscar patentes relevantes que coincidan con las incorporaciones generadas a partir de una
consulta de texto.
El argumento top_k determina la cantidad de coincidencias que se mostrarán, en este caso, cinco. La opción fraction_lists_to_search determina el porcentaje de listas de índices vectoriales que se buscarán.
El índice vectorial que creaste tiene 500 listas, por lo que
el valor fraction_lists_to_search de .01 indica que esta búsqueda vectorial
analiza cinco de esas listas. Un valor fraction_lists_to_search más bajo, como se muestra
aquí, proporciona una recuperación
más baja
y un rendimiento más rápido.
Para obtener más información sobre las listas de índices vectoriales, consulta la num_lists
opción de índice vectorial.
El modelo que usas para generar las incorporaciones en esta consulta debe ser el mismo que usas para generar las incorporaciones en la tabla con la que estás comparando. De lo contrario, los resultados de la búsqueda no serán precisos.
Para realizar una búsqueda de similitud de texto, pega este comando en el editor de consultas, y, luego, haz clic en Ejecutar:
SELECT query.query, base.publication_number, base.title, base.abstract FROM VECTOR_SEARCH( TABLEbqml_tutorial.embeddings, 'embedding', ( SELECT embedding, content AS query FROM AI.GENERATE_EMBEDDING( MODELbqml_tutorial.embedding_model, (SELECT 'improving password security' AS content)) ), top_k => 5, options => '{"fraction_lists_to_search": 0.01}');
El resultado es similar a este:
+-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+ | 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
Para crear un modelo remoto que represente un modelo de generación de texto de Agent Platform alojado , pega este comando en el editor de consultas y, luego, haz clic en Ejecutar:
CREATE OR REPLACE MODEL bqml_tutorial.text_model
REMOTE WITH CONNECTION DEFAULT
OPTIONS (ENDPOINT = 'gemini-2.5-flash');
Recibirás un mensaje de confirmación similar al siguiente:
Successfully created model named text_model.
Genera texto aumentado por resultados de la búsqueda vectorial
Proporciona los resultados de la búsqueda como instrucciones para generar texto con la
AI.GENERATE_TEXT función.
Para aumentar los resultados de la búsqueda vectorial, pega este comando en el editor de consultas, y, luego, haz clic en Ejecutar:
SELECT result AS generated, prompt FROM AI.GENERATE_TEXT( MODELbqml_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( TABLEbqml_tutorial.embeddings, 'embedding', ( SELECT embedding, content AS query FROM AI.GENERATE_EMBEDDING( MODELbqml_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));
El resultado es similar a este:
+------------------------------------------------+------------------------------------------------------------+ | 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... | +------------------------------------------------+------------------------------------------------------------+
Realiza una limpieza
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
- En la Google Cloud consola, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que deseas borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.
Como alternativa, para conservar el proyecto y borrar los recursos que se usaron en este instructivo, sigue estos pasos:
Ve a la página de BigQuery.
En el panel de la izquierda, expande tu proyecto y, luego, haz clic en Conjuntos de datos.
Para el conjunto de datos
bqml_tutorial, haz clic en Abrir acciones > Borrar.En el cuadro de diálogo Borrar conjunto de datos, haz clic en Borrar para confirmar.
En el panel de la izquierda, haz clic en Conexiones.
Para la conexión
__default_cloudresource_connection__, haz clic en Abrir acciones > Borrar.En el cuadro de diálogo Borrar conexión , ingresa
deletey, luego, haz clic en Borrar para confirmar.
¿Qué sigue?
- Para obtener información sobre cómo crear una canalización de RAG basada en contenido de PDF analizado, consulta Analiza archivos PDF en una canalización de generación mejorada por recuperación.