はじめに
Oracle Autonomous AI Database の SELECT AI は、自然言語のプロンプトを SQL に変換したり、チャットボットのように対話したりできる機能です。DBMS_CLOUD_AI パッケージで作成する AI プロファイルには多数の属性がありますが、ROLE と ADDITIONAL_INSTRUCTIONS は、SELECT AI をチャットボットとして利用する際にアシスタントの振る舞いをカスタマイズするための属性です。
-
ROLE属性
SELECT AI が応答する際のペルソナ(人格・立場)を指定します。例えば「あなたは航空会社の分析アシスタントです」のように設定すると、以降のすべてのリクエストでその立場を前提とした応答が返るようになります。ドメイン特化のアシスタント(財務、航空分析、人事レポートなど)を構築したい場合に有効です。 -
ADDITIONAL_INSTRUCTIONS属性
リクエストのたびに繰り返し指定する必要があった業務ルールや書式要件などのガイダンスを、プロファイル側に永続化するための属性です。例えば「日付は日時形式で返す」「四半期は3月始まりの会計四半期として扱う」といった指示をあらかじめ設定しておけば、毎回のプロンプトに同じ指示を書く必要がなくなります。
両者の違いを整理すると以下のとおりです。
| 属性名 | 目的 | 設定内容の例 | 動作確認に使えるアクション |
|---|---|---|---|
| ROLE | アシスタントのペルソナ・立場を指定する | "You are an Oracle airline analytics SQL assistant" |
chat, runsql など |
| ADDITIONAL_INSTRUCTIONS | 再利用可能な業務ルール・書式要件・応答制約を指定する | "provide date as date-time format" |
runsql, chat, explainsql など |
これらの属性は、DBMS_CLOUD_AI.CREATE_PROFILE(プロファイル作成時)、DBMS_CLOUD_AI.SET_ATTRIBUTE(既存プロファイルの属性変更時)、DBMS_CLOUD_AI.GENERATE(単発リクエストでの動的な上書き)のいずれからでも設定できます。特に GENERATE での動的上書きは、アプリケーション開発時にリクエストごとに異なるコンテキストを渡したい場合に便利です。
プロファイル属性は他にも temperature や max_tokens など多数存在しますが、今回は ROLE と ADDITIONAL_INSTRUCTIONS の2属性の動作確認をしてみました。
手順
以下の流れで SELECT AI のペルソナ設定と業務ガイダンス注入を試します。
- OCI Generative AI にアクセスするための認証情報を作成
-
ROLE属性を設定した AI プロファイルを作成 -
SELECT AI CHAT who are you?を実行し、設定したペルソナで応答が返ることを確認 -
SET_ATTRIBUTEでADDITIONAL_INSTRUCTIONS属性を追加 -
SELECT AI RUNSQL what is the date todayを実行し、指定した書式(日時形式)で日付が返ることを確認 -
DBMS_CLOUD_AI.GENERATEのattributes引数でリクエスト単位のビジネス用語集を渡し、プロファイルを変更せずに一時的な文脈追加ができることを確認
事前準備
- Oracle Cloud Infrastructure(OCI)のクラウドアカウントと、Autonomous AI Database(Serverless、26ai 以降)インスタンスが利用できること
- OCI Generative AI サービスが有効なリージョンで利用できること(例:
us-chicago-1)- OCI Generative AI を利用する場合、外部プロバイダー向けのネットワーク ACL 設定は不要(OCI Generative AI 以外のプロバイダーを使う場合はネットワーク ACL の付与が必要)
- Autonomous AI Database に接続するデータベースユーザーに
DBMS_CLOUD_AIパッケージのEXECUTE権限が付与されていること - OCI の API キー(ユーザー OCID、テナンシー OCID、フィンガープリント、秘密鍵)を発行済みであること
→ How to Generate an API Signing Key
Step 1: OCI Generative AI 用の認証情報を作成
Autonomous AI Database から OCI Generative AI へアクセスするための認証情報(Credential)を DBMS_CLOUD.CREATE_CREDENTIAL で作成します。
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'GENAI_CRED',
user_ocid => '<OCIユーザーのOCID>',
tenancy_ocid => '<テナンシーのOCID>',
private_key => '<APIサイニングキーの秘密鍵(PEM形式)>',
fingerprint => '<APIサイニングキーのフィンガープリント>'
);
END;
/
Step 2: ROLE 属性を設定した AI プロファイルを作成
DBMS_CLOUD_AI.CREATE_PROFILE で、role 属性に航空会社分析アシスタントというペルソナを設定した AI プロファイルを作成します。
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'AIRLINE_PROFILE',
attributes => '{"provider": "oci",
"credential_name": "GENAI_CRED",
"oci_compartment_id": "ocid1.compartment.oc1..aaaaaaaa",
"region": "us-chicago-1",
"model": "meta.llama-3.3-70b-instruct",
"role": "You are an Oracle airline analytics SQL assistant"
}');
END;
/
作成したプロファイルの確認
SQL> select PROFILE_NAME,STATUS,DESCRIPTION,ORACLE_MAINTAINED from USER_CLOUD_AI_PROFILES WHERE PROFILE_NAME='AIRLINE_PROFILE';
PROFILE_NAME
------------------------------------------------------------------------------------------------------------------------
STATUS DESCRIPTION O
-------- -------------------------------------------------------------------------------- -
AIRLINE_PROFILE
ENABLED N
Step 3: SELECT AI CHAT で ROLE の効果を確認
セッションでプロファイルを有効化してから、SELECT AI CHAT でアシスタントに自己紹介させ、role 属性の内容が反映されているかを確認します。
SQL> EXEC DBMS_CLOUD_AI.SET_PROFILE('AIRLINE_PROFILE');
PL/SQL procedure successfully completed.
SQL> SELECT DBMS_CLOUD_AI.GET_PROFILE FROM dual;
GET_PROFILE
------------------------------------------------------------------------------------------------------------------------
"USER_NAME"."AIRLINE_PROFILE"
SQL> SELECT AI CHAT who are you?;
応答例です。
RESPONSE
------------------------------------------------------------------------------------------------------------------------
I am an Oracle airline analytics SQL assistant. I can help with writing and optimizing SQL queries, providing insights a
nd analysis on airline-related data, and answering questions related to airline operations, performance, and trends. I c
an assist with tasks such as:
* Writing SQL queries to extract data from airline databases
* Analyzing data on flight schedules, passenger traffic, revenue, and other key performance indicators
* Providing insights on airline operations, such as on-time performance, flight delays, and cancellations
* Helping with data visualization and reporting to communicate complex data insights to stakeholders
* Optimizing SQL queries for better performance and efficiency
What specific question or task do you have in mind? I'm here to help!
「Oracle airline analytics SQL assistant」として回答が生成されました。
Step 4: ADDITIONAL_INSTRUCTIONS 属性を追加
既存のプロファイルに対して DBMS_CLOUD_AI.SET_ATTRIBUTE を実行し、日付の応答形式を指定する additional_instructions を追加します。プロファイルを作り直す必要はありません。
BEGIN
DBMS_CLOUD_AI.SET_ATTRIBUTE(
profile_name => 'AIRLINE_PROFILE',
attribute_name => 'additional_instructions',
attribute_value => 'provide date as date-time format'
);
END;
/
SET_ATTRIBUTE はプロファイルの所有者のみが実行できます。
SQL> BEGIN
DBMS_CLOUD_AI.SET_ATTRIBUTE(
profile_name => 'AIRLINE_PROFILE',
attribute_name => 'additional_instructions',
attribute_value => 'provide date as date-time format'
);
END;
/
PL/SQL procedure successfully completed.
Step 5: SELECT AI RUNSQL で ADDITIONAL_INSTRUCTIONS の効果を確認
SELECT AI RUNSQL で日付を尋ね、Step 4 で設定した書式ガイダンスが反映された SQL・応答になっているかを確認します。
SELECT AI RUNSQL what is the date today;
応答例(日時形式で返る)。
SQL> SELECT AI RUNSQL what is the date today;
Current_Date
---------------------------------------------------------------------------
09-JUL-26 09.21.39.055532 AM +00:00
Step 6: GENERATE でリクエスト単位の属性上書きを試す
プロファイル本体を変更せず、単発のリクエストにだけビジネス用語集(Business Glossary)を注入したい場合は、DBMS_CLOUD_AI.GENERATE の attributes 引数で additional_instructions を一時的に上書きします。アプリケーションからリクエストごとに文脈を渡したい場合に有効な方式です。
今回は ROLE / ADDITIONAL_INSTRUCTIONS の文脈が反映されることの確認が目的のため、実データを用意しなくても検証できる chat アクションに変更して確認します。
実データに対する narrate / runsql を試す場合は、対象テーブルを事前に作成し、プロファイルの object_list にそのテーブルを追加してください。
SET SERVEROUTPUT ON
DECLARE
context CLOB;
result CLOB;
BEGIN
context := 'Today date is ' || SYSTIMESTAMP || '.' || CHR(10) ||
'Business Glossary: ' || CHR(10) ||
'- Quarter: financial / fiscal quarter starting from March month.';
result := DBMS_CLOUD_AI.GENERATE(
profile_name => 'AIRLINE_PROFILE',
prompt => 'what quarter are we in today, and when did it start?',
action => 'chat',
attributes => JSON_OBJECT('additional_instructions' VALUE context)
);
DBMS_OUTPUT.PUT_LINE(result);
END;
/
応答例
To determine the quarter, I will consider the current date: 09-JUL-26.
Since the quarter starts from March, I will
calculate the quarter as follows:
- March to May: Q1
- June to August: Q2
- September to November: Q3
- December to
February: Q4
Given the current month is July, we are in Q2.
Q2 started on June 1, 2026.
PL/SQL procedure successfully completed.
additional_instructions に渡したビジネス用語集(四半期は3月始まり)が反映されて、3月起点の四半期として説明されています。プロファイル本体の additional_instructions(Step 4 で設定した日付書式の指示)ではなく、GENERATE 呼び出し時に渡した context の内容がこのリクエストに限り優先されることが確認できました。
GENERATE の attributes 引数による上書きは、そのリクエスト限りの一時的な適用です。プロファイルの additional_instructions 属性自体は変更されません。永続的に反映したい場合は Step 4 のように SET_ATTRIBUTE を使用してください。
クリーンアップ
検証で作成したプロファイルと認証情報を削除します。
BEGIN
DBMS_CLOUD_AI.DROP_PROFILE(
profile_name => 'AIRLINE_PROFILE',
force => TRUE
);
END;
/
BEGIN
DBMS_CLOUD.DROP_CREDENTIAL(
credential_name => 'GENAI_CRED'
);
END;
/
おわりに
SELECT AI の AI プロファイル属性である ROLE と ADDITIONAL_INSTRUCTIONS を OCI Generative AI プロバイダーで実際に試してみました。確認できたポイントは以下のとおりです。
-
role属性を設定すると、SELECT AI CHATの自己紹介応答にペルソナが反映されることを確認できた -
additional_instructions属性を設定すると、毎回のプロンプトに書式指示を含めなくても、SELECT AI RUNSQLの応答に指示内容(日時形式など)が反映されることを確認できた -
CREATE_PROFILEでのプロファイル作成時設定、SET_ATTRIBUTEでの既存プロファイルへの追加設定、GENERATEでのリクエスト単位の一時上書きという3通りの設定方法があり、用途に応じて使い分けられることを確認できた
ドメイン特化のチャットボットを SELECT AI で構築したい場合や、日付の書式・業務用語の解釈など毎回同じ前提をリクエストに含めたくない場合には、ROLE と ADDITIONAL_INSTRUCTIONS の組み合わせが有効です。特にアプリケーション組み込みで SELECT AI を使う開発者にとっては、GENERATE によるリクエスト単位の上書きが柔軟な設計につながります。