49 DBMS_CLOUD_AI
DBMS_CLOUD_AIパッケージを使用すると、SQLとPL/SQLから簡単に大規模言語モデルを使用するアプリケーションの開発が可能です。これは、AIプロバイダ、およびデータベースにある表とビューへのアクセスの構成をサポートしています。自然言語プロンプトを使用して、SQL問合せを生成、実行、説明および解説します。また、SQLとPL/SQLからLLMと直接チャットします。
49.1 DBMS_CLOUD_AIの概要
DBMS_CLOUD_AIパッケージの使用について説明します。
DBMS_CLOUD_AIパッケージを使用して、AIプロファイルを作成し、大規模言語モデル(LLM)にアクセスするようにそれらを構成します。SQLの生成、実行、説明などのタスクを実行するために、現在のデータベース・ユーザー・セッションにおけるAIプロファイルを設定します。
49.2 DBMS_CLOUD_AIサブプログラムの要約
この項では、Oracle Databaseに付随する、DBMS_CLOUD_AIのサブプログラムについて説明します。
| サブプログラム | 説明 |
|---|---|
|
このプロシージャは、AIプロバイダ、大規模言語モデルおよびその他の属性を指定するための新しいAIプロファイルを作成します。AIの「プロファイル属性」のセットを参照してください。 |
|
|
このプロシージャは、現在のデータベース内のAIプロファイルを無効にします。 |
|
|
このプロシージャは、既存のAIプロファイルを削除します。 |
|
|
このプロシージャは、現在のデータベース内のAIプロファイルを有効にします。 |
|
| GENERATEファンクション |
このファンクションは、指定された'action'を使用して、指定されたAIプロファイルにユーザー・プロンプトを送信します(Select AIのステートレス起動が可能になる)。 |
|
このファンクションは、現行セッションにおいて使用されているプロファイル名を戻します。 |
|
|
このプロシージャは、現行セッションにおけるプロファイル名とそのプロファイルの所有者を戻します。 |
|
|
このプロシージャは、AIプロファイルの属性を設定します。 |
49.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;
/
49.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プロファイルが存在しない場合にエラーを無視します。
49.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;
/
49.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;
/
49.2.5 GET_PROFILEファンクション
このファンクションは、現行セッションにおいて設定されているAIプロファイル名を戻します。
構文
DBMS_CLOUD_AI.GET_PROFILE(
profile_name IN VARCHAR2
);
パラメータ
| パラメータ | 説明 |
|---|---|
|
|
現行セッションでのAIプロファイルの名前。 このパラメータは必須です。 |
例
この例は、現行セッションにおけるプロファイルの名前を表示する方法を示しています。
SELECT DBMS_CLOUD_AI.GET_PROFILE
from DUAL;
49.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;
49.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;
/
49.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;
/
49.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プロファイルの名前。 デフォルト値は「NULL」です。 次の条件が適用されます。
ノート: データベース・アクションの場合、DBMS_CLOUD_AI.GENERATEにprofile_name引数を指定するか、PL/SQLスクリプトとしてDBMS_CLOUD_AI.SET_PROFILEとDBMS_CLOUD_AI.GENERATEという2つのステップを実行することができます。
|
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;
49.3 プロファイル属性
属性
| 属性名 | 説明 |
|---|---|
|
|
Azure OpenAIサービスのデプロイ済モデルの名前。この名前に使用できるのは、英数字、アンダースコア文字(_)およびハイフン(-)文字のみです。この名前の末尾にアンダースコア(_)やハイフン(-)は使用できません。 |
|
|
Azure OpenAIのデプロイ済埋込みモデルの名前。 この名前に使用できるのは、英数字、アンダースコアおよびハイフンのみです。この名前の先頭または末尾にハイフンやアンダースコアは使用できません。 |
|
|
Azure OpenAIサービス・リソースの名前。このリソース名に使用できるのは英数字とハイフンのみであり、先頭と末尾にハイフンは使用できせん。 |
|
|
AIを使用した自然言語プロンプトの翻訳に使用されるメタデータに列コメントを含めます。 ノート: attribute_valueパラメータはCLOBデータ型であるため、DBMS_CLOUD_AI.SET_ATTRIBUTEプロシージャでは、単一の属性を設定するときに、ブール値を適用できません。
|
|
|
会話履歴がプロファイルに対して有効になっているかどうかを示す |
|
|
AIプロバイダAPIにアクセスするための資格証明の名前。 Bearerトークンを使用する資格証明は、ユーザー名としてプロバイダ名を使用し、パスワードとしてBearerトークンを使用することで作成できます。 ボールト・シークレット資格証明もサポートされています。 プリンシパル認証(Azureサービス・プリンシパルなど)もサポートされています。 これは必須属性です。「CREATE_CREDENTIALプロシージャ」を参照してください。 |
|
|
生成ごとに予測するトークンの数を示します。デフォルトは1024です。詳細は、トークンとトークナイザを参照してください。 |
|
|
レスポンスを生成するために使用されるAIモデルの名前。 ノート:
|
|
|
SQLへの自然言語変換のための適格な所有者およびオブジェクト名を示している、JSONオブジェクトの配列。指定したユーザーのすべてのオブジェクトを含めるには、そのJSONオブジェクトで"name"を省略し"owner"キーのみを指定します。 次のオブジェクト・タイプを使用できます:
自然言語をSQLに変換する場合、オブジェクト名、オブジェクト所有者、オブジェクトの列およびコメントは、HTTPSリクエストを使用してAIプロバイダに送信されます。そのオブジェクト・リストで、機密オブジェクトの名前、列名またはコメントがあるオブジェクトを指定しないでください。 AIプロバイダが、翻訳リクエストにおいて許可されるメタデータのサイズを制限している場合があります。アプリケーション・ユーザーによる自然言語プロンプトに適したオブジェクトのリストに限定することを検討してください。 形式:
OCI Data CatalogまたはAWS Glueの同期を使用して作成された外部表も、オブジェクト・リストで使用できます。これは、中央のデータ・カタログでメタデータを管理する際に役立ち、AIを使用した自然言語プロンプトの翻訳にそのメタデータを直接使用します。 |
|
|
そのAPIで想定されている送受信データについて、形式を指定します。この属性を使用してテキスト・レスポンスを生成します。この属性は、専用AIクラスタ内のOCI Generative AIチャット・モデルに適用されます。この属性は、 サポートされる値は、次のとおりです。
ノート: この属性は、OCI Generative AIチャット・モデルの場合に使用します |
|
|
OCI Generative AIサービスのコール時に自分がアクセスを許可されているコンパートメントのOCIDを指定します。このコンパートメントIDには、英数字、ハイフンおよびドットを含めることができます。 デフォルトは、PDBのコンパートメントIDです。 |
|
|
この属性は、Oracle専用AIホスティング・クラスタのエンドポイントOCIDを示しています。このエンドポイントIDには、英数字、ハイフンおよびドットを含めることができます。エンドポイントOCIDを見つけるには、「生成AIでのエンドポイントの詳細の取得」を参照してください。 Oracle専用AIクラスタを使用するときは、ホスティング・クラスタのエンドポイントOCIDを指定する必要があります。 デフォルトでは、このエンドポイントIDは空であり、モデルは共有インフラストラクチャ上のオンデマンドのものになります。 |
|
|
この属性は、指定したモデルの実行時タイプを示しています。この属性は、専用AIクラスタ内のOCIテキスト生成モデルに適用されます。この属性は、 許可されているすべての値は、OCI Generative AIのruntimeTypeにあります。LlmInferenceRequestリファレンスを参照してください。 サポートされる値は次のとおりです。
|
|
|
AIプロファイルのAIプロバイダ。 サポートされているプロバイダ:
これは必須属性です。 |
|
|
この属性は、使用するGenerative AIクラスタの場所を示しています。このリージョンには、英数字およびハイフン文字を使用できます。
ノート: Oracle Generative 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 Generative 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;
/