Membuat embedding

Pilih versi dokumentasi:

Halaman ini menunjukkan cara menggunakan AlloyDB sebagai alat model bahasa besar (LLM) dan membuat penyematan vektor berdasarkan LLM.

Untuk mengetahui informasi selengkapnya tentang penggunaan model ML dengan AlloyDB Omni, lihat Membangun aplikasi AI generatif.

AlloyDB memungkinkan Anda menggunakan LLM yang dihosting oleh Vertex AI untuk menerjemahkan string teks menjadi embedding, yang merupakan representasi model dari makna semantik teks yang diberikan sebagai vektor numerik. Untuk mengetahui informasi selengkapnya tentang dukungan Vertex AI untuk embedding teks, lihat Embedding teks.

Sebelum memulai

Agar AlloyDB dapat membuat embedding, pastikan Anda memenuhi persyaratan berikut:

Pembatasan regional

Anda dapat membuat embedding di region tempat AI Generatif di Vertex AI tersedia. Untuk mengetahui daftar region, lihat Lokasi AI Generatif di Vertex AI .

Untuk AlloyDB, pastikan cluster AlloyDB dan model Vertex AI yang Anda kueri berada di region yang sama.

Ekstensi database yang diperlukan

  • Pastikan ekstensi google_ml_integration diinstal di database AlloyDB Anda.

    CREATE EXTENSION google_ml_integration;
    

    Ekstensi ini disertakan dengan AlloyDB. Anda dapat menginstalnya di database mana pun dalam cluster Anda.

  • Tetapkan flag database google_ml_integration.enable_model_support ke off.

Menyiapkan akses model

Sebelum dapat membuat embedding dari database AlloyDB, Anda harus mengonfigurasi AlloyDB agar berfungsi dengan model embedding teks.

Untuk menggunakan model textembeddings-gecko berbasis cloud, Anda harus Menginstal AlloyDB Omni dengan AlloyDB AI.

Memberi pengguna database akses untuk membuat embedding

Berikan izin bagi pengguna database untuk menjalankan fungsi embedding guna menjalankan prediksi:

  1. Hubungkan klien psql ke instance utama cluster, seperti yang dijelaskan dalam Menjalankan dan menghubungkan ke AlloyDB Omni.

  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 tempat izin harus diberikan

    • USER_NAME: nama pengguna yang harus diberi izin

Membuat embedding

AlloyDB menyediakan fungsi yang memungkinkan Anda menerjemahkan teks ke dalam sematan vektor. Kemudian, Anda dapat menyimpan embedding tersebut di database sebagai data vektor, dan secara opsional menggunakan fungsi pgvector untuk mendasarkan kueri padanya.

Untuk membuat embedding menggunakan AlloyDB, gunakan fungsi embedding() yang disediakan oleh ekstensi google_ml_integration:

SELECT embedding( 'MODEL_IDVERSION_TAG', 'TEXT');

Ganti kode berikut:

  • MODEL_ID: ID model yang akan dikueri.

    Jika Anda menggunakan Vertex AI Model Garden, tentukan textembedding-gecko@003 sebagai ID model. Berikut adalah model berbasis cloud yang dapat digunakan AlloyDB untuk embedding teks. Untuk mengetahui informasi selengkapnya, lihat Embedding teks.

  • Opsional: VERSION_TAG: tag versi model yang akan dikueri. Awali tag dengan @.

    Jika Anda menggunakan salah satu model berbahasa Inggris textembedding-gecko dengan Vertex AI, tentukan salah satu tag versi—misalnya, textembedding-gecko@003, yang tercantum di Versi model.

    Google sangat menyarankan agar Anda selalu menentukan tag versi. Jika Anda tidak menentukan tag versi, AlloyDB akan selalu menggunakan versi model terbaru, yang dapat menyebabkan hasil yang tidak terduga.

  • TEXT: teks yang akan diterjemahkan ke dalam penyematan vektor.

Contoh berikut menggunakan model bahasa Inggris textembedding-gecko versi 003 untuk membuat embedding berdasarkan string literal yang diberikan:

SELECT embedding('textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');

Menyimpan embedding

Embedding yang dibuat menggunakan ekstensi google_ml_integration diimplementasikan sebagai array nilai real. Embedding yang dihasilkan ini diteruskan sebagai input untuk fungsi ekstensi pgvector.

Untuk menyimpan nilai ini dalam tabel, tambahkan kolom real[]:

ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[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);

Ganti kode berikut:

  • TABLE: nama tabel

  • EMBEDDING_COLUMN: nama kolom penyematan

  • MODEL_ID: ID model yang akan dikueri.

    Jika Anda menggunakan Vertex AI Model Garden, tentukan textembedding-gecko@003 sebagai ID model. Berikut adalah model berbasis cloud yang dapat digunakan AlloyDB untuk embedding teks. Untuk mengetahui informasi selengkapnya, lihat Embedding teks.

  • Opsional: VERSION_TAG: tag versi model yang akan dikueri. Awali tag dengan @.

    Jika Anda menggunakan salah satu model berbahasa Inggris textembedding-gecko dengan Vertex AI, tentukan salah satu tag versi—misalnya, textembedding-gecko@003, yang tercantum di Versi model.

    Google sangat menyarankan agar Anda selalu menentukan tag versi. Jika Anda tidak menentukan tag versi, AlloyDB akan selalu menggunakan versi model terbaru, yang dapat menyebabkan hasil yang tidak terduga.

  • SOURCE_TEXT_COLUMN: nama kolom yang menyimpan teks yang akan diterjemahkan ke dalam embedding

Anda juga dapat menggunakan fungsi embedding() untuk menerjemahkan teks ke dalam vektor. Anda menerapkan vektor 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 eksplisit panggilan embedding() ke vector untuk menggunakan nilai ini dengan operator pgvector.

  CREATE EXTENSION google_ml_integration;
  CREATE EXTENSION IF NOT EXISTS vector;

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

Menggunakan tag versi model untuk menghindari error

Google sangat menyarankan agar Anda selalu menggunakan model sematan yang dipilih versi stabil. Untuk sebagian besar model, hal ini berarti menetapkan tag versi secara eksplisit.

Memanggil fungsi embedding() tanpa menentukan tag versi model secara sintaksis valid, tetapi juga rentan terhadap 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 ke embedding(), versi model baru yang dipublikasikan dapat mengubah vektor yang ditampilkan untuk input tertentu secara tiba-tiba, sehingga menyebabkan error atau perilaku tidak terduga lainnya dalam aplikasi Anda.

Untuk menghindari masalah ini, selalu tentukan versi model.

Memecahkan masalah

ERROR: Model tidak ditemukan untuk model_id

Pesan error

Saat Anda mencoba membuat penyematan menggunakan fungsi embedding() atau google_ml.embedding(), error berikut akan terjadi:

ERROR: 'Model not found for model_id:

  • Upgrade ekstensi google_ml_integration dan coba buat sematan lagi.

    ALTER EXTENSION google_ml_integration UPDATE;
    

    Anda juga dapat melepaskan ekstensi, lalu membuatnya lagi.

    DROP extension google_ml_integration;
    CREATE EXTENSION google_ml_integration;
    
  • Jika Anda membuat sematan menggunakan fungsi google_ml.embedding(), pastikan model terdaftar dan Anda menggunakan model_id yang benar dalam kueri.

Langkah berikutnya