Ekstensi rds_embedding untuk RDS PostgreSQL mengonversi teks menjadi vektor langsung di dalam database Anda. Ekstensi ini mendukung konfigurasi model kustom dan pemanggilan model, menyederhanakan serta mempercepat konversi teks-ke-vektor untuk memenuhi kebutuhan pemrosesan data Anda.
Latar Belakang
Penyematan adalah proses pemetaan data berdimensi tinggi ke representasi berdimensi rendah. Dalam pembelajaran mesin dan pemrosesan bahasa alami (NLP), penyematan merepresentasikan simbol atau objek diskrit sebagai titik dalam ruang vektor kontinu.
Saat menghasilkan penyematan, nilai dari data vektor bergantung pada data dalam model yang dirujuk. RDS PostgreSQL mendukung ekstensi rds_embedding, yang menghasilkan data vektor dari teks dalam database berdasarkan model eksternal yang diimpor. Ekstensi ini juga mendukung penggunaan operator kesamaan vektor untuk menghitung kesamaan antara teks dalam database dan teks tertentu dalam model, memungkinkan lebih banyak skenario bisnis.
Prasyarat
Instance RDS menjalankan PostgreSQL 14 atau yang lebih baru.
Jika versi mesin utama Anda memenuhi persyaratan tetapi ekstensi tidak didukung, tingkatkan versi mesin minor. Sebagai contoh, untuk instance RDS yang menjalankan PostgreSQL 17, versi mesin minor harus 20241030 atau yang lebih baru. Untuk informasi lebih lanjut, lihat Tingkatkan Versi Mesin Minor.
Topik ini menggunakan model penyematan teks dari Alibaba Cloud Model Studio. Aktifkan Alibaba Cloud Model Studio dan dapatkan Kunci API. Untuk informasi lebih lanjut, lihat Dapatkan Kunci API Anda.
CatatanSelain model penyematan teks yang digunakan dalam topik ini, Anda dapat menggunakan fungsi yang disediakan oleh ekstensi rds_embedding untuk menambahkan model lainnya. Untuk informasi lebih lanjut, lihat Fungsi yang Disediakan oleh Ekstensi rds_embedding.
Secara default, database RDS PostgreSQL tidak dapat mengakses Internet. Untuk mengizinkan akses ke model eksternal, konfigurasikan Gateway NAT untuk VPC tempat instance RDS PostgreSQL berada. Untuk informasi lebih lanjut tentang Gateway NAT, lihat Gunakan Fitur SNAT dari Gateway NAT Internet untuk Mengakses Internet.
Aktifkan dan nonaktifkan ekstensi
Gunakan akun istimewa untuk menjalankan perintah berikut.
Aktifkan ekstensi.
Sebelum mengaktifkan ekstensi
rds_embedding, Anda harus mengaktifkan ekstensivector. Ekstensivectormenyediakan dukungan tipe data vektor yang diperlukan dan operasi vektor dasar, seperti menghitung jarak dan kesamaan antara vektor. Ekstensirds_embeddingberfokus pada mengonversi data teks berdimensi tinggi menjadi vektor.CREATE EXTENSION vector; CREATE EXTENSION rds_embedding;Nonaktifkan ekstensi.
DROP EXTENSION rds_embedding; DROP EXTENSION vector;
Contoh penggunaan
Topik ini menggunakan model text-embedding-v3 yang disediakan oleh Alibaba Cloud Model Studio sebagai contoh. Untuk informasi lebih lanjut tentang model penyematan teks, lihat Pengenalan Model.
Buat tabel uji bernama test.
CREATE TABLE test(info text, vec vector(1024) NOT NULL);Tambahkan model.
SELECT rds_embedding.add_model( 'text-embedding-v3', 'https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding', 'Authorization: Bearer sk-****', '{"input":{"texts":["%s"]},"model":"text-embedding-v3","parameters":{"text_type":"query"}}', '->''output''->''embeddings''->0->>''embedding''' );CatatanUntuk informasi lebih lanjut tentang fungsi rds_embedding.add_model(), lihat rds_embedding.add_model().
Masukkan teks dan data vektor yang sesuai.
INSERT INTO test SELECT 'Angin kencang, langit tinggi, monyet menangis sedih', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Angin kencang, langit tinggi, monyet menangis sedih')::real[]; INSERT INTO test SELECT 'Pulau jernih, pasir putih, burung terbang kembali', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Pulau jernih, pasir putih, burung terbang kembali')::real[]; INSERT INTO test SELECT 'Daun-daun tak terbatas berderak jatuh', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Daun-daun tak terbatas berderak jatuh')::real[]; INSERT INTO test SELECT 'Sungai Yangtze tanpa henti mengalir', rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Sungai Yangtze tanpa henti mengalir')::real[];CatatanUntuk informasi lebih lanjut tentang fungsi rds_embedding.get_embedding_by_model(), lihat rds_embedding.get_embedding_by_model().
Hitung kesamaan vektor antara teks
Sungai Yangtze tanpa henti mengalirdan setiap entri teks dalam tabel uji.SELECT info, vec <=> rds_embedding.get_embedding_by_model( 'text-embedding-v3', 'sk-****', 'Sungai Yangtze tanpa henti mengalir' )::real[]::vector AS distance FROM test ORDER BY vec <=> rds_embedding.get_embedding_by_model( 'text-embedding-v3', 'sk-****', 'Sungai Yangtze tanpa henti mengalir' )::real[]::vector;Hasil sampel:
info | distance ------------------------------------+-------------------- Sungai Yangtze tanpa henti mengalir | 0 Daun-daun tak terbatas berderak jatuh | 0.42740682200152647 Angin kencang, langit tinggi, monyet menangis sedih | 0.5247695147991147 Pulau jernih, pasir putih, burung terbang kembali | 0.5161883811726116 (4 baris)
