Melakukan penelusuran semantik dan retrieval-augmented generation

Dalam tutorial ini, Anda menggunakan model jarak jauh dengan fungsi AI.GENERATE_EMBEDDING untuk membuat embedding teks dalam tabel BigQuery. Kemudian, Anda membuat indeks vektor untuk mengindeks embedding guna meningkatkan performa penelusuran.

Anda menggunakan fungsi VECTOR_SEARCH dengan embedding untuk menelusuri teks serupa. Penelusuran vektor adalah teknik untuk membandingkan objek serupa menggunakan embedding, yang merupakan vektor numerik berdimensi tinggi yang merepresentasikan entity tertentu, seperti teks.

Terakhir, Anda melakukan retrieval-augmented generation (RAG) dengan membuat teks menggunakan fungsi AI.GENERATE_TEXT. RAG adalah framework AI yang menggabungkan kekuatan sistem pengambilan informasi (seperti penelusuran dan database) dengan kemampuan model bahasa besar (LLM) generatif. Dengan menggabungkan data dan pengetahuan dasar Anda beserta keterampilan bahasa LLM, grounding akan memberikan hasil yang lebih akurat, aktual, dan relevan dengan kebutuhan spesifik Anda.

Tutorial ini menggunakan data dari set data publik Google Patents Research.

Tujuan

  • Membuat model jarak jauh BigQuery ML melalui model embedding Gemini Enterprise Agent Platform.
  • Menggunakan model jarak jauh dengan fungsi AI.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.
  • Melakukan RAG dengan membuat teks menggunakan fungsi AI.GENERATE_TEXT, dan menggunakan hasil penelusuran vektor untuk menambah input perintah dan meningkatkan hasil.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud 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.

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

Untuk mengetahui informasi selengkapnya, lihat halaman harga berikut:

Sebelum memulai

  1. 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 izin resourcemanager.projects.create. Pelajari cara memberikan peran.

    Buka pemilih project

  2. Pastikan penagihan diaktifkan untuk Google Cloud project Anda.

  3. Aktifkan BigQuery, Cloud Storage, dan Gemini Enterprise 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 Admin Service Usage (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

    Aktifkan API

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial ini, minta administrator Anda untuk memberi Anda peran IAM berikut:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Membuat set data

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

Konsol

  1. Di Google Cloud konsol, 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 hal berikut:

    • Untuk Dataset ID, masukkan bqml_tutorial.

    • Untuk Data location, pilih US.

    Biarkan setelan default yang tersisa seperti apa adanya.

  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 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"
  }
}

Membuat model jarak jauh untuk pembuatan embedding teks

Di bagian ini, Anda akan membuat model jarak jauh yang merepresentasikan model pembuatan embedding teks Agent Platform yang dihosting. Saat membuat model, Anda menggunakan koneksi DEFAULT untuk memanggil Text embeddings API guna mendapatkan embedding teks menggunakan model text-embedding-005. Jika Anda tidak memiliki koneksi default, pernyataan CREATE MODEL akan membuatnya untuk Anda.

Untuk membuat model embedding teks, ikuti langkah-langkah berikut:

  1. Di Google Cloud konsol, buka halaman BigQuery.

    Buka BigQuery

  2. Untuk membuat model, tempel perintah ini ke editor kueri, lalu klik Run:

    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 dapat diakses melalui panel Explorer.

    Anda akan menerima pesan konfirmasi seperti berikut: Successfully created model named embedding_model.

Membuat embedding teks

Buat embedding teks dari abstrak paten menggunakan fungsi AI.GENERATE_EMBEDDING, lalu tulis ke tabel BigQuery sehingga dapat di telusuri.

Pembuatan embedding menggunakan fungsi AI.GENERATE_EMBEDDINGmungkin gagal karena kuota LLM Agent Platform atau ketidaktersediaan layanan. Jika gagal, detail error akan ditampilkan di kolom status dalam hasil kueri.

Untuk metode pembuatan embedding teks alternatif di BigQuery, lihat tutorial Menyematkan teks dengan model TensorFlow yang telah dilatih sebelumnya.

Untuk membuat embedding teks, tempel perintah ini ke editor kueri, lalu klik Run:

  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 beberapa menit untuk diselesaikan. Anda akan menerima pesan konfirmasi seperti berikut:This statement created a new table named embeddings.

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 dan menampilkan hasil yang lebih perkiraan, tetapi recall akan berkurang.

Untuk membuat indeks vektor, Anda menggunakan CREATE VECTOR INDEX pernyataan bahasa definisi data (DDL). Untuk memverifikasi bahwa indeks tersedia, Anda membuat kueri tampilan INFORMATION_SCHEMA.VECTOR_INDEXES untuk memverifikasi bahwa nilai kolom coverage_percentage lebih besar dari 0, dan nilai kolom last_refresh_time bukan NULL.

Untuk membuat dan memverifikasi indeks vektor, ikuti langkah-langkah berikut:

  1. Untuk membuat indeks vektor, tempel perintah ini ke editor kueri, dan lalu klik Run:

    CREATE OR REPLACE VECTOR INDEX my_index
    ON `bqml_tutorial.embeddings`(embedding)
    OPTIONS(index_type = 'IVF',
      distance_type = 'COSINE',
      ivf_options = '{"num_lists":500}');

    Anda akan menerima pesan konfirmasi seperti berikut: The vector index creation on table bqml_tutorial.embeddings was initiated. Please query bqml_tutorial.INFORMATION_SCHEMA.VECTOR_INDEXES to check the progress of the index.

    Membuat indeks vektor biasanya hanya memerlukan waktu beberapa detik. Indeks vektor memerlukan waktu dua hingga tiga menit lagi untuk diisi secara asinkron.

  2. Untuk memverifikasi bahwa indeks siap digunakan, tempel perintah ini ke editor kueri, lalu klik Jalankan:

    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.

    Setelah Anda menjalankan kueri, indeks akan tersedia jika kolom index_status dalam hasil menunjukkan bahwa indeks ACTIVE, dan jika nilai coverage_percentage adalah 100.

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 num_lists opsi indeks vektor.

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.

Untuk melakukan penelusuran kemiripan teks, tempel perintah ini ke editor kueri, lalu klik Run:

  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

Untuk membuat model jarak jauh yang merepresentasikan model pembuatan teks Agent Platform yang dihosting, tempel perintah ini ke editor kueri, lalu klik Run:

  CREATE OR REPLACE MODEL bqml_tutorial.text_model
    REMOTE WITH CONNECTION DEFAULT
    OPTIONS (ENDPOINT = 'gemini-2.5-flash');
  

Anda akan menerima pesan konfirmasi yang mirip dengan berikut ini: Successfully created model named text_model.

Membuat teks yang ditambah dengan hasil penelusuran vektor

Berikan hasil penelusuran sebagai perintah untuk membuat teks dengan fungsi AI.GENERATE_TEXT.

Untuk menambah hasil penelusuran vektor, tempel perintah ini ke editor kueri, lalu klik Run:

  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

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.

  1. Di Google Cloud konsol, buka halaman Manage resources.

    Buka Kelola resource

  2. Pada daftar project, pilih project yang Anda ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Atau, untuk menyimpan project dan menghapus resource yang digunakan dalam tutorial ini, ikuti langkah-langkah berikut:

  1. Buka halaman BigQuery.

    Buka BigQuery

  2. Di panel kiri, luaskan project Anda, lalu klik Datasets.

  3. Untuk set data bqml_tutorial, klik Open actions > Delete.

  4. Di dialog Delete dataset, klik Delete untuk mengonfirmasi.

  5. Di panel kiri, klik Connections.

  6. Untuk koneksi __default_cloudresource_connection__, klik Open actions > Delete.

  7. Di dialog Delete connection, masukkan delete, lalu klik Delete untuk mengonfirmasi.

Langkah berikutnya