Memahami contoh alur kerja penyematan

Halaman ini memberikan contoh alur kerja yang menunjukkan cara kerja fungsi embedding() dengan data yang disimpan dalam tabel Anda dan pgvector fungsi kueri. Contoh menggunakan input teks biasa untuk mengambil hasil dari database yang penguraian semantik berbasis model bahasa (LLM) berdasarkan 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 mendeskripsikan yang dijual oleh 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, yang memberinya akses ke LLM textembedding-gecko.

Meskipun {i>database<i} ini menyimpan keluhan tentang item, keluhan ini disimpan sebagai teks biasa, sehingga membuatnya sulit untuk dikueri. Misalnya, jika Anda ingin untuk melihat item mana yang paling banyak dikeluhkan oleh pelanggan yang menerima salah warna barang dagangan, maka Anda dapat melakukan kueri SQL biasa pada tabel, mencari berbagai kecocokan kata kunci. Namun, pendekatan ini hanya cocok 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 hanya berisi kolom complaints The picture shows a blue one, but the one I received was red.

Kueri SQL yang menggunakan embeddings yang didukung LLM dapat membantu menjembatani kesenjangan ini. Menurut menerapkan embedding, Anda dapat melakukan kueri tabel dalam contoh ini keluhan memiliki kemiripan semantik dengan perintah teks tertentu, seperti "Ini adalah salah warna".

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 embeddings berdasarkan layanan otomatis dan data skalabel.

Membuat kolom untuk menyimpan embeddings

Menambahkan kolom ke tabel untuk menyimpan embeddings.

ALTER TABLE items ADD COLUMN complaint_embedding vector(768);

Contoh ini menggunakan 768 sebagai argumen karena itulah jumlah dimensi yang didukung LLM textembedding-gecko. Untuk informasi selengkapnya, lihat Membuat embedding.

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 berbasis nilai teks setiap baris yang muncul di kolom complaints. Dalam contoh ini, Cloud SQL menghasilkan embeddings menggunakan LLM dengan ID textembedding-gecko, versi 001.

UPDATE items SET complaint_embedding = embedding('textembedding-gecko@001', complaints);

Contoh ini mentransmisikan nilai real[] yang ditampilkan 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. Indeks ini menggunakan atribut teknik kuantisasi skalar yang ditunjukkan dalam artikel 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 informasi selengkapnya tentang membuat indeks perkiraan tetangga terdekat, lihat Mengindeks.

Menjalankan kueri yang didukung LLM dengan teks yang disediakan

Anda sekarang dapat membuat kueri semantik tetangga terdekat pada tabel items. Tujuan Kueri berikut menggunakan operator <-> yang disediakan oleh 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