RAG yang Dikontrol Kualitasnya dengan Fitur Penelusuran Vektor terbaru AlloyDB.

1. Ringkasan

Di berbagai industri, penelusuran kontekstual adalah fungsi penting yang menjadi inti dan pusat aplikasi mereka. Retrieval Augmented Generation telah menjadi pendorong utama evolusi teknologi penting ini selama beberapa waktu dengan mekanisme pengambilan yang didukung AI Generatif. Model generatif, dengan jendela konteks yang besar dan kualitas output yang mengesankan, mengubah AI. RAG menyediakan cara sistematis untuk memasukkan konteks ke dalam aplikasi dan agen AI, yang mendasarkannya pada database terstruktur atau informasi dari berbagai media. Data kontekstual ini sangat penting untuk kejelasan kebenaran dan akurasi output, tetapi seberapa akurat hasil tersebut? Apakah bisnis Anda sangat bergantung pada akurasi dan relevansi kecocokan kontekstual ini? Kalau begitu, project ini akan membuat Anda penasaran.

Rahasia kotor penelusuran vektor bukan hanya membangunnya, tetapi juga mengetahui apakah kecocokan vektor Anda benar-benar bagus. Kita semua pernah mengalaminya, menatap kosong daftar hasil, bertanya-tanya, 'Apakah ini berfungsi?' Mari kita pelajari cara mengevaluasi kualitas kecocokan vektor Anda. "Jadi, apa yang berubah di RAG?", tanya Anda? Semuanya! Selama bertahun-tahun, Retrieval-Augmented Generation (RAG) terasa seperti tujuan yang menjanjikan, tetapi sulit dicapai. Sekarang, akhirnya, kita memiliki alat untuk membangun aplikasi RAG dengan performa dan keandalan yang diperlukan untuk tugas-tugas penting.

Sekarang kita sudah memiliki pemahaman dasar tentang 3 hal:

  1. Arti penelusuran kontekstual bagi agen Anda dan cara melakukannya menggunakan Vector Search.
  2. Kami juga mempelajari secara mendalam cara mendapatkan Penelusuran Vektor dalam cakupan data Anda, yaitu dalam database Anda sendiri (semua Database Google Cloud mendukungnya, jika Anda belum mengetahuinya).
  3. Kami selangkah lebih maju dari seluruh dunia dalam memberi tahu Anda cara mencapai kemampuan RAG Penelusuran Vektor yang ringan dengan performa dan kualitas tinggi menggunakan kemampuan Penelusuran Vektor AlloyDB yang didukung oleh indeks ScaNN.

Jika Anda belum mempelajari eksperimen RAG dasar, menengah, dan sedikit lanjutan tersebut, sebaiknya baca 3 artikel tersebut di sini, di sini, dan di sini dalam urutan yang tercantum.

Penelusuran Paten membantu pengguna menemukan paten yang relevan secara kontekstual dengan teks penelusuran mereka dan kami telah membuat versi ini pada masa lalu. Sekarang kita akan membangunnya dengan fitur RAG baru dan canggih yang memungkinkan penelusuran kontekstual yang dikontrol kualitasnya untuk aplikasi tersebut. Ayo kita mulai!

Gambar di bawah menunjukkan alur keseluruhan dari apa yang terjadi dalam aplikasi ini.~ 1c871099f1fde825.png

Tujuan

Memungkinkan pengguna menelusuri paten berdasarkan deskripsi tekstual dengan performa yang lebih baik dan kualitas yang lebih tinggi, sekaligus dapat menilai kualitas kecocokan yang dihasilkan menggunakan fitur RAG terbaru AlloyDB.

Yang akan Anda build

Sebagai bagian dari lab ini, Anda akan:

  1. Buat instance AlloyDB & muat Set Data Publik Paten
  2. Membuat indeks metadata dan indeks ScaNN
  3. Menerapkan Penelusuran Vektor lanjutan di AlloyDB menggunakan metode pemfilteran inline ScaNN
  4. Menerapkan fitur evaluasi Perolehan
  5. Mengevaluasi respons kueri

Persyaratan

  • Browser, seperti Chrome atau Firefox
  • Project Google Cloud yang mengaktifkan penagihan.

2. Sebelum memulai

Membuat project

  1. Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
  2. Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project .
  3. Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud. Klik Activate Cloud Shell di bagian atas konsol Google Cloud.

Gambar tombol Activate Cloud Shell

  1. Setelah terhubung ke Cloud Shell, Anda dapat memeriksa bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke project ID Anda menggunakan perintah berikut:
gcloud auth list
  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda.
gcloud config list project
  1. Jika project Anda belum ditetapkan, gunakan perintah berikut untuk menetapkannya:
gcloud config set project <YOUR_PROJECT_ID>
  1. Mengaktifkan API yang diperlukan. Anda dapat menggunakan perintah gcloud di terminal Cloud Shell:
gcloud services enable alloydb.googleapis.com compute.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudfunctions.googleapis.com aiplatform.googleapis.com

Alternatif untuk perintah gcloud adalah melalui konsol dengan menelusuri setiap produk atau menggunakan link ini.

Baca dokumentasi untuk mempelajari perintah gcloud dan penggunaannya.

3. Penyiapan database

Di lab ini, kita akan menggunakan AlloyDB sebagai database untuk data paten. Cloud SQL menggunakan cluster untuk menyimpan semua resource, seperti database dan log. Setiap cluster memiliki instance utama yang menyediakan titik akses ke data. Tabel akan menyimpan data sebenarnya.

Mari kita buat cluster, instance, dan tabel AlloyDB tempat set data paten akan dimuat.

Membuat cluster dan instance

  1. Buka halaman AlloyDB di Konsol Cloud. Cara mudah untuk menemukan sebagian besar halaman di Konsol Cloud adalah dengan menelusurinya menggunakan kotak penelusuran konsol.
  2. Pilih CREATE CLUSTER dari halaman tersebut:

f76ff480c8c889aa.png

  1. Anda akan melihat layar seperti di bawah. Buat cluster dan instance dengan nilai berikut (Pastikan nilai cocok jika Anda meng-clone kode aplikasi dari repo):
  • cluster id: "vector-cluster"
  • password: "alloydb"
  • PostgreSQL 15 / versi terbaru yang direkomendasikan
  • Region: "us-central1"
  • Jaringan: "default"

538dba58908162fb.png

  1. Saat Anda memilih jaringan default, Anda akan melihat layar seperti di bawah.

Pilih SIAPKAN KONEKSI.

7939bbb6802a91bf.png

  1. Dari sana, pilih "Gunakan rentang IP yang dialokasikan secara otomatis" dan Lanjutkan. Setelah meninjau informasi, pilih BUAT KONEKSI. 768ff5210e79676f.png
  2. Setelah jaringan disiapkan, Anda dapat melanjutkan pembuatan cluster. Klik CREATE CLUSTER untuk menyelesaikan penyiapan cluster seperti yang ditunjukkan di bawah:

e06623e55195e16e.png

Pastikan untuk mengubah ID instance (yang dapat Anda temukan pada saat konfigurasi cluster / instance) menjadi

vector-instance. Jika Anda tidak dapat mengubahnya, ingatlah untuk menggunakan ID instance Anda dalam semua referensi mendatang.

Perhatikan bahwa pembuatan Cluster akan memerlukan waktu sekitar 10 menit. Setelah berhasil, Anda akan melihat layar yang menampilkan ringkasan cluster yang baru saja Anda buat.

4. Penyerapan data

Sekarang saatnya menambahkan tabel dengan data tentang toko. Buka AlloyDB, pilih cluster utama, lalu AlloyDB Studio:

847e35f1bf8a8bd8.png

Anda mungkin perlu menunggu hingga instance selesai dibuat. Setelah selesai, login ke AlloyDB menggunakan kredensial yang Anda buat saat membuat cluster. Gunakan data berikut untuk melakukan autentikasi ke PostgreSQL:

  • Nama pengguna : "postgres"
  • Database : "postgres"
  • Sandi : "alloydb"

Setelah Anda berhasil diautentikasi ke AlloyDB Studio, perintah SQL dimasukkan di Editor. Anda dapat menambahkan beberapa jendela Editor menggunakan tanda plus di sebelah kanan jendela terakhir.

91a86d9469d499c4.png

Anda akan memasukkan perintah untuk AlloyDB di jendela editor, menggunakan opsi Jalankan, Format, dan Hapus sesuai kebutuhan.

Mengaktifkan Ekstensi

Untuk membangun aplikasi ini, kita akan menggunakan ekstensi pgvector dan google_ml_integration. Ekstensi pgvector memungkinkan Anda menyimpan dan menelusuri embedding vektor. Ekstensi google_ml_integration menyediakan fungsi yang Anda gunakan untuk mengakses endpoint prediksi Vertex AI guna mendapatkan prediksi di SQL. Aktifkan ekstensi ini dengan menjalankan DDL berikut:

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector;

Jika Anda ingin memeriksa ekstensi yang telah diaktifkan di database Anda, jalankan perintah SQL ini:

select extname, extversion from pg_extension;

Membuat tabel

Anda dapat membuat tabel menggunakan pernyataan DDL di bawah di AlloyDB Studio:

CREATE TABLE patents_data ( id VARCHAR(25), type VARCHAR(25), number VARCHAR(20), country VARCHAR(2), date VARCHAR(20), abstract VARCHAR(300000), title VARCHAR(100000), kind VARCHAR(5), num_claims BIGINT, filename VARCHAR(100), withdrawn BIGINT, abstract_embeddings vector(768)) ;

Kolom abstract_embeddings akan memungkinkan penyimpanan untuk nilai vektor teks.

Berikan Izin

Jalankan pernyataan di bawah untuk memberikan izin eksekusi pada fungsi "embedding":

GRANT EXECUTE ON FUNCTION embedding TO postgres;

Memberikan PERAN Vertex AI User ke akun layanan AlloyDB

Dari konsol IAM Google Cloud, berikan akses akun layanan AlloyDB (yang terlihat seperti ini: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) ke peran "Pengguna Vertex AI". PROJECT_NUMBER akan memiliki nomor project Anda.

Atau, Anda dapat menjalankan perintah di bawah dari Terminal Cloud Shell:

PROJECT_ID=$(gcloud config get-value project)


gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"

Memuat data paten ke dalam database

Set Data Publik Google Paten di BigQuery akan digunakan sebagai set data kami. Kita akan menggunakan AlloyDB Studio untuk menjalankan kueri. Data bersumber ke dalam file insert_scripts.sql ini dan kita akan menjalankannya untuk memuat data paten.

  1. Di konsol Google Cloud, buka halaman AlloyDB.
  2. Pilih cluster yang baru dibuat, lalu klik instance.
  3. Di menu Navigasi AlloyDB, klik AlloyDB Studio. Login dengan kredensial Anda.
  4. Buka tab baru dengan mengklik ikon Tab baru di sebelah kanan.
  5. Salin pernyataan kueri insert dari skrip insert_scripts.sql yang disebutkan di atas ke editor. Anda dapat menyalin 10-50 pernyataan penyisipan untuk demo cepat kasus penggunaan ini.
  6. Klik Run. Hasil kueri Anda akan muncul di tabel Results.

Catatan: Anda mungkin melihat bahwa skrip penyisipan memiliki banyak data di dalamnya. Hal ini karena kami telah menyertakan embedding dalam skrip penyisipan. Klik "View Raw" jika Anda mengalami masalah saat memuat file di GitHub. Hal ini dilakukan untuk menghindari masalah (pada langkah-langkah berikutnya) dalam membuat lebih dari beberapa penyematan (maksimal 20-25) jika Anda menggunakan akun penagihan kredit uji coba untuk Google Cloud.

5. Membuat Embedding untuk data paten

Pertama, mari kita uji fungsi penyematan dengan menjalankan contoh kueri berikut:

SELECT embedding('text-embedding-005', 'AlloyDB is a managed, cloud-hosted SQL database service.');

Ini akan menampilkan vektor embedding, yang terlihat seperti array float, untuk teks contoh dalam kueri. Tampilannya seperti ini:

25a1d7ef0e49e91e.png

Perbarui kolom Vektor abstract_embeddings

Jalankan DML di bawah untuk memperbarui abstrak paten dalam tabel dengan embedding yang sesuai hanya jika Anda belum menyisipkan data abstract_embeddings sebagai bagian dari skrip penyisipan:

UPDATE patents_data set abstract_embeddings = embedding( 'text-embedding-005', abstract);

Anda mungkin mengalami masalah saat membuat lebih dari beberapa penyematan (maksimal 20-25) jika menggunakan akun penagihan kredit uji coba untuk Google Cloud. Jadi, karena alasan itu, saya telah menyertakan penyematan dalam skrip penyisipan dan Anda akan memilikinya di tabel yang dimuat jika telah menyelesaikan langkah "muat data paten ke dalam database".

6. Melakukan RAG Lanjutan dengan Fitur baru AlloyDB

Setelah tabel, data, dan embedding siap, mari lakukan Penelusuran Vektor real time untuk teks penelusuran pengguna. Anda dapat mengujinya dengan menjalankan kueri di bawah:

SELECT id || ' - ' || title as title FROM patents_data ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;

Dalam kueri ini,

  1. Teks yang ditelusuri pengguna adalah: "Analisis Sentimen".
  2. Kita mengonversinya menjadi embedding dalam metode embedding() menggunakan model: text-embedding-005.
  3. "<=>" mewakili penggunaan metode jarak COSINE SIMILARITY.
  4. Kita mengonversi hasil metode embedding ke jenis vektor agar kompatibel dengan vektor yang disimpan dalam database.
  5. LIMIT 10 menunjukkan bahwa kita memilih 10 kecocokan terdekat dari teks penelusuran.

AlloyDB meningkatkan kualitas RAG Penelusuran Vektor:

Ada sejumlah hal baik yang diperkenalkan. Dua di antaranya yang berfokus pada developer adalah:

  1. Pemfilteran Inline
  2. Evaluator Perolehan

Pemfilteran Inline

Sebelumnya, sebagai developer, Anda harus melakukan kueri Vector Search dan menangani pemfilteran serta perolehan kembali. Pengoptimal Kueri AlloyDB membuat pilihan tentang cara menjalankan kueri dengan filter. Pemfilteran inline adalah teknik pengoptimalan kueri baru yang memungkinkan pengoptimal kueri AlloyDB mengevaluasi kondisi pemfilteran metadata dan penelusuran vektor secara bersamaan, dengan memanfaatkan indeks vektor dan indeks pada kolom metadata. Hal ini telah meningkatkan performa recall, sehingga developer dapat memanfaatkan apa yang ditawarkan AlloyDB secara langsung.

Pemfilteran inline paling cocok untuk kasus dengan selektivitas sedang. Saat menelusuri indeks vektor, AlloyDB hanya menghitung jarak untuk vektor yang cocok dengan kondisi pemfilteran metadata (filter fungsional Anda dalam kueri yang biasanya ditangani dalam klausa WHERE). Hal ini akan sangat meningkatkan performa untuk kueri ini, sehingga melengkapi keunggulan pasca-filter atau pra-filter.

  1. Menginstal atau mengupdate ekstensi pgvector
CREATE EXTENSION IF NOT EXISTS vector WITH VERSION '0.8.0.google-3';

Jika ekstensi pgvector sudah diinstal, upgrade ekstensi vektor ke versi 0.8.0.google-3 atau yang lebih baru untuk mendapatkan kemampuan evaluator ingatan.

ALTER EXTENSION vector UPDATE TO '0.8.0.google-3';

Langkah ini hanya perlu dijalankan jika ekstensi vektor Anda adalah <0.8.0.google-3>.

Catatan penting: Jika jumlah baris Anda kurang dari 100, Anda tidak perlu membuat indeks ScaNN karena tidak akan berlaku untuk baris yang lebih sedikit. Dalam hal ini, lewati langkah-langkah berikut.

  1. Untuk membuat indeks ScaNN, instal ekstensi alloydb_scann.
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
  1. Pertama, jalankan Kueri Vector Search tanpa indeks dan tanpa Filter Inline diaktifkan:
SELECT id || ' - ' || title as title FROM patents_data 
WHERE num_claims >= 15 
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;

Hasilnya akan terlihat seperti:

6989de0fc3f0f753.png

  1. Jalankan Explain Analyze di dalamnya: (tanpa indeks maupun Pemfilteran Inline)

908dcf87c7f00ed4.png

Waktu eksekusi adalah 2,4 md

  1. Mari kita buat indeks reguler pada kolom num_claims sehingga kita dapat memfilter berdasarkan kolom tersebut:
CREATE INDEX idx_patents_data_num_claims ON patents_data (num_claims);
  1. Mari kita buat indeks ScaNN untuk aplikasi Penelusuran Paten kita. Jalankan perintah berikut dari AlloyDB Studio Anda:
CREATE INDEX patent_index ON patents_data 
USING scann (abstract_embeddings cosine)
WITH (num_leaves=32);

Catatan penting: (num_leaves=32) berlaku untuk total set data kami dengan lebih dari 1.000 baris. Jika jumlah baris Anda kurang dari 100, Anda tidak perlu membuat indeks karena tidak akan berlaku untuk baris yang lebih sedikit.

  1. Menetapkan Pemfilteran Inline yang diaktifkan pada Indeks ScaNN:
SET scann.enable_inline_filtering = on
  1. Sekarang, jalankan kueri yang sama dengan filter dan Penelusuran Vektor di dalamnya:
SELECT id || ' - ' || title as title FROM patents_data 
WHERE num_claims >= 15 
ORDER BY abstract_embeddings <=> embedding('text-embedding-005', 'Sentiment Analysis')::vector LIMIT 10;

aa54cba2b2ada2cb.png

Seperti yang dapat Anda lihat, waktu eksekusi berkurang secara signifikan untuk Penelusuran Vektor yang sama. Indeks ScaNN dengan Pemfilteran Inline di Vector Search telah memungkinkan hal ini!!!

Selanjutnya, mari kita evaluasi recall untuk Penelusuran Vektor yang diaktifkan ScaNN ini.

Evaluator Perolehan

Perolehan dalam penelusuran kemiripan adalah persentase instance relevan yang diambil dari penelusuran, yaitu jumlah positif benar. Ini adalah metrik paling umum yang digunakan untuk mengukur kualitas penelusuran. Salah satu sumber hilangnya ingatan berasal dari perbedaan antara penelusuran perkiraan tetangga terdekat, atau aNN, dan penelusuran k (exact) tetangga terdekat, atau kNN. Indeks vektor seperti ScaNN AlloyDB menerapkan algoritma aNN, sehingga Anda dapat mempercepat penelusuran vektor pada set data besar dengan sedikit kompromi dalam perolehan. Sekarang, AlloyDB memberi Anda kemampuan untuk mengukur kompromi ini secara langsung di database untuk setiap kueri dan memastikan bahwa kompromi tersebut stabil dari waktu ke waktu. Anda dapat memperbarui parameter kueri dan indeks sebagai respons terhadap informasi ini untuk mendapatkan hasil dan performa yang lebih baik.

Apa logika di balik penarikan hasil penelusuran?

Dalam konteks penelusuran vektor, perolehan mengacu pada persentase vektor yang ditampilkan indeks yang merupakan tetangga terdekat sebenarnya. Misalnya, jika kueri tetangga terdekat untuk 20 tetangga terdekat menampilkan 19 tetangga terdekat dari kebenaran nyata, maka perolehannya adalah 19/20x100 = 95%. Perolehan adalah metrik yang digunakan untuk kualitas penelusuran, dan didefinisikan sebagai persentase hasil yang ditampilkan yang secara objektif paling dekat dengan vektor kueri.

Anda dapat menemukan recall untuk kueri vektor pada indeks vektor untuk konfigurasi tertentu menggunakan fungsi evaluate_query_recall. Fungsi ini memungkinkan Anda menyesuaikan parameter untuk mendapatkan hasil recall kueri vektor yang Anda inginkan.

Catatan Penting:

Jika Anda mengalami error penolakan izin pada indeks HNSW dalam langkah-langkah berikut, lewati seluruh bagian evaluasi recall ini untuk saat ini. Hal ini mungkin terkait dengan batasan akses karena baru dirilis pada saat codelab ini didokumentasikan.

  1. Tetapkan tanda Aktifkan Pemindaian Indeks pada indeks ScaNN & indeks HNSW:
SET scann.enable_indexscan = on
SET hnsw.enable_index_scan = on
  1. Jalankan kueri berikut di AlloyDB Studio:
SELECT
  *
FROM
  evaluate_query_recall($$
  SELECT
    id || ' - ' || title AS title,
    abstract
  FROM
    patents_data
    where num_claims >= 15
  ORDER BY
    abstract_embeddings <=> embedding('text-embedding-005',
      'sentiment analysis')::vector
  LIMIT 25 $$,
    '{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
    ARRAY['scann']);

Fungsi evaluate_query_recall menggunakan kueri sebagai parameter dan menampilkan perolehan kueri tersebut. Saya menggunakan kueri yang sama dengan yang saya gunakan untuk memeriksa performa sebagai kueri input fungsi. Saya telah menambahkan SCaNN sebagai metode indeks. Untuk mengetahui opsi parameter lainnya, lihat dokumentasi.

Recall untuk kueri Penelusuran Vektor yang telah kita gunakan:

c98f38fbe6a0b6c5.png

Saya melihat bahwa RECALL adalah 70%. Sekarang saya dapat menggunakan informasi ini untuk mengubah parameter indeks, metode, dan parameter kueri serta meningkatkan kemampuan mengingat saya untuk Penelusuran Vektor ini.

7. Uji dengan parameter kueri & indeks yang diubah

Sekarang, mari kita uji kueri dengan mengubah parameter kueri berdasarkan perolehan yang diterima.

  1. Saya telah mengubah jumlah baris dalam set hasil menjadi 7 (dari 25 sebelumnya) dan saya melihat RECALL yang lebih baik, yaitu 86%.

c12f7b92b8481ceb.png

Artinya, secara real time, saya dapat memvariasikan jumlah kecocokan yang dilihat pengguna untuk meningkatkan relevansi kecocokan sesuai dengan konteks penelusuran pengguna.

  1. Mari kita coba lagi dengan mengubah parameter indeks:

Untuk pengujian ini, saya akan menggunakan fungsi jarak kesamaan "L2 Distance", bukan "Cosine". Saya juga akan mengubah batas kueri menjadi 10 untuk menunjukkan apakah ada peningkatan kualitas hasil penelusuran meskipun jumlah kumpulan hasil penelusuran meningkat.

[SEBELUM] Kueri yang menggunakan fungsi jarak Cosine Similarity:

SELECT
  *
FROM
  evaluate_query_recall($$
  SELECT
    id || ' - ' || title AS title,
    abstract
  FROM
    patents_data
    where num_claims >= 15
  ORDER BY
    abstract_embeddings <=> embedding('text-embedding-005',
      'sentiment analysis')::vector
  LIMIT 10 $$,
    '{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
    ARRAY['scann']);

Catatan Sangat Penting: "Bagaimana kita tahu kueri ini menggunakan kesamaan COSINE?" tanya Anda. Anda dapat mengidentifikasi fungsi jarak dengan penggunaan "<=>" untuk merepresentasikan jarak Kosinus.

Link dokumen untuk fungsi jarak Vector Search.

Hasil kueri di atas adalah:

c62ef8922d6bf0b2.png

Seperti yang dapat Anda lihat, RECALL adalah 70% tanpa perubahan pada logika indeks kami. Ingat indeks ScaNN yang kita buat di langkah 6 bagian Pemfilteran Inline, "patent_index "? Indeks yang sama masih efektif saat kita menjalankan kueri di atas.

Sekarang, buat indeks dengan kueri fungsi jarak yang berbeda: Jarak L2: <->

drop index patent_index;

CREATE INDEX patent_index_L2 ON patents_data 
USING scann (abstract_embeddings L2)
WITH (num_leaves=32);

Pernyataan drop index hanya untuk memastikan tidak ada indeks yang tidak perlu pada tabel.

Sekarang, saya dapat menjalankan kueri berikut untuk mengevaluasi RECALL setelah mengubah fungsi jarak dari fungsi Vector Search saya.

[SETELAH] Kueri yang menggunakan fungsi jarak Cosine Similarity:

SELECT
  *
FROM
  evaluate_query_recall($$
  SELECT
    id || ' - ' || title AS title,
    abstract
  FROM
    patents_data
    where num_claims >= 15
  ORDER BY
    abstract_embeddings <-> embedding('text-embedding-005',
      'sentiment analysis')::vector
  LIMIT 10 $$,
    '{"scann.num_leaves_to_search":1, "scann.pre_reordering_num_neighbors":10}',
    ARRAY['scann']);

Hasil kueri di atas adalah:

6c163dd08cf4d693.png

Sungguh transformasi nilai ingatan yang luar biasa, 90%!!!

Ada parameter lain yang dapat Anda ubah dalam indeks, seperti num_leaves, dll. berdasarkan nilai perolehan yang diinginkan dan set data yang digunakan aplikasi Anda.

8. Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam posting ini, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman resource manager.
  2. Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
  4. Atau, Anda dapat menghapus cluster AlloyDB (ubah lokasi di hyperlink ini jika Anda tidak memilih us-central1 untuk cluster pada saat konfigurasi) yang baru saja kita buat untuk project ini dengan mengklik tombol DELETE CLUSTER.

9. Selamat

Selamat! Anda telah berhasil membuat kueri Penelusuran Paten kontekstual dengan Penelusuran vektor tingkat lanjut AlloyDB untuk performa tinggi dan menjadikannya benar-benar berbasis makna. Saya telah menyusun aplikasi multi-alat berbasis agen yang dikontrol kualitasnya yang menggunakan ADK dan semua hal terkait AlloyDB yang kita bahas di sini untuk membuat Agen Analisis & Penelusuran Vektor Paten yang berperforma tinggi dan berkualitas yang dapat Anda lihat di sini: https://youtu.be/Y9fvVY0yZTY

Jika Anda ingin mempelajari cara membuat agen tersebut, lihat codelab ini.

Mulai Sekarang!