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 Gemini Enterprise Agent Platform.
- Menggunakan model jarak jauh dengan fungsi
AI.GENERATE_EMBEDDINGuntuk membuat embedding dari teks dalam tabel BigQuery. - Membuat indeks vektor untuk mengindeks embedding guna meningkatkan performa penelusuran.
- Menggunakan fungsi
VECTOR_SEARCHdengan embedding untuk menelusuri teks yang serupa. - Melakukan RAG dengan membuat teks menggunakan fungsi
AI.GENERATE_TEXT, dan menggunakan hasil penelusuran vektor untuk menambah 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: BigQuery Admin (
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
- Membuat set data:
bigquery.datasets.create - Membuat, mendelegasikan, dan menggunakan koneksi:
bigquery.connections.* - Menetapkan koneksi default:
bigquery.config.* - Menetapkan izin akun layanan:
resourcemanager.projects.getIamPolicydanresourcemanager.projects.setIamPolicy - Membuat model dan menjalankan inferensi:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateDatabigquery.models.updateMetadata
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen yang dapat ditagih berikut Google Cloud:
- BigQuery ML: You incur costs for the data that you process in BigQuery.
- Gemini Enterprise Agent Platform: You incur costs for calls to the Agent Platform 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 Agent Platform, lihat halaman harga Agent Platform.
Sebelum memulai
-
Di Google Cloud konsol, pada halaman pemilih project, pilih atau buat Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Memilih project: Memilih project tidak memerlukan peran IAM tertentu Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Pastikan penagihan diaktifkan untuk Google Cloud project Anda.
-
Aktifkan BigQuery, BigQuery Connection, dan Agent Platform API.
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.
Membuat set data
Buat set data BigQuery untuk menyimpan model ML Anda.
Konsol
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.
Jangan ubah setelan default yang tersisa, lalu klik Create dataset.
bq
Untuk membuat set data baru, gunakan perintah
bq mk --dataset.
Buat set data bernama
bqml_tutorialdengan lokasi data ditetapkan keUS.bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Konfirmasi bahwa set data telah dibuat:
bq ls
API
Panggil datasets.insert
metode dengan resource set data yang ditentukan.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Membuat model jarak jauh untuk pembuatan embedding teks
Buat model jarak jauh yang merepresentasikan model pembuatan embedding teks Agent Platform 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_modeldapat diakses melalui panel Explorer. Karena kueri menggunakan pernyataanCREATE MODELuntuk membuat model, tidak ada hasil kueri.
Membuat embedding teks
Buat embedding teks dari abstrak paten menggunakan fungsi
AI.GENERATE_EMBEDDING,
lalu tulis ke tabel BigQuery sehingga dapat di
telusuri.
Di Google Cloud konsol, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
CREATE OR REPLACE TABLE `bqml_tutorial.embeddings` AS SELECT * FROM AI.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(status) = 0;
Kueri ini memerlukan waktu sekitar 5 menit untuk diselesaikan.
Pembuatan embedding menggunakan fungsi
AI.GENERATE_EMBEDDINGmungkin gagal karena kuota LLM Agent Platform
atau ketidaktersediaan layanan.
Detail error ditampilkan di kolom status. Kolom status kosong menunjukkan pembuatan embedding berhasil.
Untuk metode pembuatan embedding teks alternatif di BigQuery, lihat tutorial Menyematkan teks dengan model TensorFlow terlatih.
Membuat indeks vektor
Jika Anda membuat indeks vektor di kolom embedding, penelusuran vektor yang dilakukan di kolom tersebut akan menggunakan teknik penelusuran Approximate Nearest Neighbor. Teknik ini meningkatkan performa penelusuran vektor, dengan mengurangi recall dan menampilkan hasil yang lebih perkiraan.
Untuk membuat indeks vektor, gunakan
CREATE VECTOR INDEX
pernyataan bahasa definisi data (DDL):
Buka halaman BigQuery.
Di editor kueri, jalankan pernyataan SQL berikut:
CREATE OR REPLACE VECTOR INDEX my_index ON `bqml_tutorial.embeddings`(embedding) 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_IDdengan project ID Anda.
Melakukan penelusuran kemiripan teks menggunakan indeks vektor
Gunakan fungsi
VECTOR_SEARCHuntuk menelusuri paten relevan yang cocok dengan embedding yang dibuat 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 sebesar .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`, 'embedding', ( SELECT embedding, content AS query FROM AI.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 Agent Platform 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-2.0-flash-001');
Kueri memerlukan waktu beberapa detik untuk diselesaikan, setelah itu model
text_modeldapat diakses melalui panel Explorer. Karena kueri menggunakan pernyataanCREATE MODELuntuk membuat model, tidak ada hasil kueri.
Membuat teks yang ditambah dengan hasil penelusuran vektor
Masukkan hasil penelusuran sebagai perintah untuk membuat teks dengan fungsi
AI.GENERATE_TEXT
Di Google Cloud konsol, buka halaman BigQuery.
Di editor kueri, jalankan pernyataan berikut:
SELECT result AS generated, prompt FROM AI.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`, 'embedding', ( SELECT embedding, content AS query FROM AI.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));
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
- Di Google Cloud konsol, buka halaman Manage resources.
- Pada daftar project, pilih project yang Anda ingin Anda hapus, lalu klik Delete.
- Dalam dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah berikutnya
- Coba tutorial Mengurai PDF dalam pipeline retrieval-augmented generation untuk mempelajari cara membuat pipeline RAG berdasarkan konten PDF yang diurai.