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のサブプログラムについて説明します。

サブプログラム 説明

CREATE_PROFILEプロシージャ

このプロシージャは、AIプロバイダ、大規模言語モデルおよびその他の属性を指定するための新しいAIプロファイルを作成します。AIの「プロファイル属性」のセットを参照してください。

DISABLE_PROFILEプロシージャ

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

DROP_PROFILEプロシージャ

このプロシージャは、既存のAIプロファイルを削除します。

ENABLE_PROFILEプロシージャ

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

GENERATEファンクション

このファンクションは、指定された'action'を使用して、指定されたAIプロファイルにユーザー・プロンプトを送信します(Select AIのステートレス起動が可能になる)。

GET_PROFILEファンクション

このファンクションは、現行セッションにおいて使用されているプロファイル名を戻します。

GET_PROFILEプロシージャ

このプロシージャは、現行セッションにおけるプロファイル名とそのプロファイルの所有者を戻します。

SET_ATTRIBUTEプロシージャ

このプロシージャは、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
);

パラメータ

パラメータ 説明

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

パラメータ

パラメータ 説明

profile_name

AIプロファイルの名前

force

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

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

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

パラメータ

パラメータ 説明

profile_name

有効にする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
);

パラメータ

パラメータ 説明

profile_name

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

パラメータ

パラメータ 説明

profile_name

現行セッションでの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                                           
);

パラメータ

パラメータ 説明

profile_name

現行セッションでの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プロファイルの属性を設定または変更できるのは所有者のみです。サポートされている属性のリストは、「プロファイル属性」を参照してください。

パラメータ 説明

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

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

パラメータ

パラメータ 説明

profile_name

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

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


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

49.2.9 GENERATEファンクション

このファンクションは、指定された'action'を使用して、指定されたAIプロファイルにユーザー・プロンプトを送信します(Select AIのステートレス起動が可能になる)。既存のAIプロファイルとともにこのファンクションを使用して、サポートされているアクション(showsqlnarrateまたは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;

パラメータ

パラメータ 説明

prompt

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

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

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

profile_name

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

デフォルト値は「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スクリプトとしてDBMS_CLOUD_AI.SET_PROFILEDBMS_CLOUD_AI.GENERATEという2つのステップを実行することができます。
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;
action

AIを使用した自然言語プロンプトの翻訳のためのアクション。サポートされているアクションとしては、showsql (デフォルト)、narrateおよびchatがあります。

ノート:

このファンクションは、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;

プロシージャ内でDBMS_CLOUD_AI.GENERATEを使用し、そのファンクションを実行できます。次の例では、入力パラメータとしてai_promptprofile_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 プロファイル属性

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

属性

属性名 説明

azure_deployment_name

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

azure_embedding_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プロシージャでは、単一の属性を設定するときに、ブール値を適用できません。

conversation

会話履歴がプロファイルに対して有効になっているかどうかを示すVARCHAR2属性。有効な値はtrueまたはfalseです。デフォルト値はfalseです。これらの値では大/小文字が区別されません。

credential_name

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

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

ボールト・シークレット資格証明もサポートされています。

プリンシパル認証(Azureサービス・プリンシパルなど)もサポートされています。

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

max_tokens

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

model

レスポンスを生成するために使用されるAIモデルの名前。

ノート:

  • Cohere: カスタム・モデルに完全なIDを指定できます。
  • OCI Generative AI: チャット・モデルは、すべてのSelect AIアクション(runsqlshowsqlexplainsqlnarratechatなど)でサポートされています。

    Select AIは、OCI Generative AIの事前トレーニング済モデルをサポートしています。カスタム・モデルには、そのOCID全体を指定することもできます。OCIDまたはoci_endpoint_idを指定している場合は、OCIのチャット・モデルまたはテキスト生成モデルに応じて、必ずoci_runtimetypeまたはoci_apiformatを指定してください。

    OCI Generative AIでのサポートされているモデルの詳細は、「生成AIでの事前トレーニング済基礎モデル」を参照してください。

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

object_list

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

次のオブジェクト・タイプを使用できます:

  • ビュー
  • マテリアライズド・ビュー
  • グローバル一時表
  • 外部表
  • 前述のオブジェクト・タイプのシノニム

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

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

形式:
[
  {"owner": "SH", "name": "SALES",
  {"owner": "TEST_USER"}
]

OCI Data CatalogまたはAWS Glueの同期を使用して作成された外部表も、オブジェクト・リストで使用できます。これは、中央のデータ・カタログでメタデータを管理する際に役立ち、AIを使用した自然言語プロンプトの翻訳にそのメタデータを直接使用します。

oci_apiformat

そのAPIで想定されている送受信データについて、形式を指定します。この属性を使用してテキスト・レスポンスを生成します。この属性は、専用AIクラスタ内のOCI Generative AIチャット・モデルに適用されます。この属性は、model属性でモデルのOCIDを指定するときや、oci_endpoint_id属性でエンドポイントを指定するときに指定します。

サポートされる値は、次のとおりです。
  • COHERE
  • GENERIC

ノート:

この属性は、OCI Generative AIチャット・モデルの場合に使用します

oci_compartment_id

OCI Generative AIサービスのコール時に自分がアクセスを許可されているコンパートメントのOCIDを指定します。このコンパートメントIDには、英数字、ハイフンおよびドットを含めることができます。

デフォルトは、PDBのコンパートメントIDです。

oci_endpoint_id

この属性は、Oracle専用AIホスティング・クラスタのエンドポイントOCIDを示しています。このエンドポイントIDには、英数字、ハイフンおよびドットを含めることができます。エンドポイントOCIDを見つけるには、「生成AIでのエンドポイントの詳細の取得」を参照してください。

Oracle専用AIクラスタを使用するときは、ホスティング・クラスタのエンドポイントOCIDを指定する必要があります。

デフォルトでは、このエンドポイントIDは空であり、モデルは共有インフラストラクチャ上のオンデマンドのものになります。

oci_runtimetype

この属性は、指定したモデルの実行時タイプを示しています。この属性は、専用AIクラスタ内のOCIテキスト生成モデルに適用されます。この属性は、model属性でモデルのOCIDを指定するときや、oci_endpoint_id属性でエンドポイントを指定するときに指定します。

許可されているすべての値は、OCI Generative AIのruntimeTypeにあります。LlmInferenceRequestリファレンスを参照してください。

サポートされる値は次のとおりです。
  • COHERE
  • LLAMA

provider

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

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

  • openai
  • cohere
  • azure
  • oci

これは必須属性です。

region

この属性は、使用するGenerative AIクラスタの場所を示しています。このリージョンには、英数字およびハイフン文字を使用できます。

ノート:

Oracle Generative AIクラスタを使用できるリージョンは、シカゴ、フランクフルトおよびロンドンです。「生成AIでの事前トレーニング済基礎モデル」を参照してください。
デフォルトのリージョンはus-chicago-1です。

stop_tokens

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

temperature

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

次の例では、プロバイダとしてCohereを使用し、カスタム・プロファイル属性を表示します:
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;                                                                         
/