Halaman ini memberikan contoh alur kerja yang menunjukkan cara kerja fungsi embedding()
dengan data yang disimpan dalam tabel Anda dan fungsi kueri pgvector
. Contoh ini
menggunakan input teks biasa untuk mengambil hasil dari database yang mengandalkan penguraian semantik yang didorong oleh
model bahasa besar (LLM) dari makna teks.
Contoh skenario alur kerja penyematan
Bayangkan database yang berjalan di Cloud SQL untuk PostgreSQL dengan aspek berikut:
Database berisi tabel:
items
. Setiap baris dalam tabel ini menjelaskan item yang dijual bisnis Anda.Tabel
items
berisi kolom:complaints
. Kolom ini menyimpan keluhan pembeli yang dicatat ke dalam log 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 tersebut disimpan sebagai teks biasa, sehingga sulit untuk dikueri. Misalnya, jika ingin melihat item mana yang paling banyak menerima keluhan dari pelanggan yang menerima merchandise dengan warna yang salah, Anda dapat menjalankan kueri SQL biasa pada tabel, mencari berbagai kecocokan kata kunci. Namun, pendekatan ini hanya mencocokkan baris yang berisi kata kunci persis tersebut.
Misalnya, kueri SQL dasar seperti SELECT * FROM item WHERE complaints LIKE
"%wrong color%"
tidak menampilkan baris dengan kolom complaints
yang hanya berisi
The picture shows a blue one, but the one I received was red
.
Kueri SQL yang menggunakan penyematan yang didukung LLM dapat membantu menjembatani kesenjangan ini. Dengan menerapkan penyematan, Anda dapat membuat kueri tabel dalam contoh ini untuk item yang keluhannya memiliki kesamaan semantik dengan perintah teks tertentu, seperti "Warnanya salah".
Langkah-langkah berikut menunjukkan cara mengaktifkannya dalam contoh skenario yang dijelaskan sebelumnya.
Menyiapkan tabel
Sebelum menjalankan kueri berbasis LLM pada konten tabel items
, Anda harus
menyiapkan tabel untuk menyimpan dan mengindeks penyematan berdasarkan data
yang ada.
Membuat kolom untuk menyimpan penyematan
Tambahkan kolom ke tabel untuk menyimpan penyematan.
ALTER TABLE items ADD COLUMN complaint_embedding vector(768);
Contoh ini menentukan 768
sebagai argumen karena itulah jumlah dimensi yang didukung LLM textembedding-gecko
. Untuk mengetahui informasi selengkapnya, lihat
Membuat penyematan.
Contoh ini menerapkan jenis data vector
ke kolom untuk menyederhanakan penggunaan fungsi dan operator pgvector
dengan nilai kolom.
Isi kolom baru
Gunakan fungsi embedding()
untuk mengisi kolom baru ini dengan penyematan berdasarkan nilai teks setiap baris yang muncul di kolom complaints
. Dalam contoh ini,
Cloud SQL membuat penyematan menggunakan LLM dengan ID
textembedding-gecko
, versi 004
.
UPDATE items SET complaint_embedding = embedding('textembedding-gecko@004', complaints);
Contoh ini mentransmisikan nilai return real[]
dari embedding()
menjadi nilai vector
secara implisit untuk menyimpan nilai di kolom vector
yang Anda buat di Membuat kolom untuk menyimpan penyematan.
Membuat indeks
Untuk meningkatkan performa, tambahkan indeks ke tabel items
.
CREATE INDEX complaint_embed_idx ON items
USING hnsw (complaint_embedding vector_cosine_ops);
Untuk mengetahui informasi selengkapnya tentang cara membuat jenis indeks ini, lihat Membuat indeks tetangga terdekat. Selain itu, untuk informasi selengkapnya tentang cara menyesuaikan indeks dengan menetapkan parameter, lihat Penyematan kueri dan indeks menggunakan pgvector
.
Menjalankan kueri yang didukung LLM dengan teks yang disediakan
Anda kini dapat membuat kueri tetangga terdekat semantik di tabel items
. Kueri berikut menggunakan operator <->
yang disediakan pgvector
untuk menyelesaikan tindakan berikut:
- Urutkan baris tabel berdasarkan kedekatan semantik dengan teks
It was the wrong color
. - Menampilkan 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@004', 'It was the wrong color')::vector LIMIT 10;