All Products
Search
Document Center

ApsaraDB RDS:Generasi vektor (rds_embedding)

Last Updated:Aug 13, 2026

Saat membangun pipeline pencarian semantik atau Generasi yang Diperkaya dengan Pengambilan Data (RAG), pembuatan penyematan teks biasanya memerlukan layanan terpisah di luar database Anda. Ekstensi rds_embedding memungkinkan Anda memanggil model penyematan eksternal langsung dari ApsaraDB RDS for PostgreSQL, menyimpan vektor hasilnya bersama data Anda, dan menjalankan kueri kemiripan kosinus — semuanya dalam database. Karena risiko keamanan, ekstensi ini dibatasi agar tidak dapat dibuat pada semua versi. Konten dalam topik ini hanya berlaku untuk instans tempat ekstensi tersebut sudah dibuat.

Peringatan

Karena risiko keamanan, ekstensi rds_embedding dibatasi agar tidak dapat dibuat pada semua versi mesin mayor dan minor RDS PostgreSQL. Peningkatan versi mesin minor tidak mencabut pembatasan ini. Instans tempat ekstensi sudah dibuat tidak terpengaruh dan dapat terus menggunakannya. Konten dalam topik ini hanya berlaku untuk instans semacam itu.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Instans RDS yang menjalankan PostgreSQL 14 atau versi lebih baru

  • Instans tempat ekstensi rds_embedding sudah dibuat. Ekstensi ini dibatasi agar tidak dapat dibuat pada semua versi, dan peningkatan versi mesin minor tidak mencabut pembatasan ini.

  • Kunci API Alibaba Cloud Model Studio. Untuk mendapatkannya, lihat Dapatkan kunci API Anda.

  • Gateway NAT yang dikonfigurasi untuk virtual private cloud (VPC) tempat instans RDS Anda berjalan. Instans RDS PostgreSQL tidak dapat mengakses Internet secara default, sehingga diperlukan Gateway NAT untuk memanggil model penyematan eksternal.

    Langkah-langkah konfigurasi gateway NAT

    Langkah 1: Buat gerbang NAT Internet

    1. Masuk ke Konsol Gateway NAT.

    2. Pada halaman Internet NAT Gateway, klik Create Internet NAT Gateway.

    3. Jika ini pertama kalinya Anda membuat internet NAT gateway, klik Create Service-Linked Role di bagian Create Service-Linked Role.

    4. Pada halaman pembelian, konfigurasikan parameter berikut dan klik Buy Now.

      Catatan

      Untuk daftar lengkap parameter, lihat Gunakan fitur SNAT internet NAT gateway untuk mengakses Internet.

      Parameter

      Deskripsi

      Region

      Pilih wilayah yang sama dengan instans RDS Anda.

      VPC

      Pilih VPC yang sama dengan instans RDS Anda. Temukan VPC tersebut di halaman Database Connection di Konsol ApsaraDB RDS.

      Associate vSwitch

      Pilih vSwitch yang sama dengan instans RDS Anda. Temukan vSwitch tersebut di halaman Database Connection di Konsol ApsaraDB RDS.

      Access Mode

      Pilih Configure Later.

    5. Pada halaman Confirm, tinjau detailnya, centang kotak Ketentuan Layanan, lalu klik Confirm. Gateway akan muncul di halaman Internet NAT Gateway.

      Create NAT gateway

    Langkah 2: Asosiasikan alamat IP elastis (EIP) dengan gateway

    1. Pada halaman Internet NAT Gateway, klik ID gateway untuk membuka tab Informasi Dasar.

    2. Pada tab Associated Elastic IP Address, klik Bind Elastic IP Address.

    3. Pada kotak dialog Associate EIP, pilih Purchase and Associate EIP.

      Bind EIP

    4. Klik OK. EIP akan muncul di tab Associated Elastic IP Address.

      Bound EIP

    Langkah 3: Buat entri SNAT

    1. Pada halaman Internet NAT Gateway, klik ID gateway untuk membuka tab Informasi Dasar.

    2. Pada tab SNAT Management, klik Create SNAT Entry.

    3. Pada halaman Create SNAT Entry, konfigurasikan parameter berikut dan klik OK. Entri SNAT akan muncul di bagian SNAT Entry List.

      Parameter

      Deskripsi

      SNAT Entry

      Pilih Specify vSwitch agar hanya instans yang terhubung ke vSwitch yang dipilih yang dapat mengakses Internet.

      Select vSwitch

      Pilih vSwitch instans RDS Anda.

      Select EIP

      Pilih satu atau beberapa EIP untuk mengakses Internet. Dalam contoh ini, satu EIP dipilih dari daftar drop-down.

      SNAT entry

Aktifkan ekstensi

Jalankan perintah berikut menggunakan akun istimewa. Aktifkan terlebih dahulu ekstensi vector — ekstensi ini menyediakan tipe data vektor dan operasi yang menjadi dependensi rds_embedding. Ekstensi rds_embedding dibatasi agar tidak dapat dibuat pada semua versi. Pernyataan berikut hanya berlaku untuk instans tempat ekstensi tersebut sudah dibuat.

CREATE EXTENSION vector;
CREATE EXTENSION rds_embedding;

Untuk menonaktifkan ekstensi:

DROP EXTENSION rds_embedding;
DROP EXTENSION vector;

Hasilkan dan kueri penyematan

Contoh berikut menggunakan model text-embedding-v3 dari Alibaba Cloud Model Studio untuk menghasilkan vektor berdimensi 1024 dan menjalankan kueri kemiripan kosinus. Untuk informasi lebih lanjut tentang model ini, lihat Pengenalan model.

Langkah 1: Buat tabel

Buat tabel dengan kolom text untuk konten Anda dan kolom vector(1024) untuk penyematan.

CREATE TABLE test(info text, vec vector(1024) NOT NULL);

Langkah 2: Daftarkan model penyematan

Daftarkan text-embedding-v3 dengan menyediakan URL titik akhirnya, templat header otorisasi, templat badan permintaan, serta jalur JSON untuk mengekstraksi penyematan dari respons.

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'''
);

Ganti sk-**** dengan kunci API Anda.

Langkah 3: Masukkan teks dan penyematan

Masukkan setiap baris dengan memanggil rds_embedding.get_embedding_by_model() secara inline. Fungsi ini memanggil API model dan mengembalikan vektor penyematan untuk teks yang diberikan.

INSERT INTO test SELECT 'Windy high sky, apes cry sadly',
    rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Windy high sky, apes cry sadly')::real[];

INSERT INTO test SELECT 'Clear islet, white sand, birds fly back',
    rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Clear islet, white sand, birds fly back')::real[];

INSERT INTO test SELECT 'Boundless falling leaves rustle down',
    rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Boundless falling leaves rustle down')::real[];

INSERT INTO test SELECT 'Endless Yangtze River rolls on',
    rds_embedding.get_embedding_by_model('text-embedding-v3', 'sk-****', 'Endless Yangtze River rolls on')::real[];

Ganti sk-**** dengan kunci API Anda.

Langkah 4: Kueri berdasarkan kemiripan vektor

Gunakan operator <=> (jarak kosinus) untuk mengurutkan baris berdasarkan kemiripan semantik terhadap string kueri. Jarak sebesar 0 berarti vektor identik; nilai yang lebih rendah menunjukkan kemiripan yang lebih besar.

SELECT
    info,
    vec <=> rds_embedding.get_embedding_by_model(
        'text-embedding-v3',
        'sk-****',
        'Endless Yangtze River rolls on'
    )::real[]::vector AS distance
FROM
    test
ORDER BY
    vec <=> rds_embedding.get_embedding_by_model(
        'text-embedding-v3',
        'sk-****',
        'Endless Yangtze River rolls on'
    )::real[]::vector;

Ganti sk-**** dengan kunci API Anda.

Output yang diharapkan:

info                                     |      distance
-----------------------------------------+--------------------
 Endless Yangtze River rolls on          |                  0
 Boundless falling leaves rustle down    | 0.42740682200152647
 Clear islet, white sand, birds fly back | 0.5161883811726116
 Windy high sky, apes cry sadly          | 0.5247695147991147
(4 rows)

Kueri mengembalikan "Endless Yangtze River rolls on" terlebih dahulu (jarak 0, kecocokan persis), diikuti oleh "Boundless falling leaves rustle down" sebagai tetangga semantik terdekat.

Referensi

Ambil penyematan menggunakan API model secara langsung

Untuk memverifikasi titik akhir model atau memecahkan masalah pembuatan penyematan, kirim permintaan POST secara langsung menggunakan curl.

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding' \
--header 'Authorization: Bearer <API-KEY>' \
--header 'Content-Type: application/json' \
--data '{
    "model": "text-embedding-v3",
    "input": {
        "texts": [
            "Windy high sky, apes cry sadly",
            "Clear islet, white sand, birds fly back",
            "Boundless falling leaves rustle down",
            "Endless Yangtze River rolls on"
        ]
    },
    "parameters": {
        "text_type": "query"
    }
}'

Parameter

Nilai contoh

Deskripsi

location

https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

URL titik akhir model text embedding.

Header Authorization

Authorization: Bearer sk-****

Format: Authorization: Bearer <API-KEY>. Untuk mendapatkan kunci API, lihat Dapatkan kunci API Anda.

Header Content-Type

application/json

Nilai tetap.

model

text-embedding-v3

Nama model yang akan dipanggil.

input.texts

Array of strings

Konten teks yang akan disematkan.

parameters.text_type

query

Parameter permintaan tambahan. Parameter ini bervariasi tergantung model. Lihat dokumentasi model text embedding untuk daftar lengkapnya.

Fungsi yang disediakan oleh ekstensi rds_embedding

Jalankan perintah psql berikut untuk menampilkan semua objek dalam ekstensi:

\dx+ rds_embedding
             Objects in extension "rds_embedding"
                      Object description
---------------------------------------------------------------
 function rds_embedding.add_model(text,text,text,text,text)
 function rds_embedding.del_model(text)
 function rds_embedding.get_embedding_by_model(text,text,text)
 function rds_embedding.get_response_by_model(text,text,text)
 function rds_embedding.show_models()
 function rds_embedding.update_model(text,text,text,text,text)
 schema rds_embedding
 table rds_embedding.models
(8 rows)

rds_embedding.add_model()

Menambahkan model penyematan ke tabel rds_embedding.models.

rds_embedding.add_model(mname text, murl text, mauth_header_template text, mbody_template text, membedding_path text)

Parameter

Tipe

Contoh

Deskripsi

mname

text

text-embedding-v3

Nama model. Digunakan untuk mengidentifikasi model saat memanggil fungsi lain.

murl

text

https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding

Titik akhir HTTP model. Lihat dokumentasi model text embedding untuk URL-nya.

mauth_header_template

text

Authorization: Bearer sk-****

Header otorisasi untuk permintaan POST. Format: Authorization: Bearer <API-KEY>.

mbody_template

text

{"input":{"texts":["%s"]},"model":"text-embedding-v3","parameters":{"text_type":"query"}}

Badan permintaan POST. Gunakan %s sebagai placeholder untuk teks input — placeholder ini akan diganti dengan teks aktual saat dipanggil. Lihat dokumentasi model text embedding untuk struktur badan permintaan berbagai model.

membedding_path

text

->''output''->''embeddings''->0->>''embedding''

Jalur JSON untuk mengekstraksi penyematan dari respons. Jalur contoh ini menelusuri: objek output → array embeddings → elemen pertama (0) → nilai string embedding. Pastikan jalur ini sesuai dengan struktur respons aktual model Anda.

Penting

Verifikasi bahwa membedding_path sesuai dengan struktur JSON yang dikembalikan oleh model Anda sebelum menggunakannya. Jalur yang salah menyebabkan kegagalan ekstraksi atau error. Untuk struktur respons yang diharapkan, lihat contoh respons dalam dokumentasi model text embedding.

rds_embedding.get_embedding_by_model()

Mengembalikan vektor penyematan untuk teks yang ditentukan dengan memanggil model yang terdaftar.

rds_embedding.get_embedding_by_model(mname text, api-key text, texts text)

Parameter

Tipe

Contoh

Deskripsi

mname

text

text-embedding-v3

Nama model, sebagaimana didaftarkan dengan add_model().

api-key

text

sk-****

Kunci API untuk model. Untuk mendapatkannya, lihat Dapatkan kunci API Anda.

texts

text

Windy high sky, apes cry sadly

Teks input yang akan disematkan.

rds_embedding.del_model()

Menghapus model dari tabel rds_embedding.models.

rds_embedding.del_model(mname text)

Parameter

Tipe

Contoh

Deskripsi

mname

text

text-embedding-v3

Nama model yang akan dihapus.

rds_embedding.update_model()

Memperbarui model yang sudah ada di tabel rds_embedding.models. Menerima parameter yang sama seperti rds_embedding.add_model().

rds_embedding.show_models()

Menampilkan semua model yang saat ini terdaftar di tabel rds_embedding.models.

Catatan

rds_embedding.get_response_by_model() belum tersedia.