Halaman ini menyediakan contoh alur kerja yang menunjukkan cara kerja fungsi embedding()
dengan data yang tersimpan di tabel Anda dan fungsi kueri pgvector
. Contoh ini
menggunakan input teks biasa untuk mengambil hasil dari database yang mengandalkan penguraian semantik
berbasis model bahasa besar (LLM) dari arti teks.
Contoh skenario alur kerja penyematan
Bayangkan database yang berjalan di Cloud SQL untuk PostgreSQL dengan aspek berikut:
Database ini berisi tabel:
items
. Setiap baris dalam tabel ini mendeskripsikan item yang dijual bisnis Anda.Tabel
items
berisi kolom:complaints
. Kolom ini menyimpan keluhan pembeli yang dicatat tentang setiap item sebagai teks biasa.Database ini terintegrasi dengan Vertex AI Model Garden, sehingga memberinya akses ke LLM
textembedding-gecko
.
Meskipun database ini menyimpan keluhan tentang item, keluhan ini disimpan sebagai teks biasa sehingga sulit untuk dikueri. Misalnya, jika ingin melihat item mana yang paling banyak dikeluhkan dari pelanggan yang menerima warna merchandise yang salah, Anda dapat menjalankan kueri SQL biasa di tabel, dengan mencari berbagai pencocokan kata kunci. Namun, pendekatan ini hanya cocok dengan baris yang berisi kata kunci yang sama persis tersebut.
Misalnya, kueri SQL dasar seperti SELECT * FROM item WHERE complaints LIKE
"%wrong color%"
tidak menampilkan baris yang kolom complaints
-nya hanya berisi
The picture shows a blue one, but the one I received was red
.
Kueri SQL yang menggunakan embedding yang didukung LLM dapat membantu menjembatani kesenjangan ini. Dengan menerapkan embedding, Anda dapat membuat kueri tabel dalam contoh ini untuk item yang mana keluhan memiliki kemiripan semantik dengan perintah teks tertentu, misalnya "Warnanya salah".
Langkah-langkah berikut menunjukkan cara mengaktifkannya dalam contoh skenario yang dijelaskan sebelumnya.
Menyiapkan tabel
Sebelum menjalankan kueri berbasis LLM pada isi tabel items
, Anda harus
menyiapkan tabel untuk menyimpan dan mengindeks embedding berdasarkan data
yang sudah ada.
Membuat kolom untuk menyimpan embedding
Menambahkan kolom ke tabel untuk menyimpan embeddings.
ALTER TABLE items ADD COLUMN complaint_embedding vector(768);
Contoh ini menetapkan 768
sebagai argumen karena jumlah tersebut adalah jumlah dimensi yang didukung LLM textembedding-gecko
. Untuk mengetahui informasi selengkapnya, lihat
Membuat embedding.
Contoh tersebut menerapkan jenis data vector
ke kolom untuk disederhanakan menggunakan fungsi dan operator pgvector
dengan nilai kolom.
Isi kolom baru
Gunakan fungsi embedding()
untuk mengisi kolom baru ini dengan embedding berdasarkan nilai setiap teks baris yang muncul di kolom complaints
. Dalam contoh ini, Cloud SQL menghasilkan embedding menggunakan LLM dengan ID textembedding-gecko
, versi 001
.
UPDATE items SET complaint_embedding = embedding('textembedding-gecko@001', complaints);
Contoh ini mentransmisikan nilai yang ditampilkan real[]
dari embedding()
ke dalam nilai vector
secara implisit untuk menyimpan nilai di kolom vector
yang Anda buat di Membuat kolom untuk menyimpan embedding.
Membuat indeks
Untuk meningkatkan performa, tambahkan indeks ke tabel items
. Indeks ini menggunakan
teknik kuantisasi skalar yang ditunjukkan pada Membuat indeks tetangga terdekat yang dioptimalkan.
CREATE INDEX complaint_embed_idx ON items
USING ivf (complaint_embedding vector_l2_ops)
WITH (lists = 20, quantizer = 'SQ8');
Untuk mengetahui informasi selengkapnya tentang cara membuat perkiraan indeks tetangga terdekat, lihat Pengindeksan.
Menjalankan kueri yang didukung LLM dengan teks yang disediakan
Anda kini dapat membuat kueri semantik tetangga terdekat pada tabel items
. Kueri
berikut menggunakan operator <->
yang disediakan pgvector
untuk menyelesaikan tindakan berikut:
- Urutkan baris tabel pada kedekatan semantik dengan teks
It was the wrong color
. - Kembalikan sepuluh keluhan teratas.
Kueri menampilkan nilai id
dan name
dari baris pertama yang diurutkan.
SELECT id, name FROM items
ORDER BY complaint_embedding
<-> embedding('textembedding-gecko@001', 'It was the wrong color')::vector LIMIT 10;