Mempercepat kueri menggunakan fungsi yang dioptimalkan

Fungsi yang dioptimalkan memungkinkan Anda menggunakan model proxy yang lebih kecil dan lebih cepat untuk memproses sebagian besar kueri Anda, lalu kembali ke LLM yang lebih besar hanya jika diperlukan. Pendekatan ini mengurangi biaya operasional dan meningkatkan respons kueri. Fungsi yang dioptimalkan meminimalkan penggunaan LLM untuk tugas klasifikasi atau pemfilteran baris demi baris, yang dapat ditangani dengan lebih baik oleh model proxy.

Fungsi AI AlloyDB seperti ai.if() dapat memiliki latensi tinggi karena panggilan jarak jauh ke model bahasa besar (LLM). Fungsi yang dioptimalkan mengatasi masalah latensi ini dengan menggunakan model proxy yang lebih kecil dan dilatih secara lokal untuk memproses kueri Anda. Model ini dilatih pada sampel data Anda, menggunakan output LLM sebagai sumber kebenaran.

Pemeriksaan akurasi dilakukan saat runtime pada sampel baris menggunakan LLM. Untuk melakukan pemeriksaan ini, AlloyDB menggunakan LLM untuk membuat label bagi baris sampel dan membandingkannya dengan prediksi model proxy untuk memverifikasi akurasi. Jika pemeriksaan akurasi gagal, kueri akan kembali menggunakan LLM.

Saat Anda menggunakan fungsi yang dioptimalkan, AlloyDB akan melakukan hal berikut:

  1. Melatih model proxy: AlloyDB melatih model proxy ringan pada sampel data Anda. Hal ini terjadi di latar belakang saat Anda menggunakan pernyataan PREPARE dengan fungsi ai.if() untuk melatih model bagi kueri yang dioptimalkan.
  2. Mengeksekusi kueri: saat Anda menggunakan pernyataan EXECUTE, AlloyDB menggunakan model proxy terlatih untuk memproses kueri secara lokal.
  3. Kembali ke LLM: jika akurasi model rendah, atau jika AlloyDB tidak dapat menemukan model, AlloyDB akan otomatis kembali menggunakan LLM.

Diagram alur fungsi yang dioptimalkan

Sebelum memulai

Sebelum Anda menggunakan fungsi yang dioptimalkan, lakukan hal berikut:

  • Hubungkan ke database menggunakan psql atau AlloyDB Studio sebagai pengguna postgres atau sebagai pengguna yang memiliki akses ke tabel tempat data berada.
  • Verifikasi bahwa ekstensi google_ml_integration diinstal dan tersedia di versi 1.5.8 atau yang lebih baru.

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    extversion
    ------------
    1.5.8
    (1 row)
    
  • Konfigurasi AlloyDB agar dapat digunakan dengan Vertex AI. Untuk mengetahui informasi selengkapnya, lihat Mengintegrasikan database Anda dengan Vertex AI.

  • Pastikan tanda database berikut diaktifkan. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi flag database instance.

    • google_ml_integration.enable_model_support
    • google_ml_integration.enable_ai_query_engine
    • google_ml_integration.enable_cost_optimized_ai_functions
  • Buat embedding untuk tabel yang ingin Anda kueri. Untuk mengetahui informasi selengkapnya, lihat Membuat dan mengelola embedding otomatis untuk tabel.

  • Pertimbangkan hal berikut:

    • Kolom data sumber harus berjenis TEXT atau VARCHAR.
    • Kolom penyematan yang memberikan input ke fungsi AI yang dioptimalkan harus berjenis REAL[] atau VECTOR.
    • Fungsi yang dioptimalkan hanya tersedia di region tempat model generatif Vertex AI tersedia. Untuk mengetahui daftar region yang tersedia, lihat Lokasi AI generatif.

Menggunakan fungsi yang dioptimalkan

Untuk menggunakan fungsi yang dioptimalkan, gunakan pernyataan PREPARE dan EXECUTE dengan fungsi ai.if(). Berikut adalah contoh cara menggunakan fungsi yang dioptimalkan:

  1. Buat tabel restaurant_reviews. Kolom review yang menyimpan data sumber berjenis TEXT, dan kolom review_embedding yang digunakan untuk kueri berjenis VECTOR(768).

    CREATE TABLE restaurant_reviews (
        id SERIAL,
        name VARCHAR(64),
        city VARCHAR(64),
        review TEXT,
        review_embedding VECTOR(768)
    );
    
  2. Gunakan pernyataan PREPARE dengan fungsi ai.if() untuk menunjukkan bahwa kueri harus menggunakan fungsi yang dioptimalkan. Pernyataan ini memicu pelatihan model asinkron di latar belakang.

    Model hanya dilatih dalam kondisi berikut:

    • Ada tepat satu fungsi ai.if() dalam kueri.
    • ai.if() tidak berada di dalam subkueri.
    PREPARE positive_reviews_query AS
    SELECT r.name, r.city
    FROM restaurant_reviews r
    WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding)
    GROUP BY r.name, r.city
    HAVING COUNT(*) > 500;
    
  3. Jalankan kueri menggunakan pernyataan EXECUTE. Karena pernyataan PREPARE khusus untuk sesi saat ini, Anda harus menjalankan pernyataan EXECUTE di koneksi yang sama:

    EXECUTE positive_reviews_query;
    
    conn2=> SELECT r.name, r.city
        FROM restaurant_reviews r
        WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding)
        GROUP BY r.name, r.city
        HAVING COUNT(*) > 500;
    

    Model proxy terlatih tidak digunakan jika salah satu kondisi berikut terpenuhi:

    • Kolom konten atau penyematan yang dirujuk dalam ai.if() berubah. Kedua kolom harus berada dalam tabel yang sama.
    • Perintah yang diberikan ke kolom konten berubah.
    • Struktur kueri berubah, sehingga menghasilkan query_id yang berbeda.
    • Kueri gagal memenuhi nilai minimum pemeriksaan akurasi di awal kueri.

    Dalam kasus ini, kueri akan melakukan fallback ke penggunaan LLM, dan AlloyDB akan menampilkan peringatan.

  4. Opsional. Untuk menonaktifkan pemeriksaan validasi akurasi untuk seluruh lingkungan database, yang diperlukan karena pemeriksaan akurasi juga dilakukan selama pelatihan model, jalankan perintah berikut.

    ALTER DATABASE DATABASE_NAME SET google_ml_integration.runtime_accuracy_check = off;
    

    Ganti DATABASE_NAME dengan nama database Anda.

Melatih ulang model proxy

Jika data tabel pokok Anda berubah secara signifikan, Anda dapat melatih ulang model proxy dengan menjalankan pernyataan PREPARE lagi. Mempersiapkan ulang kueri akan menggantikan model proxy yang ada dengan memulai permintaan pelatihan baru.

Batasan

Jika Anda mengubah kolom konten sumber, kolom sematan, atau perintah yang diberikan ke fungsi ai.if(), Anda harus mengeluarkan pernyataan PREPARE baru. AlloyDB melatih fungsi yang dioptimalkan untuk memperkirakan perilaku kombinasi unik dari perintah dan data input.

Langkah berikutnya