Halaman ini menjelaskan cara membuat dan menyimpan penyematan vektor berdasarkan model.
Untuk informasi selengkapnya, lihat Mem-build aplikasi AI generatif menggunakan Cloud SQL.
Cloud SQL memungkinkan Anda menggunakan model penyematan yang dihosting oleh Vertex AI untuk menerjemahkan string teks menjadi penyematan, yang merupakan representasi model dari makna semantik teks tertentu sebagai vektor numerik.
Cloud SQL menerapkan penyematan sebagai array nilai real
. Anda dapat menggunakan penyematan yang dihasilkan sebagai input untuk fungsi ekstensi pgvector
.
Sebelum memulai
Beberapa persyaratan berbeda bergantung pada apakah Anda ingin menggunakan Cloud SQL untuk membuat penyematan, atau apakah Anda hanya perlu menggunakan penyematan yang disimpan di database dari sumber lain.
Pembatasan regional
Untuk membuat penyematan 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 penyematan,
text-embedding
, dan textembedding-gecko
, berada di region tersebut.
Ekstensi database yang diperlukan
Untuk menggunakan penyematan, 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 ingin menyimpan penyematan ini, dan menggunakan fungsi dan operator vektor dengan penyematan, 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 penyematan dari instance Cloud SQL, Anda harus mengonfigurasi Cloud SQL agar berfungsi dengan model penyematan teks.
Untuk menggunakan model text-embedding
atau textembedding-gecko
berbasis cloud,
Anda harus
mengintegrasikan Cloud SQL dengan Vertex AI.
Memberikan akses kepada pengguna database untuk membuat penyematan
Berikan izin kepada pengguna database untuk menggunakan fungsi embedding
untuk menjalankan prediksi:
Hubungkan klien
psql
ke 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 TOUSER_NAME ;Ganti kode berikut:
DB_NAME: nama database yang izinnya Anda berikan
USER_NAME: nama pengguna yang diberi izin
Membuat embedding
Cloud SQL menyediakan fungsi yang memungkinkan Anda menerjemahkan teks ke dalam
penyematan vektor. Kemudian, Anda dapat menyimpan penyematan tersebut di database sebagai data vektor, dan secara opsional menggunakan fungsi pgvector
untuk menjalankan kueri di dalamnya.
Membuat embedding
Untuk membuat penyematan menggunakan Cloud SQL, gunakan fungsi embedding
yang disediakan oleh ekstensi google_ml_integration
:
SELECT embedding( 'MODEL_ID VERSION_TAG ', 'TEXT ');
Lakukan penggantian berikut:
MODEL_ID: ID model yang akan dikueri.
Jika Anda menggunakan Vertex AI Model Garden, tentukan
text-embedding-004
atautext-multilingual-embedding-002
. Ini adalah model berbasis cloud yang dapat digunakan Cloud SQL untuk penyematan teks. Untuk mengetahui informasi selengkapnya, lihat Embedding teks.VERSION_TAG (opsional): tag versi model yang akan dikueri. Untuk versi
textembedding-gecko
sebelumtext-embedding-004
atautext-multilingual-embedding-002
, tambahkan@
di awal tag.Jika Anda menggunakan salah satu model
textembedding-gecko
dengan Vertex AI, tentukan salah satu tag versi yang tercantum di Versi model.TEXT: teks yang akan diterjemahkan menjadi embedding vektor.
Contoh berikut menggunakan model text-embedding-004
untuk membuat
penyematan berdasarkan string literal yang diberikan:
SELECT embedding( 'text-embedding-004', 'Cloud SQL is a managed, cloud-hosted SQL database service.');
Menyimpan embedding yang dihasilkan
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 penyematan baru
DIMENSIONS: jumlah dimensi yang didukung model.
Jika Anda menggunakan salah satu model
text-embedding
atautextembedding-gecko
dengan Vertex AI, tentukan768
.
Secara opsional, jika telah menginstal ekstensi pgvector
, Anda dapat
menyimpan penyematan sebagai nilai vector
:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN vector(DIMENSIONS );
Setelah membuat kolom untuk menyimpan penyematan, Anda dapat mengisinya berdasarkan nilai yang sudah disimpan di kolom lain dalam tabel yang sama:
UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_ID VERSION_TAG ', SOURCE_TEXT_COLUMN );
Lakukan penggantian berikut:
TABLE: nama tabel.
EMBEDDING_COLUMN: nama kolom penyematan.
MODEL_ID: ID model yang akan dikueri.
Jika Anda menggunakan Vertex AI Model Garden, tentukan
text-embedding-004
atautext-multilingual-embedding-002
. Ini adalah model berbasis cloud yang dapat digunakan Cloud SQL untuk penyematan teks. Untuk mengetahui informasi selengkapnya, lihat Embedding teks.VERSION_TAG (Opsional): tag versi model yang akan dibuat kueri. Untuk versi
textembedding-gecko
sebelumtext-embedding-004
atautext-multilingual-embedding-002
,Prepend the tag with
@`.Jika Anda menggunakan salah satu model
textembedding-gecko
dengan Vertex AI, tentukan salah satu tag versi yang tercantum di Versi model.SOURCE_TEXT_COLUMN: nama kolom yang menyimpan teks. Anda menerjemahkan teks ini menjadi embedding.
Perintah sebelumnya berfungsi untuk kolom penyematan real[]
dan vector
. Jika
kolom penyematan Anda berjenis vector
, Cloud SQL akan mentransmisikan
nilai return embedding()
dari array real
ke nilai vector
secara implisit.
Contoh berikut menggunakan model text-embedding-004
untuk mengisi
kolom messages.message_vector
dengan penyematan berdasarkan konten
kolom messages.message
:
UPDATE messages SET message_vector = embedding( 'text-embedding-004', message);
Mengkueri dan mengindeks penyematan menggunakan pgvector
Ekstensi PostgreSQL pgvector
memungkinkan Anda menggunakan operator dan fungsi khusus vektor saat menyimpan, mengindeks, dan membuat kueri penyematan teks di database.
Cloud SQL memiliki pengoptimalan sendiri untuk menggunakan pgvector
,
sehingga Anda dapat membuat indeks yang dapat mempercepat kueri yang melibatkan penyematan.
Membuat indeks tetangga terdekat
pgvector
mendukung penelusuran perkiraan tetangga terdekat (ANN) melalui
pengindeksan.
Untuk membuat indeks HNSW
, gunakan fungsi hnsw
, 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_ops
Produk dalam:
vector_ip_ops
Jarak kosinus:
vector_cosine_ops
M (opsional): jumlah maksimum koneksi dengan titik data tetangga dalam grafik. Sebaiknya gunakan rentang 5 hingga 48. Defaultnya 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 pada kolom penyematan 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 penyematan.
Bagian berikutnya menunjukkan contoh jenis indeks ini.
Membuat kueri tetangga terdekat dengan teks yang diberikan
Setelah Anda menyimpan dan mengindeks penyematan di database, berbagai
fungsi kueri
pgvector
akan tersedia untuk Anda.
Untuk menemukan tetangga semantik terdekat dengan potongan teks, gunakan
fungsi embedding()
untuk menerjemahkan teks menjadi vektor. Dalam kueri yang sama,
terapkan vektor ini ke operator tetangga terdekat pgvector
, <->
, untuk menemukan
baris database dengan penyematan 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 VERSION_TAG ', 'TEXT ')::vector
LIMIT ROW_COUNT
Lakukan penggantian berikut:
RESULT_COLUMNS: kolom yang akan ditampilkan dari baris yang secara semantik serupa.
TABLE: tabel yang berisi penyematan yang Anda bandingkan dengan teks.
EMBEDDING_COLUMN: kolom yang berisi penyematan yang disimpan.
MODEL_ID: ID model yang akan dikueri.
Jika Anda menggunakan Vertex AI Model Garden, tentukan
text-embedding-004
atautext-embedding-multilingual-002
. Ini adalah model berbasis cloud yang dapat digunakan Cloud SQL untuk penyematan teks. Untuk mengetahui informasi selengkapnya, lihat Embedding teks.VERSION_TAG (Opsional): tag versi model yang akan dibuat kueri. Awali tag dengan
@
.Jika Anda menggunakan salah satu model
textembedding-gecko
dengan Vertex AI, tentukan salah satu tag versi yang tercantum di Versi model.TEXT: teks yang Anda inginkan sehingga Anda dapat menemukan tetangga semantik terdekat yang tersimpan.
ROW_COUNT: jumlah baris yang akan ditampilkan. Jika Anda hanya menginginkan satu kecocokan terbaik, tentukan
1
sebagai nilai untuk parameter ini.
Untuk menjalankan kueri ini dengan kolom penyematan 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 VERSION_TAG ', 'TEXT ')::vector
LIMIT ROW_COUNT
Menggunakan tag versi model untuk menghindari error
Cloud SQL sangat merekomendasikan agar Anda selalu menggunakan versi stabil model penyematan yang dipilih. Untuk sebagian besar model, ini berarti menetapkan tag versi secara eksplisit.
Memanggil fungsi embedding()
tanpa menentukan tag versi
model secara sintaksis valid, tetapi dapat rentan terhadap error.
Jika Anda menghapus tag versi saat menggunakan model di Vertex AI Model Garden, Vertex AI akan menggunakan versi terbaru model. Versi ini mungkin bukan versi stabil terbaru. Untuk mengetahui informasi selengkapnya tentang versi model Vertex AI yang tersedia, lihat Versi model.
Versi model Vertex AI tertentu selalu menampilkan respons
embedding()
yang sama untuk input teks tertentu. Jika Anda tidak menentukan versi
model dalam panggilan penyematan, versi model yang baru dipublikasikan
mungkin 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
- Mem-build aplikasi AI generatif menggunakan Cloud SQL
- Mengintegrasikan Cloud SQL dengan Vertex AI
- Memanggil prediksi online dari instance Cloud SQL
- Memahami contoh alur kerja penyematan
- Mem-build aplikasi yang didukung LLM menggunakan LangChain
- Mengelola data menggunakan Cloud SQL Studio
- Menulis SQL dengan bantuan Gemini