DBMS_CLOUD_AIパッケージ

DBMS_CLOUD_AIパッケージは、自然言語プロンプトからSQL文への変換を容易にして構成します。

前提条件

アウトバウンド接続は、次に示すようにフリート管理者によってNATゲートウェイを使用して構成されている必要があります:
  • Oracle Cloud InfrastructureドキュメントNAT Gatewayの作成の手順に従って、Autonomous Databaseリソースが存在するVirtual Cloud Network (VCN)にNATゲートウェイを作成します。
  • NATゲートウェイを作成したら、Autonomous Databaseリソースが存在する各サブネット(VCN内)にルート・ルールおよびエグレス・セキュリティ・ルールを追加して、これらのリソースがゲートウェイを使用してAzure ADインスタンスから公開キーを取得できるようにします:
    1. サブネットの「サブネットの詳細」ページに移動します。
    2. 「サブネット情報」タブで、サブネットの「ルート表」の名前をクリックして、その「ルート表の詳細」ページを表示します。
    3. 既存のルート・ルールの表で、次の特性を持つルールがすでに存在するかどうかを確認します:
      • 宛先: 0.0.0.0/0
      • ターゲット・タイプ: NATゲートウェイ
      • ターゲット: VCN内に作成したNATゲートウェイの名前

      そのようなルールが存在しない場合は、「ルート・ルールの追加」をクリックし、これらの特性を持つルート・ルールを追加します。

    4. サブネットの「サブネットの詳細」ページに戻ります。
    5. サブネットの「セキュリティ・リスト」表で、サブネットのセキュリティ・リストの名前をクリックして、その「セキュリティ・リストの詳細」ページを表示します。
    6. サイド・メニューの「リソース」で、「エグレス・ルール」をクリックします。
    7. 既存のエグレス・ルールの表で、次の特性を持つルールがすでに存在するかどうかを確認します:
      • 宛先タイプ: CIDR
      • 宛先: 0.0.0.0/0
      • IPプロトコル: TCP
      • ソース・ポート範囲: 443
      • 宛先ポート範囲: すべて

      そのようなルールが存在しない場合は、「エグレス・ルールの追加」をクリックし、これらの特性を持つエグレス・ルールを追加します。

環境のHTTPプロキシ設定では、データベースがクラウド・サービス・プロバイダにアクセスできるようにする必要があります。

これらの設定は、Exadata Cloud@Customerインフラストラクチャの作成時にフリート管理者が定義します(コンソールを使用したExadata Database Service on Cloud@Customerのプロビジョニングを参照)。
ノート

HTTPプロキシを含むネットワーク構成は、Exadataインフラストラクチャが「アクティブ化が必要」状態になるまで編集できません。アクティブ化した後は、これらの設定を編集できません。

すでにプロビジョニングされているExadataインフラストラクチャのHTTPプロキシを設定するには、My Oracle Supportでサービス・リクエスト(SR)が必要です。詳細は、「My Oracle Supportでのサービス・リクエストの作成」を参照してください。

DBMS_CLOUD_AIサブプログラムの概要

この項では、Autonomous Databaseで提供されるDBMS_CLOUD_AIサブプログラムについて説明します。

ノート

DBMS_CLOUD_AIパッケージは、Autonomous Databaseバージョン19.22以降でのみ使用できます。
サブプログラム 説明

CREATE_PROFILEプロシージャ

このプロシージャは、自然言語プロンプトをSQL文に変換するための新しいAIプロファイルです。

DISABLE_PROFILEプロシージャ

この手順では、現在のデータベースのAIプロファイルを無効にします。

DROP_PROFILEプロシージャ

この手順では、既存のAIプロファイルを削除します。

ENABLE_PROFILEプロシージャ

この手順により、AIプロファイルを現在のデータベースで使用できます。

GENERATEファンクション

このファンクションは、AIを使用して変換するSQL文を生成します。

SET_ATTRIBUTEプロシージャ

この手順では、AIプロファイル属性を設定します。

SET_PROFILEプロシージャ

このプロシージャは、現在のデータベースのAIプロファイルを設定します。

CREATE_PROFILEプロシージャ

このプロシージャは、自然言語プロンプトをSQL文に変換するための新しい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
);

パラメータ

パラメータ 説明

profile_name

AIプロファイルの名前。プロファイル名は、Oracle SQL識別子のネーミング・ルールに従う必要があります。プロファイル名の最大長は125文字です。

これは必須パラメータです。

attributes

JSON形式のプロファイル属性。詳細は、AIのプロファイル属性を参照してください。

デフォルト値はNULLです。

status

プロファイルのステータス。

デフォルトは「有効化」です。

description

AIプロファイルの説明。

デフォルト値はNULLです。

BEGIN
     DBMS_CLOUD_AI.CREATE_PROFILE(
          profile_name    => 'OpenAI,
          attributes      => JSON_OBJECT('provider' value 'openai',
                                         'credential_name' value 'openai_cred'),
          description     => 'AI profile to use OpenAI for SQL translation'
     );
END;
/

DROP_PROFILEプロシージャ

この手順では、既存のAIプロファイルを削除します。プロファイルが存在しない場合、プロシージャはエラーをスローします。

構文

DBMS_CLOUD_AI.DROP_PROFILE(
       profile_name        IN   VARCHAR2,
       force               IN   BOOLEAN DEFAULT FALSE
 );

パラメータ

パラメータ 説明

profile_name

AIプロファイルの名前

force

TRUEの場合、AIプロファイルが存在しない場合、プロシージャはエラーを無視します。

このパラメータのデフォルト値はFALSEです。

BEGIN
     DBMS_CLOUD_AI.DROP_PROFILE(profile_name => 'OPENAI');
END;
/

使用上のノート

AIプロファイルが存在しない場合は、forceを使用してプロファイルを削除し、エラーを無視します。

ENABLE_PROFILEプロシージャ

この手順では、ユーザーが指定したAIプロファイルを有効にします。このプロシージャは、AIプロファイルのステータスをENABLEDに変更します。

構文

DBMS_CLOUD_AI.ENABLE_PROFILE(
     profile_name         IN   VARCHAR2
 );

パラメータ

パラメータ 説明

profile_name

有効にするAIプロファイルの名前

このパラメータは必須です。

AIプロファイルを有効にする例

BEGIN
     DBMS_CLOUD_AI.ENABLE_PROFILE(
         profile_name    => 'OPENAI'
     );
END;
/

DISABLE_PROFILEプロシージャ

このプロシージャは、現在のデータベースのAIプロファイルを無効にします。この手順では、AIプロファイルのステータスが DISABLEDに変更されます。

構文

DBMS_CLOUD_AI.DISABLE_PROFILE(
      profile_name  IN  VARCHAR2
);

パラメータ

パラメータ 説明

profile_name

AIプロファイルの名前。

このパラメータは必須です。

BEGIN
     DBMS_CLOUD_AI.DISABLE_PROFILE(
         profile_name    => 'OPENAI'
     );
END;
/

SET_ATTRIBUTEプロシージャ

この手順では、AIプロファイル属性を設定できます。

構文

DBMS_CLOUD_AI.SET_ATTRIBUTE(
      profile_name         IN   VARCHAR2,
      attribute_name       IN   VARCHAR2,
      attribute_value      IN   CLOB
);

パラメータ

AIプロファイルの属性を設定または変更できるのは、所有者だけです。サポートされている属性のリストは、プロファイル属性を参照してください。

パラメータ 説明

profile_name

属性を設定するAIプロファイルの名前。

このパラメータは必須です。

attribute_name

AIプロファイル属性の名前

このパラメータは必須です。

attribute_value

プロファイル属性の値。

デフォルト値はNULLです。

BEGIN
 DBMS_CLOUD_AI.SET_ATTRIBUTE(
   profile_name    => 'OPENAI',
   attribute_name  => 'credential_name',
   attribute_value => 'OPENAI_CRED_NEW'
 );
END;
/

SET_PROFILEプロシージャ

この手順では、現在のセッションのAIプロファイルを設定します。

データベース・セッションのAIプロファイルを設定すると、接頭辞がSELECT AIのSQL文は自然言語プロンプトとみなされます。AI接頭辞で指定されたアクションに応じて、AIを使用してレスポンスが生成されます。AI接頭辞を使用するには、unresolvable-reference.html#GUID-8BEF8CA8-D98D-41FB-A819-6C2F862099DCを参照してください。オプションで、プロファイル属性をオーバーライドしたり、属性をJSON形式で指定することで属性を変更できます。属性の設定については、SET_ATTRIBUTEプロシージャを参照してください。

AIプロファイルの所有者がセッションユーザーである場合にのみ、AIプロファイルを現在のセッションに設定できます。

特定のデータベース・ユーザーのすべてのセッションまたはデータベース内のすべてのユーザー・セッションに対してAIプロファイルを設定するには、特定のユーザーまたはデータベース全体のAFTER LOGONイベントに対してデータベース・イベント・トリガーを使用することを検討してください。詳細は、「CREATE TRIGGER文」を参照してください。

構文

DBMS_CLOUD_AI.SET_PROFILE(
    profile_name      IN  VARCHAR2,
);

パラメータ

パラメータ 説明

profile_name

現在のセッションのAIプロファイルの名前。

このパラメータは必須です。


   BEGIN
        DBMS_CLOUD_AI.SET_PROFILE(
          profile_name    => 'OPENAI'
        );
   END;
   /

GENERATEファンクション

この関数は、ステートレスな方法でAI翻訳を提供します。既存のAIプロファイルでは、この関数を使用して、showsqlnarratechatなどのサポートされているアクションを実行できます。デフォルトのアクションはshowsqlです。

この関数を使用すると、プロファイル属性の一部またはすべてをオーバーライドすることもできます。

構文

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;

パラメータ

パラメータ 説明

prompt

AIを使用して翻訳する自然言語プロンプト。

プロンプトには、接頭辞としてSELECT AI <action>を含めることができます。アクションは、アクション・パラメータとして個別に指定することもできます。プロンプトに指定されたactionは、actionパラメータをオーバーライドします。デフォルトのアクションはshowsqlです。

このパラメータは必須です。

profile_name

AIプロファイルの名前。AIプロファイルがすでに DBMS_CLOUD_AI.SET_PROFILEを使用してセッションで設定されている場合、このパラメータはオプションです。

デフォルト値はNULLです。

次の条件が適用されます。
  • 現在のセッションでプロファイルが設定されている場合、ユーザーはDBMS_CLOUD_AI.GENERATE関数のprofile_name引数を省略できます。
  • DBMS_CLOUD_AI.GENERATEファンクションでprofile_name引数が指定されている場合、DBMS_CLOUD_AI.SET_PROFILEプロシージャを使用してセッションで設定された値をオーバーライドします。
  • DBMS_CLOUD_AI.SET_PROFILEプロシージャを使用してセッションにプロファイルが設定されていない場合は、DBMS_CLOUD_AI.GENERATEファンクションにprofile_name引数を指定する必要があります。
ノート

データベース・アクションの場合、DBMS_CLOUD_AI.GENERATEprofile_name引数を指定するか、PL/SQLスクリプトとして2つのステップ(DBMS_CLOUD_AI.SET_PROFILEおよびDBMS_CLOUD_AI.GENERATE)を実行できます。
EXEC DBMS_CLOUD_AI.set_profile('OPENAI');

-----------------------------------------------
SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'how many customers',
                              profile_name => 'OPENAI',
                              action       => 'showsql')
FROM dual;

------------------------------------------------
SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'how many customers',
                              profile_name => 'OPENAI',
                              action       => 'narrate')
FROM dual;
-------------------------------------------
SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'what is oracle autonomous database',
                              profile_name => 'OPENAI',
                              action       => 'chat')
FROM dual;
詳細は、コード・エディタでのSQL文の実行に関する項を参照してください。
action

AIを使用して自然プロンプトを翻訳するための処理。サポートされているアクションには、showsql (デフォルト)、narrateおよびchatがあります。アクションの説明は、「AIキーワードを使用したプロンプトの入力」に記載されています。

ノート

このファンクションは、runsqlアクションをサポートしていません。runsqlアクションを指定すると、次のエラーが返されます。
ORA-20000: runsql action is not supported by generate function ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD", line xxxx 
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD_AI", line 2696 ORA-06512: at line x
attributes JSON形式で属性を指定して、特定のAIプロファイル属性をオーバーライドします。詳細は、「プロファイル属性」を参照してください。

次の例は、DBMS_CLOUD_AI.GENERATEファンクションで使用できるshowsqlnarrateおよび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;

プロファイル属性

AIプロファイルの属性は、AIプロファイルの動作を管理および構成するのに役立ちます。一部の属性はオプションであり、デフォルト値があります。

属性

属性名 説明
azure_deployment_name

Azure OpenAI Serviceデプロイ済モデルの名前。名前には、英数字、アンダースコア(_)およびハイフン(-)のみを使用できます。名前の末尾にアンダースコア(_)またはハイフン(-)は使用できません。azure_deployment_nameの取得方法については、Azure OpenAIサービス・リソースの作成とデプロイを参照してください。

azure_resource_name

Azure OpenAIサービス・リソースの名前。リソース名には英数字とハイフンのみを含めることができ、ハイフンで開始または終了することはできません。azure_resource_nameの取得方法については、Azure OpenAIサービス・リソースの作成とデプロイを参照してください。

comments

AIを使用した自然言語プロンプトの翻訳に使用されるメタデータに列コメントを含めます。BOOLEANデータ型がサポートされています。VARCHAR2データ型の文字列の有効な値は、TRUEまたはFALSEです。

ノート

attribute_valueパラメータはCLOBデータ型であるため、単一属性を設定する場合、DBMS_CLOUD_AI.SET_ATTRIBUTEプロシージャではブール値は適用されません。

credential_name

AIプロバイダAPIにアクセスするための資格証明の名前。

Bearerトークンを使用する資格証明は、ユーザー名としてプロバイダ名を使用し、パスワードとしてBearerトークンを使用して作成できます。

この属性は必須です。CREATE_CREDENTIALプロシージャを参照してください。

max_tokens

生成ごとに予測するトークンの数を示します。デフォルトは1024です。詳細は、BPEトークンを参照してください。

model

翻訳の生成に使用されるAIモデルの名前。

サポートされているモデル:

  • OpenAIの場合: gpt-4、gpt-4-0613、gpt-4-32k、gpt-4-32k-0613、gpt-3.5ターボ(デフォルト)、gpt-3.5-turbo-0613、gpt-3.5-turbo-16k、gpt-3.5-turbo-16k-0613
  • Cohere: command (デフォルト)、command-nightly (実験的)、command-light、およびcommand-light-nightly (実験的)の場合。小さい「軽い」モデルはより速く、大きいモデルはよりよく実行されます。カスタム・モデルには、完全なIDを指定することもできます。
ノート

このパラメータは、Azure OpenAIサービス・ポータルでデプロイメントを作成するときにモデルが決定されるため、Azureには使用されません。

object_list

SQLへの自然言語変換に適格な所有者名およびオブジェクト名を指定するJSONオブジェクトの配列。特定のユーザーのすべてのオブジェクトを含めるには、nameを省略し、JSONオブジェクトでownerキーのみを指定します。

自然言語からSQLへの変換では、オブジェクト名、オブジェクト所有者、オブジェクト列およびコメントがHTTPSリクエストを使用してAIプロバイダに送信されます。オブジェクト・リストに機密オブジェクト名、列名またはコメントを含むオブジェクトを指定しないでください。

AIプロバイダは、翻訳リクエストで許可されるメタデータのサイズに制限がある場合があります。アプリケーション・ユーザーによる自然言語プロンプトに適したオブジェクトのリストを制限することを検討してください。

フォーマット:
[
  {"owner": "SH", "name": "SALES",
  {"owner": "TEST_USER"}
]

provider

AIプロファイルのAIプロバイダ。

サポートされているプロバイダ:

  • オセアニア
  • くっ付く
  • アザー

この属性は必須です。

stop_tokens

生成されたテキストは、最も早い停止シーケンスの先頭で終了します。シーケンスはテキストに組み込まれます。属性値は、JSON形式の文字列値の有効な配列である必要があります。stop_tokensは、入力としてJSON配列を取ります。停止トークンまたは停止シーケンスについてさらに学習するには、OpenAIまたはCohereのドキュメントを参照してください。

temperature

生成モデルからのサンプリングにはランダム性が組み込まれているため、「生成」をクリックするたびに同じプロンプトで異なる出力が生成される場合があります。温度は、ランダム性の度合いを調整するために使用される負でない浮動小数点数です。温度が低いほど、ランダムな世代が少なくなります。詳細は、温度を参照してください。このパラメータは、サポートされているすべてのサービス・プロバイダに適用されます。

次の例では、プロバイダとしてCohereを使用し、カスタム・プロファイル属性を表示します。
BEGIN
  DBMS_CLOUD_AI.CREATE_PROFILE(
     profile_name => 'COHERE',
     attributes =>
      '{"provider": "cohere",
        "credential_name": "COHERE_CRED",
        "object_list": [{"owner": "ADMIN"}],
        "max_tokens":512,
        "stop_tokens": [";"],
        "model": "command-nightly",
        "temperature": 0.5,
        "comments": true
       }');
END;
/