47 DBMS_CLOUD_AI
DBMS_CLOUD_AIパッケージを使用すると、SQLおよびPL/SQLから大規模言語モデルを使用するアプリケーションを簡単に開発できます。 データベースからの表およびビューに加えて、AIプロバイダへのアクセスの構成をサポートしています。 自然言語プロンプトを使用して、SQL問合せを生成、実行、説明およびナレーションします。 また、SQLおよびPL/SQLからLLMと直接チャットします。
47.1 DBMS_CLOUD_AI概要
DBMS_CLOUD_AIパッケージの使用について説明します。
DBMS_CLOUD_AIパッケージを使用して、AIプロファイルを作成し、Large Language Model (LLM)にアクセスできるように構成します。 現在のデータベース・ユーザー・セッションでAIプロファイルを設定して、SQLの生成、実行、説明などのタスクを実行します。
47.2 DBMS_CLOUD_AIサブプログラムの要約
この項では、Oracle Databaseで提供されているDBMS_CLOUD_AI
サブプログラムについて説明します。
サブプログラム | 説明 |
---|---|
このプロシージャでは、AIプロバイダ、大規模言語モデルおよびその他の属性を指定するための新しいAIプロファイルを作成します。 AI 「プロファイル属性」のセットを参照してください。 |
|
このプロシージャでは、現在のデータベース内のAIプロファイルを無効にします。 |
|
このプロシージャでは、既存のAIプロファイルを削除します。 |
|
このプロシージャにより、AIプロファイルを現在のデータベースで使用できるようになります。 |
|
GENERATEファンクション |
このファンクションは、指定された「アクション」を使用して、ユーザー・プロンプトを指定されたAIプロファイルに送信 - Select AIのステートレス呼出しを有効にします。 |
このファンクションは、現在のセッションで使用されているプロファイル名を返します。 |
|
このプロシージャは、現在のセッションのプロファイル名とプロファイルの所有者を返します。 |
|
このプロシージャは、AIプロファイル属性を設定します。 |
47.2.1 CREATE_PROFILEプロシージャ
このプロシージャでは、AIプロバイダ、大規模言語モデルおよびその他の属性を指定するための新しいAIプロファイルを作成します。
構文
DBMS_CLOUD_AI.CREATE_PROFILE
profile_name IN VARCHAR2,
attributes IN CLOB DEFAULT NULL,
status IN VARCHAR2 DEFAULT NULL,
description IN CLOB DEFAULT NULL
);
パラメータ
パラメータ | 説明 |
---|---|
|
AIプロファイルの名前。 プロファイル名は、Oracle SQL識別子のネーミング・ルールに従う必要があります。 プロファイル名の最大長は125文字です。 これは必須パラメータです。 |
|
JSON形式のプロファイル属性。 詳細は、AI 「プロファイル属性」を参照してください。 デフォルト値は「NULL」です。 |
status |
プロファイルのステータス。 デフォルトでは、有効になっています。 |
|
AIプロファイルの説明。 デフォルト値は「NULL」です。 |
例
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name => 'OpenAI',
attributes => JSON_OBJECT('provider' value 'openai',
'credential_name' value 'openai_cred'),
status => 'enabled',
description => 'AI profile to use OpenAI for SQL translation'
);
END;
/
47.2.2 DROP_PROFILEプロシージャ
このプロシージャでは、既存のAIプロファイルを削除します。 プロファイルが存在しない場合、プロシージャはエラーをスローします。
構文
DBMS_CLOUD_AI.DROP_PROFILE
(
profile_name IN VARCHAR2,
force IN BOOLEAN DEFAULT FALSE
);
パラメータ
パラメータ | 説明 |
---|---|
|
AIプロファイルの名前 |
|
このパラメータのデフォルト値は |
例
BEGIN
DBMS_CLOUD_AI.DROP_PROFILE
(profile_name => 'OPENAI');
END;
/
使用上のノート
force
を使用してプロファイルを削除し、AIプロファイルが存在しない場合はエラーを無視します。
47.2.3 ENABLE_PROFILEプロシージャ
このプロシージャでは、ユーザーが指定したAIプロファイルを有効にします。 このプロシージャは、AIプロファイルのステータスをENABLED
に変更します。
構文
DBMS_CLOUD_AI.ENABLE_PROFILE
(
profile_name IN VARCHAR2
);
パラメータ
パラメータ | 説明 |
---|---|
|
有効にするAIプロファイルの名前 このパラメータは必須です。 |
AIプロファイルを有効にする例
BEGIN
DBMS_CLOUD_AI.ENABLE_PROFILE
(
profile_name => 'OPENAI'
);
END;
/
47.2.4 DISABLE_PROFILEプロシージャ
このプロシージャでは、現在のデータベース内のAIプロファイルを無効にします。 このプロシージャでは、AIプロファイルのステータスがDISABLED
に変更されます。
構文
DBMS_CLOUD_AI.DISABLE_PROFILE
(
profile_name IN VARCHAR2
);
パラメータ
パラメータ | 説明 |
---|---|
|
AIプロファイルの名前。 このパラメータは必須です。 |
例
BEGIN
DBMS_CLOUD_AI.DISABLE_PROFILE
(
profile_name => 'OPENAI'
);
END;
/
47.2.5 GET_PROFILEファンクション
このファンクションは、現在のセッションで設定されたAIプロファイル名を返します。
構文
DBMS_CLOUD_AI.GET_PROFILE
(
profile_name IN VARCHAR2
);
パラメータ
パラメータ | 説明 |
---|---|
|
現在のセッションのAIプロファイルの名前。 このパラメータは必須です。 |
例
この例では、現在のセッションでプロファイルの名前を表示する方法を示します。
SELECT DBMS_CLOUD_AI.GET_PROFILE
from DUAL;
47.2.6 GET_PROFILEプロシージャ
このプロシージャは、現在のセッションで設定されたAIプロファイル名と所有者を返します。
構文
DBMS_CLOUD_AI.GET_PROFILE
(
profile_name OUT VARCHAR2,
profile_owner OUT VARCHAR2
);
パラメータ
パラメータ | 説明 |
---|---|
|
現在のセッションのAIプロファイルの名前。 このパラメータは必須です。 |
profile_owner |
現在のセッションのAIプロファイルの所有者を識別します。 |
例
この例は、現在のセッションでプロファイルの名前と所有者を表示する方法を示しています。
DECLARE
l_profile_name DBMS_ID;
l_profile_owner DBMS_ID;
BEGIN
DBMS_CLOUD_AI.GET_PROFILE
(profile_name => l_profile_name,
profile_owner => l_profile_owner);
END;
47.2.7 SET_ATTRIBUTEプロシージャ
このプロシージャでは、AIプロファイル属性を設定できます。
構文
DBMS_CLOUD_AI.SET_ATTRIBUTE
(
profile_name IN VARCHAR2,
attribute_name IN VARCHAR2,
attribute_value IN CLOB
);
パラメータ
AIプロファイルの属性を設定または変更できるのは、所有者だけです。 サポートされている属性のリストは、「プロファイル属性」を参照してください。
パラメータ | 説明 |
---|---|
|
属性を設定するAIプロファイルの名前。 このパラメータは必須です。 |
|
AIプロファイル属性の名前 このパラメータは必須です。 |
|
プロファイル属性の値。 デフォルト値は「NULL」です。 |
例
BEGIN
DBMS_CLOUD_AI.SET_ATTRIBUTE
(
profile_name => 'OPENAI',
attribute_name => 'credential_name',
attribute_value => 'OPENAI_CRED_NEW'
);
END;
/
47.2.8 SET_PROFILEプロシージャ
このプロシージャは、現在のセッションに指定されたAIプロファイルを設定します。
ステートフル・データベース・セッションを使用してAIプロファイルを設定した後、プレフィクスSELECT AI
を持つSQL文は自然言語プロンプトとみなされます。 AI
プレフィクスで指定されたアクションに応じて、AIを使用してレスポンスが生成されます。 オプションで、プロファイル属性をオーバーライドしたり、JSON形式で指定して属性を変更したりできます。 属性の設定については、「SET_ATTRIBUTEプロシージャ」を参照してください。
AIプロファイルを現在のセッションに設定できるのは、AIプロファイルの所有者がセッション・ユーザーである場合だけです。
特定のデータベース・ユーザーのすべてのセッションまたはデータベース内のすべてのユーザー・セッションにAIプロファイルを設定するには、特定のユーザーまたはデータベース全体のAFTER LOGON
イベントにデータベース・イベント・トリガーを使用することを検討してください。
構文
DBMS_CLOUD_AI.SET_PROFILE
(
profile_name IN VARCHAR2,
);
パラメータ
パラメータ | 説明 |
---|---|
|
現在のセッションのAIプロファイルの名前。 このパラメータは必須です。 |
例
BEGIN
DBMS_CLOUD_AI.SET_PROFILE
(
profile_name => 'OPENAI'
);
END;
/
47.2.9 GENERATEファンクション
showsql
、narrate
またはchat
を実行できます。 デフォルトのアクションはshowsql
です。
ノート:
runsqlとexplainsqlはサポートされていません。このファンクションを使用すると、プロファイル属性の一部またはすべてをオーバーライドすることもできます。
構文
DBMS_CLOUD_AI.GENERATE
(
prompt IN CLOB,
profile_name IN VARCHAR2 DEFAULT NULL,
action IN VARCHAR2 DEFAULT NULL,
attributes IN CLOB DEFAULT NULL
) RETURN CLOB;
パラメータ
パラメータ | 説明 |
---|---|
|
AIを使用して翻訳する自然言語プロンプト。 プロンプトには、プレフィクスとして このパラメータは必須です。 |
|
AIプロファイルの名前。 AIプロファイルが デフォルト値は「NULL」です。 次の条件が適用されます。
ノート: データベース・アクションの場合、DBMS_CLOUD_AI.GENERATE にprofile_name 引数を指定するか、PL/SQLスクリプトとして2つのステップを実行できます: DBMS_CLOUD_AI.SET_PROFILE およびDBMS_CLOUD_AI.GENERATE 。
|
action |
AIを使用して自然言語プロンプトを翻訳するためのアクション。 サポートされているアクションには、 ノート: このファンクションは、runsql アクションをサポートしていません。 runsql アクションを指定すると、次のエラーが返されます:
|
attributes |
JSON形式で属性を指定して、特定のAIプロファイル属性をオーバーライドします。 詳細は、「プロファイル属性」を参照してください。 |
例
次の例は、DBMS_CLOUD_AI.GENERATE
ファンクションで使用できるshowsql
、narrate
およびchat
アクションを示しています。
showsql
アクションの例を次に示します:
SELECT DBMS_CLOUD_AI.GENERATE
(prompt => 'how many customers',
profile_name => 'OPENAI',
action => 'showsql')
FROM dual;
narrate
アクションの例を次に示します:
SELECT DBMS_CLOUD_AI.GENERATE
(prompt => 'how many customers',
profile_name => 'OPENAI',
action => 'narrate')
FROM dual;
chat
アクションの例を次に示します:
SELECT DBMS_CLOUD_AI.GENERATE
(prompt => 'what is oracle autonomous database',
profile_name => 'OPENAI',
action => 'chat')
FROM dual;
プロシージャでDBMS_CLOUD_AI.GENERATE
を使用して、ファンクションを実行できます。 次の例では、入力パラメータとしてai_prompt
、profile_name
およびaction
を取得し、DBMS_CLOUD_AI.GENERATE
をコール
create or replace FUNCTION call_select_ai (ai_prompt IN VARCHAR2,
ai_profile IN VARCHAR2,
ai_action IN VARCHAR2) -- valid for 'chat', 'narrate', 'showsql'
RETURN CLOB AS sai_resp clob;
BEGIN
sai_resp := DBMS_CLOUD_AI.GENERATE(prompt => ai_prompt,
profile_name => ai_profile,
action => ai_action);
return(sai_resp);
END call_select_ai;
47.3 プロファイル属性
属性
属性名 | 説明 |
---|---|
|
Azure OpenAIサービス・デプロイ済モデルの名前。 名前に使用できるのは、英数字、アンダースコア文字(_)およびハイフン(-)のみです。 名前の末尾にアンダースコア(_)またはハイフン(-)は使用できません。 |
|
デプロイされたAzure OpenAI埋込みモデルの名前。 名前に使用できるのは、英数字、アンダースコアおよびハイフンのみです。 名前の先頭または末尾にハイフンまたはアンダースコアは使用できません。 |
|
Azure OpenAIサービス・リソースの名前。 リソース名に使用できるのは英数字とハイフンのみで、ハイフンで開始または終了することはできません。 |
|
AIを使用した自然言語プロンプトの翻訳に使用されるメタデータに列コメントを含めます。 ノート: attribute_value パラメータがCLOB データ型であるため、単一の属性を設定する場合、DBMS_CLOUD_AI.SET_ATTRIBUTE プロシージャではブール値は適用されません。
|
|
プロファイルに対して会話履歴が有効かどうかを示す |
|
AIプロバイダAPIにアクセスするための資格証明の名前。 bearerトークンを使用する資格証明を作成するには、ユーザー名としてプロバイダ名を使用し、パスワードとしてbearerトークンを使用します。 Vaultシークレット資格証明もサポートされています。 プリンシパル認証(Azureサービス・プリンシパルなど)もサポートされています。 これは必須属性です。 「CREATE_CREDENTIALプロシージャ」を参照してください。 |
|
世代ごとに予測するトークンの数を示します。 デフォルトは1024です。 詳細は、「トークンとトークナイザ」を参照してください。 |
|
レスポンスの生成に使用されるAIモデルの名前。 ノート:
|
|
SQLへの自然言語変換の対象となる所有者およびオブジェクト名を指定するJSONオブジェクトの配列。 特定のユーザーのすべてのオブジェクトを含めるには、「name」を省略し、JSONオブジェクトで「owner」キーのみを指定します。 次のタイプのオブジェクトを使用できます:
自然言語からSQLへの変換では、オブジェクト名、オブジェクト所有者、オブジェクト列およびコメントがHTTPSリクエストを使用してAIプロバイダに送信されます。 オブジェクト・リストには、機密オブジェクト名、列名またはコメントを含むオブジェクトを指定しないでください。 AIプロバイダは、翻訳リクエストで許可されるメタデータのサイズに制限がある場合があります。 アプリケーション・ユーザーによる自然言語プロンプトに適したオブジェクトのリストを制限することを検討してください。 書式:
OCIデータ・カタログまたはAWS Glueの同期を使用して作成された外部表は、オブジェクト・リストも使用できます。 これは、中央のデータ・カタログでメタデータを管理し、AIを使用して自然言語プロンプトを翻訳するためにメタデータを直接使用するのに役立ちます。 |
|
APIがデータの送受信を期待する形式を指定します。 この属性を使用して、テキスト・レスポンスを生成します。 この属性は、専用AIクラスタ内のOCI生成AIチャット・モデルに適用されます。 サポートされる値は、次のとおりです。
ノート: この属性は「OCI生成AIチャット・モデル」に使用 |
|
OCI生成AIサービスをコールするときにアクセスを許可されるコンパートメントのOCIDを指定します。 コンパートメントIDには、英数字、ハイフンおよびドットを含めることができます。 デフォルトはPDBのコンパートメントIDです。 |
|
この属性は、Oracle専用AIホスティング・クラスタのエンドポイントOCIDを示します。 エンドポイントIDには、英数字、ハイフンおよびドットを含めることができます。 エンドポイントOCIDを確認するには、「生成AIでのエンドポイントの詳細の取得」を参照してください。 Oracle専用AIクラスタを使用する場合は、ホスティング・クラスタのエンドポイントOCIDを指定する必要があります。 デフォルトでは、エンドポイントIDは空で、モデルは共有インフラストラクチャ上でオンデマンドです。 |
|
この属性は、指定されたモデルのランタイム・タイプを示します。 この属性は、専用AIクラスタ内のOCIテキストの生成モデルに適用されます。 許可される値はすべて、OCI生成AI runtimeTypeにあります。 「LlmInferenceRequestリファレンス」を参照してください。 サポートされる値は次のとおりです。
|
|
AIプロファイルのAIプロバイダ。 サポートされているプロバイダ:
これは必須属性です。 |
|
この属性は、使用する生成AIクラスタのロケーションを示します。 リージョンには、英数字とハイフン文字を含めることができます。
デフォルトのリージョンは
us-chicago-1 です。
|
|
生成されたテキストは、最も早い停止シーケンスの先頭に終了します。 シーケンスはテキストに組み込まれます。 属性値は、JSON形式の文字列値の有効な配列である必要があります。 |
|
「テキストの生成」モデルからのサンプリングにはランダム性が組み込まれているため、「生成」をクリックするたびに同じプロンプトで異なる出力が生成される場合があります。 温度は、ランダム度の調整に使用される負でない浮動小数点数です。 温度が低いと、ランダムな世代が少なくなります。 詳細は、「温度」を参照してください。 このパラメータは、サポートされているすべてのサービス・プロバイダに適用されます。 |
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE
(
profile_name => 'COHERE',
attributes =>
'{"provider": "cohere",
"credential_name": "COHERE_CRED",
"object_list": [{"owner": "ADB_USER"}],
"max_tokens":512,
"stop_tokens": [";"],
"model": "command-nightly",
"temperature": 0.5,
"comments": true
}');
END;
/
次の例は、OCI生成AIを使用したカスタム・プロファイル属性を示しています:
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE
(
profile_name => 'GENAI',
attributes => '{"provider": "oci",
"credential_name": "GENAI_CRED",
"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"}],
"oci_compartment_id": "ocid1.compartment.oc1...",
"oci_endpoint_id": "ocid1.generativeaiendpoint.oc1.us-chicago-1....",
"region": "us-chicago-1",
"model": "cohere.command-light",
"oci_runtimetype": "COHERE"
}');
END;
/