Realiza una búsqueda semántica y una generación de aumento de recuperación

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_EMBEDDING para 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_SEARCH con 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_TEXT y 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.

Es posible que los usuarios Google Cloud nuevos decumplan con los requisitos para acceder a una prueba gratuita.

Para obtener más información, consulta las siguientes páginas de precios:

Antes de comenzar

  1. 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 el resourcemanager.projects.create permiso. Obtén más información para otorgar roles.

    Ir al selector de proyectos

  2. Verifica que la facturación esté habilitada para tu Google Cloud proyecto.

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

    Habilitar las API

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:

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

  1. En la Google Cloud consola de, ve a la BigQueryBigQuery.

    Ir a BigQuery

  2. En el panel de la izquierda, haz clic en Explorador:

    Botón destacado del panel Explorador.

    Si no ves el panel izquierdo, haz clic en Expandir panel izquierdo para abrirlo.

  3. En Explorer, expande tu proyecto y, luego, haz clic en Conjuntos de datos.

  4. En la página Conjuntos de datos, haz clic en Crear conjunto de datos.

  5. 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á.

  6. Haz clic en Crear conjunto de datos.

bq

Para crear un conjunto de datos nuevo, usa el bq mk --dataset comando.

  1. Crea un conjunto de datos llamado bqml_tutorial con la ubicación de los datos establecida en US:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. 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:

  1. En la Google Cloud consola de, ve a la BigQueryBigQuery.

    Ir a BigQuery

  2. 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_model a 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 TABLE bqml_tutorial.embeddings AS
  SELECT * FROM AI.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(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:

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

  2. 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_ID con el ID del proyecto.

    Después de ejecutar la consulta, el índice estará disponible si la columna index_status de los resultados muestra que el índice está ACTIVE y si el valor de coverage_percentage es 100.

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(
    TABLE bqml_tutorial.embeddings, 'embedding',
    (
    SELECT embedding, content AS query
    FROM AI.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 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(
    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, 'embedding',
        (
          SELECT embedding, content AS query
          FROM AI.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));
  

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.

  1. En la Google Cloud consola, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que deseas borrar y haz clic en Borrar.
  3. 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:

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel de la izquierda, expande tu proyecto y, luego, haz clic en Conjuntos de datos.

  3. Para el conjunto de datos bqml_tutorial, haz clic en Abrir acciones > Borrar.

  4. En el cuadro de diálogo Borrar conjunto de datos, haz clic en Borrar para confirmar.

  5. En el panel de la izquierda, haz clic en Conexiones.

  6. Para la conexión __default_cloudresource_connection__, haz clic en Abrir acciones > Borrar.

  7. En el cuadro de diálogo Borrar conexión , ingresa delete y, luego, haz clic en Borrar para confirmar.

¿Qué sigue?