Mengurai PDF dalam pipeline pembuatan yang dilengkapi pengambilan
Tutorial ini akan 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, dan tabel. Tutorial ini menunjukkan cara menggunakan kemampuan BigQuery ML bersama dengan Layout Parser Document AI untuk membuat pipeline RAG berdasarkan informasi penting yang diekstrak dari file PDF.
Atau, Anda dapat melakukan tutorial ini menggunakan notebook Colab Enterprise.
Tujuan
Tutorial ini membahas tugas-tugas berikut:
- Membuat bucket Cloud Storage dan mengupload file PDF sampel.
- Membuat Koneksi resource cloud sehingga Anda dapat terhubung ke Cloud Storage dan Vertex AI dari BigQuery.
- Membuat tabel objek di atas file PDF untuk menyediakan file PDF di BigQuery.
- Membuat pemroses Document AI yang dapat Anda gunakan untuk mengurai file PDF.
- Membuat model jarak jauh yang memungkinkan Anda menggunakan Document AI API untuk mengakses pemroses dokumen dari BigQuery.
- Menggunakan model jarak jauh dengan
fungsi
ML.PROCESS_DOCUMENT
untuk mengurai konten PDF menjadi beberapa bagian, lalu menulis konten tersebut ke tabel BigQuery. - Mengekstrak konten PDF dari data JSON yang ditampilkan oleh fungsi
ML.PROCESS_DOCUMENT
, lalu menulis konten tersebut ke tabel BigQuery. - Membuat model jarak jauh yang memungkinkan Anda menggunakan model pembuatan penyematan
text-embedding-004
Vertex AI dari BigQuery. - Menggunakan model jarak jauh dengan fungsi
ML.GENERATE_EMBEDDING
untuk membuat penyematan dari konten PDF yang diuraikan, lalu menulis penyematan tersebut ke tabel BigQuery. Penyematan adalah representasi numerik konten PDF yang memungkinkan Anda melakukan penelusuran dan pengambilan semantik pada konten PDF. - Menggunakan fungsi
VECTOR_SEARCH
pada penyematan untuk mengidentifikasi konten PDF yang mirip secara semantik. - Membuat
model jarak jauh
yang memungkinkan Anda menggunakan model
pembuatan teks
gemini-1.5-flash
Vertex AI dari BigQuery. - Lakukan retrieval-augmented generation (RAG) dengan menggunakan model jarak jauh
dengan
fungsi
ML.GENERATE_TEXT
untuk membuat teks, menggunakan hasil penelusuran vektor untuk menambah input perintah dan meningkatkan hasil.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
- BigQuery: You incur costs for the data that you process in BigQuery.
- Vertex AI: You incur costs for calls to Vertex AI models.
- Document AI: You incur costs for calls to the Document AI API.
- Cloud Storage: You incur costs for object storage in Cloud Storage.
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Untuk mengetahui informasi selengkapnya, lihat halaman harga berikut:
Sebelum memulai
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API BigQuery, BigQuery Connection, Vertex AI, Document AI, and Cloud Storage.
Peran yang diperlukan
Untuk membuat bucket dan objek Cloud Storage, Anda memerlukan keanggotaan dalam peran
roles/storage.storageAdmin
.Untuk membuat pemroses Document AI, Anda memerlukan keanggotaan dalam peran
roles/documentai.editor
.Untuk membuat koneksi, Anda memerlukan keanggotaan dalam peran
roles/bigquery.connectionAdmin
.Untuk memberikan izin ke akun layanan koneksi, Anda memerlukan keanggotaan dalam peran
roles/resourcemanager.projectIamAdmin
.Izin IAM yang diperlukan dalam tutorial ini untuk operasi BigQuery lainnya disertakan dalam dua peran berikut:
- BigQuery Data Editor (
roles/bigquery.dataEditor
) untuk membuat model, tabel, dan indeks. - BigQuery User (
roles/bigquery.user
) untuk menjalankan tugas BigQuery.
- BigQuery Data Editor (
Membuat set data
Buat set data BigQuery untuk menyimpan model ML Anda:
Di konsol Google Cloud, buka halaman BigQuery.
Di panel Explorer, klik nama project Anda.
Klik
View actions > Create dataset.Di halaman Create dataset, lakukan hal berikut:
Untuk Dataset ID, masukkan
bqml_tutorial
.Untuk Location type, pilih Multi-region, lalu pilih US (multiple regions in United States).
Set data publik disimpan di
US
multi-region. Untuk mempermudah, simpan set data Anda di lokasi yang sama.Jangan ubah setelan default yang tersisa, lalu klik Create dataset.
Membuat koneksi
Buat koneksi resource Cloud dan dapatkan akun layanan koneksi. Buat koneksi di lokasi yang sama.
Pilih salah satu opsi berikut:
Konsol
Buka halaman BigQuery.
Untuk membuat koneksi, klik
Tambahkan, lalu klik Koneksi ke sumber data eksternal.Dalam daftar Connection type, pilih Vertex AI remote models, remote functions and BigLake (Cloud Resource).
Di kolom Connection ID, masukkan nama untuk koneksi Anda.
Klik Create connection.
Klik Go to connection.
Di panel Connection info, salin ID akun layanan untuk digunakan di langkah berikutnya.
bq
Di lingkungan command line, buat koneksi:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
Parameter
--project_id
akan mengganti project default.Ganti kode berikut:
REGION
: region koneksi AndaPROJECT_ID
: project ID Google Cloud AndaCONNECTION_ID
: ID untuk koneksi Anda
Saat Anda membuat resource koneksi, BigQuery akan membuat akun layanan sistem unik dan mengaitkannya dengan koneksi.
Pemecahan masalah: Jika Anda mendapatkan error koneksi berikut, update Google Cloud SDK:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
Ambil dan salin ID akun layanan untuk digunakan di langkah berikutnya:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
Outputnya mirip dengan hal berikut ini:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel."}
Terraform
Gunakan resource google_bigquery_connection
.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Contoh berikut membuat koneksi resource Cloud bernama
my_cloud_resource_connection
di region US
:
Untuk menerapkan konfigurasi Terraform di project Google Cloud, selesaikan langkah-langkah di bagian berikut.
Menyiapkan Cloud Shell
- Luncurkan Cloud Shell.
-
Tetapkan project Google Cloud default tempat Anda ingin menerapkan konfigurasi Terraform.
Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat dijalankan di direktori mana pun.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Variabel lingkungan akan diganti jika Anda menetapkan nilai eksplisit dalam file konfigurasi Terraform.
Menyiapkan direktori
Setiap file konfigurasi Terraform harus memiliki direktorinya sendiri (juga disebut modul root).
-
Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki
ekstensi
.tf
—misalnyamain.tf
. Dalam tutorial ini, file ini disebut sebagaimain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Jika mengikuti tutorial, Anda dapat menyalin kode contoh di setiap bagian atau langkah.
Salin kode contoh ke dalam
main.tf
yang baru dibuat.Atau, salin kode dari GitHub. Tindakan ini direkomendasikan jika cuplikan Terraform adalah bagian dari solusi menyeluruh.
- Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
- Simpan perubahan Anda.
-
Lakukan inisialisasi Terraform. Anda hanya perlu melakukan ini sekali per direktori.
terraform init
Secara opsional, untuk menggunakan versi penyedia Google terbaru, sertakan opsi
-upgrade
:terraform init -upgrade
Menerapkan perubahan
-
Tinjau konfigurasi dan pastikan resource yang akan dibuat atau
diupdate oleh Terraform sesuai yang Anda inginkan:
terraform plan
Koreksi konfigurasi jika diperlukan.
-
Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan
yes
pada prompt:terraform apply
Tunggu hingga Terraform menampilkan pesan "Apply complete!".
- Buka project Google Cloud Anda untuk melihat hasilnya. Di Konsol Google Cloud, buka resource Anda di UI untuk memastikan bahwa Terraform telah membuat atau mengupdatenya.
Memberikan akses ke akun layanan
Pilih salah satu opsi berikut:
Konsol
Buka halaman IAM & Admin.
Klik
Berikan Akses.Dialog Add principals akan terbuka.
Di kolom New principals, masukkan ID akun layanan yang Anda salin sebelumnya.
Di kolom Select a role, pilih Document AI, lalu pilih Document AI Viewer.
Klik Add another role.
Di kolom Select a role, pilih Cloud Storage, lalu pilih Storage Object Viewer.
Klik Add another role.
Di kolom Pilih peran, pilih Vertex AI, lalu pilih Pengguna Vertex AI.
Klik Simpan.
gcloud
Gunakan
perintah gcloud projects add-iam-policy-binding
:
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/documentai.viewer' --condition=None gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/storage.objectViewer' --condition=None gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None
Ganti kode berikut:
PROJECT_NUMBER
: nomor project Anda.MEMBER
: ID akun layanan yang Anda salin sebelumnya.
Mengupload contoh PDF ke Cloud Storage
Untuk mengupload contoh PDF ke Cloud Storage, ikuti langkah-langkah berikut:
- Download PDF contoh
scf23.pdf
dengan membuka https://www.federalreserve.gov/publications/files/scf23.pdf dan mengklik download . - Buat bucket Cloud Storage.
- Upload file
scf23.pdf
ke bucket.
Membuat tabel objek
Buat tabel objek pada file PDF di Cloud Storage:
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
CREATE OR REPLACE EXTERNAL TABLE `bqml_tutorial.pdf` WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://BUCKET/scf23.pdf']);
Ganti kode berikut:
LOCATION
: lokasi koneksi.CONNECTION_ID
: ID koneksi BigQuery Anda.Saat Anda melihat detail koneksi di konsol Google Cloud,
CONNECTION_ID
adalah nilai di bagian terakhir ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan di ID Koneksi, misalnyaprojects/myproject/locations/connection_location/connections/myconnection
.BUCKET
: bucket Cloud Storage yang berisi filescf23.pdf
. Nilai opsiuri
lengkap akan terlihat mirip dengan['gs://mybucket/scf23.pdf']
.
Membuat pemroses dokumen
Buat pemroses dokumen
berdasarkan pemroses Layout Parser
di multi-region us
.
Membuat model jarak jauh untuk pemroses dokumen
Buat model jarak jauh untuk mengakses pemroses Document AI:
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
CREATE OR REPLACE MODEL `bqml_tutorial.parser_model` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS(remote_service_type = 'CLOUD_AI_DOCUMENT_V1', document_processor = 'PROCESSOR_ID');
Ganti kode berikut:
LOCATION
: lokasi koneksi.CONNECTION_ID
: ID koneksi BigQuery Anda.Saat Anda melihat detail koneksi di konsol Google Cloud,
CONNECTION_ID
adalah nilai di bagian terakhir ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan di ID Koneksi, misalnyaprojects/myproject/locations/connection_location/connections/myconnection
.PROCESSOR_ID
: ID pemroses dokumen. Untuk menemukan nilai ini, lihat detail prosesor, lalu lihat baris ID di bagian Informasi Dasar.
Mengurai file PDF menjadi beberapa bagian
Gunakan pemroses dokumen dengan fungsi ML.PROCESS_DOCUMENT
untuk mengurai file PDF menjadi beberapa bagian, lalu tulis konten tersebut ke tabel. Fungsi
ML.PROCESS_DOCUMENT
menampilkan potongan PDF dalam format JSON.
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
CREATE or REPLACE TABLE
bqml_tutorial.chunked_pdf
AS ( SELECT * FROM ML.PROCESS_DOCUMENT( MODELbqml_tutorial.parser_model
, TABLEbqml_tutorial.pdf
, PROCESS_OPTIONS => (JSON '{"layout_config": {"chunking_config": {"chunk_size": 250}}}') ) );
Mengurai data bagian PDF menjadi kolom terpisah
Ekstrak konten PDF dan informasi metadata dari data JSON yang ditampilkan oleh fungsi ML.PROCESS_DOCUMENT
, lalu tulis konten tersebut ke tabel:
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut untuk mengurai konten PDF:
CREATE OR REPLACE TABLE
bqml_tutorial.parsed_pdf
AS ( SELECT uri, JSON_EXTRACT_SCALAR(json , '$.chunkId') AS id, JSON_EXTRACT_SCALAR(json , '$.content') AS content, JSON_EXTRACT_SCALAR(json , '$.pageFooters[0].text') AS page_footers_text, JSON_EXTRACT_SCALAR(json , '$.pageSpan.pageStart') AS page_span_start, JSON_EXTRACT_SCALAR(json , '$.pageSpan.pageEnd') AS page_span_end FROMbqml_tutorial.chunked_pdf
, UNNEST(JSON_EXTRACT_ARRAY(ml_process_document_result.chunkedDocument.chunks, '$')) json );Di editor kueri, jalankan pernyataan berikut untuk melihat subkumpulan konten PDF yang diuraikan:
SELECT * FROM `bqml_tutorial.parsed_pdf` ORDER BY id LIMIT 5;
Outputnya mirip dengan hal berikut ini:
+-----------------------------------+------+------------------------------------------------------------------------------------------------------+-------------------+-----------------+---------------+ | uri | id | content | page_footers_text | page_span_start | page_span_end | +-----------------------------------+------+------------------------------------------------------------------------------------------------------+-------------------+-----------------+---------------+ | gs://mybucket/scf23.pdf | c1 | •BOARD OF OF FEDERAL GOVERN NOR RESERVE SYSTEM RESEARCH & ANALYSIS | NULL | 1 | 1 | | gs://mybucket/scf23.pdf | c10 | • In 2022, 20 percent of all families, 14 percent of families in the bottom half of the usual ... | NULL | 8 | 9 | | gs://mybucket/scf23.pdf | c100 | The SCF asks multiple questions intended to capture whether families are credit constrained, ... | NULL | 48 | 48 | | gs://mybucket/scf23.pdf | c101 | Bankruptcy behavior over the past five years is based on a series of retrospective questions ... | NULL | 48 | 48 | | gs://mybucket/scf23.pdf | c102 | # Percentiles of the Distributions of Income and Net Worth | NULL | 48 | 49 | +-----------------------------------+------+------------------------------------------------------------------------------------------------------+-------------------+-----------------+---------------+
Membuat model jarak jauh untuk pembuatan penyematan
Buat model jarak jauh yang merepresentasikan model pembuatan penyematan teks Vertex AI yang dihosting:
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
CREATE OR REPLACE MODEL `bqml_tutorial.embedding_model` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT = 'text-embedding-004');
Ganti kode berikut:
LOCATION
: lokasi koneksi.CONNECTION_ID
: ID koneksi BigQuery Anda.Saat Anda melihat detail koneksi di konsol Google Cloud,
CONNECTION_ID
adalah nilai di bagian terakhir ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan di ID Koneksi, misalnyaprojects/myproject/locations/connection_location/connections/myconnection
.
Membuat embedding
Buat penyematan untuk konten PDF yang diuraikan, lalu tulis ke tabel:
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
CREATE OR REPLACE TABLE `bqml_tutorial.embeddings` AS SELECT * FROM ML.GENERATE_EMBEDDING( MODEL `bqml_tutorial.embedding_model`, TABLE `bqml_tutorial.parsed_pdf` );
Menjalankan penelusuran vektor
Jalankan penelusuran vektor terhadap konten PDF yang diuraikan.
Kueri berikut menggunakan input teks, membuat penyematan untuk input tersebut
menggunakan fungsi ML.GENERATE_EMBEDDING
, lalu menggunakan fungsi VECTOR_SEARCH
untuk mencocokkan penyematan input dengan penyematan konten PDF
yang paling mirip. Hasilnya adalah sepuluh bagian PDF teratas yang paling mirip secara semantik dengan input.
Buka halaman BigQuery.
Di editor kueri, jalankan pernyataan SQL berikut:
SELECT query.query, base.id AS pdf_chunk_id, base.content, distance FROM VECTOR_SEARCH( TABLE `bqml_tutorial.embeddings`, 'ml_generate_embedding_result', ( SELECT ml_generate_embedding_result, content AS query FROM ML.GENERATE_EMBEDDING( MODEL `bqml_tutorial.embedding_model`, ( SELECT 'Did the typical family net worth increase? If so, by how much?' AS content) ) ), top_k => 10, OPTIONS => '{"fraction_lists_to_search": 0.01}') ORDER BY distance DESC;
Outputnya mirip dengan hal berikut ini:
+-------------------------------------------------+--------------+------------------------------------------------------------------------------------------------------+---------------------+ | query | pdf_chunk_id | content | distance | +-------------------------------------------------+--------------+------------------------------------------------------------------------------------------------------+---------------------+ | Did the typical family net worth increase? ,... | c9 | ## Assets | 0.31113668174119469 | | | | | | | | | The homeownership rate increased slightly between 2019 and 2022, to 66.1 percent. For ... | | +-------------------------------------------------+--------------+------------------------------------------------------------------------------------------------------+---------------------+ | Did the typical family net worth increase? ,... | c50 | # Box 3. Net Housing Wealth and Housing Affordability | 0.30973592073929113 | | | | | | | | | For families that own their primary residence ... | | +-------------------------------------------------+--------------+------------------------------------------------------------------------------------------------------+---------------------+ | Did the typical family net worth increase? ,... | c50 | 3 In the 2019 SCF, a small portion of the data collection overlapped with early months of | 0.29270064592817646 | | | | the COVID- ... | | +-------------------------------------------------+--------------+------------------------------------------------------------------------------------------------------+---------------------+
Membuat model jarak jauh untuk pembuatan teks
Buat model jarak jauh yang merepresentasikan model pembuatan teks Vertex AI yang dihosting:
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
CREATE OR REPLACE MODEL `bqml_tutorial.text_model` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT = 'gemini-1.5-flash-002');
Ganti kode berikut:
LOCATION
: lokasi koneksi.CONNECTION_ID
: ID koneksi BigQuery Anda.Saat Anda melihat detail koneksi di konsol Google Cloud,
CONNECTION_ID
adalah nilai di bagian terakhir ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan di ID Koneksi, misalnyaprojects/myproject/locations/connection_location/connections/myconnection
.
Membuat teks yang dilengkapi dengan hasil penelusuran vektor
Lakukan penelusuran vektor pada penyematan untuk mengidentifikasi konten PDF yang mirip secara semantik, lalu gunakan fungsi ML.GENERATE_TEXT
dengan hasil penelusuran vektor untuk menambah input perintah dan meningkatkan hasil pembuatan teks. Dalam hal ini, kueri menggunakan informasi dari bagian PDF untuk menjawab
pertanyaan tentang perubahan kekayaan bersih keluarga selama satu dekade terakhir.
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
SELECT ml_generate_text_llm_result AS generated FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.text_model`, ( SELECT 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 and reference: %s", base.content, base.uri), ',\n')) AS prompt, FROM VECTOR_SEARCH( TABLE `bqml_tutorial.embeddings`, 'ml_generate_embedding_result', ( SELECT ml_generate_embedding_result, content AS query FROM ML.GENERATE_EMBEDDING( MODEL `bqml_tutorial.embedding_model`, ( SELECT 'Did the typical family net worth change? How does this compare the SCF survey a decade earlier?' AS content ) ) ), top_k => 10, OPTIONS => '{"fraction_lists_to_search": 0.01}') ), STRUCT(512 AS max_output_tokens, TRUE AS flatten_json_output) );
Outputnya mirip dengan hal berikut ini:
+-------------------------------------------------------------------------------+ | generated | +-------------------------------------------------------------------------------+ | Between the 2019 and 2022 Survey of Consumer Finances (SCF), real median | | family net worth surged 37 percent to $192,900, and real mean net worth | | increased 23 percent to $1,063,700. This represents the largest three-year | | increase in median net worth in the history of the modern SCF, exceeding the | | next largest by more than double. In contrast, between 2010 and 2013, real | | median net worth decreased 2 percent, and real mean net worth remained | | unchanged. | +-------------------------------------------------------------------------------+
Pembersihan
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.