Melakukan penelusuran semantik dan retrieval-augmented generation
Tutorial ini memandu Anda melalui proses end-to-end untuk membuat dan menggunakan embedding teks untuk penelusuran semantik dan retrieval-augmented generation (RAG).
Tutorial ini membahas tugas-tugas berikut:
- Membuat model jarak jauh BigQuery ML melalui model embedding Vertex AI.
- Menggunakan model jarak jauh dengan
fungsi
ML.GENERATE_EMBEDDING
untuk membuat embedding dari teks dalam tabel BigQuery. - Membuat indeks vektor untuk mengindeks embedding guna meningkatkan performa penelusuran.
- Menggunakan
fungsi
VECTOR_SEARCH
dengan embedding untuk menelusuri teks serupa. - Lakukan RAG dengan membuat teks menggunakan
fungsi
ML.GENERATE_TEXT
, dan menggunakan hasil penelusuran vektor untuk meningkatkan input perintah dan meningkatkan hasil.
Tutorial ini menggunakan tabel publik BigQuery
patents-public-data.google_patents_research.publications
.
Peran yang diperlukan
Untuk menjalankan tutorial ini, Anda memerlukan peran Identity and Access Management (IAM) berikut:
- Membuat dan menggunakan set data, koneksi, dan model BigQuery:
Admin BigQuery (
roles/bigquery.admin
). - Memberikan izin ke akun layanan koneksi: Project IAM Admin
(
roles/resourcemanager.projectIamAdmin
).
Peran yang telah ditetapkan ini berisi izin yang diperlukan untuk melakukan tugas dalam dokumen ini. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:
Izin yang diperlukan
- Buat set data:
bigquery.datasets.create
- Membuat, mendelegasikan, dan menggunakan koneksi:
bigquery.connections.*
- Menetapkan koneksi default:
bigquery.config.*
- Tetapkan izin akun layanan:
resourcemanager.projects.getIamPolicy
danresourcemanager.projects.setIamPolicy
- Buat model dan jalankan inferensi:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
- BigQuery ML: You incur costs for the data that you process in BigQuery.
- Vertex AI: You incur costs for calls to the Vertex AI service that's represented by the remote model.
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Untuk mengetahui informasi selengkapnya tentang harga BigQuery, lihat harga BigQuery dalam dokumentasi BigQuery.
Untuk mengetahui informasi selengkapnya tentang harga Vertex AI, lihat halaman harga Vertex AI.
Sebelum memulai
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
Membuat set data
Buat set data BigQuery untuk menyimpan model ML Anda.
Konsol
Di Google Cloud konsol, 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).
Jangan ubah setelan default yang tersisa, lalu klik Create dataset.
bq
Untuk membuat set data baru, gunakan perintah bq mk
dengan flag --location
. Untuk daftar lengkap kemungkinan parameter, lihat referensi
perintah bq mk --dataset
.
Buat set data bernama
bqml_tutorial
dengan lokasi data yang ditetapkan keUS
dan deskripsiBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Perintah ini menggunakan pintasan
-d
, bukan flag--dataset
. Jika Anda menghapus-d
dan--dataset
, perintah defaultnya adalah membuat set data.Pastikan set data telah dibuat:
bq ls
API
Panggil metode datasets.insert
dengan resource set data yang ditentukan.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
DataFrame BigQuery
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan BigQuery DataFrames di Panduan memulai BigQuery menggunakan BigQuery DataFrames. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi BigQuery DataFrames.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan ADC untuk lingkungan pengembangan lokal.
Membuat model jarak jauh untuk pembuatan penyematan teks
Buat model jarak jauh yang merepresentasikan model pembuatan penyematan teks Vertex AI yang dihosting:
Di Google Cloud konsol, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
CREATE OR REPLACE MODEL `bqml_tutorial.embedding_model` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT = 'text-embedding-005');
Kueri memerlukan waktu beberapa detik untuk diselesaikan, setelah itu model
embedding_model
akan muncul di set databqml_tutorial
di panel Explorer. Karena kueri menggunakan pernyataanCREATE MODEL
untuk membuat model, tidak akan ada hasil kueri.
Membuat embedding teks
Buat penyematan teks dari abstrak paten menggunakan
fungsi ML.GENERATE_EMBEDDING
,
lalu tulis ke tabel BigQuery agar dapat
dicari.
Di Google Cloud konsol, 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`, ( 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(ml_generate_embedding_status) = 0;
Kueri ini membutuhkan waktu sekitar 5 menit untuk diselesaikan.
Pembuatan embedding menggunakan
fungsi ML.GENERATE_EMBEDDING
mungkin gagal karena kuota LLM Vertex AI
atau layanan tidak tersedia. Detail error ditampilkan di kolom
ml_generate_embedding_status
. Kolom ml_generate_embedding_status
yang kosong menunjukkan pembuatan sematan berhasil.
Untuk metode pembuatan embedding teks alternatif di BigQuery, lihat Tutorial Menyematkan teks dengan model TensorFlow yang telah dilatih sebelumnya.
Membuat indeks vektor
Jika Anda membuat indeks vektor pada kolom embedding, penelusuran vektor yang dilakukan pada kolom tersebut akan menggunakan teknik penelusuran Tetangga Terdekat Perkiraan. Teknik ini meningkatkan performa penelusuran vektor, dengan mengurangi recall dan menampilkan hasil yang lebih mendekati.
Untuk membuat indeks vektor, gunakan pernyataan bahasa definisi data (DDL)
CREATE VECTOR INDEX
:
Buka halaman BigQuery.
Di editor kueri, jalankan pernyataan SQL berikut:
CREATE OR REPLACE VECTOR INDEX my_index ON `bqml_tutorial.embeddings`(ml_generate_embedding_result) OPTIONS(index_type = 'IVF', distance_type = 'COSINE', ivf_options = '{"num_lists":500}')
Membuat indeks vektor biasanya hanya memerlukan waktu beberapa detik. Diperlukan waktu 2 atau 3 menit lagi agar indeks vektor terisi dan siap digunakan.
Memverifikasi kesiapan indeks vektor
Indeks vektor diisi secara asinkron. Anda dapat memeriksa apakah indeks siap digunakan dengan membuat kueri
tampilan INFORMATION_SCHEMA.VECTOR_INDEXES
dan memverifikasi bahwa nilai kolom coverage_percentage
lebih besar dari 0
dan nilai kolom last_refresh_time
bukan NULL
.
Buka halaman BigQuery.
Di editor kueri, jalankan pernyataan SQL berikut:
SELECT table_name, index_name, index_status, coverage_percentage, last_refresh_time, disable_reason FROM `PROJECT_ID.bqml_tutorial.INFORMATION_SCHEMA.VECTOR_INDEXES`
Ganti
PROJECT_ID
dengan project ID Anda.
Melakukan penelusuran kemiripan teks menggunakan indeks vektor
Gunakan
fungsi VECTOR_SEARCH
untuk menelusuri paten yang relevan dan cocok dengan embedding yang dihasilkan dari
kueri teks.
Argumen top_k
menentukan jumlah kecocokan yang akan ditampilkan,
dalam hal ini lima. Opsi fraction_lists_to_search
menentukan persentase daftar indeks vektor yang akan ditelusuri.
Indeks vektor yang Anda buat memiliki 500 daftar, sehingga
nilai fraction_lists_to_search
dari .01
menunjukkan bahwa penelusuran vektor ini
memindai lima daftar tersebut. Nilai fraction_lists_to_search
yang lebih rendah seperti yang ditunjukkan di sini
memberikan
recall yang lebih rendah
dan performa yang lebih cepat. Untuk mengetahui informasi selengkapnya tentang daftar indeks vektor, lihat
opsi indeks vektor
num_lists
.
Model yang Anda gunakan untuk membuat embedding dalam kueri ini harus sama dengan model yang Anda gunakan untuk membuat embedding dalam tabel yang Anda bandingkan, jika tidak, hasil penelusuran tidak akan akurat.
Buka halaman BigQuery.
Di editor kueri, jalankan pernyataan SQL berikut:
SELECT query.query, base.publication_number, base.title, base.abstract 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 'improving password security' AS content)) ), top_k => 5, options => '{"fraction_lists_to_search": 0.01}')
Outputnya mirip dengan hal berikut ini:
+-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+ | 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... | +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
Membuat model jarak jauh untuk pembuatan teks
Buat model jarak jauh yang merepresentasikan model pembuatan teks Vertex AI yang dihosting:
Di Google Cloud konsol, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
CREATE OR REPLACE MODEL `bqml_tutorial.text_model` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT = 'gemini-1.5-flash-002');
Kueri memerlukan waktu beberapa detik untuk diselesaikan, setelah itu model
text_model
akan muncul di set databqml_tutorial
di panel Explorer. Karena kueri menggunakan pernyataanCREATE MODEL
untuk membuat model, tidak akan ada hasil kueri.
Menghasilkan teks yang ditingkatkan dengan hasil penelusuran vektor
Berikan hasil penelusuran sebagai perintah untuk membuat teks dengan
fungsi ML.GENERATE_TEXT
Di Google Cloud konsol, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
SELECT ml_generate_text_llm_result AS generated, prompt FROM ML.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`, 'ml_generate_embedding_result', ( SELECT ml_generate_embedding_result, content AS query FROM ML.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, TRUE AS flatten_json_output));
Outputnya mirip dengan hal berikut ini:
+------------------------------------------------+------------------------------------------------------------+ | 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... | +------------------------------------------------+------------------------------------------------------------+
Pembersihan
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Langkah berikutnya
- Coba tutorial Mem-parsing PDF dalam pipeline retrieval-augmented generation untuk mempelajari cara membuat pipeline RAG berdasarkan konten PDF yang di-parsing.