5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[ADB]Select AI Conversations(会話)機能を使ってみた

5
Last updated at Posted at 2025-12-12

はじめに

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}');

iShot_2025-12-12_09.20.24.png

3. 会話情報の確認

上記で作成できた会話IDを使い、会話詳細を行います。

SELECT * FROM USER_CLOUD_AI_CONVERSATIONS WHERE conversation_id = '457CA739-41A3-12D8-E063-2917000A471B';

iShot_2025-12-12_09.21.53.png

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';

iShot_2025-12-12_09.30.10.png

これ以上はカスタマイズ可能な長期会話となります。

▪️セッションベースの短期会話

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>');

参考資料

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?