RDS for PostgreSQL は、rds_ai 拡張機能を提供します。この拡張機能は、Qwen、テキスト埋め込みなど、Alibaba Cloud Model Studio の高度なモデルを統合します。この拡張機能により、大規模言語モデル (LLM) ベースの Q&A、テキストからベクターへの変換、上位 N 件の類似ベクター検索、取得拡張生成 (RAG) など、幅広いアプリケーションが可能になります。さらに、rds_ai はカスタムモデルをサポートしており、モデルを追加して多様な AI アプリケーションを構築できます。
前提条件
-
ご利用の RDS for PostgreSQL インスタンスが、次の表のバージョン要件を満たしていることを確認してください。
メジャーバージョン
マイナーバージョン
PostgreSQL 16
20241230 以降
PostgreSQL 14、PostgreSQL 15、および PostgreSQL 17
20250430 以降
PostgreSQL 18
20251130 以降
マイナーエンジンバージョンを更新するには、「マイナーエンジンバージョンの更新」をご参照ください。
-
RDS for PostgreSQL インスタンスの特権アカウントが必要です。詳細については、「アカウントの作成」をご参照ください。
-
このドキュメントで使用されているモデルは、Alibaba Cloud Model Studio によって提供されています。まずサービスを有効化し、API キーを取得する必要があります。詳細については、「API キーの取得」をご参照ください。
ネットワーク設定
デフォルトでは、RDS for PostgreSQL インスタンスは外部ネットワークにアクセスできません。インスタンスが外部モデルにアクセスできるようにするには、その VPC に NAT ゲートウェイを設定する必要があります。NAT ゲートウェイの詳細については、「インターネット NAT ゲートウェイの SNAT 機能を使用してインターネットにアクセスする」をご参照ください。
拡張機能の作成と削除
拡張機能をインストールする前に、ご利用の RDS for PostgreSQL インスタンスが、それをサポートするメジャーバージョンおよびマイナーバージョンで実行されていることを確認してください。詳細については、このトピックの「前提条件」をご参照ください。
-
プラグイン ページで拡張機能をインストールします。
-
[インスタンス] ページに移動し、上部でリージョンを選択してから、ターゲットインスタンスの ID をクリックします。
-
左側のナビゲーションウィンドウで、プラグイン をクリックします。
-
プラグインの概要 タブで、rds_ai 拡張機能を見つけ、インストール をクリックします。
-
ダイアログボックスで、ターゲットのデータベースとアカウントを選択し、インストール をクリックします。
(任意) プラグインの管理 ページでは、プラグインがインストール済みです タブから拡張機能をアンインストールできます。
-
-
SQL ステートメントによる拡張機能の管理
拡張機能の作成
CREATE EXTENSION IF NOT EXISTS rds_ai CASCADE;説明-
このステートメントは特権アカウントのみが実行できます。特権アカウントを作成するには、「アカウントの作成」をご参照ください。
-
rds_ai 拡張機能を作成すると、pgvector および pgsql-http 拡張機能も作成されます。
-
インストールされているすべての拡張機能を表示するには、
SELECT * FROM pg_extension;ステートメントを実行します。
拡張機能の削除
DROP EXTENSION rds_ai; -
デフォルトモデル
rds_ai 拡張機能は、以下に示すデフォルトモデルをサポートしています。カスタムモデルを作成することもできます。
|
API |
パラメーター |
タイプ |
デフォルト |
|
prompt API |
rds_ai.default_prompt_model |
enum |
|
|
embedding API |
rds_ai.default_embed_model |
enum |
text-embedding-v3 |
デフォルトモデルを変更するには、shared_preload_libraries インスタンスパラメーターの [実行中の値] に rds_ai を追加する必要があります。パラメーターの設定方法の詳細については、「インスタンスパラメーターの設定」をご参照ください。例えば、[実行中の値] を 'pg_stat_statements,auto_explain,rds_ai' に変更します。
rds_ai 拡張機能のデフォルトモデルは、次の機能を提供します。
基本設定
-
rds_ai を使用して大規模言語モデルを呼び出すには、まず API キーを設定する必要があります。
-- ターゲットモデルの API キーを設定します。 SELECT rds_ai.update_model('qwen-plus', 'token', 'sk-****'); -- rds_ai.model_list 内のすべてのモデルに API キーを設定します。 SELECT rds_ai.update_model(model_name,'token','sk-****') FROM rds_ai.model_list; -
次のステートメントを実行して、各デフォルトモデルの URL を設定します。
--qwen-plus モデル SELECT rds_ai.update_model('qwen-plus', 'uri', 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation'); --qwen-max モデル SELECT rds_ai.update_model('qwen-max', 'uri', 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation'); --qwen-turbo モデル SELECT rds_ai.update_model('qwen-turbo', 'uri', 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/text-generation/generation'); --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'); -
rds_ai 拡張機能は、pgsql-http 拡張機能を使用してリモートでモデルを呼び出します。長時間実行されるリクエストを中断するには、次のタイムアウト設定を構成します。
説明これらのタイムアウト設定はセッションレベルであり、新しい接続ごとに再設定する必要があります。
-- リクエストのタイムアウト期間をミリ秒単位で設定します。 SET http.timeout_msec TO 200000; SELECT http.http_set_curlopt('CURLOPT_TIMEOUT', '200000'); -- 接続タイムアウト期間を設定します。 SELECT http.http_set_curlopt('CURLOPT_CONNECTTIMEOUT_MS', '200000');
LLM ベースの Q&A
デフォルトでは、rds_ai 拡張機能は LLM ベースの Q&A に Qwen テキスト生成モデルを使用します。
-
(任意) LLM ベースの Q&A のデフォルトモデルを設定します。このパラメーターを設定しない場合、システムはデフォルトで
qwen-plusモデルを使用します。説明デフォルトモデルを変更するには、shared_preload_libraries インスタンスパラメーターの [実行中の値] に
rds_aiを追加する必要があります。パラメーターの設定方法の詳細については、「インスタンスパラメーターの設定」をご参照ください。例えば、[実行中の値] を'pg_stat_statements,auto_explain,rds_ai'に変更します。SET rds_ai.default_prompt_model TO 'qwen-max'; -
rds_ai.promptを使用して、Q&A 用のデフォルトの大規模言語モデルを呼び出します。例:SELECT rds_ai.prompt('ニンジン、ジャガイモ、ナスを使った料理のレシピを教えてください。');完全な API 呼び出し:
SELECT rds_ai.prompt( model_name=>'qwen-plus', -- モデル名。 content=>'ニンジン、ジャガイモ、ナスを使った料理のレシピを教えてください。', -- 質問。 args=>'{"top_p": 0.7}'::jsonb -- 大規模言語モデルを呼び出すためのパラメーター。 );
テキストからベクターへの変換
デフォルトでは、rds_ai 拡張機能はテキストからベクターへの変換に text-embedding-v3 モデルを使用します。
-
デフォルトでは、出力は密ベクトルです。
SELECT rds_ai.embed( '風急かにして天高く猿嘯哀し、渚清くして沙白く鳥飛び廻る。無辺の落木蕭蕭として下り、不尽の長江滾滾として来たる。' -- ベクターに変換するテキスト。 ); -
出力を疎ベクトルとして指定します。
-- テキストを疎ベクトルに変換します。デフォルトでは 250002 次元です。 SELECT rds_ai.embed( content=>'風急かにして天高く猿嘯哀し、渚清くして沙白く鳥飛び廻る。無辺の落木蕭蕭として下り、不尽の長江滾滾として来たる。', args=>'{"output_type": "sparse"}'::jsonb -- パラメーターリスト。 );
結果のベクターを宛先テーブルに格納します。
-
test_embed テーブルを作成します。
CREATE TABLE test_embed(a text, b vector(1024), c sparsevec(250002)); -
変換したいテキストを挿入します。
INSERT INTO test_embed (a) values ('hello world'); -
rds_ai.embedを使用してtext-embedding-v3モデルを呼び出し、結果を test_embed テーブルに書き込みます。-
密ベクトルを書き込みます。
UPDATE test_embed SET b = rds_ai.embed(a, '{"output_type": "dense"}'::jsonb)::vector; -
疎ベクトルを書き込みます。
UPDATE test_embed SET c = rds_ai.embed(a, '{"output_type": "sparse"}'::jsonb)::sparsevec;
-
上位 N 件の類似ベクター検索
デフォルトでは、rds_ai 拡張機能は類似ベクター検索に text-embedding-v3 モデルを使用します。例:
-
テストテーブルを作成します。
-- test_rag という名前のテストテーブルを作成します。 CREATE TABLE test_rag ( id SERIAL PRIMARY KEY, chunk TEXT ); -- チャンクから変換されたベクターを格納するための埋め込み列を追加します。 ALTER TABLE test_rag ADD COLUMN embedding VECTOR(1024); -- 埋め込み列にデータを入力します。 UPDATE test_rag SET embedding=rds_ai.embed(chunk)::vector; -
ベクターインデックスを作成します。
説明ベクターインデックスを作成する際は、vector_cosine_ops 演算子クラスを使用する必要があります。
-- HNSW インデックスを作成します。 CREATE INDEX ON test_rag USING hnsw (embedding vector_cosine_ops); -- IVFFlat インデックスを作成します。 CREATE INDEX ON test_rag USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100); -
text-embedding-v3モデルを呼び出すrds_ai.retrieveを使用して、テストテーブルでベクター検索を実行します。SELECT * FROM rds_ai.retrieve ('なぜ PostgreSQL は最も先進的なオープンソースデータベースと見なされているのですか', 'public', 'test_rag', 'chunk', 'embedding');完全な API 呼び出し:
SELECT * FROM rds_ai.retrieve ( embed_model=>'text-embedding-v3', -- 使用する埋め込みモデル。 question=>'なぜ PostgreSQL は最も先進的なオープンソースデータベースと見なされているのですか', source_schema=>'public', -- 類似検索の対象となるテーブルのスキーマ。 source_table=>'test_rag', -- 類似検索の対象となるテーブル。 chunk_col=>'chunk', -- テキストチャンクを含む列。 vector_col=>'embedding', -- ベクターを含む列。 -- 以下はオプションのパラメーターです。 topn=>10, -- 返す上位結果の数。 embed_args=>'{}'::jsonb, -- 埋め込みモデルのパラメーター。 distance_type=>'cosine' -- 距離アルゴリズム。有効な値:L1、L2、cosine、および内積。 );
RAG ベースの Q&A
デフォルトでは、rds_ai 拡張機能は RAG ベースの Q&A に text-embedding-v3 モデルと Qwen テキスト生成モデルを使用します。
-- 埋め込みモデル:text-embedding-v3。テキスト生成モデル:rds_ai.default_prompt_model パラメーターで指定。
SELECT * FROM rds_ai.rag
('なぜ PostgreSQL は最も先進的なオープンソースデータベースと見なされているのですか',
'public', 'test_rag', 'chunk', 'embedding');
完全な API 呼び出し:
SELECT * FROM rds_ai.rag
(
embed_model=>'text-embedding-v3', -- 使用する埋め込みモデル。
prompt_model=>'qwen-plus', -- 使用するプロンプトモデル。
question=>'なぜ PostgreSQL は最も先進的なオープンソースデータベースと見なされているのですか',
source_schema=>'public', -- 類似検索の対象となるテーブルのスキーマ。
source_table=>'test_rag', -- 類似検索の対象となるテーブル。
chunk_col=>'chunk', -- テキストチャンクを含む列。
vector_col=>'embedding', -- ベクターを含む列。
-- 以下はオプションのパラメーターです。
topn=>10,
embed_args=>'{}'::jsonb, -- 埋め込みモデルのパラメーター。
prompt_args=>'{}'::jsonb, -- プロンプトモデルのパラメーター。
distance_type=>'L2' -- 距離アルゴリズム。有効な値:L1、L2、cosine、および内積。
);
カスタムモデル
カスタムモデルの追加で問題が発生した場合は、お問い合わせください。
rds_ai.model_list メタデータテーブルを使用してカスタムモデルを追加できます。次の表に、rds_ai.model_list のフィールドを示します。
|
パラメーター |
タイプ |
説明 |
|
model_name |
name |
モデルの名前。このフィールドはプライマリキーです。 |
|
request_type |
text |
HTTP リクエストメソッド (POST など)。 |
|
request_header |
http.http_header[] |
リクエストヘッダーには、認証情報などの情報が含まれます。このデータ型は、pgsql-http 拡張機能によって提供されます。 |
|
uri |
text |
モデルのエンドポイント URL。 |
|
content_type |
text |
リクエストのコンテンツタイプ (application/json など)。 |
|
content_template |
text |
リクエストボディのテンプレート。モデルを呼び出すときに設定されるプレースホルダーを含めることができます。 |
|
json_path |
text |
HTTP レスポンスを解析し、必要なコンテンツを抽出するために使用される SQL ステートメント。 |
|
token |
text |
リクエストヘッダーに含まれる認証トークン。 |
カスタムモデルの追加
SELECT rds_ai.add_model(
'test-model', -- モデル名
'POST', -- HTTP リクエストメソッド
ARRAY[('Authorization', 'Bearer %s')]::http.http_header[], -- リクエストヘッダー
'https://****.com', -- リクエスト URL
'application/json', -- コンテンツタイプ
'{"key":"%s"}', -- リクエストボディテンプレート
'SELECT %L' -- レスポンスを解析するための SQL ステートメント
);
カスタムモデルの使用
-
rds_ai.raw_invoke_model 関数を使用して、モデルの設定に基づいてリクエストを送信します。この関数は、リクエストテンプレートに ARRAY を設定し、完全な HTTP レスポンスを返します。
SELECT * FROM rds_ai.raw_invoke_model('qwen-plus', ARRAY['あなたは誰ですか']); -
rds_ai.invoke_model 関数を使用して、モデルの設定に基づいてリクエストを送信し、
json_path設定を使用してレスポンスから特定のフィールドを抽出します。SELECT * FROM rds_ai.invoke_model('qwen-plus', ARRAY['あなたは誰ですか']);
カスタムモデルの削除
SELECT rds_ai.del_model('test-model');
PAI-RAG モデルの追加
PAI-EAS と RDS for PostgreSQL インスタンスを同じ VPC にデプロイすることを推奨します。rds_ai 拡張機能でモデルを設定する際は、PAI サービスの VPC エンドポイントを使用します。これにより、すべての通信が VPC 内に留まり、セキュリティが強化されます。
-
PAI-EAS に RAG サービスをデプロイします。詳細については、「PAI-EAS と RDS for PostgreSQL を使用した LLM ベースの RAG チャットボットのデプロイ」をご参照ください。
-
RAG サービスの呼び出し情報を取得します。
-
RAG サービスの名前をクリックして、[サービス詳細] ページを開きます。
-
[基本情報] セクションで、[呼び出し情報の表示] をクリックします。
-
[呼び出し情報] ダイアログボックスで、サービスエンドポイントとトークンを取得します。
-
-
PAI-RAG モデルを追加します。
SELECT rds_ai.add_model( 'pai-rag', -- モデル名 'POST', -- リクエストメソッド ARRAY[('Authorization','%s')]::http.http_header[], -- リクエストヘッダー, 'http://rds-pai-rag-demo.****.cn-hangzhou.pai-eas.aliyuncs.com/service/query', -- リクエスト URL 'application/json', -- コンテンツタイプ '{ "question": "%s" }', -- リクエストボディ 'SELECT (%L::jsonb->''answer'')::text' -- 解析パス );説明-
モデルの URL を実際のサービスエンドポイントに置き換え、
/service/queryを追加します。 -
PAI-RAG モデルの呼び出しに関する詳細については、「API を使用した PAI モデルの呼び出し」をご参照ください。
-
-
PAI-RAG モデルのトークンを設定します。
SELECT rds_ai.update_model('pai-rag', 'token','MTFkYjMwZjgzYzA1YmE2N2YyNWMxM2NkNDVjMjEzNjYxMDAzMzE5****');
新しい PAI-RAG モデルを検証します。例:
SELECT rds_ai.invoke_model('pai-rag', ARRAY['WAL ログの蓄積に関連するパラメーターはどれですか?']);
Function Compute RAG モデルの追加
-
Function Compute に AgentCraft アプリケーションをデプロイします。詳細については、「クラウドでの AgentCraft のデプロイ」をご参照ください。
-
エージェントを作成し、その [クライアントアクセス] を設定します。
例えば、「エージェントを DingTalk チャットボットに接続する」で説明されているように、[クライアントアクセス] を設定する際にサービスエンドポイントとトークンを取得して保存します。
-
Function Compute RAG モデルを追加します。
SELECT rds_ai.add_model( 'fc-rag', -- モデル名 'POST', -- リクエストメソッド ARRAY[('Authorization','Bearer %s')]::http.http_header[], -- リクエストヘッダー, 'https://agentcrckend-de-obnhjsknam.cn-hangzhou.fcapp.run/v1/chat/completions', -- リクエスト URL 'application/json', -- コンテンツタイプ '{ "messages":[ { "role": "user", "content": "%s" } ], "stream": false, "max_tokens": 1024 }', 'SELECT (%L::jsonb->''choices''->0->''message''->>''content'')::text' -- 解析パス );説明モデルの URL を実際の URL に置き換え、
/completionsを追加します。 -
Function Compute RAG モデルのトークンを設定します。
SELECT rds_ai.update_model('fc-rag', 'token','8UiGAziWgYGPxM3qR5sAChBfDJRt****');
新しい Function Compute RAG モデルを検証します。例:
SELECT rds_ai.invoke_model('fc-rag', ARRAY['WAL ログの蓄積に関連するパラメーターはどれですか?']);