Menggunakan embedding vektor

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 informasi selengkapnya, lihat Bangun aplikasi AI generatif menggunakan Cloud SQL.

Dengan Cloud SQL, Anda dapat menggunakan model penyematan yang dihosting oleh Vertex AI untuk menerjemahkan suatu {i>string <i}teks ke dalam embedding, yang merupakan representasi model dari semantik teks tertentu yang bermakna sebagai vektor numerik.

Cloud SQL menerapkan penyematan sebagai array nilai real. Ini memungkinkan Anda menggunakan penyematan sebagai input untuk fungsi ekstensi pgvector.

Sebelum memulai

Beberapa persyaratan berbeda-beda tergantung apakah Anda ingin menggunakan Cloud SQL untuk menghasilkan embedding, atau apakah Anda hanya perlu melakukan dengan embedding 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 wilayah 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 di database apa pun di instance Anda. Untuk selengkapnya 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 bagi pengguna database untuk menggunakan embedding fungsi untuk menjalankan prediksi:

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

  2. 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 ke dalam embedding vektor. Anda kemudian dapat menyimpan embedding tersebut dalam database sebagai vektor data, dan jika perlu, gunakan fungsi pgvector untuk menjalankan kueri pada data tersebut.

Membuat embedding

Untuk membuat penyematan menggunakan Cloud SQL, gunakan embedding() fungsi 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, lalu tentukan textembedding-gecko atau
    textembedding-gecko-multilingual. Ini adalah model berbasis cloud yang Cloud SQL dapat digunakan untuk embedding teks. Untuk informasi selengkapnya, lihat Penyematan teks.

  • VERSION_TAG (Opsional): tag versi untuk model yang akan kueri. Awali tag dengan @.

    Jika Anda menggunakan salah satu model textembedding-gecko dengan Vertex AI, lalu menentukan salah satu tag versi yang tercantum di 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 digunakan model didukung.

    Jika Anda menggunakan salah satu model textembedding-gecko dengan Vertex AI, lalu tentukan 768.

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 penyematan, Anda dapat mengisinya berdasarkan nilai-nilai yang sudah tersimpan 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, lalu tentukan textembedding-gecko atau
    textembedding-gecko-multilingual. Ini adalah model berbasis cloud yang Cloud SQL dapat digunakan untuk embedding teks. Untuk informasi selengkapnya, lihat Penyematan teks.

  • VERSION_TAG (Opsional): tag versi untuk model yang akan kueri. Awali tag dengan @.

    Jika Anda menggunakan salah satu model textembedding-gecko dengan Vertex AI, lalu menentukan salah satu tag versi yang tercantum di 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 penyematan berjenis vector, lalu Cloud SQL mentransmisikan nilai return 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 messages.message kolom:

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 Anda menyimpan, mengindeks, dan membuat kueri teks embedding di database Anda. Cloud SQL memiliki pengoptimalan tersendiri untuk menangani pgvector, sehingga Anda dapat membuat indeks yang dapat mempercepat kueri yang melibatkan embedding.

Membuat indeks tetangga terdekat yang dioptimalkan

pgvector mendukung penelusuran perkiraan tetangga terdekat melalui pengindeksan. Cloud SQL menambah dukungan ini dengan kuantisasi skalar yang dapat Anda tetapkan ketika Anda membuat indeks. Jika Anda mengaktifkan fitur ini, kuantisasi dapat mempercepat kueri yang memiliki dimensi lebih besar vektor. Selain itu, fitur ini memungkinkan Anda menyimpan vektor dengan maksimal 8.000 dimensi.

Untuk mengaktifkan kuantisasi skalar pada indeks berbasis pgvector, tentukan ivf sebagai indeks dan SQ8 sebagai quantizer:

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 ini indeks. 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 di database, berbagai pgvector kueri fungsionalitas yang 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 {i>database<i} 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 secara semantik baris serupa.

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

  • EMBEDDING_COLUMN: kolom yang berisi embedding yang disimpan.

  • MODEL_ID: ID model yang akan dikueri.

    Jika Anda menggunakan Vertex AI Model Garden, lalu tentukan textembedding-gecko atau
    textembedding-gecko-multilingual. Ini adalah model berbasis cloud yang Cloud SQL dapat digunakan untuk embedding teks. Untuk informasi selengkapnya, lihat Penyematan teks.

  • VERSION_TAG (Opsional): tag versi untuk model yang akan kueri. Awali tag dengan @.

    Jika Anda menggunakan salah satu model textembedding-gecko dengan Vertex AI, lalu menentukan salah satu tag versi yang tercantum di Versi model.

  • TEXT: teks yang Anda inginkan sehingga Anda dapat menemukan nilai terdekat yang disimpan tetangga semantik.

  • 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 model embedding yang dipilih. Untuk sebagian besar model, hal ini berarti menetapkan tag versi secara eksplisit.

Memanggil fungsi embedding() tanpa menentukan tag versi model ini valid secara sintaksis, tetapi juga rentan terhadap error.

Jika Anda menghilangkan tag versi saat menggunakan model di Vertex AI Model Garden, lalu Vertex AI menggunakan model. Versi ini mungkin bukan versi stabil terbaru. Untuk selengkapnya informasi tentang versi model Vertex AI yang tersedia, lihat Versi model.

Versi model Vertex AI tertentu selalu menampilkan respons Respons embedding() terhadap input teks tertentu. Jika Anda tidak menentukan model dalam panggilan Anda ke embedding(), lalu model baru yang dipublikasikan dapat mengubah vektor yang ditampilkan untuk input tertentu secara tiba-tiba. Hal ini dapat menyebabkan kesalahan atau perilaku tidak terduga lainnya di aplikasi Anda.

Untuk menghindari masalah ini, selalu tentukan versi model.

Langkah selanjutnya