Analiza archivos PDF en una canalización de generación mejorada por recuperación

En este instructivo, se explica el proceso para crear una canalización de generación mejorada por recuperación (RAG) basada en contenido de PDF analizado.

Los archivos PDF, como los documentos financieros, pueden ser difíciles de usar en las canalizaciones de RAG debido a su estructura compleja y a la combinación de texto, figuras y tablas. En este instructivo, se muestra cómo usar la función AI.CHUNK_DOCUMENT para compilar una canalización de RAG basada en la información clave extraída de un archivo PDF.

Objetivos

En este instructivo, se abarcan las siguientes tareas:

  • Crear un bucket de Cloud Storage y subir un archivo PDF de muestra
  • Usa la función AI.CHUNK_DOCUMENT para analizar el contenido del PDF en fragmentos y, luego, escribir ese contenido en una tabla de BigQuery.
  • Generar embeddings a partir del contenido del PDF dividido y, luego, escribirlos en una tabla de BigQuery Los embeddings son representaciones numéricas del contenido del PDF que te permiten realizar búsquedas semánticas y recuperaciones en el contenido del PDF.
  • Usa la función VECTOR_SEARCH en los embeddings para identificar contenido de PDF semánticamente similar.
  • Realizar la generación mejorada por recuperación (RAG) con la función AI.GENERATE para generar texto, usando los resultados de la búsqueda de vectores para aumentar la entrada de instrucciones y mejorar los resultados.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.

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

Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.

Antes de empezar

Console

  1. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. 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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery, BigQuery Connection, Vertex AI, Document AI, and Cloud Storage APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. 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 role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery, BigQuery Connection, Vertex AI, Document AI, and Cloud Storage APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  8. Asegúrate de tener los siguientes roles en el proyecto: Administrador de Storage, Editor de Document AI, Administrador de BigQuery, Administrador de IAM del proyecto

    Verifica los roles

    1. En la consola de Google Cloud , dirígete a la página IAM.

      Ir a IAM
    2. Selecciona el proyecto.
    3. En la columna Principal, busca todas las filas que te identifiquen a ti o a un grupo en el que se te incluya. Para saber en qué grupos estás incluido, comunícate con tu administrador.

    4. Para todas las filas en las que se te especifique o se te incluya, verifica la columna Rol para ver si la lista de roles incluye los roles necesarios.

    Otorga los roles

    1. En la consola de Google Cloud , dirígete a la página IAM.

      Ir a IAM
    2. Selecciona el proyecto.
    3. Haz clic en Otorgar acceso.
    4. En el campo Principales nuevas, ingresa tu identificador de usuario. Esta suele ser la dirección de correo electrónico de una Cuenta de Google.

    5. Haz clic en Selecciona un rol y, luego, busca el rol.
    6. Para otorgar roles adicionales, haz clic en Agregar otro rol y agrega uno más.
    7. Haz clic en Guardar.

gcloud

  1. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. Instala Google Cloud CLI.

  3. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  5. Crea o selecciona un proyecto de Google Cloud .

    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.
    • Crea un proyecto: Para crear un proyecto, necesitas el rol de creador de proyectos (roles/resourcemanager.projectCreator), que contiene el permiso resourcemanager.projects.create. Obtén más información para otorgar roles.
    • Crea un proyecto de Google Cloud :

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre de tu proyecto de Google Cloud .

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

  7. Habilita las APIs de BigQuery, BigQuery Connection, Vertex AI, Document AI y Cloud Storage, si aún no están habilitadas:

    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 obtenerlo a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

    gcloud services enable bigquery.googleapis.com bigqueryconnection.googleapis.com aiplatform.googleapis.com documentai.googleapis.com storage.googleapis.com
  8. Instala Google Cloud CLI.

  9. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  10. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  11. Crea o selecciona un proyecto de Google Cloud .

    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.
    • Crea un proyecto: Para crear un proyecto, necesitas el rol de creador de proyectos (roles/resourcemanager.projectCreator), que contiene el permiso resourcemanager.projects.create. Obtén más información para otorgar roles.
    • Crea un proyecto de Google Cloud :

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre de tu proyecto de Google Cloud .

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

  13. Habilita las APIs de BigQuery, BigQuery Connection, Vertex AI, Document AI y Cloud Storage, si aún no están habilitadas:

    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 obtenerlo a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

    gcloud services enable bigquery.googleapis.com bigqueryconnection.googleapis.com aiplatform.googleapis.com documentai.googleapis.com storage.googleapis.com
  14. Otorga roles a tu cuenta de usuario. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de IAM: roles/storage.admin, roles/documentai.editor, roles/bigquery.admin, roles/resourcemanager.projectIamAdmin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Reemplaza lo siguiente:

    • PROJECT_ID: ID del proyecto
    • USER_IDENTIFIER: Es el identificador de tu cuenta de usuario de . Por ejemplo, myemail@example.com. cuenta de
    • ROLE: Es el rol de IAM que otorgas a tu cuenta de usuario.

Crea un conjunto de datos

Para crear un conjunto de datos de BigQuery, selecciona una de las siguientes opciones:

Console

  1. En la consola de Google Cloud , ve a la página BigQuery.

    Ir a BigQuery

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

    Botón destacado del panel Explorador.

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

  3. En Explorador, 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 US.

    Deja el resto de la configuración predeterminada como está.

  6. Haz clic en Crear conjunto de datos.

bq

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

  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 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"
  }
}

Sube el documento PDF de muestra a Cloud Storage

Para subir el PDF de muestra a Cloud Storage, sigue estos pasos:

  1. Descarga el PDF de muestra de scf23.pdf. Para ello, ve a https://www.federalreserve.gov/publications/files/scf23.pdf y haz clic en Descargar .
  2. Crea buckets de Cloud Storage.
  3. Sube el archivo scf23.pdf al bucket.

Analiza el archivo PDF en fragmentos

Usa el procesador de documentos con la función AI.CHUNK_DOCUMENT para analizar el archivo PDF en fragmentos y, luego, escribe ese contenido en una tabla:

  1. En la consola de Google Cloud , ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, ejecuta la siguiente declaración:

    CREATE or REPLACE TABLE bqml_tutorial.chunked_pdf AS (
      SELECT *
      FROM AI.CHUNK_DOCUMENT('gs://BUCKET_NAME/scf23.pdf', chunk_size => 250)
    );

  3. En el editor de consultas, ejecuta la siguiente consulta para ver un subconjunto del contenido del PDF analizado:

    SELECT
      chunk_id,
      start_page,
      end_page,
      content
    FROM `bqml_tutorial.chunked_pdf`
    ORDER BY chunk_id
    LIMIT 3;

    El resultado es similar a lo siguiente:

    +----------+------------+----------+-------------------------------------------+
    | chunk_id | start_page | end_page | content                                   |
    +----------+------------+----------+-------------------------------------------+
    | 1        | 1          | 1        | OF NORS. • BOARD OF GOVERNO FEDERAL       |
    |          |            |          | RESERVE SYSTEM RESEARCH & ANALYSIS        |
    | 2        | 1          | 7        | # Changes in U.S. Family Finances from    |
    |          |            |          | 2019 to 2022                              |
    |          |            |          |                                           |
    |          |            |          | Evidence from the Survey of Consumer...   |
    | 3        | 3          | 5        | # Changes in U.S. Family Finances from    |
    |          |            |          | 2019 to 2022                              |
    |          |            |          |                                           |
    |          |            |          | ## Contents...                            |
    +----------+------------+----------+-------------------------------------------+
    

Genera embeddings

Genera embeddings para el contenido del PDF analizado y, luego, escríbelos en una tabla:

  1. En la consola de Google Cloud , ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, ejecuta la siguiente declaración:

    CREATE OR REPLACE TABLE `bqml_tutorial.embeddings` AS (
      SELECT *, AI.EMBED(content, endpoint => 'text-embedding-005').result AS embedding
      FROM bqml_tutorial.chunked_pdf
    );

Ejecutar una búsqueda de vectores en el contenido del PDF analizado

La siguiente consulta toma la entrada de texto, crea una incorporación para esa entrada con la función AI.EMBED y, luego, usa la función VECTOR_SEARCH para hacer coincidir la incorporación de entrada con las incorporaciones de contenido de PDF más similares. Los resultados son los diez fragmentos de PDF más relacionados con los cambios en el patrimonio neto familiar.

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, ejecuta la siguiente instrucción de SQL:

    SELECT
      distance,
      base.chunk_id AS chunk_id,
      base.start_page AS start_page,
      base.end_page AS end_page,
      base.content
    FROM
      VECTOR_SEARCH(
        TABLE `bqml_tutorial.embeddings`,
        'embedding',
        query_value =>
          AI.EMBED(
            'Did the typical family net worth increase? If so, by how much?',
            endpoint => 'text-embedding-005').result,
        top_k => 3,
        OPTIONS => '{"fraction_lists_to_search": 0.01}')
    ORDER BY distance DESC;

    El resultado es similar a lo siguiente:

    +----------+----------+------------+----------+-----------------------------------+
    | distance | chunk_id | start_page | end_page | content                           |
    +----------+----------+------------+----------+-----------------------------------+
    | 0.608587 | 25       | 17         | 18       | # Net Worth                       |
    |          |          |            |          |                                   |
    |          |          |            |          | 18 Between the first quarter of   |
    |          |          |            |          | 2019 and the first quarter of...  |
    +----------+----------+------------+----------+-----------------------------------+
    | 0.606387 | 29       | 19         | 21       | ## Net Worth                      |
    |          |          |            |          |                                   |
    |          |          |            |          | ## Net Worth by Family            |
    |          |          |            |          | Characteristics...                |
    +----------+----------+------------+----------+-----------------------------------+
    | 0.599438 | 23       | 17         | 21       | # Net Worth                       |
    |          |          |            |          |                                   |
    |          |          |            |          | The net improvements in...        |
    +----------+----------+------------+----------+-----------------------------------+
    

Genera texto aumentado por resultados de la búsqueda vectorial

Realizar una búsqueda de vectores en los embeddings para identificar contenido de PDF semánticamente similar y, luego, usar la función AI.GENERATE con los resultados de la búsqueda de vectores para aumentar la entrada de la instrucción y mejorar los resultados de la generación de texto. En este caso, la consulta usa información de los fragmentos del PDF para responder una pregunta sobre el cambio en el patrimonio neto familiar durante la última década.

  1. En la consola de Google Cloud , ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, ejecuta la siguiente declaración:

    SELECT
      AI.GENERATE(
        CONCAT('Did the typical family net worth change? How does this compare the SCF survey a decade earlier? Be concise and use the following context:',
                STRING_AGG(FORMAT("context: %s", base.content), ',\n')
        )
      ).result AS response
    FROM
      VECTOR_SEARCH(
        TABLE `bqml_tutorial.embeddings`,
        'embedding',
        query_value =>
          AI.EMBED(
            'Did the typical family net worth increase? If so, by how much?',
            endpoint => 'text-embedding-005').result,
        top_k => 3,
        OPTIONS => '{"fraction_lists_to_search": 0.01}')

    El resultado es similar al siguiente:

    +-------------------------------------------------------------------------+
    | response                                                                |
    +-------------------------------------------------------------------------+
    | Yes, the typical family net worth changed significantly. Between 2019   |
    | and 2022, real median net worth surged by 37% to $192,900.              |
    |                                                                         |
    | This growth contrasts sharply with the period a decade earlier. Between |
    | the 2010 and 2013 SCF surveys, real median net worth actually decreased |
    | by 2%.                                                                  |
    +-------------------------------------------------------------------------+
    

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.

Borra el proyecto

    Borra un proyecto de Google Cloud :

    gcloud projects delete PROJECT_ID

¿Qué sigue?