Mengurai PDF dalam pipeline retrieval-augmented generation

Tutorial ini memandu Anda melalui proses pembuatan pipeline retrieval-augmented generation (RAG) berdasarkan konten PDF yang diuraikan.

File PDF, seperti dokumen keuangan, dapat sulit digunakan dalam pipeline RAG karena strukturnya yang kompleks dan campuran teks, gambar, serta tabel. Tutorial ini menunjukkan cara menggunakan fungsi AI.CHUNK_DOCUMENT untuk membangun pipeline RAG berdasarkan informasi penting yang diekstrak dari file PDF.

Tujuan

Tutorial ini membahas tugas-tugas berikut:

  • Membuat bucket Cloud Storage dan mengupload file PDF contoh.
  • Gunakan fungsi AI.CHUNK_DOCUMENT untuk mengurai konten PDF menjadi potongan-potongan, lalu menulis konten tersebut ke tabel BigQuery.
  • Membuat embedding dari konten PDF yang dipotong, lalu menulis embedding tersebut ke tabel BigQuery. Embedding adalah representasi numerik dari konten PDF yang memungkinkan Anda melakukan penelusuran dan pengambilan semantik pada konten PDF.
  • Gunakan fungsi VECTOR_SEARCH pada embedding untuk mengidentifikasi konten PDF yang mirip secara semantik.
  • Lakukan retrieval-augmented generation (RAG) menggunakan fungsi AI.GENERATE untuk menghasilkan teks, menggunakan hasil penelusuran vektor untuk menambah input perintah dan meningkatkan hasil.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.

Sebelum memulai

Konsol

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  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. Pastikan Anda memiliki peran berikut di project: Storage Admin, Document AI Editor, BigQuery Admin, Project IAM Admin

    Memeriksa peran

    1. Di konsol Google Cloud , buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Di kolom Principal, temukan semua baris yang mengidentifikasi Anda atau grup yang mencakup Anda. Untuk mengetahui grup tempat Anda disertakan, hubungi administrator Anda.

    4. Untuk semua baris yang menentukan atau menyertakan Anda, periksa kolom Peran untuk melihat apakah daftar peran menyertakan peran yang diperlukan.

    Memberikan peran

    1. Di konsol Google Cloud , buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Klik Grant access.
    4. Di kolom New principals, masukkan ID pengguna Anda. Biasanya, ini adalah alamat email untuk Akun Google.

    5. Klik Select a role, lalu telusuri peran.
    6. Untuk memberikan peran tambahan, klik Add another role, lalu tambahkan tiap peran tambahan.
    7. Klik Simpan.

gcloud

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Instal Google Cloud CLI.

  3. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  4. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  5. Buat atau pilih project Google Cloud .

    Peran yang diperlukan untuk memilih atau membuat project

    • Memilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project apa pun yang perannya telah diberikan kepada Anda.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat project Google Cloud :

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  6. Pastikan penagihan diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan BigQuery, BigQuery Connection, Vertex AI, Document AI, dan Cloud Storage API, jika belum diaktifkan:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

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

  9. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  10. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  11. Buat atau pilih project Google Cloud .

    Peran yang diperlukan untuk memilih atau membuat project

    • Memilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project apa pun yang perannya telah diberikan kepada Anda.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat project Google Cloud :

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  12. Pastikan penagihan diaktifkan untuk project Google Cloud Anda.

  13. Aktifkan BigQuery, BigQuery Connection, Vertex AI, Document AI, dan Cloud Storage API, jika belum diaktifkan:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

    gcloud services enable bigquery.googleapis.com bigqueryconnection.googleapis.com aiplatform.googleapis.com documentai.googleapis.com storage.googleapis.com
  14. Berikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: 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

    Ganti kode berikut:

    • PROJECT_ID: Project ID Anda.
    • USER_IDENTIFIER: ID untuk akun pengguna Anda. Misalnya, myemail@example.com.
    • ROLE: Peran IAM yang Anda berikan ke akun pengguna Anda.

Membuat set data

Untuk membuat set data BigQuery, pilih salah satu opsi berikut:

Konsol

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di panel kiri, klik Explorer:

    Tombol yang ditandai untuk panel Explorer.

    Jika Anda tidak melihat panel kiri, klik Luaskan panel kiri untuk membuka panel.

  3. Di Explorer, luaskan project Anda, lalu klik Datasets.

  4. Di halaman Datasets, klik Create dataset.

  5. Di panel Create dataset, lakukan tindakan berikut:

    • Untuk Dataset ID, masukkan bqml_tutorial.

    • Untuk lokasi data, pilih US.

    Jangan ubah setelan default yang tersisa.

  6. Klik Create dataset.

bq

Untuk membuat set data baru, gunakan perintah bq mk --dataset.

  1. Buat set data bernama bqml_tutorial dengan lokasi data yang ditetapkan ke US:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Pastikan set data telah dibuat:

    bq ls

API

Panggil metode datasets.insert dengan resource set data yang ditentukan:

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

Mengupload PDF sampel ke Cloud Storage

Untuk mengupload PDF sampel ke Cloud Storage, ikuti langkah-langkah berikut:

  1. Download PDF sampel scf23.pdf dengan membuka https://www.federalreserve.gov/publications/files/scf23.pdf dan mengklik download .
  2. Buat bucket Cloud Storage.
  3. Upload file scf23.pdf ke bucket.

Mengurai file PDF menjadi potongan-potongan

Gunakan pemroses dokumen dengan fungsi AI.CHUNK_DOCUMENT untuk mengurai file PDF menjadi potongan-potongan, lalu tulis konten tersebut ke tabel:

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan berikut:

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

  3. Di editor kueri, jalankan kueri berikut untuk melihat subset konten PDF yang diuraikan:

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

    Outputnya mirip dengan hal berikut ini:

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

Membuat embedding

Buat embedding untuk konten PDF yang diuraikan, lalu tulis ke tabel:

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan berikut:

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

Menjalankan penelusuran vektor terhadap konten PDF yang diuraikan.

Kueri berikut mengambil input teks, membuat embedding untuk input tersebut menggunakan fungsi AI.EMBED, lalu menggunakan fungsi VECTOR_SEARCH untuk mencocokkan embedding input dengan embedding konten PDF yang paling mirip. Hasilnya adalah sepuluh potongan PDF teratas yang paling terkait dengan perubahan kekayaan bersih keluarga.

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan SQL berikut:

    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;

    Outputnya mirip dengan hal berikut ini:

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

Membuat teks yang ditingkatkan dengan hasil penelusuran vektor

Lakukan penelusuran vektor pada embedding untuk mengidentifikasi konten PDF yang mirip secara semantik, lalu gunakan fungsi AI.GENERATE dengan hasil penelusuran vektor untuk menambah input perintah dan meningkatkan hasil pembuatan teks. Dalam hal ini, kueri menggunakan informasi dari potongan PDF untuk menjawab pertanyaan tentang perubahan kekayaan bersih keluarga selama dekade terakhir.

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan pernyataan berikut:

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

    Outputnya mirip dengan hal berikut ini:

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

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

    Menghapus project Google Cloud :

    gcloud projects delete PROJECT_ID

Langkah berikutnya