Halaman ini menunjukkan cara menggunakan Cloud SQL untuk PostgreSQL untuk melakukan tindakan berikut:
Membuat dan menyimpan embedding vektor berdasarkan model.
Mengindeks dan menyematkan kueri menggunakan ekstensi
pgvector
.
Untuk mengetahui informasi selengkapnya, lihat Membangun aplikasi AI generatif menggunakan Cloud SQL.
Cloud SQL memungkinkan Anda menggunakan model penyematan yang dihosting oleh Vertex AI untuk menerjemahkan string teks menjadi embedding, yang merupakan representasi model dari makna semantik teks yang diberikan sebagai vektor numerik.
Cloud SQL menerapkan penyematan sebagai array nilai real
. Hal ini
memungkinkan Anda menggunakan embeddings yang dihasilkan
sebagai input untuk fungsi ekstensi pgvector
.
Sebelum memulai
Beberapa persyaratannya berbeda-beda, bergantung pada apakah Anda ingin menggunakan Cloud SQL untuk membuat embedding, atau apakah Anda hanya perlu bekerja dengan penyematan yang disimpan dalam database Anda dari sumber lain.
Pembatasan regional
Untuk membuat embedding dengan Cloud SQL, instance Anda harus berada di region tempat generative AI foundational models are supported
.
Model Vertex AI yang dapat digunakan Cloud SQL untuk penyematan,
textembedding-gecko
, terletak di region tersebut.
Ekstensi database yang diperlukan
Untuk menggunakan penyematan, Anda memerlukan ekstensi google_ml_integration
, versi 1.2
atau yang lebih baru, yang diinstal pada instance Cloud SQL.
Secara opsional, jika Anda ingin menyimpan embeddings ini, dan menggunakan operator dan fungsi vektor dengan embeddings, Anda juga memerlukan ekstensi pgvector
.
Cloud SQL memiliki kedua ekstensi ini. Anda dapat menginstalnya pada setiap database di instance. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi ekstensi PostgreSQL.
Menyiapkan akses model
Sebelum dapat membuat embedding dari instance Cloud SQL, Anda harus mengonfigurasi Cloud SQL agar berfungsi dengan model penyematan teks.
Untuk menggunakan model textembeddings-gecko
berbasis cloud, Anda harus mengintegrasikan Cloud SQL dengan Vertex AI.
Berikan akses kepada pengguna database untuk menghasilkan embeddings
Berikan izin kepada pengguna database untuk menggunakan fungsi embedding
guna 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 TO USER_NAME;
Ganti kode berikut:
DB_NAME: nama database yang izinnya Anda berikan
USER_NAME: nama pengguna yang Anda beri izin
Membuat embedding
Cloud SQL menyediakan fungsi yang memungkinkan Anda menerjemahkan teks menjadi
penyematan vektor. Anda kemudian dapat menyimpan penyematan tersebut dalam database sebagai data vektor, dan secara opsional menggunakan fungsi pgvector
untuk menjalankan kueri pada data tersebut.
Membuat embedding
Untuk membuat penyematan menggunakan Cloud SQL, gunakan fungsi embedding()
yang disediakan ekstensi google_ml_integration
:
SELECT embedding( 'MODEL_IDVERSION_TAG', 'TEXT');
Lakukan penggantian berikut:
MODEL_ID: ID model yang akan dikueri.
Jika Anda menggunakan Vertex AI Model Garden, tentukan
textembedding-gecko
atautextembedding-gecko-multilingual
. Ini adalah model berbasis cloud yang dapat digunakan Cloud SQL untuk embedding teks. Untuk mengetahui informasi selengkapnya, lihat Penyematan teks.VERSION_TAG (Opsional): tag versi model yang akan dibuat kuerinya. Awali tag dengan
@
.Jika Anda menggunakan salah satu model
textembedding-gecko
dengan Vertex AI, tentukan salah satu tag versi yang tercantum dalam Versi model.TEXT: teks yang akan diterjemahkan menjadi embedding vektor.
Contoh berikut menggunakan versi 001
dari model textembedding-gecko
untuk membuat penyematan berdasarkan string literal yang disediakan:
SELECT embedding( 'textembedding-gecko@001', '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
textembedding-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_IDVERSION_TAG', SOURCE_TEXT_COLUMN);
Lakukan penggantian berikut:
TABLE: nama tabel.
EMBEDDING_COLUMN: nama kolom embedding.
MODEL_ID: ID model yang akan dikueri.
Jika Anda menggunakan Vertex AI Model Garden, tentukan
textembedding-gecko
atautextembedding-gecko-multilingual
. Ini adalah model berbasis cloud yang dapat digunakan Cloud SQL untuk embedding teks. Untuk mengetahui informasi selengkapnya, lihat Penyematan teks.VERSION_TAG (Opsional): tag versi model yang akan dibuat kuerinya. Awali tag dengan
@
.Jika Anda menggunakan salah satu model
textembedding-gecko
dengan Vertex AI, tentukan salah satu tag versi yang tercantum dalam Versi model.SOURCE_TEXT_COLUMN: nama kolom yang menyimpan teks. Anda akan menerjemahkan teks ini menjadi embeddings.
Perintah sebelumnya berfungsi untuk kolom penyematan real[]
dan vector
. Jika kolom embedding Anda berjenis vector
, Cloud SQL akan mentransmisikan nilai yang ditampilkan embedding()
dari array real
ke nilai vector
secara implisit.
Contoh berikut menggunakan versi 001
dari model textembedding-gecko
untuk mengisi kolom messages.message_vector
dengan penyematan berdasarkan konten kolom messages.message
:
UPDATE messages SET message_vector = embedding( 'textembedding-gecko@001', message);
Penyematan kueri dan indeks menggunakan pgvector
Ekstensi PostgreSQL pgvector
memungkinkan Anda menggunakan operator dan fungsi khusus vektor saat menyimpan, mengindeks, dan membuat kueri embedding teks di database. Cloud SQL memiliki pengoptimalannya sendiri
untuk menangani pgvector
, sehingga Anda dapat membuat indeks yang dapat mempercepat kueri yang melibatkan penyematan.
Membuat indeks tetangga terdekat yang dioptimalkan
pgvector
mendukung penelusuran perkiraan tetangga terdekat melalui pengindeksan. Cloud SQL menambah dukungan ini dengan fitur kuantisasi skalar yang dapat Anda tentukan saat membuat indeks. Jika Anda mengaktifkan fitur ini, kuantisasi
skalar dapat mempercepat kueri yang memiliki vektor dimensi
yang lebih besar. Selain itu, fitur ini memungkinkan Anda menyimpan vektor dengan maksimal 8.000 dimensi.
Untuk mengaktifkan kuantisasi skalar pada indeks berbasis pgvector
, tentukan ivf
sebagai
metode indeks dan SQ8
sebagai kuantizer:
CREATE INDEX ON TABLE
USING ivf (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT, quantizer = 'SQ8');
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
LIST_COUNT: jumlah daftar yang akan digunakan dengan indeks ini.
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 ivf ((CAST(EMBEDDING_COLUMN AS vector(DIMENSIONS)))'}} DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT, quantizer = 'SQ8');
Ganti DIMENSIONS dengan lebar dimensi kolom embedding.
Bagian selanjutnya menunjukkan contoh jenis indeks ini.
Membuat kueri tetangga terdekat dengan teks tertentu
Setelah Anda menyimpan dan mengindeks embedding dalam database, berbagai fungsi kueri pgvector
akan tersedia untuk Anda.
Untuk menemukan tetangga semantik terdekat ke bagian teks, gunakan
fungsi embedding()
untuk menerjemahkan teks menjadi vektor. Dalam kueri yang sama, terapkan vektor ini ke operator pgvector
tetangga terdekat, <->
, 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_IDVERSION_TAG', 'TEXT')::vector
LIMIT ROW_COUNT
Lakukan penggantian berikut:
RESULT_COLUMNS: kolom yang akan ditampilkan dari baris yang mirip secara semantik.
TABLE: tabel yang berisi penyematan yang Anda bandingkan teksnya.
EMBEDDING_COLUMN: kolom yang berisi embedding yang disimpan.
MODEL_ID: ID model yang akan dikueri.
Jika Anda menggunakan Vertex AI Model Garden, tentukan
textembedding-gecko
atautextembedding-gecko-multilingual
. Ini adalah model berbasis cloud yang dapat digunakan Cloud SQL untuk embedding teks. Untuk mengetahui informasi selengkapnya, lihat Penyematan teks.VERSION_TAG (Opsional): tag versi model yang akan dibuat kuerinya. Awali tag dengan
@
.Jika Anda menggunakan salah satu model
textembedding-gecko
dengan Vertex AI, tentukan salah satu tag versi yang tercantum dalam Versi model.TEXT: teks yang Anda inginkan agar dapat menemukan tetangga semantik yang tersimpan terdekat.
ROW_COUNT: jumlah baris yang akan ditampilkan. Jika Anda hanya menginginkan satu pencocokan 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::vector FROM TABLE
ORDER BY EMBEDDING_COLUMN
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
LIMIT ROW_COUNT
Menggunakan tag versi model untuk menghindari error
Google sangat menyarankan agar Anda selalu menggunakan versi stabil dari model embedding yang dipilih. Untuk sebagian besar model, hal ini berarti menetapkan tag versi secara eksplisit.
Memanggil fungsi embedding()
tanpa menentukan tag versi
model dianggap valid secara sintaksis, tetapi juga rentan error.
Jika Anda menghilangkan 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 informasi selengkapnya tentang versi model Vertex AI yang tersedia, lihat Versi model.
Versi model Vertex AI tertentu selalu menampilkan respons
embedding()
yang sama pada input teks tertentu. Jika Anda tidak menetapkan versi model dalam panggilan ke embedding()
, versi model baru yang dipublikasikan dapat mengubah vektor yang ditampilkan untuk input tertentu secara tiba-tiba. Hal ini dapat menyebabkan error atau perilaku tidak terduga lainnya di aplikasi Anda.
Untuk menghindari masalah ini, selalu tentukan versi model.