Halaman ini menjelaskan cara membuat dan menyimpan embedding vektor berdasarkan model.
Untuk mengetahui informasi selengkapnya, lihat Membangun aplikasi AI generatif menggunakan Cloud SQL.
Cloud SQL memungkinkan Anda menggunakan model embedding yang dihosting oleh Vertex AI untuk menerjemahkan string teks ke dalam embedding, yang merupakan representasi model dari makna semantik teks yang diberikan sebagai vektor numerik.
Cloud SQL mengimplementasikan embedding sebagai array nilai real. Anda dapat menggunakan embedding yang dibuat sebagai input untuk fungsi ekstensi pgvector.
Sebelum memulai
Beberapa persyaratan berbeda bergantung pada apakah Anda ingin menggunakan Cloud SQL untuk membuat embedding, atau apakah Anda hanya perlu menggunakan embedding yang disimpan di database dari sumber lain.
Batasan regional
Untuk membuat embedding Vertex AI dengan Cloud SQL, instance Anda harus berada di region tempat
model dasar AI generatif didukung.
Model Vertex AI yang dapat digunakan Cloud SQL untuk embedding, text-embedding dan gemini-embedding, berada di region tersebut.
Ekstensi database yang diperlukan
Untuk menggunakan embedding, instal ekstensi
google_ml_integration
di instance Cloud SQL Anda. Untuk model Vertex AI, instal versi 1.2 atau yang lebih baru. Untuk model pihak ketiga atau kustom, instal versi 1.4.2 atau yang lebih baru.
Secara opsional, jika Anda ingin menyimpan embedding ini, dan menggunakan fungsi dan
operator vektor dengan embedding, Anda juga memerlukan ekstensi
pgvector.
Cloud SQL memiliki kedua ekstensi ini. Anda dapat menginstalnya di database mana pun di instance Anda. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi ekstensi PostgreSQL.
Menyiapkan akses model
Sebelum dapat membuat embedding dari instance Cloud SQL, Anda harus mengonfigurasi Cloud SQL untuk menggunakan model embedding teks.
Untuk menggunakan model text-embedding atau gemini-embedding berbasis cloud,
Anda harus
mengintegrasikan Cloud SQL dengan Vertex AI.
Memberikan akses kepada pengguna database untuk membuat embedding
Berikan izin kepada pengguna database untuk menggunakan fungsi embedding guna menjalankan prediksi:
Hubungkan klien
psqlke instance utama, seperti yang dijelaskan dalam Menghubungkan menggunakan klien psql.Di command prompt
psql, hubungkan ke database dan berikan izin:\c DB_NAME GRANT EXECUTE ON FUNCTION embedding TO USER_NAME;Ganti kode berikut:
DB_NAME: nama database yang izinnya Anda berikan
USER_NAME: nama pengguna yang izinnya Anda berikan
Membuat embedding
Cloud SQL menyediakan fungsi yang memungkinkan Anda menerjemahkan teks ke dalam embedding vektor. Anda kemudian dapat menyimpan embedding tersebut di database sebagai data vektor, dan secara opsional menggunakan fungsi pgvector untuk menjalankan kueri di dalamnya.
Membuat embedding
Untuk membuat embedding menggunakan Cloud SQL, gunakan fungsi embedding yang disediakan oleh ekstensi google_ml_integration:
SELECT embedding( 'MODEL_ID_WITH_VERSION', 'TEXT');
Lakukan penggantian berikut:
MODEL_ID_WITH_VERSION: ID model yang memenuhi syarat sepenuhnya untuk dikueri.
Jika Anda menggunakan Vertex AI Model Garden, tentukan
text-embedding-004atautext-multilingual-embedding-002. Ini adalah model berbasis cloud yang dapat digunakan Cloud SQL untuk embedding teks. Untuk mengetahui informasi selengkapnya, lihat Embedding teks.TEXT: teks yang akan diterjemahkan ke dalam embedding vektor.
Contoh berikut menggunakan model text-embedding-004 untuk membuat embedding berdasarkan string literal yang disediakan:
SELECT embedding( 'text-embedding-004', 'Cloud SQL is a managed, cloud-hosted SQL database service.');
Menyimpan embedding yang dibuat
Nilai yang ditampilkan dari fungsi embedding() adalah array nilai real.
Untuk menyimpan nilai ini dalam tabel, tambahkan kolom real[]:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[DIMENSIONS];
Lakukan penggantian berikut:
TABLE: nama tabel
EMBEDDING_COLUMN: nama kolom embedding baru
DIMENSIONS: jumlah dimensi yang didukung model.
Jika Anda menggunakan salah satu model
text-embeddingdengan Vertex AI, tentukan768.
Secara opsional, jika telah menginstal ekstensi pgvector, Anda dapat
menyimpan embedding sebagai nilai vector:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN vector(DIMENSIONS);
Setelah membuat kolom untuk menyimpan embedding, Anda dapat mengisinya berdasarkan nilai yang sudah disimpan di kolom lain dalam tabel yang sama:
UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_ID_WITH_VERSION', SOURCE_TEXT_COLUMN);
Lakukan penggantian berikut:
TABLE: nama tabel.
EMBEDDING_COLUMN: nama kolom embedding.
MODEL_ID_WITH_VERSION: ID model yang memenuhi syarat sepenuhnya untuk dikueri.
Jika Anda menggunakan Vertex AI Model Garden, tentukan
text-embedding-004atautext-multilingual-embedding-002. Ini adalah model berbasis cloud yang dapat digunakan Cloud SQL untuk embedding teks. Untuk mengetahui informasi selengkapnya, lihat Embedding teks.SOURCE_TEXT_COLUMN: nama kolom yang menyimpan teks. Anda menerjemahkan teks ini ke dalam embedding.
Perintah sebelumnya berfungsi untuk kolom embedding real[] dan vector. Jika kolom embedding Anda berjenis vector, Cloud SQL akan mentransmisikan nilai yang ditampilkan dari embedding() dari array real ke nilai vector secara implisit.
Contoh berikut menggunakan model text-embedding-004 untuk mengisi kolom
messages.message_vector dengan embedding berdasarkan konten kolom
messages.message:
UPDATE messages SET message_vector = embedding( 'text-embedding-004', message);
Mengkueri dan mengindeks embedding menggunakan pgvector
Ekstensi PostgreSQL pgvector memungkinkan Anda menggunakan operator dan fungsi khusus vektor saat menyimpan, mengindeks, dan mengkueri embedding teks di database.
Cloud SQL memiliki pengoptimalan sendiri untuk menggunakan pgvector, sehingga Anda dapat membuat indeks yang dapat mempercepat kueri yang melibatkan embedding.
Membuat indeks tetangga terdekat
pgvector mendukung penelusuran perkiraan tetangga terdekat (ANN) melalui
pengindeksan.
Untuk membuat indeks HNSW, gunakan hnsw
fungsi, seperti yang ditunjukkan dalam contoh berikut:
CREATE INDEX ON TABLE
USING hnsw (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (m = M, ef_construction = EF_CONSTRUCTION);
Lakukan penggantian berikut:
TABLE: tabel tempat Anda menambahkan indeks.
EMBEDDING_COLUMN: kolom yang menyimpan data
vector.DISTANCE_FUNCTION: fungsi jarak yang akan digunakan dengan indeks ini. Pilih salah satu opsi berikut:
Jarak L2:
vector_l2_opsProduk dalam:
vector_ip_opsJarak kosinus:
vector_cosine_ops
M (opsional): jumlah maksimum koneksi dengan titik data tetangga dalam grafik. Sebaiknya gunakan rentang 5 hingga 48. Nilai default-nya adalah 16.
EF_CONSTRUCTION (opsional): ukuran daftar yang menyimpan kandidat terdekat selama traversal grafik saat membuat indeks. Nilai yang lebih tinggi akan membuat algoritma mempertimbangkan lebih banyak kandidat, sehingga indeks yang lebih baik dapat dibuat. Ukuran default-nya adalah 64.
Untuk membuat indeks ini di kolom embedding yang menggunakan jenis data real[], bukan vector, transmisikan kolom ke jenis data vector:
CREATE INDEX ON TABLE
USING hnsw ((CAST(EMBEDDING_COLUMN AS vector(DIMENSIONS))) DISTANCE_FUNCTION)
WITH (m = M, ef_construction = EF_CONSTRUCTION);
Ganti DIMENSIONS dengan lebar dimensi kolom embedding.
Bagian berikutnya menunjukkan contoh indeks jenis ini.
Membuat kueri tetangga terdekat dengan teks yang diberikan
Setelah menyimpan dan mengindeks embedding di database, Anda dapat menggunakan berbagai fungsi
pgvectorkueri.
Untuk menemukan tetangga semantik terdekat ke bagian teks, gunakan fungsi embedding() untuk menerjemahkan teks ke dalam vektor. Dalam kueri yang sama,
terapkan vektor ini ke operator tetangga terdekat pgvector, <->, untuk menemukan
baris database dengan embedding yang paling mirip secara semantik.
Karena embedding() menampilkan array real, Anda harus mentransmisikan panggilan embedding()
ke vector untuk menggunakan nilai ini dengan operator pgvector.
SELECT RESULT_COLUMNS FROM TABLE
ORDER BY EMBEDDING_COLUMN
<-> embedding('MODEL_ID_WITH_VERSION', 'TEXT')::vector
LIMIT ROW_COUNT
Lakukan penggantian berikut:
RESULT_COLUMNS: kolom yang akan ditampilkan dari baris yang mirip secara semantik.
TABLE: tabel yang berisi embedding yang Anda gunakan untuk membandingkan teks.
EMBEDDING_COLUMN: kolom yang berisi embedding yang disimpan.
MODEL_ID_WITH_VERSION: ID model yang memenuhi syarat sepenuhnya untuk dikueri.
Jika Anda menggunakan Vertex AI Model Garden, tentukan
text-embedding-004atautext-embedding-multilingual-002. Ini adalah model berbasis cloud yang dapat digunakan Cloud SQL untuk embedding teks. Untuk mengetahui informasi selengkapnya, lihat Embedding teks.TEXT: teks yang Anda inginkan sehingga Anda dapat menemukan tetangga semantik tersimpan terdekat.
ROW_COUNT: jumlah baris yang akan ditampilkan. Jika Anda hanya menginginkan satu kecocokan terbaik, tentukan
1sebagai nilai untuk parameter ini.
Untuk menjalankan kueri ini dengan kolom embedding tersimpan yang menggunakan jenis data real[], bukan vector, transmisikan kolom ke jenis data vector:
SELECT RESULT_COLUMNS FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<-> embedding('MODEL_ID_WITH_VERSION', 'TEXT')::vector
LIMIT ROW_COUNT
Menentukan ID model yang memenuhi syarat sepenuhnya untuk menghindari error
Cloud SQL sangat merekomendasikan agar Anda selalu menggunakan versi stabil dari model embedding yang dipilih. Untuk sebagian besar model, hal ini berarti menetapkan versi secara eksplisit. Misalnya, gunakan gemini-embedding-001 alih-alih
gemini-embedding.
Memanggil fungsi embedding() tanpa menentukan versi model
secara sintaksis valid, tetapi
tidak stabil dan dapat rentan terhadap error.
Untuk mengetahui informasi selengkapnya tentang versi model Vertex AI yang tersedia, lihat Model stabil terbaru.
Versi model Vertex AI tertentu selalu menampilkan respons embedding() yang sama ke input teks tertentu. Jika Anda tidak menentukan versi model dalam panggilan embedding, ada kemungkinan versi model yang baru dipublikasikan dapat tiba-tiba mengubah vektor yang ditampilkan untuk input tertentu. Hal ini dapat menyebabkan error atau perilaku tidak terduga lainnya di aplikasi Anda.
Langkah berikutnya
- Membangun aplikasi AI generatif menggunakan Cloud SQL
- Mengintegrasikan Cloud SQL dengan Vertex AI
- Memanggil prediksi online dari instance Cloud SQL
- Memahami contoh alur kerja embedding
- Membangun aplikasi yang didukung LLM menggunakan LangChain
- Mengelola data Anda menggunakan Cloud SQL Studio
- Menulis SQL dengan bantuan Gemini