Memahami contoh alur kerja penyematan

Halaman ini memberikan contoh alur kerja yang menunjukkan cara kerja fungsi embedding() dengan data yang disimpan dalam tabel dan fungsi kueri pgvector. Contoh ini menggunakan input teks biasa untuk mengambil hasil dari database yang mengandalkan parsing 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 ini 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;

Langkah selanjutnya