ApsaraDB RDS untuk PostgreSQL menyediakan ekstensi AI rds_ai, yang mengintegrasikan model canggih dari Alibaba Cloud Model Studio seperti Qwen, text embedding,. Ekstensi ini memungkinkan Anda menerapkan berbagai skenario dalam database ApsaraDB RDS untuk PostgreSQL, termasuk tanya jawab berbasis large language model (LLM), konversi teks ke vektor, pengambilan vektor serupa top-N, serta tanya jawab berbasis retrieval-augmented generation (RAG). Selain itu, rds_ai mendukung model kustom, sehingga Anda dapat menambahkan model yang diperlukan untuk mengimplementasikan berbagai aplikasi AI di ApsaraDB RDS untuk PostgreSQL.
Prasyarat
Instans Anda memenuhi persyaratan versi berikut:
Versi mayor
Versi mesin minor
PostgreSQL 16
20241230 atau yang lebih baru
PostgreSQL 14, 15, 17
20250430 atau yang lebih baru
PostgreSQL 18
20251130 atau yang lebih baru
Untuk petunjuk peningkatan versi mesin minor, lihat Upgrade a minor engine version.
Anda telah membuat akun istimewa untuk ApsaraDB RDS untuk PostgreSQL. Untuk informasi selengkapnya, lihat Create an account.
Model yang digunakan dalam topik ini disediakan oleh Alibaba Cloud Model Studio. Anda harus mengaktifkan Model Studio dan mendapatkan Kunci API. Untuk informasi selengkapnya, lihat Obtain an API key.
Konfigurasi jaringan
Secara default, database ApsaraDB RDS untuk PostgreSQL tidak dapat mengakses jaringan eksternal. Untuk mengizinkan akses ke model eksternal, Anda dapat mengonfigurasi NAT Gateway untuk VPC tempat instans ApsaraDB RDS untuk PostgreSQL Anda berada. Untuk informasi selengkapnya tentang gateway NAT, lihat Use the SNAT feature of an Internet NAT gateway to access the Internet.
Buat dan hapus ekstensi
Sebelum menginstal ekstensi, pastikan versi mayor dan minor mesin instans ApsaraDB RDS untuk PostgreSQL Anda untuk memastikan ekstensi ini didukung. Untuk informasi selengkapnya, lihat Prasyarat.
Instal plugin pada halaman Plugin Management.
Buka halaman RDS Instances, pilih wilayah di bilah navigasi atas, lalu klik ID instans target.
Pada panel navigasi sebelah kiri, klik Plug-ins.
Pada halaman Plugin Marketplace, klik Install untuk plugin rds_ai.
Pada jendela yang muncul, pilih database dan akun target. Lalu, klik Install untuk menginstal ekstensi di database yang dipilih.
(Opsional) Anda dapat menguninstal plugin pada tab Installed Plugins di halaman Manage Plugins.
Instal ekstensi menggunakan perintah SQL
Buat ekstensi
CREATE EXTENSION IF NOT EXISTS rds_ai CASCADE;CatatanHanya akun istimewa yang dapat menjalankan perintah ini. Untuk informasi selengkapnya tentang cara membuat akun istimewa, lihat Create an account.
Saat Anda membuat ekstensi rds_ai, ekstensi pgvector User Guide dan pgsql-http juga dibuat.
Anda dapat menjalankan
SELECT * FROM pg_extension;untuk melihat ekstensi yang telah diinstal.
Hapus plugin
DROP EXTENSION rds_ai;
Model default
Ekstensi rds_ai mendukung model default berikut. Anda juga dapat menambahkan model kustom sesuai kebutuhan.
Jenis API | Parameter | Tipe parameter | Model default |
Prompt API | rds_ai.default_prompt_model | enum |
|
Embed API | rds_ai.default_embed_model | enum | text-embedding-v3 |
Untuk mengubah model default, Anda harus menambahkan rds_ai ke Running Value parameter shared_preload_libraries. Untuk informasi selengkapnya tentang cara mengonfigurasi parameter, lihat Set instance parameters. Misalnya, ubah Running Value menjadi 'pg_stat_statements,auto_explain,rds_ai'.
Model default ekstensi rds_ai menyediakan kemampuan berikut:
Pengaturan dasar
Sebelum menggunakan rds_ai untuk memanggil LLM, Anda harus mengonfigurasi Kunci API yang sesuai.
-- Setel Kunci API untuk model target. SELECT rds_ai.update_model('qwen-plus', 'token', 'sk-****'); -- Setel 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 perintah berikut untuk mengonfigurasi URL 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 melakukan panggilan remote ke model. Anda dapat mengonfigurasi pengaturan timeout berikut untuk menghentikan panggilan yang berjalan lama.
CatatanPengaturan timeout berikut berlaku pada tingkat sesi. Jika Anda membuat koneksi baru, Anda harus mengonfigurasinya kembali.
-- Setel timeout permintaan dalam milidetik. SET http.timeout_msec TO 200000; SELECT http.http_set_curlopt('CURLOPT_TIMEOUT', '200000'); -- Setel timeout koneksi. SELECT http.http_set_curlopt('CURLOPT_CONNECTTIMEOUT_MS', '200000');
Tanya jawab berbasis LLM
Model tanya jawab berbasis LLM default untuk ekstensi rds_ai adalah Qwen-Text Generation.
(Opsional) Anda dapat menyetel model bahasa besar default untuk tanya jawab. Jika tidak dikonfigurasi, sistem akan menggunakan model qwen-plus secara default.
CatatanUntuk mengubah model default, Anda harus menambahkan rds_ai ke Running Value parameter shared_preload_libraries. Untuk informasi selengkapnya tentang cara mengonfigurasi parameter, lihat Set instance parameters. Misalnya, ubah Running Value menjadi
'pg_stat_statements,auto_explain,rds_ai'.SET rds_ai.default_prompt_model TO 'qwen-max';Gunakan rds_ai.prompt untuk memanggil LLM default untuk tanya jawab. Contohnya:
SELECT rds_ai.prompt('Give me a recipe using carrots, potatoes, and eggplants.');Panggilan API lengkap:
SELECT rds_ai.prompt( model_name=>'qwen-plus', -- nama model content=>'Give me a recipe using carrots, potatoes, and eggplants.', -- pertanyaan args=>'{"top_p": 0.7}'::jsonb -- parameter untuk memanggil model besar );
Konversi teks ke vektor
Model konversi teks ke vektor default untuk ekstensi rds_ai adalah text-embedding-v3.
Secara default, operasi ini menghasilkan vektor padat.
SELECT rds_ai.embed( 'A strong wind blows from a high sky, and monkeys cry sadly. The water is clear and the sand is white, and birds are flying back. The leaves of the boundless forest fall, and the endless Yangtze River rolls on.' -- teks yang akan dikonversi ke vektor );Anda dapat menentukan untuk menghasilkan vektor jarang.
-- Konversi teks ke vektor jarang, dengan dimensi default 250002. SELECT rds_ai.embed( content=>'A strong wind blows from a high sky, and monkeys cry sadly. The water is clear and the sand is white, and birds are flying back. The leaves of the boundless forest fall, and the endless Yangtze River rolls on.', args=>'{"output_type": "sparse"}'::jsonb -- daftar parameter );
Simpan hasil konversi vektor ke tabel target.
Buat tabel test_embed.
CREATE TABLE test_embed(a text, b vector(1024), c sparsevec(250002));Masukkan konten teks yang akan dikonversi.
INSERT INTO test_embed (a) values ('hello world');Gunakan rds_ai.embed untuk memanggil model text-embedding-v3 dan tulis hasil konversi ke tabel test_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 serupa top-N
Ekstensi rds_ai menggunakan model text-embedding-v3 secara default untuk pengambilan vektor serupa. Contohnya:
Buat tabel uji.
-- Buat tabel uji 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); UPDATE test_rag SET embedding=rds_ai.embed(chunk)::vector;Buat indeks vektor.
CatatanSaat membuat indeks vektor, Anda harus memilih tipe 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 untuk memanggil model text-embedding-v3 guna melakukan pengambilan vektor di tabel uji.
SELECT * FROM rds_ai.retrieve ('Why is PostgreSQL considered the most advanced open-source database?', 'public', 'test_rag', 'chunk', 'embedding');Panggilan API lengkap:
SELECT * FROM rds_ai.retrieve ( embed_model=>'text-embedding-v3', -- Model vektor yang digunakan. question=>'Why is PostgreSQL considered the most advanced open-source database?', source_schema=>'public', -- Skema tabel untuk pencarian vektor serupa. source_table=>'test_rag', -- Tabel untuk pencarian vektor serupa. chunk_col=>'chunk', -- Kolom chunk. vector_col=>'embedding', -- Kolom vektor. -- Parameter berikut adalah nilai default. topn=>10, -- Setel top_n. embed_args=>'{}'::jsonb, -- Teruskan parameter untuk model teks-ke-vektor. distance_type=>'cosine' -- Algoritma jarak. Nilai yang didukung adalah L1, L2, cosine, dan negative. );
Tanya jawab berbasis RAG
Ekstensi rds_ai menggunakan model text-embedding-v3 dan model Qwen-Text Generation secara default untuk tanya jawab berbasis RAG.
-- Model vektor: 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');Panggilan API lengkap:
SELECT * FROM rds_ai.rag
(
embed_model=>'text-embedding-v3', -- Model vektor 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 vektor serupa.
source_table=>'test_rag', -- Tabel untuk pencarian vektor serupa.
chunk_col=>'chunk', -- Kolom chunk.
vector_col=>'embedding', -- Kolom vektor.
-- Parameter berikut adalah nilai default.
topn=>10,
embed_args=>'{}'::jsonb, -- Parameter untuk model teks-ke-vektor.
prompt_args=>'{}'::jsonb, -- Parameter untuk prompt model bahasa besar.
distance_type=>'L2' -- Algoritma jarak. Nilai yang didukung adalah L1, L2, cosine, dan inner product.
);Model kustom
Jika Anda mengalami masalah saat menambahkan model kustom, hubungi kami.
Anda dapat menambahkan model kustom menggunakan tabel metadata rds_ai.model_list. Bidang-bidang dalam tabel rds_ai.model_list adalah sebagai berikut:
Bidang | Tipe | Deskripsi |
model_name | name | Nama model. Bidang ini memiliki Kendala KUNCI UTAMA. |
request_type | text | Metode HTTP yang dipanggil. |
request_header | http.http_header[] | Tipe yang disediakan oleh ekstensi pgsql-http. Mencatat informasi header permintaan HTTP, terutama untuk otentikasi. |
uri | text | URL model. |
content_type | text | Jenis permintaan, seperti application/json. |
content_template | text | Templat untuk badan permintaan. Biasanya berisi placeholder yang diisi saat pemanggilan API. |
json_path | text | Mengurai SQL berdasarkan http_response dan mengekstrak konten yang diperlukan. |
token | text | Kunci dalam header. |
Tambahkan model kustom
SELECT rds_ai.add_model(
'test-model', -- nama model
'POST', -- tipe permintaan http
ARRAY[('Authorization', 'Bearer %s')]::http.http_header[], -- http_header
'https://****.com', -- URL permintaan
'application/json', -- Content-type permintaan
'{"key":"%s"}', -- templat badan permintaan
'SELECT %L' -- hasil penguraian permintaan http
);Gunakan model kustom
Gunakan fungsi rds_ai.raw_invoke_model untuk mengirim permintaan berdasarkan konfigurasi model qwen-plus. Gunakan ARRAY untuk mengisi templat panggilan. Fungsi ini mengembalikan hasil permintaan HTTP lengkap.
SELECT * FROM rds_ai.raw_invoke_model('qwen-plus', ARRAY['who are you']);Gunakan fungsi rds_ai.invoke_model untuk membuat permintaan berdasarkan konfigurasi model qwen-plus. Fungsi ini mengekstrak bidang yang ditentukan sesuai dengan bidang
json_pathdalam konfigurasi.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 agar Anda men-deploy PAI-EAS dan instans ApsaraDB RDS untuk PostgreSQL dalam VPC yang sama. Konfigurasikan alamat VPC PAI dalam ekstensi rds_ai. Alamat koneksi untuk PAI-EAS juga harus menggunakan alamat VPC ApsaraDB RDS untuk PostgreSQL. Hal ini memastikan bahwa seluruh komunikasi terjadi di dalam VPC Anda dan tidak melewati jaringan publik, sehingga meningkatkan keamanan.
Deploy layanan RAG di PAI-EAS. Untuk informasi selengkapnya, lihat Deploy an LLM-based RAG chatbot using PAI-EAS and ApsaraDB RDS for PostgreSQL.
Dapatkan informasi pemanggilan untuk layanan RAG.
Klik nama layanan RAG untuk membuka halaman Service Details.
Pada bagian Basic Information, klik View Endpoint 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', -- format konten permintaan '{ "question": "%s" }', -- badan permintaan 'SELECT (%L::jsonb->''answer'')::text' -- jalur penguraian );CatatanGanti URL model dengan URL aktual dan tambahkan
/service/query.Untuk informasi selengkapnya tentang pemanggilan model PAI-RAG, lihat Call PAI models using APIs.
Konfigurasi 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['What parameters are related to WAL log accumulation?']);Tambahkan model RAG FC Function Compute
Deploy aplikasi AgentCraft di Function Compute. Untuk informasi selengkapnya, lihat Cloud Deployment of AgentCraft.
Anda telah membuat agen dan Client Access.
Contohnya, saat Anda membuat Client Integration seperti yang dijelaskan dalam Integrate an agent into a DingTalk robot, Anda memperoleh dan menyimpan titik akhir serta Token.
Tambahkan model RAG FC 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', -- format konten permintaan '{ "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.Konfigurasi token untuk model RAG FC Function Compute.
SELECT rds_ai.update_model('fc-rag', 'token','8UiGAziWgYGPxM3qR5sAChBfDJRt****');
Verifikasi model RAG FC Function Compute baru. Contohnya:
SELECT rds_ai.invoke_model('fc-rag', ARRAY['What parameters are related to WAL log accumulation?']);