Memahami contoh alur kerja penyematan

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;

Langkah selanjutnya