DBMS_CLOUD_AIパッケージ

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

前提条件

開発者は、Oracle Public Cloud、MulticloudまたはExadata Cloud@CustomerにデプロイされたAutonomous AI DatabaseでDBMS_CLOUDプロシージャを使用できます。

デプロイメントの選択に応じて、DBMS_CLOUDプロシージャをAmazon S3、Azure Blob StorageおよびGoogle Cloud Storageサービス・プロバイダで使用するには、次の前提条件を満たす必要があります。

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_DATAETIC_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

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

デフォルト値はenableです。

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サービスのデプロイ済モデルの名前。名前に使用できるのは、英数字、アンダースコア文字(_)およびハイフン(-)のみです。名前の最後にアンダースコア(_)またはハイフン(-)を使用することはできません。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生成AI: cohere.embed-english-v3.0
  • OpenAI: text-embedding-ada-002
  • Azure OpenAI: text-embedding-ada-002
  • Cohere: 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: command (デフォルト)、command-nightly (実験的)、command-lightおよびcommand-light-nightly (実験的)。より小さい「軽い」モデルはより速く、より大きいモデルはよりよく実行されます。[カスタムモデル](https://docs.cohere.com/docs/creating-custom-models#what-are-custom-models)は完全なIDでも供給できます。
  • OCI Generative AI: OCI Generative AIの場合: cohere.command (デフォルト)。OCI Generative 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 Generative AI RuntimeTypeにあります。LlmInferenceRequestリファレンスを参照してください。

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

  • COHERE
  • LLAMA

provider

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

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

  • オープンアイ
  • 一貫性
  • アズール
  • oci
  • ゴーグル
  • 人類
  • ハギングフェイス
  • AWS

この属性は必須です。

region

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

ノート: Oracle Generative AIクラスタは、シカゴ、フランクフルトおよびロンドン・リージョンで利用できます。「生成AIの事前トレーニング済基礎モデル」を参照(https://docs.oracle.com/en-us/iaas/Content/generative-ai/pretrained-models.htm#pretrained-models).)

デフォルト・リージョンは`us-chicago-1`です。

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

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

使用上のノート

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

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言語リファレンス』CREATE TRIGGER文に関する項または『Oracle Database 26aiデータベースPL/SQL言語リファレンス』を参照してください。

構文

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プロファイルでは、この関数を使用して、サポートされているアクション(showsqlrunsqlexplainsqlnarratesummarizechatなど)を実行できます。デフォルトのアクションはshowsqlです。

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

構文

DBMS_CLOUD_AI.GENERATE(
    prompt            IN  CLOB,
    profile_name      IN  VARCHAR2 DEFAULT NULL,
    action            IN  VARCHAR2 DEFAULT NULL,
    attributes        IN  CLOB     DEFAULT NULL,
    params            IN  CLOB
) RETURN CLOB;

Parameters

パラメータ 説明
prompt

自然言語はAIを使用して翻訳します。

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

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

profile_name

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

デフォルト値は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 => 'runsql')
FROM dual;
-----------------------------------------------
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 => 'explainsql')
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を使用して自然プロンプトを翻訳するための処理です。サポートされている処理には次のものが含まれます:

  • runsql(デフォルト)

  • showsql

  • explainsql

  • narrate

  • summarize

  • translate

  • chat

アクションの説明は、Use AI Keywords to Enter Promptsを参照してください。

attributes JSON形式で属性を指定して、特定のAIプロファイル属性をオーバーライドします。詳細は、プロファイル属性を参照してください。
params

会話パラメータを指定します。「CREATE_CONVERSATION属性」を参照してください。指定できるのは次のパラメータのみです。

conversation_id: デフォルト値は、現在のセッションで設定された会話IDです。これは必須パラメータではありません。

例: Select AIアクションでのGENERATE関数の使用

次の例は、DBMS_CLOUD_AI.GENERATEファンクションで使用できるrunsqlshowsqlexplainsqlnarratesummarizetranslateおよびchatアクションを示しています。

詳細は、AIキーワードを使用したプロンプトの入力も参照してください。

runsqlアクションの例を次に示します。

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

showsqlアクションの例を次に示します。

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

explainsqlアクションの例を次に示します。

SELECT DBMS_CLOUD_AI.GENERATE(prompt       => 'how many customers',
                              profile_name => 'OPENAI',
                              action       => 'explainsql')
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;

summarizeアクションの例を次に示します。

SELECT DBMS_CLOUD_AI.GENERATE(
                prompt => TO_CLOB(
                            DBMS_CLOUD.GET_OBJECT(
                             credential_name => 'STORE_CRED',
                             object_uri => 'https://objectstorage.ca-toronto-1.oraclecloud.com' ||
                                '/n/namespace-string/b/bucketname/o/data_folder/' ||
                                'summary/test_4000_words.txt')),
                profile_name => 'GENAI_LLAMA',
                action => 'SUMMARIZE')
from DUAL;

結果:

The music streaming industry, led by Spotify, has revolutionized the way people consume music, with streaming accounting for 80% of the American recording industry's revenue. However, this shift has also complicated the lives of artists trying to survive in an on-demand, hyper-abundant present.
Spotify's business model, which pays royalties based on an artist's
popularity, has led to concerns about the fairness of the system, with some artists earning little to no royalties. The company's dominance has also changed the way people listen to music, with a focus on convenience and personalized playlists. Liz Pelly's book, "Mood Machine: The Rise of Spotify and the Costs of the Perfect Playlist," explores the impact of Spotify's rise on the music industry and listeners, arguing that the platform's emphasis on
affect and mood has led to a homogenization of music and a loss of autonomy for listeners. As the music industry continues to evolve, questions remain about the future of music creation and consumption, and whether artists will be able to thrive in a system that prioritizes convenience and profit over artistic expression.

次の例は、translateアクションを示しています。

次の例は、プロンプトでのtranslateアクションの使用を示しています。

ノート: AIプロファイルでは、ターゲット言語を指定する必要があります。

SELECT DBMS_CLOUD_AI.GENERATE('select ai translate text to be translated')
          FROM dual;

次の例は、DBMS_CLOUD_AI.GENERATEファンクションで提供されるtranslateアクションと、target_languageおよびsource_languageを示しています。この例では、生成AI翻訳を使用します。入力テキストthis is a document(英語)(source_language: "en")は、フランス語(target_language: "fr")に変換されます。

DECLARE
         l_attributes  clob := '{"target_language": "fr", "source_language": "en"}';
         output clob;
      BEGIN
         output := DBMS_CLOUD_AI.GENERATE(
                        prompt            => 'this is a document',
                        profile_name      => 'oci_translate',
                        action            => 'translate',
                        attributes        => l_attributes
                     );

プロシージャでのGENERATE関数の使用

プロシージャで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;

GENERATE_DATAETIC_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権限が必要です。表が空であるか、表内にレコードがあります。
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 文字列 × GENERATE_DATAETIC_DATAファンクションのパラメータuser_promptと同じです。user_promptは、特定の表オブジェクトに関連付けられています。

次の例は、単一の表および複数の表の合成データを生成するための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;
/
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;
/

ENABLE_DATA_ACCESSプロシージャ

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

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

構文

DBMS_CLOUD_AI.ENABLE_DATA_ACCESS();

Parameters

このプロシージャには、パラメータは必要ありません。

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

BEGIN
  DBMS_CLOUD_AI.ENABLE_DATA_ACCESS();
END;
/

DISABLE_DATA_ACCESSプロシージャ

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

この手順では、次の Select AI機能を制限します。

構文

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プロシージャ

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

次のものを受け入れるために、オーバーロードされています。

構文

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パラメータを使用して、attribute_nameと値のペアをJSON形式で指定するか、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フォーマット」をご覧ください。

ディレクトリ:

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;

例: カスタム属性を使用した会話の作成

次の例は、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_daysconversation_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}');

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

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

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)

SUMMARIZEファンクション

このファンクションは、パラメータとして指定したカスタマイズ・オプションに基づいてコンテンツを要約します。

構文

DBMS_CLOUD_AI.SUMMARIZE(
  content         IN  CLOB     DEFAULT NULL,
  credential_name IN  VARCHAR2 DEFAULT NULL,
  location_uri    IN  VARCHAR2 DEFAULT NULL,
  profile_name    IN  VARCHAR2 DEFAULT NULL,
  user_prompt     IN  CLOB     DEFAULT NULL,
  params          IN  CLOB     DEFAULT NULL
) RETURN CLOB;

Parameters

パラメータ 説明
content

要約するテキストを指定します。contentまたはlocation_uriのいずれかを指定する必要があります。

これは必須パラメータではありません。

credential_name

オブジェクト・ストアでの認証に使用される資格証明オブジェクトを識別します。`DBMS_CLOUD.CREATE_CREDENTIAL`を使用して、この資格証明を作成する必要があります。

ノート: このパラメータは、`location_uri`を指定する場合にのみ使用します。

location_uri

テキストが格納されるURIまたはローカル・ファイルへのパスを指定します。contentまたはlocation_uriのいずれかを指定する必要があります。

たとえば:

オブジェクト・ストレージ: https://objectstorage.ca-toronto-1.oraclecloud.com/n/namespace-string/b/bucketname/o/data_folder/summary/test_file.txt

ローカル・ファイル: summary_gobject:test_file.txt

profile_name

使用するAIプロファイルを指定します。profile_nameを指定しない場合、Select AIはセッションで設定されたデフォルトのプロファイルを使用します。デフォルト・プロファイルが設定されていない場合、エラーORA-20046: AIプロファイルがセッションで有効になっていません。

デフォルト値はNULLです。

user_prompt

要約をガイドまたはカスタマイズするための自然言語プロンプトを提供します。サマリー・パラメータ以外にも、追加の指示を含めることができます。

たとえば、サマリーは''The summary of the article is: '''で始まる必要があります

このパラメータは必須ではありません。

params 要約パラメータを定義します。「SUMMARIZEパラメータ」を参照してください。

詳細は、例: Select AI Summarizeを参照してください。

SUMMARIZEのパラメータ

これらの属性は、カスタム・パラメータを使用したサマリーの生成を管理します。属性の中にはオプションであり、デフォルト値を持つものがあります。

属性

属性名 デフォルト値 説明
min_words 0

生成されるサマリーに含まれる単語の概算最小数を指定します。

ノート: このパラメータは、厳密な制限ではなくガイドラインとして機能します。サマリーの実際の長さは、提供されているコンテンツおよびモデルの解釈によって異なる場合があります。

max_words 200

生成されるサマリーに含まれる単語の概算最大数を指定します。

ノート: このパラメータは、厳密な制限ではなくガイドラインとして機能します。サマリーの実際の長さは、提供されているコンテンツおよびモデルの解釈によって異なる場合があります。

summary_style 段落

サマリーの書式スタイルを指定します。使用可能なサマリー・フォーマット・オプションは次のとおりです。

  • paragraph: サマリーは1つ以上の段落で表示されます。
  • list: サマリーは、テキストからのキー・ポイントのリストです。

chunk_processing_method map_reduce

LLMで処理できるトークン制限を超えるテキストは、管理可能なチャンクに分割する必要があります。このパラメータを使用すると、これらのチャンクの処理方法を選択できます。次のオプションを指定できます。

  • iterative_refinement
  • map_reduce

詳細は、Select AI Terminologyを参照してください。

extractiveness_level low サマリーが入力の元の表現にどの程度従うかを決定します。これは、モデルが抽出する度合いと、モデルが抽出する度合いを制御します。オプションは次のとおりです。
  • High: サマリーは元のフレーズに近づき、可能な場合は文および式を再利用します。
  • Medium: 抽出とパラフレーズのバランスのとれた組合せ。
  • Low: 入力のリワード、再構築または簡略化の自由度を高め、正確な語句ではなく意味に集中できます。

ノート: この設定は、モデルの集計動作のガイダンスとして機能し、厳密なルールは適用されません。サマリーの実際のスタイルおよび表現は、入力内容およびモデルの決定によって異なる場合があります。

TRANSLATEファンクション

この関数を使用すると、テキストを指定されたtarget_languageに変換できます。

source_languageおよびtarget_languageパラメータをファンクションに指定するか、ユーザーのAIプロファイルから取得できます。AIプロファイルにsource_language属性が含まれていない場合、生成AIプロバイダは入力言語を自動的に検出します。target_language属性がない場合、Select AIはエラーを返します。

構文

DBMS_CLOUD_AI.TRANSLATE(
   profile_name      IN VARCHAR2,
   text              IN CLOB,
   source_language   IN VARCHAR2 DEFAULT NULL,
   target_language   IN VARCHAR2 DEFAULT NULL
) RETURN CLOB;

Parameters

パラメータ 説明
profile_name

使用するAIプロファイルを指定します。

これは必須パラメータではありません。

text

翻訳するテキストを指定します。

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

source_language 入力テキストの言語
target_language テキストの翻訳先の言語。

詳細は、例: Select AI Translateを参照してください。

関連コンテンツ

Select AIを使用した自然言語プロンプトからのSQLの生成