ApsaraDB RDS for PostgreSQL mendukung ekstensi rds_ai yang mengintegrasikan model canggih dari Alibaba Cloud Model Studio, termasuk Qwen dan model text embedding. Ekstensi ini memungkinkan berbagai aplikasi seperti layanan Q&A berbasis LLM, konversi teks-ke-vektor, pengambilan vektor mirip top-N, serta layanan Q&A berbasis generasi yang diperkaya dengan pengambilan data (RAG). Selain itu, Anda dapat menerapkan model kustom melalui ekstensi rds_ai untuk mengembangkan berbagai aplikasi berbasis AI di RDS for PostgreSQL. Topik ini menjelaskan cara menerapkan ekstensi ini dan menggunakan kemampuan AI-nya.
Prasyarat
Versi mesin utama dan versi mesin minor instance RDS Anda harus memenuhi persyaratan dalam tabel berikut:
Versi mesin utama
Versi mesin minor
PostgreSQL 16
20241230 dan setelahnya
PostgreSQL 14, PostgreSQL 15, dan PostgreSQL 17
20250430 atau setelahnya
Untuk informasi lebih lanjut tentang cara memperbarui versi mesin minor, lihat Perbarui Versi Mesin Minor.
Akun istimewa telah dibuat untuk instance RDS Anda. Untuk informasi lebih lanjut tentang cara membuat akun istimewa, lihat Buat Akun.
Alibaba Cloud Model Studio telah diaktifkan dan kunci API tersedia. Untuk informasi lebih lanjut, lihat Dapatkan Kunci API.
Konfigurasi jaringan
Secara default, instance RDS for PostgreSQL hanya dapat mengakses sumber daya melalui jaringan internal. Oleh karena itu, Anda harus membuat Gateway NAT untuk virtual private cloud (VPC) tempat instance RDS berada agar instance RDS dapat mengakses model eksternal. Untuk informasi lebih lanjut tentang Gateway NAT, lihat Gunakan Fitur SNAT dari Gateway NAT Internet untuk Mengakses Internet.
Buat dan hapus rds_ai
Sebelum membuat ekstensi rds_ai, pastikan bahwa instance RDS for PostgreSQL Anda memenuhi persyaratan yang dijelaskan di Prasyarat.
Buat dan hapus ekstensi rds_ai di halaman Plug-in:
Masuk ke Konsol ApsaraDB RDS dan buka halaman Instances. Di bilah navigasi atas, pilih wilayah tempat instance RDS berada. Kemudian, temukan instance RDS dan klik ID-nya.
Di panel navigasi sisi kiri, klik Plug-ins.
Di tab Extension Marketplace, klik Install di bagian rds_ai.
Di kotak dialog yang muncul, pilih database dan akun. Kemudian, klik Install untuk membuat ekstensi rds_ai di database yang dipilih.
(Opsional) Jika Anda tidak lagi memerlukan ekstensi rds_ai, Anda dapat menghapusnya di halaman Installed Extensions dari tab Extension Management.
Buat dan hapus ekstensi rds_ai dengan mengeksekusi pernyataan SQL:
Buat ekstensi:
CREATE EXTENSION IF NOT EXISTS rds_ai CASCADE;CatatanHanya akun istimewa yang memiliki izin untuk mengeksekusi pernyataan tersebut. Untuk informasi lebih lanjut tentang cara membuat akun istimewa, lihat Buat Akun.
Saat Anda membuat ekstensi rds_ai, ekstensi pgvector dan pgsql-http secara otomatis dibuat.
Anda dapat mengeksekusi pernyataan
SELECT * FROM pg_extension;untuk melihat ekstensi yang telah dibuat.
Hapus ekstensi:
DROP EXTENSION rds_ai;
Gunakan model default untuk mengimplementasikan kemampuan AI
Ekstensi rds_ai mendukung model default yang dijelaskan dalam tabel berikut. Anda juga dapat membuat model kustom sesuai dengan kebutuhan Anda.
Jenis antarmuka | Parameter | Tipe data | Model default |
Prompt API | rds_ai.default_prompt_model | enum |
|
Embedding API | rds_ai.default_embed_model | enum | text-embedding-v3 |
Untuk mengubah model default dari ekstensi, tambahkan rds_ai ke Running Value parameter shared_preload_libraries. Untuk informasi lebih lanjut tentang cara mengonfigurasi parameter instance, lihat Ubah Parameter Instance ApsaraDB RDS for PostgreSQL.
Contohnya, Anda dapat mengatur Running Value parameter shared_preload_libraries menjadi 'pg_stat_statements,auto_explain,rds_ai'.
Model default dari ekstensi rds_ai dapat menyediakan kemampuan AI berikut:
Pengaturan dasar
Sebelum Anda menggunakan rds_ai untuk memanggil model bahasa besar (LLM), konfigurasikan kunci API.
-- Konfigurasikan kunci API untuk model tertentu. SELECT rds_ai.update_model('qwen-plus', 'token', 'sk-****'); -- Konfigurasikan kunci API untuk semua model yang ditentukan oleh rds_ai.model_list. SELECT rds_ai.update_model(model_name,'token','sk-****') FROM rds_ai.model_list;Eksekusi pernyataan berikut untuk mengonfigurasi URL untuk 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. Eksekusi pernyataan berikut untuk mengonfigurasi pengaturan timeout untuk menginterupsi pemanggilan yang berjalan lama.
CatatanPengaturan timeout berikut hanya tersedia dalam sesi saat ini. Anda harus mengonfigurasinya kembali saat Anda membuat koneksi baru.
-- Konfigurasikan periode timeout permintaan dalam milidetik. SET http.timeout_msec TO 200000; SELECT http.http_set_curlopt('CURLOPT_TIMEOUT', '200000'); -- Konfigurasikan periode timeout koneksi. SELECT http.http_set_curlopt('CURLOPT_CONNECTTIMEOUT_MS', '200000');
LLM-based Q&A
Secara default, ekstensi rds_ai menggunakan model generasi teks yang disediakan oleh Qwen untuk mengimplementasikan LLM-based Q&A.
(Opsional) Konfigurasikan model default yang digunakan untuk mengimplementasikan LLM-based Q&A. Secara default, model Qwen-Plus digunakan.
CatatanUntuk mengubah model default dari ekstensi, tambahkan rds_ai ke Running Value parameter shared_preload_libraries. Untuk informasi lebih lanjut tentang cara mengonfigurasi parameter instance, lihat Ubah Parameter Instance ApsaraDB RDS for PostgreSQL.
Contohnya, Anda dapat mengatur Running Value parameter shared_preload_libraries menjadi
'pg_stat_statements,auto_explain,rds_ai'.SET rds_ai.default_prompt_model TO "qwen-max" ;Gunakan fungsi rds_ai.prompt untuk memanggil model default untuk layanan Q&A.
Perintah contoh:
SELECT rds_ai.prompt('Berikan saya resep untuk hidangan menggunakan kentang, terong, dan lobak. ');Perintah lengkap:
SELECT rds_ai.prompt( model_name=>'qwen-plus', -- Tentukan LLM yang digunakan untuk layanan Q&A. content=>'Berikan saya resep untuk hidangan menggunakan kentang, terong, dan lobak. ', -- Tentukan pertanyaan. args=>'{"top_p": 0.7}'::jsonb -- Tentukan parameter yang diperlukan untuk memanggil model. );
Konversi teks-ke-vektor
Secara default, ekstensi rds_ai menggunakan model text-embedding-v3 untuk mengonversi teks menjadi vektor.
Konversikan teks input menjadi vektor.
Anda dapat memanggil fungsi rds_ai.embed untuk mengonversi teks input menjadi vektor tanpa menentukan parameter. Secara default, teks dikonversi menjadi vektor padat.
SELECT rds_ai.embed( 'Kualitas pakaian sangat baik, sangat indah, layak untuk ditunggu, saya suka dan akan membeli lagi di sini' -- Tentukan teks yang ingin Anda konversi. );Anda juga dapat menentukan parameter untuk mengonversi teks input menjadi vektor jarang.
-- Konversikan teks input menjadi vektor jarang yang memiliki 250.002 dimensi secara default. SELECT rds_ai.embed( content=>'Kualitas pakaian sangat baik, sangat indah, layak untuk ditunggu, saya suka dan akan membeli lagi di sini', args=>'{"output_type": "sparse"}'::jsonb -- Tentukan parameter untuk konversi. );
Simpan vektor ke tabel yang ditentukan.
Buat tabel untuk menyimpan vektor. Dalam contoh ini, tabel bernama test_embed dibuat.
CREATE TABLE test_embed(a text, b vector(1024), c sparsevec(250002));Masukkan teks yang ingin Anda konversi ke dalam tabel.
INSERT INTO test_embed (a) values ('hello world');Gunakan fungsi rds_ai.embed untuk memanggil model text-embedding-v3 untuk konversi teks-ke-vektor. Kemudian, tulis vektor ke tabel test_embed.
Tulis vektor padat ke tabel.
UPDATE test_embed SET b = rds_ai.embed(a, '{"output_type": "dense"}'::jsonb)::vector;Tulis vektor jarang ke tabel.
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 mengambil vektor serupa.
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 teks chunk. ALTER TABLE test_rag ADD COLUMN embedding VECTOR(1024); UPDATE test_rag SET embedding=rds_ai.embed(chunk)::vector;Buat indeks vektor untuk embedding.
CatatanAnda harus menentukan kelas vector_cosine_ops untuk indeks vektor yang ingin Anda buat.
-- Buat indeks vektor berdasarkan algoritma HNSW. CREATE INDEX ON test_rag USING hnsw (embedding vector_cosine_ops); -- Buat indeks vektor berdasarkan algoritma IVFFlat. CREATE INDEX ON test_rag USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);Gunakan fungsi rds_ai.retrieve untuk memanggil model text-embedding-v3 untuk mengambil vektor dalam tabel uji.
Perintah contoh:
SELECT * FROM rds_ai.retrieve ('Mengapa PostgreSQL adalah database sumber terbuka paling canggih', 'public', 'test_rag', 'chunk', 'embedding');Perintah lengkap:
SELECT * FROM rds_ai.retrieve ( embed_model=>'text-embedding-v3', -- Tentukan model vektor yang digunakan untuk pengambilan vektor mirip top-N. question=>'Mengapa PostgreSQL adalah database sumber terbuka paling canggih', source_schema=>'public', -- Tentukan skema tabel yang menyimpan vektor yang akan diambil. source_table=>'test_rag', -- Tentukan tabel yang menyimpan vektor yang akan diambil. chunk_col=>'chunk', -- Tentukan kolom yang menyimpan teks chunk. vector_col=>'embedding', -- Tentukan kolom yang menyimpan vektor. -- Tentukan parameter default berikut. topn=>10, -- Tentukan nilai top N untuk pengambilan vektor. embed_args=>'{}'::jsonb, -- Tentukan parameter yang diperlukan oleh model. distance_type=>'cosine' -- Tentukan algoritma yang digunakan untuk menghitung jarak antar vektor. Nilai valid: L1, L2, cosine, dan negatif. );
Q&A berbasis RAG
Secara default, ekstensi rds_ai menggunakan model text-embedding-v3 dan model generasi teks yang disediakan oleh Qwen untuk mengimplementasikan layanan Q&A berbasis RAG.
Perintah contoh:
-- rds_ai menggunakan model text-embedding-v3 untuk operasi terkait vektor. Model generasi teks yang digunakan oleh rds_ai ditentukan oleh parameter rds_ai.default_prompt_model.
SELECT * FROM rds_ai.rag
('Mengapa PostgreSQL adalah database sumber terbuka paling canggih',
'public', 'test_rag', 'chunk', 'embedding');Perintah lengkap:
SELECT * FROM rds_ai.rag
(
embed_model=>'text-embedding-v3', -- Tentukan model vektor yang digunakan untuk layanan Q&A berbasis RAG.
prompt_model=>'qwen-plus', -- Tentukan model prompt yang digunakan untuk Q&A berbasis RAG.
question=>'Mengapa PostgreSQL adalah database sumber terbuka paling canggih',
source_schema=>'public', -- Tentukan skema tabel yang menyimpan vektor yang akan diambil.
source_table=>'test_rag', -- Tentukan tabel yang menyimpan vektor yang akan diambil.
chunk_col=>'chunk', -- Tentukan kolom yang menyimpan teks chunk.
vector_col=>'embedding', -- Tentukan kolom yang menyimpan vektor.
-- Tentukan parameter default berikut.
topn=>10,
embed_args=>'{}'::jsonb, -- Tentukan parameter yang diperlukan oleh model vektor yang digunakan untuk Q&A berbasis RAG.
prompt_args=>'{}'::jsonb, -- Tentukan parameter yang diperlukan oleh model prompt yang digunakan untuk Q&A berbasis RAG.
distance_type=>'L2' -- Tentukan algoritma yang digunakan untuk menghitung jarak antar vektor. Nilai valid: L1, L2, cosine, dan inner product.
);Gunakan model kustom untuk mengimplementasikan kemampuan AI
Hubungi Kami jika Anda mengalami masalah saat menambahkan model kustom.
Anda dapat menambahkan model kustom dengan menyisipkan catatan untuk model tersebut ke dalam tabel metadata rds_ai.model_list. Tabel berikut menunjukkan bidang yang termasuk dalam tabel rds_ai.model_list:
Bidang | Tipe data | Deskripsi |
model_name | name | Nama model. Bidang ini adalah kunci utama dari tabel rds_ai.model_list. |
request_type | text | Metode permintaan HTTP yang dikirim untuk memanggil model ini. |
request_header | http.http_header[] | Header permintaan HTTP yang mencakup informasi otentikasi. Tipe data dari bidang ini didefinisikan oleh ekstensi pgsql-http. |
uri | text | URL model. |
content_type | text | Tipe konten dari permintaan. Contoh: application/json. |
content_template | text | Template badan permintaan. Anda harus mengganti placeholder di template dengan nilai sebenarnya saat memanggil model. |
json_path | text | Pernyataan SQL yang digunakan untuk menyelesaikan respons dan mendapatkan informasi yang diperlukan. |
token | text | Token yang ditentukan dalam header. |
Operasi dasar
Tambahkan model kustom:
SELECT rds_ai.add_model( 'test-model', -- Nama model. 'POST', -- Metode permintaan HTTP. ARRAY[('Authorization', 'Bearer %s')]::http.http_header[], -- http_header 'https://****.com', -- URL model yang ditentukan dalam permintaan. 'application/json', -- Format konten permintaan. '{"key":"%s"}', -- Template badan permintaan. 'SELECT %L' -- Pernyataan SQL yang digunakan untuk menyelesaikan respons. );Gunakan model kustom:
Perintah berikut menunjukkan cara menggunakan fungsi rds_ai.raw_invoke_model untuk memanggil Qwen-Plus berdasarkan pengaturannya dalam tabel metadata. Dalam permintaan, array ditentukan untuk memenuhi template. Respons lengkap dikembalikan.
SELECT * FROM rds_ai.raw_invoke_model('qwen-plus', ARRAY['siapa kamu']);Perintah berikut menunjukkan cara menggunakan fungsi rds_ai.invoke_model untuk memanggil Qwen-Plus berdasarkan pengaturannya dalam tabel metadata. Bidang tertentu diselesaikan dari respons dan dikembalikan berdasarkan bidang
json_pathyang ditentukan untuk Qwen-Plus.SELECT * FROM rds_ai.invoke_model('qwen-plus', ARRAY['siapa kamu']);
Hapus model kustom:
SELECT rds_ai.del_model('test-model');
Tambahkan model PAI berbasis RAG
Untuk menambahkan model PAI berbasis RAG, kami sarankan Anda menerapkan instance RDS for PostgreSQL Anda dan modul Elastic Algorithm Service (EAS) dari Platform for AI (PAI) di VPC yang sama, dan konfigurasikan endpoint VPC dari PAI dalam pengaturan rds_ai. Selain itu, Anda harus menggunakan endpoint VPC dari instance RDS for PostgreSQL untuk terhubung ke modul EAS dari PAI. Dengan cara ini, layanan yang berbeda hanya berkomunikasi dalam VPC untuk memastikan keamanan data.
Terapkan laykan layanan berbasis RAG di modul EAS dari PAI. Untuk informasi lebih lanjut, lihat Gunakan Modul EAS dari PAI dan ApsaraDB RDS for PostgreSQL untuk Menerapkan Chatbot LLM Berbasis RAG.
Dapatkan informasi pemanggilan layanan berbasis RAG.
Klik nama layanan berbasis RAG untuk membuka halaman Service Details.
Di bagian Basic Information, klik View Endpoint Information.
Di kotak dialog Invocation Method, dapatkan endpoint dan token dari layanan.
Tambahkan model PAI berbasis RAG.
SELECT rds_ai.add_model( 'pai-rag', -- Nama model. 'POST', -- Metode permintaan HTTP. ARRAY[('Authorization','%s')]::http.http_header[], -- Header permintaan. 'http://rds-pai-rag-demo.****.cn-hangzhou.pai-eas.aliyuncs.com/service/query', -- URL model yang ditentukan dalam permintaan. 'application/json', -- Tipe konten permintaan. '{ "question": "%s" }', -- Template badan permintaan. 'SELECT (%L::jsonb->''answer'')::text' -- Pernyataan SQL yang digunakan untuk menyelesaikan respons. );CatatanGanti URL dalam contoh di atas dengan URL model aktual yang ditambahkan dengan
/service/query.Untuk informasi lebih lanjut tentang cara memanggil model PAI berbasis RAG, lihat Panggil Operasi API untuk Melakukan Inferensi Model.
Konfigurasikan token model PAI berbasis RAG.
SELECT rds_ai.update_model('pai-rag', 'token','MTFkYjMwZjgzYzA1YmE2N2YyNWMxM2NkNDVjMjEzNjYxMDAzMzE5****');(Opsional) Uji model PAI berbasis RAG.
Perintah contoh:
SELECT rds_ai.invoke_model('pai-rag', ARRAY['Parameter mana yang dapat menyebabkan akumulasi log WAL']);
Tambahkan model Function Compute berbasis RAG
Terapkan aplikasi AgentCraft di Function Compute.
Buat agen dan konfigurasikan client access information untuk agen.
Tambahkan model Function Compute berbasis RAG.
SELECT rds_ai.add_model( 'fc-rag', -- Nama model. 'POST', -- Metode permintaan HTTP. ARRAY[('Authorization','Bearer %s')]::http.http_header[], -- Header permintaan. 'https://agentcrckend-de-obnhjsknam.cn-hangzhou.fcapp.run/v1/chat/completions', -- URL model yang ditentukan dalam permintaan. 'application/json', -- Tipe konten permintaan. '{ "messages":[ { "role": "user", "content": "%s" } ], "stream": false, "max_tokens": 1024 }', 'SELECT (%L::jsonb->''choices''->0->''message''->>''content'')::text' -- Pernyataan SQL yang digunakan untuk menyelesaikan respons. );CatatanGanti URL dalam contoh di atas dengan URL model aktual yang ditambahkan dengan
/completions.Konfigurasikan token model Function Compute berbasis RAG.
SELECT rds_ai.update_model('fc-rag', 'token','8UiGAziWgYGPxM3qR5sAChBfDJRt****');(Opsional) Uji model Function Compute berbasis RAG.
Perintah contoh:
SELECT rds_ai.invoke_model('fc-rag', ARRAY['Parameter mana yang dapat menyebabkan akumulasi log WAL']);