Membuat dan mengelola embedding vektor

Halaman ini menjelaskan cara membuat dan menyimpan sematan vektor berdasarkan model.

Untuk mengetahui informasi selengkapnya, lihat artikel Membangun aplikasi AI generatif menggunakan Cloud SQL.

Cloud SQL memungkinkan Anda menggunakan model embedding yang dihosting oleh Vertex AI untuk menerjemahkan string teks menjadi embedding, yang merupakan representasi model dari makna semantik teks tertentu sebagai vektor numerik.

Cloud SQL menerapkan embedding sebagai array nilai real. Anda dapat menggunakan embedding 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 bekerja dengan penyematan yang disimpan di database Anda dari sumber lain.

Pembatasan regional

Untuk membuat embedding Vertex AI dengan Cloud SQL, instance Anda harus berada di region yang mendukung model dasar AI generatif. Model Vertex AI yang dapat digunakan Cloud SQL untuk embedding, text-embedding, dan textembedding-gecko, berada di region tersebut.

Ekstensi database yang diperlukan

Untuk menggunakan sematan, 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 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.

Memberi pengguna database akses untuk membuat embedding

Berikan izin kepada pengguna database untuk menggunakan fungsi embedding guna menjalankan prediksi:

  1. Hubungkan klien psql ke instance utama, seperti yang dijelaskan dalam Menghubungkan menggunakan klien psql.

  2. Pada 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 ke dalam penyematan vektor. Kemudian, Anda dapat menyimpan embedding 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_IDVERSION_TAG', 'TEXT');

Lakukan penggantian berikut:

  • MODEL_ID: ID model yang akan dikueri.

    Jika Anda menggunakan Vertex AI Model Garden, tentukan text-embedding-004 atau
    text-multilingual-embedding-002. Berikut adalah model berbasis cloud yang dapat digunakan Cloud SQL untuk embedding teks. Untuk mengetahui informasi selengkapnya, lihat Embedding teks.

  • VERSION_TAG (opsional): tag versi model yang akan dikueri. Untuk versi textembedding-gecko sebelum text-embedding-004 atau text-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 ke dalam penyematan vektor.

Contoh berikut menggunakan model text-embedding-004 untuk membuat embedding 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 oleh 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 atau textembedding-gecko dengan Vertex AI, tentukan 768.

Jika ingin, jika Anda telah menginstal ekstensi pgvector, Anda dapat menyimpan sematan 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_IDVERSION_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 atau
    text-multilingual-embedding-002. Berikut adalah model berbasis cloud yang dapat digunakan Cloud SQL untuk embedding teks. Untuk mengetahui informasi selengkapnya, lihat Embedding teks.

  • VERSION_TAG (Opsional): tag versi model yang akan dikueri. Untuk versi textembedding-gecko sebelum text-embedding-004 atau text-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 embedding Anda berjenis vector, Cloud SQL akan melakukan transmisi nilai yang ditampilkan 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 membuat kueri embedding teks di database Anda. Cloud SQL memiliki pengoptimalan sendiri untuk bekerja dengan pgvector, yang memungkinkan Anda 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 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 di sekitar 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 memungkinkan pembuatan indeks yang lebih baik. Ukuran defaultnya adalah 64.

Untuk membuat indeks ini pada kolom sematan 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 sematan.

Bagian berikutnya menunjukkan contoh indeks semacam ini.

Membuat kueri neighbor terdekat dengan teks tertentu

Setelah Anda menyimpan dan mengindeks embedding di database, berbagai fungsi kueri pgvector akan tersedia untuk Anda.

Untuk menemukan tetangga semantik terdekat dari sebuah 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 melakukan transmisi 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 serupa secara semantik.

  • TABLE: tabel yang berisi embedding yang akan Anda bandingkan dengan teks.

  • EMBEDDING_COLUMN: kolom yang berisi embedding tersimpan.

  • MODEL_ID: ID model yang akan dikueri.

    Jika Anda menggunakan Vertex AI Model Garden, tentukan text-embedding-004 atau
    text-embedding-multilingual-002. Berikut adalah model berbasis cloud yang dapat digunakan Cloud SQL untuk embedding teks. Untuk mengetahui informasi selengkapnya, lihat Embedding teks.

  • VERSION_TAG (Opsional): tag versi model yang akan dikueri. 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 tersimpan terdekat.

  • ROW_COUNT: jumlah baris yang akan ditampilkan. Jika Anda hanya menginginkan kecocokan terbaik tunggal, tentukan 1 sebagai nilai untuk parameter ini.

Untuk menjalankan kueri ini dengan kolom embedding tersimpan yang menggunakan jenis data real[] alih-alih vector, transmisikan kolom ke jenis data vector:

  SELECT RESULT_COLUMNS FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <-> embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
    LIMIT ROW_COUNT

Menggunakan tag versi model untuk menghindari error

Cloud SQL sangat merekomendasikan agar Anda selalu menggunakan model sematan versi stabil yang Anda pilih. Untuk sebagian besar model, ini berarti menetapkan tag versi secara eksplisit.

Memanggil fungsi embedding() tanpa menentukan tag versi model secara sintaksis valid, tetapi dapat menimbulkan error.

Jika Anda tidak menyertakan tag versi saat menggunakan model di Vertex AI Model Garden, Vertex AI akan menggunakan versi model terbaru. 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 dapat mengubah vektor yang ditampilkan untuk input tertentu secara tiba-tiba. Hal ini dapat menyebabkan error atau perilaku tidak terduga lainnya dalam aplikasi Anda.

Langkah berikutnya