Polar_AI は、標準 SQL を使用してデータベースから直接 AI モデルを呼び出すことができる PolarDB の拡張機能です。本ガイドでは、この拡張機能の有効化、カスタムモデルの登録、および呼び出し方法について順に説明します。すべての操作は、データベースを離れることなく実行できます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
PolarDB for PostgreSQL (Compatible with Oracle) クラスターがバージョン 2.0、リビジョン 2.0.14.13.28.0 以降で実行中であること
クラスターに対する特権アカウントを保有していること
リビジョンの確認には、クラスター内で SHOW polardb_version; を実行するか、PolarDB コンソールで確認してください。リビジョンが古い場合は、続行する前にアップデートしてください。仕組み
Polar_AI は、データベースと外部 AI モデルサービスを接続するブリッジとして機能します。
エンドポイント URL と認証トークンを指定して AI モデルを登録します。
Polar_AI は、モデル構成をデータベース内に保存します。
SQL ラッパー関数を使用してモデルを呼び出します。この関数は入力をモデルサービスに渡し、応答を返します。
処理全体を通して、すべてのデータはご利用のデータベース環境内に留まります。また、モデルサービスは PolarDB クラスターと同じ VPC 内で実行される必要があります。
基本概念
埋め込み(Embedding):テキストや画像などの高次元データを、類似検索やその他の機械学習タスクに適したコンパクトかつ密ベクトル表現に変換するプロセスです。
自然言語処理(NLP):人間の言語を処理・生成するための AI 分野であり、テキスト分類、感情分析、Machine Translation、対話システムなどを含みます。
Polar_AI の使い始め
本ガイドでは、Platform for AI(PAI)上にデプロイされた DeepSeek-R1-Distill-Qwen-7B モデルを例として使用します。すべての手順は連続しており、前の手順で作成したモデル名 my_test_pai_model および入力関数 ai_text_in_fn は、後続の手順で参照されます。
ステップ 1:拡張機能の有効化
特権アカウントでクラスターに接続し、以下のコマンドを実行します。
CREATE EXTENSION IF NOT EXISTS polar_ai;ステップ 2:モデルサービスのデプロイ
Polar_AI が呼び出す AI モデルをデプロイします。
PAI 上への DeepSeek-R1-Distill-Qwen-7B のデプロイ を実行します。サービスがご利用の PolarDB クラスターと同じ VPC 内にデプロイされていることを確認してください。
デプロイ後、サービスの詳細 > 呼び出し情報 に移動し、呼び出し情報を表示 をクリックします。アクセスアドレス および トークン をメモしてください。次のステップでこれらが必要になります。
ステップ 3:入力関数の定義
入力関数は、SQL 入力をモデルサービスが期待する JSON リクエストボディに変換します。
DeepSeek-R1-Distill-Qwen-7B モデルは、以下のリクエストボディ形式を期待します。
{
"model": "DeepSeek-R1-Distill-Qwen-7B",
"prompt": "こんにちは!"
}モデル名およびテキストプロンプトからこの JSON を構築する入力関数を作成します。
CREATE OR REPLACE FUNCTION ai_text_in_fn(model_name text, content text)
RETURNS jsonb
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN ('{"model": "'|| model_name ||'","prompt":"'|| content ||'"}')::jsonb;
END;
$function$;ステップ 4:モデルの登録
AI_CreateModel を呼び出して、モデルをデータベースに登録します。
SELECT polar_ai.ai_createmodel(
'my_test_pai_model', -- model_id: このモデルの固有の名前
'<アクセスアドレス>/v1/completions', -- model_url: エンドポイント + 呼び出し方法
'Alibaba', -- model_provider
'EAS 大規模言語モデル', -- model_type
'DeepSeek-R1-Distill-Qwen-7B', -- model_name
'{"author_type": "token", "token": "<モデルサービストークン>"}', -- model_config: 認証トークン
NULL, -- model_headers_fn: 任意
'ai_text_in_fn'::regproc, -- model_in_transform_fn: 入力関数
NULL -- model_out_transform_fn: 任意
);<アクセスアドレス> および <モデルサービストークン> は、ステップ 2 で取得した値に置き換えてください。
主要なパラメーター:
| パラメーター | 説明 |
|---|---|
model_url | 呼び出し方法を付加したモデルのアクセスアドレスです。Chat および Completions がサポートされています。この例では Completions を使用するため、/v1/completions を付加します。 |
model_config | 認証構成です。token を、ステップ 2 で取得したモデルサービストークンに設定します。 |
model_in_transform_fn | SQL 入力を JSON リクエストボディにフォーマットする入力関数です。ai_text_in_fn(ステップ 3 で作成した関数)に設定します。 |
model_headers_fn | 任意です。要求にカスタム HTTP ヘッダーを追加する関数です。必要ない場合は NULL を設定します。 |
model_out_transform_fn | 任意です。応答を返す前に、生のモデル応答を変換する関数です。生の応答を返す場合は NULL を設定します。 |
モデルが正しく登録されたことを確認するには、以下のコマンドを実行します。
SELECT * FROM polar_ai._ai_models;ステップ 5:ラッパー関数の作成
AI_CallModel を呼び出し、応答テキストを抽出する SQL 関数を作成します。
CREATE OR REPLACE FUNCTION my_text_pai_model_func(model_id text, content text)
RETURNS text
AS $$ SELECT (polar_ai.AI_CALLMODEL($1, $2)::jsonb -> 'choices' -> 0 ->> 'text')::text AS result $$
LANGUAGE 'sql' IMMUTABLE;この関数は、model_id および content を AI_CALLMODEL に渡し、JSON 応答の choices[0].text フィールドから応答テキストを抽出します。
ステップ 6:モデルの呼び出し
SELECT my_text_pai_model_func('my_test_pai_model', 'こんにちは');予想される出力:
my_text_pai_model_func
--------------------------------------
こんにちは! 今日はどのようにお手伝いできますか?
(1 row)次のステップ
AI_CreateModel — モデル登録のための全パラメーターのリファレンス
AI_CallModel — SQL からのモデル呼び出しのための全リファレンス