はじめに
Select AI Conversations(会話機能)は、ユーザーとシステムの間で行われる対話型インタラクションを指します。この対話では、一連のユーザーによる自然言語プロンプトが保存され、LLM(大規模言語モデル)との長期的なコンテキスト維持をサポートします。
Select AI の会話には次の 2 種類があります。
▪️カスタマイズ可能な長期会話:
DBMS_CLOUD_AI の会話関連プロシージャおよび関数を使用して、会話の 作成・設定・削除・更新 が可能です。
この会話が有効な状態では、Select AI がプロンプト履歴を取得し、LLM に送信して応答を生成します。生成されたプロンプトと応答は 永続テーブルに保存され、将来の会話で再利用できます。
▪️セッションベースの短期会話:
AI プロファイルの conversation 属性を true に設定することで有効になります。
複数会話を扱える機能とは異なり、セッションベース会話では セッション中のみプロンプトが保持 されます。プロンプトは一時表に格納され、セッション終了時に自動的に削除されます。
このタイプの会話は 再利用できず、会話の切り替えもできません。
事前準備
ADBの構築と接続方法については、以下の記事を参照してください:
Select AI Conversationsの使い方
Select AIの設定
admin ユーザーで ADB に接続し、ADB_USER の作成と必要な権限を付与します。
create user ADB_USER identified by WElcome##123456;
grant execute on DBMS_CLOUD_AI to ADB_USER;
grant execute on DBMS_CLOUD to ADB_USER;
grant execute on DBMS_NETWORK_ACL_ADMIN to ADB_USER;
grant connect to ADB_USER;
alter user ADB_USER quota 500M on data;
Select AI Conversationsの実行
以下の作業は ADB_USER で接続して実行します。
アクセス制御エントリ(ACE)の追加
ネットワーク ACL に対象ホストの ACE を追加します。(DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE)
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'api.x.ai',
LOWER_PORT => 443,
UPPER_PORT => 443,
ace => xs$ace_type(privilege_list => xs$name_list('http'),
principal_name => 'ADB_USER',
principal_type => xs_acl.ptype_db)
);
END;
/
クレデンシャルの作成
DBMS_CLOUD.CREATE_CREDENTIALを使用してクレデンシャルを作成します。
(OCIDや鍵情報は省略)
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'OPENAI_CRED',
user_ocid => 'ユーザーのOCID',
tenancy_ocid => 'テナントのOCID',
private_key => '-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCwC9FmNjoB8ahp
<省略>
RX+Ge8nMNz+igVQ9ap5YsLs=
-----END PRIVATE KEY-----',
fingerprint => 'xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:19:47:ab'
);
END;
/
▪️カスタマイズ可能な長期会話
1. プロファイル「OPENAI_LONG」の作成
DBMS_CLOUD_AI.CREATE_PROFILEを使用してプロファイルを作成します。
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name =>'OPENAI_LONG',
status => 'ENABLED',
attributes =>'{"provider": "oci",
"credential_name": "OPENAI_CRED",
"region": "us-chicago-1",
"model": "xai.grok-3",
"oci_apiformat": "GENERIC",
"object_list": [{"owner": "SH", "name": "customers"},
{"owner": "SH", "name": "countries"},
{"owner": "SH", "name": "supplementary_demographics"},
{"owner": "SH", "name": "profits"},
{"owner": "SH", "name": "promotions"},
{"owner": "SH", "name": "products"}]
}');
END;
/
2. 会話の作成
DBMS_CLOUD_AI.CREATE_CONVERSATION を使用して会話を作成します。
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
attributes => '{"title":"My 1st conversation",
"description":"this is my 1st conversation",
"retention_days":10,
"conversation_length":10}');
3. 会話情報の確認
上記で作成できた会話IDを使い、会話詳細を行います。
SELECT * FROM USER_CLOUD_AI_CONVERSATIONS WHERE conversation_id = '457CA739-41A3-12D8-E063-2917000A471B';
4. プロファイルの設定
プロファイル「OPENAI_LONG」を設定します。
EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI_LONG');
5. 会話IDの設定
DBMS_CLOUD_AI.SET_CONVERSATION_ID を使用して会話を作成します。
EXEC DBMS_CLOUD_AI.SET_CONVERSATION_ID('45B81000-7343-1751-E063-2917000AD442');
6. Select AI プロンプトの実行
select ai <プロンプト>を実行します。
select ai runsql 顧客の総数はいくつですか;
select ai chat what is Autonomous AI database;
7. プロンプト履歴の確認
SELECT * FROM USER_CLOUD_AI_CONVERSATION_PROMPTS WHERE conversation_id = '45B81000-7343-1751-E063-2917000AD442';
これ以上はカスタマイズ可能な長期会話となります。
▪️セッションベースの短期会話
1. プロファイル「OPENAI_SHORT」の作成
「conversation」属性は「true」を指定します。
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name =>'OPENAI_SHORT',
status => 'ENABLED',
attributes =>'{"provider": "oci",
"credential_name": "OPENAI_CRED",
"region": "us-chicago-1",
"model": "xai.grok-3",
"oci_apiformat": "GENERIC",
"object_list": [{"owner": "SH", "name": "customers"},
{"owner": "SH", "name": "countries"},
{"owner": "SH", "name": "supplementary_demographics"},
{"owner": "SH", "name": "profits"},
{"owner": "SH", "name": "promotions"},
{"owner": "SH", "name": "products"}],
"conversation": "true"
}');
END;
/
2. プロファイルの設定
先ほど作成したプロファイル「OPENAI_SHORT」をセットします。
EXEC DBMS_CLOUD_AI.SET_PROFILE('OPENAI_SHORT');
3. Select AI プロンプトの実行
select ai how many customers exist;
select ai how many customers in San Francisco are married;
これらのプロンプトは一時表に格納され、セッション終了とともに自動的に削除されます。
これ以上はセッションベースの短期会話となります。
補足
クレデンシャルの削除、プロファイルの削除と会話の削除方法を案内します。
Exec DBMS_CLOUD.DROP_CREDENTIAL(credential_name => '<クレデンシャル名>');
Exec DBMS_CLOUD_AI.DROP_PROFILE(profile_name =>'<プロファイル名>');
EXEC DBMS_CLOUD_AI.DROP_CONVERSATION('<会話ID>');


