RDS for PostgreSQL menyediakan ekstensi rds_ai yang mengintegrasikan model canggih dari Alibaba Cloud Model Studio, termasuk Qwen, text embedding. Ekstensi ini mendukung berbagai aplikasi, seperti tanya jawab berbasis LLM, konversi teks ke vektor, pengambilan vektor mirip top-N, dan Retrieval-Augmented Generation (RAG). Selain itu, rds_ai mendukung model kustom, sehingga Anda dapat menambahkan model untuk membangun beragam aplikasi AI.
Prasyarat
-
Pastikan instans RDS for PostgreSQL Anda memenuhi persyaratan versi pada tabel berikut:
Versi Mayor
Versi minor
PostgreSQL 16
20241230 atau lebih baru
PostgreSQL 14, PostgreSQL 15, dan PostgreSQL 17
20250430 atau lebih baru
PostgreSQL 18
20251130 atau lebih baru
Untuk memperbarui versi mesin minor, lihat Perbarui versi mesin minor.
-
Anda harus memiliki akun istimewa untuk instans RDS for PostgreSQL Anda. Untuk informasi selengkapnya, lihat Buat akun.
-
Model yang digunakan dalam dokumen ini disediakan oleh Alibaba Cloud Model Studio. Anda harus terlebih dahulu mengaktifkan layanan dan mendapatkan Kunci API. Untuk informasi selengkapnya, lihat Dapatkan Kunci API.
Konfigurasi jaringan
Secara default, instans RDS for PostgreSQL tidak dapat mengakses jaringan eksternal. Untuk mengaktifkan instans agar dapat mengakses model eksternal, Anda harus mengonfigurasi gateway NAT untuk VPC-nya. Untuk informasi selengkapnya tentang gateway NAT, lihat Gunakan fitur SNAT gateway NAT Internet untuk mengakses Internet.
Buat dan hapus ekstensi
Sebelum menginstal ekstensi, pastikan instans RDS for PostgreSQL Anda menjalankan versi mayor dan minor yang mendukungnya. Untuk detail selengkapnya, lihat prasyarat dalam topik ini.
-
Instal ekstensi pada halaman Plug-ins.
-
Buka halaman Instances, pilih wilayah di bagian atas, lalu klik ID instans target.
-
Pada panel navigasi sebelah kiri, klik Plug-ins.
-
Pada tab Extension Marketplace, temukan ekstensi rds_ai dan klik Install.
-
Pada kotak dialog, pilih database dan akun target, lalu klik Install.
(Opsional) Pada halaman Extension Management, Anda dapat menguninstal ekstensi dari tab Installed Extensions.
-
-
Kelola ekstensi dengan pernyataan SQL
Buat ekstensi
CREATE EXTENSION IF NOT EXISTS rds_ai CASCADE;Catatan-
Hanya akun istimewa yang dapat menjalankan pernyataan ini. Untuk membuat akun istimewa, lihat Buat akun.
-
Membuat ekstensi rds_ai juga akan membuat ekstensi pgvector dan pgsql-http.
-
Untuk melihat semua ekstensi yang terinstal, jalankan pernyataan
SELECT * FROM pg_extension;.
Hapus ekstensi
DROP EXTENSION rds_ai; -
Model default
Ekstensi rds_ai mendukung model default yang tercantum di bawah ini. Anda juga dapat membuat model kustom.
|
API |
Parameter |
Tipe |
Default |
|
prompt API |
rds_ai.default_prompt_model |
enum |
|
|
embedding API |
rds_ai.default_embed_model |
enum |
text-embedding-v3 |
Untuk mengubah model default, Anda harus menambahkan rds_ai ke Running Value parameter instans shared_preload_libraries. Untuk informasi selengkapnya tentang cara mengonfigurasi parameter, lihat Atur parameter instans. Misalnya, ubah Running Value menjadi 'pg_stat_statements,auto_explain,rds_ai'.
Model default dalam ekstensi rds_ai menyediakan kemampuan berikut:
Pengaturan dasar
-
Untuk memanggil model bahasa besar menggunakan rds_ai, Anda harus terlebih dahulu mengonfigurasi Kunci API.
-- Atur Kunci API untuk model target. SELECT rds_ai.update_model('qwen-plus', 'token', 'sk-****'); -- Atur Kunci API untuk semua model dalam rds_ai.model_list. SELECT rds_ai.update_model(model_name,'token','sk-****') FROM rds_ai.model_list; -
Jalankan pernyataan berikut untuk mengonfigurasi URL setiap model default.
-- Model qwen-plus SELECT rds_ai.update_model('qwen-plus', 'uri', 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation'); -- Model qwen-max SELECT rds_ai.update_model('qwen-max', 'uri', 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation'); -- Model qwen-turbo SELECT rds_ai.update_model('qwen-turbo', 'uri', 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation'); -- Model text-embedding-v3 SELECT rds_ai.update_model('text-embedding-v3', 'uri', 'https://dashscope-intl.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding'); -
Ekstensi rds_ai menggunakan ekstensi pgsql-http untuk memanggil model secara remote. Konfigurasikan pengaturan timeout berikut untuk menghentikan permintaan yang berjalan lama.
CatatanPengaturan timeout ini berlaku tingkat sesi dan harus dikonfigurasi ulang untuk setiap koneksi baru.
-- Atur periode timeout permintaan dalam milidetik. SET http.timeout_msec TO 200000; SELECT http.http_set_curlopt('CURLOPT_TIMEOUT', '200000'); -- Atur periode timeout koneksi. SELECT http.http_set_curlopt('CURLOPT_CONNECTTIMEOUT_MS', '200000');
Tanya jawab berbasis LLM
Secara default, ekstensi rds_ai menggunakan model generasi teks Qwen untuk tanya jawab berbasis LLM.
-
(Opsional) Tetapkan model default untuk tanya jawab berbasis LLM. Jika Anda tidak mengatur parameter ini, sistem akan menggunakan model
qwen-plussecara default.CatatanUntuk mengubah model default, Anda harus menambahkan
rds_aike Running Value parameter instans shared_preload_libraries. Untuk informasi selengkapnya tentang cara mengonfigurasi parameter, lihat Atur parameter instans. Misalnya, ubah Running Value menjadi'pg_stat_statements,auto_explain,rds_ai'.SET rds_ai.default_prompt_model TO 'qwen-max'; -
Gunakan
rds_ai.promptuntuk memanggil model bahasa besar default untuk tanya jawab. Contohnya:SELECT rds_ai.prompt('Give me a recipe for a dish made with carrots, potatoes, and eggplants.');Pemanggilan API lengkap:
SELECT rds_ai.prompt( model_name=>'qwen-plus', -- Nama model. content=>'Give me a recipe for a dish made with carrots, potatoes, and eggplants.', -- Pertanyaan. args=>'{"top_p": 0.7}'::jsonb -- Parameter untuk memanggil model bahasa besar. );
Konversi teks ke vektor
Secara default, ekstensi rds_ai menggunakan model text-embedding-v3 untuk konversi teks ke vektor.
-
Secara default, output berupa vektor padat.
SELECT rds_ai.embed( 'On the wind-swept plain, gibbons cry; the islet is clear, the sand is white, birds wheel back. Leaves fall without end; the Yangtze rolls on, never ceasing.' -- Teks yang akan dikonversi ke vektor. ); -
Tentukan output sebagai vektor jarang.
-- Konversi teks ke vektor jarang, yang secara default memiliki dimensi 250002. SELECT rds_ai.embed( content=>'On the wind-swept plain, gibbons cry; the islet is clear, the sand is white, birds wheel back. Leaves fall without end; the Yangtze rolls on, never ceasing.', args=>'{"output_type": "sparse"}'::jsonb -- Daftar parameter. );
Simpan vektor hasil dalam tabel tujuan.
-
Buat tabel test_embed.
CREATE TABLE test_embed(a text, b vector(1024), c sparsevec(250002)); -
Masukkan teks yang ingin Anda konversi.
INSERT INTO test_embed (a) values ('hello world'); -
Gunakan rds_ai.embed untuk memanggil model
text-embedding-v3dan menulis hasilnya ke tabeltest_embed.-
Tulis vektor padat.
UPDATE test_embed SET b = rds_ai.embed(a, '{"output_type": "dense"}'::jsonb)::vector; -
Tulis vektor jarang.
UPDATE test_embed SET c = rds_ai.embed(a, '{"output_type": "sparse"}'::jsonb)::sparsevec;
-
Pengambilan vektor mirip top-N
Secara default, ekstensi rds_ai menggunakan model text-embedding-v3 untuk pengambilan vektor mirip. Contohnya:
-
Buat tabel uji.
-- Buat tabel uji bernama test_rag. CREATE TABLE test_rag ( id SERIAL PRIMARY KEY, chunk TEXT ); -- Tambahkan kolom embedding untuk menyimpan vektor yang dikonversi dari chunk. ALTER TABLE test_rag ADD COLUMN embedding VECTOR(1024); -- Isi kolom embedding. UPDATE test_rag SET embedding=rds_ai.embed(chunk)::vector; -
Buat indeks vektor.
CatatanSaat membuat indeks vektor, Anda harus menggunakan kelas operator vector_cosine_ops.
-- Buat indeks HNSW. CREATE INDEX ON test_rag USING hnsw (embedding vector_cosine_ops); -- Buat indeks IVFFlat. CREATE INDEX ON test_rag USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100); -
Gunakan
rds_ai.retrieve, yang memanggil modeltext-embedding-v3, untuk melakukan pengambilan vektor dalam tabel uji.SELECT * FROM rds_ai.retrieve ('Why is PostgreSQL considered the most advanced open source database', 'public', 'test_rag', 'chunk', 'embedding');Pemanggilan API lengkap:
SELECT * FROM rds_ai.retrieve ( embed_model=>'text-embedding-v3', -- Model embedding yang digunakan. question=>'Why is PostgreSQL considered the most advanced open source database', source_schema=>'public', -- Skema tabel untuk pencarian kemiripan. source_table=>'test_rag', -- Tabel untuk pencarian kemiripan. chunk_col=>'chunk', -- Kolom yang berisi potongan teks. vector_col=>'embedding', -- Kolom yang berisi vektor. -- Berikut adalah parameter opsional. topn=>10, -- Jumlah hasil teratas yang dikembalikan. embed_args=>'{}'::jsonb, -- Parameter untuk model embedding. distance_type=>'cosine' -- Algoritma jarak. Nilai yang valid: L1, L2, cosine, dan inner product. );
Tanya jawab berbasis RAG
Secara default, ekstensi rds_ai menggunakan model text-embedding-v3 dan model generasi teks Qwen untuk tanya jawab berbasis RAG.
-- Model embedding: text-embedding-v3. Model generasi teks: ditentukan oleh parameter rds_ai.default_prompt_model.
SELECT * FROM rds_ai.rag
('Why is PostgreSQL considered the most advanced open source database',
'public', 'test_rag', 'chunk', 'embedding');
Pemanggilan API lengkap:
SELECT * FROM rds_ai.rag
(
embed_model=>'text-embedding-v3', -- Model embedding yang digunakan.
prompt_model=>'qwen-plus', -- Model prompt yang digunakan.
question=>'Why is PostgreSQL considered the most advanced open source database',
source_schema=>'public', -- Skema tabel untuk pencarian kemiripan.
source_table=>'test_rag', -- Tabel untuk pencarian kemiripan.
chunk_col=>'chunk', -- Kolom yang berisi potongan teks.
vector_col=>'embedding', -- Kolom yang berisi vektor.
-- Berikut adalah parameter opsional.
topn=>10,
embed_args=>'{}'::jsonb, -- Parameter untuk model embedding.
prompt_args=>'{}'::jsonb, -- Parameter untuk model prompt.
distance_type=>'L2' -- Algoritma jarak. Nilai yang valid: L1, L2, cosine, dan inner product.
);
Model kustom
Jika Anda mengalami masalah saat menambahkan model kustom, silakan hubungi kami.
Anda dapat menambahkan model kustom menggunakan tabel metadata rds_ai.model_list. Tabel berikut menjelaskan bidang-bidang dalam rds_ai.model_list.
|
Parameter |
Tipe |
Deskripsi |
|
model_name |
name |
Nama model. Bidang ini merupakan kunci primer. |
|
request_type |
text |
Metode permintaan HTTP, seperti POST. |
|
request_header |
http.http_header[] |
Header permintaan berisi informasi seperti kredensial otentikasi. Tipe data ini disediakan oleh ekstensi pgsql-http. |
|
uri |
text |
URL titik akhir model. |
|
content_type |
text |
Tipe konten permintaan, seperti application/json. |
|
content_template |
text |
Templat untuk badan permintaan. Templat ini dapat berisi placeholder yang diisi saat Anda memanggil model. |
|
json_path |
text |
Pernyataan SQL yang digunakan untuk mengurai respons HTTP dan mengekstrak konten yang diperlukan. |
|
token |
text |
Token otentikasi yang disertakan dalam header permintaan. |
Tambahkan model kustom
SELECT rds_ai.add_model(
'test-model', -- Nama model
'POST', -- Metode permintaan HTTP
ARRAY[('Authorization', 'Bearer %s')]::http.http_header[], -- Header permintaan
'https://****.com', -- URL permintaan
'application/json', -- Tipe konten
'{"key":"%s"}', -- Templat badan permintaan
'SELECT %L' -- Pernyataan SQL untuk mengurai respons
);
Gunakan model kustom
-
Gunakan fungsi rds_ai.raw_invoke_model untuk mengirim permintaan berdasarkan konfigurasi model. Fungsi ini mengisi templat permintaan dengan ARRAY dan mengembalikan respons HTTP lengkap.
SELECT * FROM rds_ai.raw_invoke_model('qwen-plus', ARRAY['who are you']); -
Gunakan fungsi rds_ai.invoke_model untuk mengirim permintaan berdasarkan konfigurasi model dan mengekstrak bidang tertentu dari respons menggunakan pengaturan
json_path.SELECT * FROM rds_ai.invoke_model('qwen-plus', ARRAY['who are you']);
Hapus model kustom
SELECT rds_ai.del_model('test-model');
Tambahkan model PAI-RAG
Kami menyarankan men-deploy PAI-EAS dan instans RDS for PostgreSQL Anda dalam VPC yang sama. Saat mengonfigurasi model dalam ekstensi rds_ai, gunakan titik akhir VPC layanan PAI. Hal ini menjaga seluruh komunikasi tetap dalam VPC Anda untuk meningkatkan keamanan.
-
Deploy layanan RAG di PAI-EAS. Untuk informasi selengkapnya, lihat Deploy chatbot RAG berbasis LLM menggunakan PAI-EAS dan RDS for PostgreSQL.
-
Dapatkan informasi pemanggilan untuk layanan RAG.
-
Klik nama layanan RAG untuk membuka halaman Service Details.
-
Pada bagian Basic Information, klik View Invocation Information.
-
Pada kotak dialog Invocation Information, dapatkan titik akhir layanan dan token.
-
-
Tambahkan model PAI-RAG.
SELECT rds_ai.add_model( 'pai-rag', -- Nama model 'POST', -- Metode permintaan ARRAY[('Authorization','%s')]::http.http_header[], -- Header permintaan, 'http://rds-pai-rag-demo.****.cn-hangzhou.pai-eas.aliyuncs.com/service/query', -- URL permintaan 'application/json', -- Tipe konten '{ "question": "%s" }', -- Badan permintaan 'SELECT (%L::jsonb->''answer'')::text' -- Jalur penguraian );Catatan-
Ganti URL model dengan titik akhir layanan aktual Anda dan tambahkan
/service/query. -
Untuk informasi selengkapnya tentang memanggil model PAI-RAG, lihat Panggil model PAI menggunakan API.
-
-
Konfigurasikan token untuk model PAI-RAG.
SELECT rds_ai.update_model('pai-rag', 'token','MTFkYjMwZjgzYzA1YmE2N2YyNWMxM2NkNDVjMjEzNjYxMDAzMzE5****');
Verifikasi model PAI-RAG baru. Contohnya:
SELECT rds_ai.invoke_model('pai-rag', ARRAY['Which parameters are related to WAL log accumulation?']);
Tambahkan model RAG Function Compute
-
Deploy aplikasi AgentCraft di Function Compute. Untuk informasi selengkapnya, lihat Deploy AgentCraft di cloud.
-
Buat agen dan konfigurasikan client access.
Misalnya, seperti yang dijelaskan dalam Hubungkan agen ke chatbot DingTalk, dapatkan dan simpan titik akhir layanan serta token saat mengonfigurasi client access.
-
Tambahkan model RAG Function Compute.
SELECT rds_ai.add_model( 'fc-rag', -- Nama model 'POST', -- Metode permintaan ARRAY[('Authorization','Bearer %s')]::http.http_header[], -- Header permintaan, 'https://agentcrckend-de-obnhjsknam.cn-hangzhou.fcapp.run/v1/chat/completions', -- URL permintaan 'application/json', -- Tipe konten '{ "messages":[ { "role": "user", "content": "%s" } ], "stream": false, "max_tokens": 1024 }', 'SELECT (%L::jsonb->''choices''->0->''message''->>''content'')::text' -- Jalur penguraian );CatatanGanti URL model dengan URL aktual dan tambahkan
/completions. -
Konfigurasikan token untuk model RAG Function Compute.
SELECT rds_ai.update_model('fc-rag', 'token','8UiGAziWgYGPxM3qR5sAChBfDJRt****');
Verifikasi model RAG Function Compute baru. Contohnya:
SELECT rds_ai.invoke_model('fc-rag', ARRAY['Which parameters are related to WAL log accumulation?']);