DBMS_CLOUD_AIパッケージ

Select AIを使用したDBMS_CLOUD_AIパッケージは、SQL文を生成、実行および説明するための自然言語プロンプトの翻訳を容易にして構成します。また、LLMとのチャットなど、検索拡張生成および自然言語ベースのインタラクションを可能にします。

前提条件

アウトバウンド接続は、次に説明するようにフリート管理者によってNATゲートウェイを使用して構成されている必要があります:
  • Oracle Cloud InfrastructureドキュメントNAT Gatewayの作成の手順に従って、Autonomous AI Databaseリソースが存在しているVirtual Cloud Network (VCN)にNAT Gatewayを作成します。
  • After creating the NAT gateway, add a route rule and an egress security rule to each subnet (in the VCN) where Autonomous AI Database resources reside so that these resources can use the gateway to obtain a public key from your Azure AD instance:
    1. サブネットの「サブネットの詳細」ページに移動します。
    2. Subnet Information」タブで、サブネットの「Route Table」の名前をクリックして、その「Route Table Details」ページを表示します。
    3. 既存のルート・ルールの表で、次の特性を持つルールがすでに存在します:
      • 宛先: 0.0.0.0/0
      • ターゲット・タイプ: NAT Gateway
      • ターゲット: 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 AI Databaseで提供されるDBMS_CLOUD_AIサブプログラムについて説明します。

サブプログラム 説明

CREATE_PROFILEプロシージャ

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

プロファイル属性

構成可能なAIプロファイル属性を提供します。

DROP_PROFILEプロシージャ

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

ENABLE_PROFILEプロシージャ

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

DISABLE_PROFILEプロシージャ

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

SET_ATTRIBUTEプロシージャ

このプロシージャは、AIプロファイル属性を設定します。

SET_PROFILEプロシージャ

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

GENERATEファンクション

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

GENERATE_SYNTHETIC_DATAファンクション

この関数は合成データを生成します。

ENABLE_DATA_ACCESSプロシージャ

LLMへのデータの送信を有効にするには、この手順を使用します。

DISABLE_DATA_ACCESSプロシージャ

LLMへのデータの送信を無効にするには、この手順を使用します。

CREATE_VECTOR_INDEXプロシージャ

このプロシージャは、指定されたベクトル・データベースにベクトル索引を作成し、非同期スケジューラ・ジョブを使用してオブジェクト・ストアのデータを移入します。

DROP_VECTOR_INDEXプロシージャ

このプロシージャは、ベクトル・ストア索引を削除します。通常、ベクトル・ストア索引オブジェクトを削除し、ベクトル・データベースを削除します。

DISABLE_VECTOR_INDEXプロシージャ

このプロシージャは、現在のデータベース内のベクトル索引オブジェクトを無効にします。無効にすると、AIプロファイルはベクトルインデックスを使用できず、システムはデータをベクトルストアにロードしません。

ENABLE_VECTOR_INDEXプロシージャ

このプロシージャは、以前に無効にしたベクトル索引オブジェクトを有効またはアクティブ化します。

UPDATE_VECTOR_INDEXプロシージャ

このプロシージャは、ベクトル索引属性の指定された値で既存のベクトル・ストア索引を更新します。

ベクトル索引属性

構成可能なベクトル索引プロファイル属性を提供します。

CREATE_CONVERSATIONプロシージャ

このプロシージャは、会話の作成に役立ちます。

CREATE_CONVERSATIONファンクション

このファンクションは、会話を作成し、他のプロシージャで会話IDを使用するのに役立ちます。

CREATE_CONVERSATION属性

会話属性を使用して、会話をカスタマイズします。

UPDATE_CONVERSATIONプロシージャ

このプロシージャは、ユーザー指定のパラメータを使用して既存のプロシージャを更新します。

SET_CONVERSATION_IDプロシージャ

このプロシージャは、現在のセッションでの会話のサポートを設定します。

GET_CONVERSATION_IDファンクション

このプロシージャは、conversation_idパラメータの取得に役立ちます。

CLEAR_CONVERSATION_IDプロシージャ

このプロシージャは、現在のセッションで設定されているconversation_idをクリアするのに役立ちます。

DELETE_CONVERSATION_PROMPTプロシージャ

このプロシージャは、特定のプロンプトを削除します。

DROP_CONVERSATIONプロシージャ

このプロシージャは、会話全体とそのメタデータを削除します。

FEEDBACKプロシージャ

Select AIにフィードバックを提供することで、クエリー生成の精度を向上させるには、この手順を使用します。

FEEDBACKのベクトル索引

これは、feedbackを初めて使用したときに作成されるデフォルトのベクトル索引です。

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

Parameters

パラメータ 説明

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

プロファイル属性

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プロシージャではブール値は適用されません。

conversation

プロファイルに対して会話履歴が有効かどうかを示すVARCHAR2属性。OpenAIおよびAzure OpenAIサービスのみが会話履歴をサポートします。有効な値はtrueまたはfalseです。デフォルト値はfalseです。値は大文字と小文字が区別されません。

credential_name

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

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

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

embedding_model

AIプロファイルで定義された埋込みモデル。埋込みモデルでサポートされるAIプロバイダをデフォルト値とともに示します。

  • OCI GenAI: cohere.embed-english-v3.0
  • OpenAI: text-embedding-ada-002
  • Azure OpenAI: text-embedding-ada-002
  • コア: embed-english-v2.0
  • Google: text-embedding-004

ノート:

embedding_modelパラメータは、AnthropicおよびHugging Faceには適用できません。

max_tokens

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

model

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

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

  • OpenAI: gpt-4、gpt-4-0613、gpt-4-32k、gpt-4-32k-0613、gpt-3.5-turbo (デフォルト)、gpt-3.5-turbo-0613、gpt-3.5-turbo-16k、gpt-3.5-turbo-16k-0613
  • Cohere: コマンド(デフォルト)、コマンド- ナイトリー(実験的)、コマンド- ライトおよびコマンド- ライト- ナイトリー(実験的) より小さい「軽い」モデルは高速で、大きいモデルはパフォーマンスが向上します。カスタム・モデルには、フルIDを指定することもできます。
  • OCI生成AI: OCI生成AIの場合: cohere.command (デフォルト)。OCI生成AIの事前トレーニング済モデルは、すべてSelect AIでサポートされています。カスタム・モデルは、完全なOCIDsとともに提供することもできます。

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

  • AWS: Amazon Bedrockの基盤モデルには、Amazon Bedrockコンソールを介したアクセス権限が必要です。modelIDを入手するには、AWSのドキュメントを参照してください。

ノート:

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

object_list

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

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

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

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

oci_compartment_id

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

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

oci_endpoint_id

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

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

デフォルトでは、エンドポイントIDは空で、モデルは共有インフラストラクチャ上でオンデマンドです。

oci_runtimetype

この属性は、指定されたモデルのランタイム・タイプを示します。この属性は、model属性が指定されていて、OCI生成モデルに適用可能な場合に必要です。

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

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

provider

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

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

  • オープナ
  • くっ付く
  • アザー
  • oci
  • Google
  • 人類学
  • ハギングフェイス
  • aws

この属性は必須です。

region

この属性は、使用する生成AIクラスタの場所を示します。リージョンには、英数字とハイフン文字を含めることができます。

ノート:

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

AWSのデフォルト・リージョンはus-east-1です。

stop_tokens

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

temperature

「テキストの生成」モデルからのサンプリングにはランダム性が組み込まれているため、「生成」をクリックするたびに同じプロンプトで異なる出力が生成される場合があります。温度は、乱数を調整するために使用される負でない浮動小数点数です。温度が低いと、ランダムな世代が少なくなります。詳細は、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生成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;                                                                         
/ 

DROP_PROFILEプロシージャ

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

構文

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

Parameters

パラメータ 説明

profile_name

AIプロファイルの名前

force

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

デフォルト値はFALSEです。

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

使用上のノート

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

ENABLE_PROFILEプロシージャ

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

構文

DBMS_CLOUD_AI.ENABLE_PROFILE(
     profile_name         IN   VARCHAR2
 );

Parameters

パラメータ 説明

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

Parameters

パラメータ 説明

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

Parameters

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接頭辞を使用するには、AIキーワードを使用したプロンプトの入力を参照してください。オプションで、プロファイル属性をオーバーライドしたり、属性をJSON形式で指定して属性を変更できます。属性の設定については、SET_ATTRIBUTEプロシージャを参照してください。

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

特定のデータベース・ユーザーのすべてのセッションまたはデータベース内のすべてのユーザー・セッションに対してAIプロファイルを設定するには、特定のユーザーまたはデータベース全体のAFTER LOGONイベントに対してデータベース・イベント・トリガーを使用することを検討してください。詳細は、『Oracle Database 19cデータベースPL/SQL言語リファレンス』または『Oracle Database 26aiデータベースPL/SQL言語リファレンス』CREATE TRIGGER文を参照してください。

構文

DBMS_CLOUD_AI.SET_PROFILE(
    profile_name      IN  VARCHAR2,
);

Parameters

パラメータ 説明

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;

Parameters

パラメータ 説明

prompt

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

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

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

profile_name

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

デフォルト値はNULLです。

次の条件が適用されます。
  • 現在のセッションでプロファイルが設定されている場合、ユーザーはDBMS_CLOUD_AI.GENERATE関数のprofile_name引数を省略できます。
  • profile_name引数がDBMS_CLOUD_AI.GENERATE関数で指定されている場合、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_PROFILEおよびDBMS_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;
詳細は、コード・エディタでの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;

GENERATE_SYNTHETIC_DATAファンクション

この手順を使用して、単一の表、複数の表またはフル・スキーマの合成データを生成します。

次に、単一表の合成データを生成する構文を示します。

構文

DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
  profile_name        IN  VARCHAR2,
  object_name         IN  DBMS_ID,
  owner_name          IN  DBMS_ID,
  record_count        IN  NUMBER,
  user_prompt         IN  CLOB DEFAULT NULL,
  params              IN  CLOB DEFAULT NULL
);

次に、複数の表の合成データを生成する構文を示します。

DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
  profile_name        IN  VARCHAR2,
  object_list         IN  CLOB,
  params              IN  CLOB DEFAULT NULL
);

表データまたはベクトル検索ドキュメントをLLMに送信しない場合、管理者権限を持つユーザーは、特定のデータベースのすべてのユーザーに対してそのようなアクセスを無効にできます。これにより、narrateアクションが無効になります。

Parameters

パラメータ 必須 説明

profile_name

必要なLLMサービス情報を含むAIプロファイル。これは、CREATE_PROFILEプロシージャで作成できます。

object_name

合成データを移入する表名を指定します。
  • 表オブジェクトを使用するユーザーには、表オブジェクトに対するSELECTおよびINSERT権限が必要です。
  • 表が空であるか、レコードが含まれています。
owner_name ×

参照オブジェクトを所有するデータベース・ユーザーを指定します。特定の所有者を指定しない場合、プロシージャは、その所有者を実行しているユーザーのスキーマをデフォルトで使用します。

record_count ×

合成的に生成されるレコードの数。

user_prompt

× ユーザーが合成データの生成について言及できる追加情報。たとえば、release_date列を含むMOVIEという表のレコードを生成するには、user_promptは次のようになります。

映画のリリース日は2019年にする必要があります

params

×

APIの動作を変更するために、JSONオブジェクト文字列形式で提供されるオプション属性。オプション・パラメータを参照してください。

object_list

このパラメータは、複数の表に合成データを生成する場合に使用します。このパラメータは、表オブジェクト情報とその引数を取り、単一の表で提供されている同じ引数を含みます。object_listパラメータを参照してください。

オプションのパラメータ

パラメータ 値データ型 Value 説明

sample_rows

数字

0 <= sample_rows <= 100

データ生成でLLMをガイドするサンプルとして使用する表の行数を指定します。

値0は、サンプル行が使用されないことを意味します。デフォルト値は0です。

table_statistics

ブール

  • True
  • False

表統計情報の使用を有効化または無効化します。

デフォルト値はFalseです。

priority

文字列

有効な値:

  • HIGH
  • MEDIUM
  • LOW

合成データを生成するためにLLMに送信されるパラレル・リクエストの数を定義する優先度値を割り当てます。優先度が高いタスクは、より多くのデータベース・リソースを消費し、より迅速に完了します。

デフォルト値はHIGHです

  • HIGH: データベースのECPU数(データベースがOCPUを使用する場合はOCPU数)に基づいて、パラレルLLMリクエストの数を指定します。

  • MEDIUM: 中規模サービスの同時実行性の制限に従って、同時プロセスの数を設定します。デフォルトは4です。

  • LOW: パラレル処理なしでパイプライン・ジョブをシリアル・オーダーで実行します。

合成データ生成に使用される同時パラレル・プロセスの最大数は64に制限されます。

comments

ブール
  • True
  • False

データ生成をガイドするLLMへのコメントの送信を有効または無効にします。

デフォルト値はFalseです。

object_listパラメータ

パラメータ 値データ型 必須 説明

owner

文字列

参照するオブジェクトを所有するデータベース・ユーザーを指定します。特定の所有者を指定しない場合、プロシージャは、その所有者を実行するユーザーのスキーマをデフォルトで使用します。

name

文字列

×

合成データを移入する表名を指定します。表オブジェクトに対するSELECTおよびINSERT権限は、it.The表を使用するユーザーが空であるか、その表にレコードが含まれている場合に必要です。

record_count

数字

×

合成的に生成されるレコード数。0より大きい数値を指定してください。

record_countまたはrecord_count_percentageを指定します。

record_count_percentage

数字

×

合成的に生成されるレコード数の割合。0より大きい数値を指定してください。

統計を含む表のメタデータが保持されるメタデータ・クローン・データベースの場合、record_count_percentageパラメータがサポートされます。

record_countまたはrecord_count_percentageを指定します。

record_count_percentageパラメータを使用する場合、表の最終レコード数は次のように計算されます。
Original_Num_Rows *
      record_count_percentage

user_prompt

文字列 × 「パラメータ」user_promptと同じです。user_promptは、特定の表オブジェクトに関連付けられます。

次の例は、1つの表および複数の表の合成データを生成するためのDBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA関数を示しています。完全な例とその他の例については、を参照してください。

BEGIN
    DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
        profile_name => 'GENAI',
        object_name  => 'Director',
        owner_name   => 'ADB_USER',
        record_count => 5
    );
END;
/
PL/SQL procedure successfully completed.
BEGIN
    DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
        profile_name => 'GENAI',
        object_list => '[{"owner": "ADB_USER", "name": "Director","record_count":5},
                         {"owner": "ADB_USER", "name": "Movie_Actor","record_count":5},
                         {"owner": "ADB_USER", "name": "Actor","record_count":10},
                         {"owner": "ADB_USER", "name": "Movie","record_count":5,"user_prompt":"all movies are released in 2009"}]'
    );
END;
/
PL/SQL procedure successfully completed.

ENABLE_DATA_ACCESSプロシージャ

この手順では、該当する Select AI機能(デフォルトの動作)のデータをLLMに送信できます。このプロシージャを実行できるのは管理者のみです。

この手順では、次の Select AI機能のデータアクセスを制御します。

  • narrateアクション
  • 検索拡張生成(RAG)
  • 合成データ生成

構文

DBMS_CLOUD_AI.ENABLE_DATA_ACCESS();

Parameters

この手順には、パラメータは必要ありません。

データアクセスを有効にする例

BEGIN
  DBMS_CLOUD_AI.ENABLE_DATA_ACCESS();
END;
/

DISABLE_DATA_ACCESSプロシージャ

この手順では、該当する Select AI機能のLLMへのデータの送信を無効にします。このプロシージャを実行できるのは管理者のみです。

この手順では、次の Select AI機能が制限されます。

  • narrateアクション
  • 検索拡張生成(RAG)
  • 合成データ生成

構文

DBMS_CLOUD_AI.DISABLE_DATA_ACCESS();

Parameters

この手順には、パラメータは必要ありません。

データアクセスを無効にする例

BEGIN
  DBMS_CLOUD_AI.DISABLE_DATA_ACCESS();
END;
/

CREATE_VECTOR_INDEXプロシージャ

このプロシージャは、指定されたベクトル・データベースにベクトル索引を作成し、非同期スケジューラ・ジョブを使用してオブジェクト・ストアのデータを移入します。

構文

PROCEDURE CREATE_VECTOR_INDEX(                                              
   index_name          IN  VARCHAR2,                                        
   attributes          IN  CLOB      DEFAULT NULL,                          
   status              IN  VARCHAR2  DEFAULT NULL,                          
   description         IN  CLOB      DEFAULT NULL                           
); 

Parameters

パラメータ 説明

index_name

ベクトル索引の名前。ベクトル索引名は、Oracle SQL識別子のネーミング・ルールに従う必要があります。ベクトル・ストア名の最大長は125文字です。

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

attributes

JSONのベクトル索引のカスタム属性。構成可能なパラメータのリストを表示するには、Vector Index Attributesを参照してください。

デフォルト値はNULLです。

status
ベクトル索引のステータス。可能な値は次のとおりです:
  • Enabled
  • Disabled

デフォルトの値は「無効」です。

description

ベクトル索引の説明。

デフォルト値はNULLです。

次の例は、ベクトル索引を作成し、属性をJSONパラメータとして構成する方法を示しています。

BEGIN                                                                
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(                                 
            index_name    => 'MY_INDEX'                                   
            attributes    => JSON_OBJECT(                                 
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',              
                       'profile_name'      value 'OCIGENAI',         
                       'location'          value                          
                         'https://objectstorage.us-phoenix-1.' ||         
                         'oraclecloud.com/n/mynamespace/b/mybucket',      
                       'object_store_credential_name'   value 'OS_CRED',              
                       'chunk_size'        value 2048,                    
                       'chunk_overlap'     value 256,                     
                       'refresh_rate'      value 720)                     
       );                                                                 
END;                                                                 
/

DROP_VECTOR_INDEXプロシージャ

このプロシージャは、ベクトル・ストア索引を削除します。通常、ベクトル・ストア索引オブジェクトを削除し、ベクトル・ストアを削除します。FALSEに設定すると、引数include_dataによって、ベクトル・ストアを保持しながらベクトル・ストア索引オブジェクトのみが削除されます。

構文

PROCEDURE DROP_VECTOR_INDEX(                                                
   index_name          IN  VARCHAR2,           
   include_data        IN  BOOLEAN DEFAULT TRUE,                            
   force               IN  BOOLEAN DEFAULT FALSE                           
);

Parameters

パラメータ 説明

index_name

ベクトル索引の名前。ベクトル索引名は、Oracle SQL識別子のネーミング・ルールに従う必要があります。ベクトル・ストア名の最大長は125文字です。

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

include_data

顧客のベクトル・ストアとベクトル索引の両方をベクトル索引オブジェクトとともに削除するかどうかを示します。

可能な値:

  • TRUE
  • FALSE

デフォルト値はTRUEです。

force

ベクトル索引が存在しない場合に発生するエラーを無視するかどうかを示します。

可能な値:

  • TRUE
  • FALSE

TRUEに設定すると、ベクトル索引が存在しない場合、このパラメータは発生するエラーをすべてバイパスします。

デフォルト値はFALSEです。

BEGIN
DBMS_CLOUD_AI.DROP_VECTOR_INDEX(
        index_name     => 'MY_INDEX',
        include_data   => FALSE,
        force          => TRUE
     );                                                                 
END;                                                                 
/

DISABLE_VECTOR_INDEXプロシージャ

このプロシージャは、現在のデータベースのベクトル索引オブジェクトを無効にします。無効にすると、AIプロファイルはベクトル索引を使用できず、新しいデータがオブジェクト・ストアに追加されても、索引に基づく索引付け、検索または問合せが実行されないため、ベクトル・ストアにデータがロードされません。

構文

DBMS_CLOUD_AI.DISABLE_VECTOR_INDEX(                                              
   index_name       IN  VARCHAR2                                            
);

Parameters

パラメータ 説明

index_name

ベクトル索引の名前。ベクトル索引名は、Oracle SQL識別子のネーミング・ルールに従う必要があります。ベクトル・ストア名の最大長は125文字です。

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

ベクトル索引の名前は、ベクトル索引を無効にできます。

BEGIN                                                                
   DBMS_CLOUD_AI.DISABLE_VECTOR_INDEX(index_name => 'MY_INDEX');       
END;                                                                 
/

ENABLE_VECTOR_INDEXプロシージャ

このプロシージャは、以前に無効にしたベクトル索引オブジェクトを有効またはアクティブ化します。一般に、ベクトル索引を作成すると、デフォルトで、AIプロファイルがベクトル索引を使用して索引付けおよび検索を実行できるように有効化されます。

有効にすると、ベクトル索引を使用すると、AIプロファイルは、オブジェクト・ストアからユーザーが指定したリフレッシュ率でベクトル・ストアに新しいデータをロードするために使用できます。refresh_rateパラメータは、JSONオブジェクト・リストを介して指定できます。JSON属性を構成するには、「ベクトル索引属性」を参照してください。

構文

DBMS_CLOUD_AI.ENABLE_VECTOR_INDEX(                                              
   index_name       IN  VARCHAR2                                            
);

Parameters

パラメータ 説明

index_name

ベクトル索引の名前。ベクトル索引名は、Oracle SQL識別子のネーミング・ルールに従う必要があります。ベクトル・ストア名の最大長は125文字です。

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

ベクトル索引は、次のようにベクトル索引名を指定することで有効化またはアクティブ化できます。

BEGIN                                                                
   DBMS_CLOUD_AI.ENABLE_VECTOR_INDEX(index_name => 'MY_INDEX');       
END;                                                                 
/

UPDATE_VECTOR_INDEXプロシージャ

このプロシージャは、ベクトル索引属性の指定値で既存のベクトル・ストア索引を更新します。
次のものを受け入れるために、オーバーロードされています。
  • 様々なタイプの属性値。
  • ベクトル索引属性はJSONドキュメントとして、既存のベクトル・ストア索引の1つ以上の属性を指定された属性名と値のペアで更新します。

構文

DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(
   index_name         IN  VARCHAR2,
   attributes         IN  CLOB
);

DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(
     index_name         IN  VARCHAR2,
     attribute_name     IN  VARCHAR2,
     attribute_value    IN  VARCHAR2
);

DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(                                                 
     index_name         IN  VARCHAR2,                                         
     attribute_name     IN  VARCHAR2,                                         
     attribute_value    IN  CLOB     DEFAULT NULL                           
  );

Parameters

パラメータ 説明

index_name

ベクトル索引の名前。ベクトル索引名は、Oracle SQL識別子のネーミング・ルールに従う必要があります。ベクトル・ストア名の最大長は125文字です。

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

attributes

ベクトル索引属性をJSON形式で指定します。

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

attribute_name

CREATE_VECTOR_INDEXプロシージャでJSONパラメータとして指定されたカスタム属性の名前。

次の属性は変更できません。

  • location
  • vector_table_name
  • chunk_size
  • chunk_overlap
  • vector_distance_metric
  • vector_dimension

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

attribute_value

カスタムattribute_nameのユーザー指定値。値は、CLOBNUMBERまたはVARCHAR2タイプです。

デフォルト値はNULLです。

ノート:

attributesパラメータを使用して、JSON形式でattribute_nameと値のペアを指定するか、attribute_nameattribute_valueのパラメータを一緒に指定します。

BEGIN                                                                
   DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(                                 
      index_name       => 'MY_INDEX',                                   
      attribute_name   => 'object_storage_credential_name',                
      attribute_value  => 'NEW_CRED'                           
   );                                                                 
END;                                                                 
/

次の例では、NUMBER型をattribute_valueとして受け入れます。

BEGIN                                                                
   DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(                                 
      index_name       => 'MY_INDEX',                                   
      attribute_name   => 'match_limit',                
      attribute_value  => 10                           
   );                                                                 
END;                                                                 
/

次の例では、VARCHAR2型をattribute_valueとして受け入れます。

BEGIN                                                                
   DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(                                 
      index_name       => 'MY_INDEX',                                   
      attribute_name   => 'profile_name',                
      attribute_value  => 'AI_PROF2'                           
   );                                                                 
END;                                                                 
/

次の例では、JSON形式のattributesを受け入れます。

BEGIN
  DBMS_CLOUD_AI.UPDATE_VECTOR_INDEX(
    index_name => 'MY_VECTOR_INDEX', 
    attributes => '{"match_limit": 10, 
                    "refresh_rate": 30}'
  );
END;
/

ベクトル索引属性

ベクトル索引の属性は、ベクトル索引の動作を管理および構成するのに役立ちます。必要に応じて、カスタム索引属性を追加できます。一部の属性はオプションで、デフォルト値が設定されています。

属性

属性名 Value 必須 説明
chunk_size 1024 (デフォルト) ×

入力データをチャンクするテキスト・サイズ。

テキスト・データの場合、これは文字数を意味します。

chunk_overlap 128 (デフォルト) ×

テキストの隣接するチャンク間の重複する文字の量を指定します。この属性は、セグメント間の重複を許可することで、コンテキストの継続性とテキスト処理の正確性を確保するために役立ちます。これにより、チャンク境界でコンテキスト情報が失われないようにできます。

location

NA

このパラメータは、ソース・ファイルのURIまたはディレクトリとソース・ファイルを指定します。

ワイルドカード・パターンは、ソース・ファイルのURIとディレクトリの両方でサポートされています。

クラウドのソース・ファイルURI:

バケットまたはサブフォルダのソース・ファイルURIを指定できます。ワイルドカードを使用して、サブフォルダまたはファイル名を指定できます。文字「*」は複数の文字のワイルドカードとして使用でき、文字「?」は1文字のワイルドカードとして使用できます。

ワイルドカードを使用した例:

location_uri => 'https://objectstorage.my$region.oraclecloud.com/n/namespace-string/b/bucketname/o/year=????/month=??/*.csv

URIのフォーマットは、使用中のクラウド・オブジェクト・ストレージ・サービスによって異なります。詳細は、「クラウド・オブジェクト・ストレージURIフォーマット」をご覧ください。

Directory:

1つのディレクトリとファイル名を指定できます。ディレクトリを指定する形式は、MY_DIR:filename.extです。デフォルトでは、ディレクトリ名MY_DIRはデータベース・オブジェクトであり、大/小文字は区別されません。ファイル名は、大/小文字が区別されます。

ワイルドカードを使用して、ディレクトリ内のファイル名を指定できます。文字「*」は複数の文字のワイルドカードとして使用でき、文字「?」は1つの文字のワイルドカードとして使用できます。例: MY_DIR:*またはMY_DIR:test?

大/小文字を区別するディレクトリ名を指定するには、二重引用符を使用します。例: "my_dir1":*"my_dir2":Test?

引用符文字を含めるには、2つの引用符を使用します。例: MY_DIR:''filename.ext。これは、ファイル名が引用符(')で始まることを示します。

この場所のファイルは、PDF、DOC、JSON、XML、HTMLなどの形式のドキュメントです。サポートされているドキュメント形式を参照してください。

match_limit

5 (デフォルト) ×

ベクトル検索問合せで返される結果の最大数を指定し、出力サイズを制御して、データ取得操作の効率性を向上させます。

object_storage_credential_name

NA

オブジェクト・ストレージにアクセスするための資格証明の名前を指定します。

pipeline_name

<vector_index_name>$VECPIPELINE ×

ベクトル索引データ・ロード・パイプライン名を指定します。この属性はベクトル索引に対して自動的に設定されるため、指定または変更できません。パイプライン名を使用すると、パイプラインのモニターおよびトラブルシューティングを使用してベクトル索引のデータ・ロードを監視できます。

profile_name

NA

ソース・データとユーザー・プロンプトの埋込みに使用されるAIプロファイルの名前。

refresh_rate

1440分(デフォルト) ×

ベクトル・ストア内のデータを更新する間隔。単位は分です。

similarity_threshold

0 (デフォルト) ×

2つのアイテムが一致とみなされるために必要な類似度の最小レベルを定義します。これは、一致アルゴリズムで結果をフィルタして関連性を確保するのに役立ちます。

vector_distance_metric

説明で指定された値の1つに対応する文字列。

×

データベース内のベクトルを比較し、アイテム間の類似性を定量化する方法を決定するために使用する距離計算のタイプを指定します。

Oracle 23aiの有効な値:

  • EUCLIDEAN
  • L2_SQUARED (EUCLIDEAN_SQUARED)
  • COSINE (デフォルト)
  • DOT
  • MANHATTAN
  • HAMMING

vector_db_provider

oracle

ベクトル・ストアとして管理および機能するプロバイダ名を指定します。

vector_dimension

NA ×

ベクトル・ストア内の各ベクトルの要素数を指定し、データ表現のサイズと構造を定義します。

vector_table_name

<vector_index_name>$VECTAB (デフォルト)

×

ベクトル埋込みおよびチャンク・データを格納する表またはコレクションの名前を指定します。

例: オブジェクト・ストレージURIの場所の指定
次の例は、OCI生成AIベクトル・ストアを使用したベクトル索引の作成を示しています。
BEGIN
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
         index_name  => 'MY_INDEX',
         attributes  => '{"vector_db_provider": "oracle",
                          "location": "https://swiftobjectstorage.us-phoenix-1.oraclecloud.com/v1/my_namespace/my_bucket/my_data_folder",
                          "object_storage_credential_name": "OCI_CRED",
                          "profile_name": "OPENAI_ORACLE",
                          "vector_dimension": 1024,
                          "vector_distance_metric": "cosine",
                          "chunk_overlap":128,
                          "chunk_size":1024
      }');
END;
/                                                                 
/
例: ワイルドカード・パターンを使用したオブジェクト・ストレージURIの場所の指定

この例では、オブジェクト・ストレージURIのワイルドカード・パターン(*)をlocationパラメータとして指定します。オブジェクト・ストレージURIからすべてのCSVファイルをロードします。

BEGIN                                                               
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(                                
            index_name    => 'MY_INDEX',                                  
            attributes    => JSON_OBJECT(                                
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',             
                       'profile_name'      value 'OCIGENAI',        
                       'location'          value 'https://objectstorage.myregion.oraclecloud.com/n/my$namespace/b/bucketname/o/year=????/month=??/file*.csv)',
                       'object_storage_credential_name'   value 'OS_CRED',             
                       'chunk_size'        value 2048,                   
                       'chunk_overlap'     value 256,                    
                       'refresh_rate'      value 720)                    
       );                                                                
END;                                                                
/
例: ワイルドカード・パターンを使用したディレクトリ・オブジェクトの場所の指定

この例では、ワイルドカード・パターンを使用して、locationパラメータ内のディレクトリ・オブジェクトを指定します。すべてのCSVファイルをMY_DIRディレクトリにロードします。

BEGIN                                                               
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(                                
            index_name    => 'MY_INDEX',                                  
            attributes    => JSON_OBJECT(                                
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',             
                       'profile_name'      value 'OCIGENAI',        
                       'location'          value 'MY_DIR:*.csv',
                       'object_storage_credential_name'   value 'OS_CRED',             
                       'chunk_size'        value 2048,                   
                       'chunk_overlap'     value 256,                    
                       'refresh_rate'      value 720)                    
       );                                                                
END;                                                                
/
例: ワイルドカード・パターンを使用した大/小文字を区別するディレクトリ・オブジェクトの場所の指定

この例では、ワイルドカード・パターンを使用して、locationパラメータで大/小文字を区別するディレクトリ・オブジェクトを指定します。すべてのCSVファイルをMy_Dirディレクトリにロードします。

BEGIN                                                               
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(                                
            index_name    => 'MY_INDEX',                                  
            attributes    => JSON_OBJECT(                                
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',             
                       'profile_name'      value 'OCIGENAI',        
                       'location'          value '"My_Dir":*.csv',
                       'object_storage_credential_name'   value 'OS_CRED',             
                       'chunk_size'        value 2048,                   
                       'chunk_overlap'     value 256,                    
                       'refresh_rate'      value 720)                    
       );                                                                
END;                                                                
/
例: すべてのファイルをワイルドカード・パターンとして大/小文字を区別するディレクトリ・オブジェクトの指定

この例では、ワイルドカード・パターン(*)を使用して、locationパラメータで大/小文字を区別するディレクトリ・オブジェクトを指定します。これは、My_Dirディレクトリにあるすべてのファイルをロードします。

BEGIN                                                               
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(                                
            index_name    => 'MY_INDEX',                                  
            attributes    => JSON_OBJECT(                                
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',             
                       'profile_name'      value 'OCIGENAI',        
                       'location'          value '"My_Dir":*',
                       'object_storage_credential_name'   value 'OS_CRED',             
                       'chunk_size'        value 2048,                   
                       'chunk_overlap'     value 256,                    
                       'refresh_rate'      value 720)                    
       );                                                                
END;                                                                
/
例: ディレクトリ・オブジェクトでのファイル名の一致の指定

この例では、ディレクトリ・オブジェクトを指定し、locationパラメータでファイル名接頭辞(testなど)を使用します。これは、名前がtestで始まるMY_DIRディレクトリ内のすべてのファイルをロードします。

BEGIN                                                               
       DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(                                
            index_name    => 'MY_INDEX',                                  
            attributes    => JSON_OBJECT(                                
                       'vector_db_provider' value 'oracle',
                       'vector_table_name'  value 'oracle_mycollection',             
                       'profile_name'      value 'OCIGENAI',        
                       'location'          value 'MY_DIR:test*',
                       'object_storage_credential_name'   value 'OS_CRED',             
                       'chunk_size'        value 2048,                   
                       'chunk_overlap'     value 256,                    
                       'refresh_rate'      value 720)                    
       );                                                                
END;                                                                
/

CREATE_CONVERSATIONプロシージャ

このプロシージャを使用すると、会話を作成し、プロシージャ内でconversation_idを自動的に設定できます。

ノート:

DBMS_CLOUD_AI.CREATE_CONVERSATIONプロシージャを使用している場合は、プロシージャによって自動的に設定されるため、conversation_idの設定をスキップできます。

構文

DBMS_CLOUD_AI.CREATE_CONVERSATION(
  attributes            IN CLOB DEFAULT NULL
);

Parameters

パラメータ 説明

attributes

JSON形式の会話の属性。詳細は、CREATE_CONVERSATION属性を参照してください。

デフォルト値はNULLです。

例: 会話の作成

次の例は、カスタマイズなしで会話を作成する方法を示しています。

EXEC DBMS_CLOUD_AI.CREATE_CONVERSATION;

結果:

PL/SQL procedure successfully completed.
例: カスタム属性を使用した会話の作成

次の例は、titledescriptionretention_daysconversation_lengthなどのカスタム・パラメータを使用した会話の作成を示しています。

-- Create conversation with custom attributes
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
               attributes => '{"title":"Conversation 1",
                               "description":"this is a description",
                               "retention_days":5,
                               "conversation_length":5}')
     AS conversation_id FROM dual;

CREATE_CONVERSATIONファンクション

このファンクションは、会話を作成し、DBMS_CLOUD_AI.SET_CONVERSATION_IDDBMS_CLOUD_AI.GENERATEなどの他のプロシージャまたはファンクションで使用できるconversation_idを戻します。

Oracleでは、会話を有効にするためにconversation_idを設定することをお薦めします。または、DBMS_CLOUD_AI.GENERATEファンクションでconversation_idを設定できます。

ノート:

DBMS_CLOUD_AI.CREATE_CONVERSATIONプロシージャを使用している場合は、プロシージャによって自動的に設定されるため、conversation_idの設定をスキップできます。

構文

DBMS_CLOUD_AI.CREATE_CONVERSATION(
  attributes            IN CLOB DEFAULT NULL
) RETURN VARCHAR2;

Parameters

パラメータ 説明

attributes

JSON形式の会話の属性。詳細は、CREATE_CONVERSATION属性を参照してください。

デフォルト値はNULLです。

例: 会話の作成

次の例は、DBMS_CLOUD_AI.CREATE_CONVERSATIONファンクションを使用して、カスタマイズなしで会話を作成する方法を示しています。

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION FROM DUAL;

結果:

CREATE_CONVERSATION
------------------------------------
30C9DB6E-EA4D-AFBA-E063-9C6D46644B92
例: カスタム属性を使用した会話の作成

次の例は、DBMS_CLOUD_AI.CREATE_CONVERSATIONファンクションを使用して、titleretention_daysおよびconversation_lengthなどの属性を指定する方法を示しています。

SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
				attributes => '{"title":"This is a test conversation",
                               "retention_days":7,
                               "conversation_length":20}') 
FROM DUAL;

CREATE_CONVERSATION属性

これらの属性は、会話コンテキストを保持する期間、格納または表示するレスポンスがあるプロンプトの数、および参照用のタイトルや説明などのメタデータなど、会話コンテキストを管理します。一部の属性はオプションで、デフォルト値が設定されています。

属性

属性名 デフォルト値 説明

title

新規会話

会話にユーザーが割り当てた名前。指定しない場合、Select AIは、会話がプロンプトで最初に使用されるときにLLMを生成します。

description

NULL

会話の目的またはコンテキストを要約したユーザー定義の説明を提供します。提供されない場合、LLMは、会話が最初にプロンプトで使用されたときに会話を生成し、5回目の使用で再度更新して、より正確で関連性の高い情報を含めます。

retention_days

7

会話履歴を保持する日数を指定します。これは、作成日からデータベースに格納されます。値を省略すると、デフォルト値の7が設定されます。0に設定すると、DBMS_CLOUD_AI.DROP_CONVERSATIONプロシージャまたはDBMS_CLOUD.DELETE_ALL_OPERATIONS('CONVERSATION')を使用して会話を手動で削除するまで、会話は保持されます。

conversation_length

NULL

現在のプロンプトに含める最近のプロンプトと応答の数を指定します。許可される最大値は999です。この値は、DBMS_CLOUD_AI.GENERATEファンクションでconversation_lengthパラメータを指定するか、SELECT AI <ACTION> <PROMPT>を使用してAIプロファイルで設定することでオーバーライドできます。conversation_lengthに次の優先順位ルールを適用します。
  1. DBMS_CLOUD_AI.GENERATEの属性引数からの値
  2. 会話で設定された値が次の優先度になります
  3. AIプロファイルで定義された値が最優先されます

いずれもconversation_lengthを指定しない場合、デフォルト値は10です。

次の例は、 DBMS_CLOUD_AI.CREATE_CONVERSATIONプロシージャで会話属性をカスタマイズする方法を示しています。
-- Create conversation with custom attributes
SELECT DBMS_CLOUD_AI.CREATE_CONVERSATION(
               attributes => '{"title":"Conversation 1",
                               "description":"this is a description",
                               "retention_days":5,
                               "conversation_length":5}')
     AS conversation_id FROM dual;

UPDATE_CONVERSATIONプロシージャ

このプロシージャは、会話属性の指定値で既存の会話を更新します。

構文

DBMS_CLOUD_AI.UPDATE_CONVERSATION(
    conversation_id    IN VARCHAR2,
    attributes         IN CLOB
);

Parameters

パラメータ 説明

conversation_id

会話に割り当てられた一意の番号。

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

attributes

JSON形式の会話の属性。詳細は、CREATE_CONVERSATION属性を参照してください。

EXEC DBMS_CLOUD_AI.UPDATE_CONVERSATION(
conversation_id => '30C9DB6E-EA4E-AFBA-E063-9C6D46644B92', 
attributes => '{"retention_days":20, 
		"description":"This a sample description", 
		"title":"Sample title", 
		"conversation_length":20}');

結果:

PL/SQL procedure successfully completed.

SET_CONVERSATION_IDプロシージャ

このプロシージャは、現在の会話を指定されたIDに設定します。後続のプロンプトには、会話の構成済属性に基づく既存の会話プロンプトが含まれます。

構文

DBMS_CLOUD_AI.SET_CONVERSATION_ID(
    conversation_id   IN VARCHAR2
);

Parameters

パラメータ 説明

conversation_id

現在のセッションで会話に割り当てられた一意の番号。

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

EXEC DBMS_CLOUD_AI.SET_CONVERSATION_ID('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');
   

結果:

PL/SQL procedure successfully completed.

GET_CONVERSATION_IDファンクション

このファンクションは、DBMS_CLOUD_AI.SET_CONVERSATION_IDプロシージャまたはDBMS_CLOUS_AI.CREATE_CONVERSATIONプロシージャを使用して、セッションで現在設定されている会話IDを戻します。会話を設定しなかった場合、関数はNULLを返します。会話を削除すると、その会話もセッション内でクリアされます。「CLEAR_CONVERSATION_IDプロシージャ」を参照してください。

構文

DBMS_CLOUD_AI.GET_CONVERSATION_ID
RETURN VARCHAR2;

この例では、現在のセッションで設定された会話IDを表示します。

SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID;

結果:

--------------------------------------------------------------------------------
30C9DB6E-EA4F-AFBA-E063-9C6D46644B92

CLEAR_CONVERSATION_IDプロシージャ

このプロシージャは、セッションで設定された会話IDをクリアして、SELECT AI <ACTION> <PROMPT>の会話機能を無効にします。会話を設定しなかった場合、エラーは発生しません。

構文

DBMS_CLOUD_AI.CLEAR_CONVERSATION_ID;

この例では、セッションでの現在の会話IDの表示、IDのクリアおよび変更の確認を示します。

-- A conversation id is set in the session
SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID FROM dual;
 
GET_CONVERSATION_ID
--------------------------------------------------------------------------------
3A88BFF0-1D7E-B3B8-E063-9C6D46640ECD
 
 
-- Clear the conversation id
EXEC DBMS_CLOUD_AI.CLEAR_CONVERSATION_ID;
 
PL/SQL procedure successfully completed.
 
 
-- The conversation id is removed from the session
SELECT DBMS_CLOUD_AI.GET_CONVERSATION_ID FROM dual;
 
GET_CONVERSATION_ID
--------------------------------------------------------------------------------

DELETE_CONVERSATION_PROMPTプロシージャ

このプロシージャは、会話から特定のプロンプトを削除します。

構文

DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT(
    conversation_prompt_id  IN VARCHAR2,
    force                   IN BOOLEAN DEFAULT FALSE
);

Parameters

パラメータ 説明

conversation_prompt_id

会話のプロンプトに割り当てられた一意の番号。プロンプトIDを確認するには、DBA/USER_CLOUD_AI_CONVERSATION_PROMPTSビューを問い合せます。DBMS_CLOUD_AIビューを参照してください。

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

force

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

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

EXEC DBMS_CLOUD_AI.DELETE_CONVERSATION_PROMPT('30C9DB6E-EA61-AFBA-E063-9C6D46644B92');

結果:

PL/SQL procedure successfully completed.

DROP_CONVERSATIONプロシージャ

このプロシージャは、会話とそれに関連付けられたすべてのプロンプトおよび関連付けられたレスポンスを削除します。削除すると、conversation_idは無効になります。セッションで設定されている間に会話が削除された場合、その会話は自動的にクリアされます。

構文

DBMS_CLOUD_AI.DROP_CONVERSATION(
    conversation_id  IN VARCHAR2,
    force            IN BOOLEAN  DEFAULT FALSE
);

Parameters

パラメータ 説明

conversation_id

会話に割り当てられた一意の番号。

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

force

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

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

EXEC DBMS_CLOUD_AI.DROP_CONVERSATION('30C9DB6E-EA4D-AFBA-E063-9C6D46644B92');

結果:

PL/SQL procedure successfully completed.

FEEDBACKプロシージャ

この手順を使用すると、Select AIにフィードバックを提供して、問合せ生成の精度を向上させる可能性があります。肯定的または否定的なフィードバック、テキスト・コメントまたは改訂されたSQL問合せを提供するオプションがあります。

構文

DBMS_CLOUD_AI.FEEDBACK(
      profile_name      IN  VARCHAR2,
      sql_id            IN  DBMS_ID,
      feedback_type     IN  VARCHAR2 DEFAULT NULL,
      response          IN  CLOB DEFAULT NULL,
      feedback_content  IN  CLOB DEFAULT NULL,   
      operation         IN  VARCHAR2 DEFAULT 'ADD'
  );
 
DBMS_CLOUD_AI.FEEDBACK(
      profile_name      IN  VARCHAR2,
      sql_text          IN  CLOB,
      feedback_type     IN  VARCHAR2 DEFAULT NULL,
      response          IN  CLOB DEFAULT NULL,
      feedback_content  IN  CLOB DEFAULT NULL,
      operation         IN  VARCHAR2 DEFAULT 'ADD'
  );

Parameters

パラメータ 説明

profile_name

使用するAIプロファイルを指定します。profile_nameを指定しない場合、Select AIはセッションで設定されたデフォルト・プロファイルを使用します。

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

sql_id

SQL問合せを識別します。1つのsql_idに設定できるフィードバック・エントリは1つのみです。

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

sql_text

SQL問合せの全テキストが含まれます。

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

feedback_type

フィードバックの種類を指定します。選択可能な値は次のとおりです。
  • positive: 生成されたSQLを受け入れます。
  • negative: 問合せのエラーを識別することで、必要なSQL問合せの改善を提供します。

ノート:

DBMS_CLOUD_AI.FEEDBACKプロシージャを使用すると、sql_idまたはsql_textを指定できるため、feedback_typeが必要ですが、feedbackアクションを使用している場合は、LLMによってフィードバック・タイプが動的に決定または解釈されます。

これは、operationaddの場合の必須パラメータです。

response

ユーザーが期待する正しいSQL問合せ結果を表します。

operationaddで、feedback_typenegativeの場合、これは必須パラメータです。

feedback_content

ユーザーの自然言語フィードバックを取得します。responseとともにこのパラメータを使用するオプションがあります。

operation

実行する操作を指定します。指定できる値は次のとおりです。
  • add (デフォルト): feedback_typeを指定してフィードバックを追加します。
  • delete: sql_idを指定してフィードバックを削除します。

例: 追加操作または削除操作を使用した生成済SQLのフィードバックの提供

次の例は、DBMS_CLOUD_AI.FEEDBACKプロシージャを使用して、プロシージャのパラメータを指定して、生成されたSQLを受け入れるか改善する方法を示しています。

EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   feedback_type=>'positive',
                                   operation=>'add');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_text=> 'select ai showsql how many movies',
                                   feedback_type=> 'negative',
                                   response=>'SELECT SUM(1) FROM "ADB_USER"."MOVIES"',
                                   feedback_content=>'Use SUM instead of COUNT');
EXEC DBMS_CLOUD_AI.FEEDBACK(profile_name=>'OCI_FEEDBACK1',
                                   sql_id=> '852w8u83gktc1',
                                   operation=>'delete');

FEEDBACKのベクトル索引

Select AIは、フィードバック機能を初めて使用するときに、デフォルト属性を持つ<profile_name>_FEEDBACK_VECINDEXという名前のデフォルトのベクトル索引を作成します。

DBMS_CLOUD_AI.UPDATE_VECTOR_INDEXプロシージャを使用して、similarity_thresholdmatch_limitなどの属性を変更できます。この索引は、提供されたフィードバックに基づいて将来生成されたSQLを絞り込むのに役立ちます。この表は、関連付けられたAIプロファイルが削除されると削除されます。<profile_name>_FEEDBACK_VECINDEXを削除することもできます。その場合、Select AIでは、runsqlshowsqlおよびexplainsqlアクションのヒントとしてフィードバックが使用されなくなりました。ただし、Select AIフィードバック機能を使用して新しいフィードバックを送信すると、Select AIによって新しいフィードバック・ベクトル索引が自動的に作成されます

ノート:

feedbackmatch_limitのデフォルト値は3です。

ベクトル表名

<profile_name>_FEEDBACK_VECINDEX$VECTAB表には、ユーザー・フィードバックのベクトル表現(埋込み)と、Select AIが時間の経過とともにSQL生成を改善するために使用するその他のパラメータが含まれています。

Parameters

説明

attributes

FEEDBACKプロシージャに従ってJSONオブジェクト属性を含めます。

content

ユーザー・プロンプトが含まれます。

embedding

ユーザー・プロンプトのベクトル表現(埋込み)が含まれます。

次の例は、自動生成されたベクトル索引表を使用してフィードバックを問い合せて提供する方法を示しています。

SQL> select content, attributes from OCI_FEEDBACK1_FEEDBACK_VECINDEX$VECTAB where JSON_VALUE(attributes, '$.sql_text') = 'select ai showsql how many movies';
 
CONTENT                                                
----------------------------------------------------------------------------------------------------
how many movies                                             
ATTRIBUTES
----------------------------------------------------------------------------------------------------
 
{"response":"SELECT SUM(1) FROM \"ADB_USER\".\"MOVIES\"","feedback_type":"negative","sql_id":null,"sql_text":"select ai showsql how many movies","feedback_content":null}
DBMS_CLOUD_AI.feedback Procedure(Positive Feedback)