Analizzare i PDF in una pipeline di Retrieval Augmented Generation

Questo tutorial ti guida attraverso il processo di creazione di una pipeline di Retrieval-Augmented Generation (RAG) basata su contenuti PDF analizzati.

I file PDF, come i documenti finanziari, possono essere difficili da utilizzare nelle pipeline RAG a causa della loro struttura complessa e della combinazione di testo, figure e tabelle. Questo tutorial mostra come utilizzare la funzione AI.CHUNK_DOCUMENT per creare una pipeline RAG basata sulle informazioni chiave estratte da un file PDF.

Obiettivi

Questo tutorial spiega le seguenti attività:

  • Creare un bucket Cloud Storage e caricare un file PDF di esempio.
  • Utilizza la funzione AI.CHUNK_DOCUMENT per analizzare i contenuti del PDF in blocchi e poi scriverli in una tabella BigQuery.
  • Generare embedding dai contenuti PDF suddivisi in blocchi e poi scriverli in una tabella BigQuery. Gli embedding sono rappresentazioni numeriche dei contenuti del PDF che ti consentono di eseguire ricerche semantiche e recuperare i contenuti del PDF.
  • Utilizza la funzione VECTOR_SEARCH sugli embedding per identificare contenuti PDF semanticamente simili.
  • Esegui la Retrieval Augmented Generation (RAG) utilizzando la funzione AI.GENERATE per generare testo, utilizzando i risultati di ricerca vettoriale per migliorare l'input del prompt e migliorare i risultati.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Cloud de Confiance by S3NS:

Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.

Prima di iniziare

Console

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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

  2. Verify that billing is enabled for your Cloud de Confiance project.

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

  4. Assicurati di disporre dei seguenti ruoli nel progetto: Storage Admin, Document AI Editor, BigQuery Admin, Project IAM Admin

    Controlla i ruoli

    1. Nella console Cloud de Confiance vai alla pagina IAM.

      Vai a IAM
    2. Seleziona il progetto.
    3. Nella colonna Entità, individua tutte le righe che identificano te o un gruppo di cui fai parte. Per scoprire in quali gruppi sei incluso, contatta l'amministratore.

    4. Per tutte le righe che ti specificano o ti includono, controlla la colonna Ruolo per verificare se l'elenco dei ruoli include i ruoli richiesti.

    Concedi i ruoli

    1. Nella console Cloud de Confiance vai alla pagina IAM.

      Vai a IAM
    2. Seleziona il progetto.
    3. Fai clic su Concedi l'accesso.
    4. Nel campo Nuove entità, inserisci il tuo identificatore dell'utente. In genere si tratta dell'identificatore di un utente in un pool di identità della forza lavoro. Per maggiori dettagli, consulta Rappresenta gli utenti del pool di forza lavoro nelle policy IAM o contatta l'amministratore.

    5. Fai clic su Seleziona un ruolo, quindi cerca il ruolo.
    6. Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo successivo.
    7. Fai clic su Salva.

gcloud

  1. Installa Google Cloud CLI.

  2. Configura gcloud CLI per utilizzare la tua identità federata.

    Per saperne di più, consulta Accedi a gcloud CLI con la tua identità federata.

  3. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  4. Crea o seleziona un progetto Cloud de Confiance .

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per cui ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l'autorizzazione resourcemanager.projects.create. Scopri come concedere i ruoli.
    • Crea un progetto Cloud de Confiance :

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Cloud de Confiance che stai creando.

    • Seleziona il progetto Cloud de Confiance che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del progetto Cloud de Confiance .

  5. Verifica che la fatturazione sia attivata per il tuo progetto Cloud de Confiance .

  6. Abilita le API BigQuery, BigQuery Connection, Vertex AI, Document AI e Cloud Storage, se non sono già abilitate:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    gcloud services enable bigquery.googleapis.com bigqueryconnection.googleapis.com aiplatform.googleapis.com documentai.googleapis.com storage.googleapis.com
  7. Concedi i ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli 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

    Sostituisci quanto segue:

Crea un set di dati

Per creare un set di dati BigQuery, seleziona una delle seguenti opzioni:

Console

  1. Nella console Cloud de Confiance , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel riquadro a sinistra, fai clic su Explorer:

    Pulsante evidenziato per il riquadro Spazio di esplorazione.

    Se non vedi il riquadro a sinistra, fai clic su Espandi riquadro sinistro per aprirlo.

  3. In Explorer, espandi il progetto e fai clic su Set di dati.

  4. Nella pagina Set di dati, fai clic su Crea set di dati.

  5. Nel riquadro Crea set di dati, segui questi passaggi:

    • In ID set di dati, inserisci bqml_tutorial.

    • Per Località dei dati, seleziona USA.

    Lascia invariate le altre impostazioni predefinite.

  6. Fai clic su Crea set di dati.

bq

Per creare un nuovo set di dati, utilizza il comando bq mk --dataset.

  1. Crea un set di dati denominato bqml_tutorial con la località dei dati impostata su US:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Verifica che il set di dati sia stato creato:

    bq ls

API

Chiama il metodo datasets.insert con una risorsa del set di dati definita:

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

Carica il PDF di esempio su Cloud Storage

Per caricare il PDF di esempio su Cloud Storage, segui questi passaggi:

  1. Scarica il PDF di esempio scf23.pdf andando su https://www.federalreserve.gov/publications/files/scf23.pdf e facendo clic su Scarica .
  2. Crea un bucket Cloud Storage.
  3. Carica il file scf23.pdf nel bucket.

Analizza il file PDF in blocchi

Utilizza il processore di documenti con la funzione AI.CHUNK_DOCUMENT per analizzare il file PDF in blocchi, quindi scrivi i contenuti in una tabella:

  1. Nella console Cloud de Confiance , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente istruzione:

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

  3. Nell'editor di query, esegui la seguente query per visualizzare un sottoinsieme dei contenuti PDF analizzati:

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

    L'output è simile al seguente:

    +----------+------------+----------+-------------------------------------------+
    | 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 embedding

Genera gli embedding per i contenuti PDF analizzati e poi scrivili in una tabella:

  1. Nella console Cloud de Confiance , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente istruzione:

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

Esegui una ricerca vettoriale sui contenuti PDF analizzati.

La seguente query accetta l'input di testo, crea un embedding per l'input utilizzando la funzione AI.EMBED, quindi utilizza la funzione VECTOR_SEARCH per abbinare l'embedding di input agli embedding dei contenuti PDF più simili. I risultati sono i dieci segmenti di PDF più correlati alle variazioni del patrimonio netto della famiglia.

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente istruzione 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;

    L'output è simile al seguente:

    +----------+----------+------------+----------+-----------------------------------+
    | 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 testo migliorato dai risultati di ricerca vettoriale

Esegui una Vector Search sugli embedding per identificare contenuti PDF semanticamente simili, quindi utilizza la funzione AI.GENERATE con i risultati di ricerca vettoriale per aumentare l'input del prompt e migliorare i risultati della generazione di testo. In questo caso, la query utilizza le informazioni dei chunk del PDF per rispondere a una domanda sulla variazione del patrimonio netto familiare nell'ultimo decennio.

  1. Nella console Cloud de Confiance , vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, esegui la seguente istruzione:

    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}')

    L'output è simile al seguente:

    +-------------------------------------------------------------------------+
    | 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%.                                                                  |
    +-------------------------------------------------------------------------+
    

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

    Elimina un progetto Cloud de Confiance :

    gcloud projects delete PROJECT_ID

Passaggi successivi