217 DBMS_VECTOR_CHAIN

DBMS_VECTOR_CHAINパッケージは、Oracle AI Vector Searchに関する高度な操作(データのチャンク化や埋込み、テキスト生成機能、要約機能など)をサポートするAPIを提供します。 これは類似検索とハイブリッド検索を使用したテキスト処理に適しており、エンドツーエンド検索用にパイプライン化できる機能が使用されます。

これらの関数は、JSON形式で入力パラメータを受け入れます。

DBMS_VECTOR_CHAINサブプログラムの概要

この表は、DBMS_VECTOR_CHAINサブプログラムを示し、簡単に説明しています。

表217-1 DBMS_VECTOR_CHAINパッケージ・サブプログラム

サブプログラム 説明

チェーン可能ユーティリティ(UTL)関数:

これらの関数は、ベクトル・ユーティリティのPL/SQLパッケージ内のモジュール化された柔軟な関数のセットです。 これらを連鎖して、エンドツーエンドのデータ変換および類似検索操作を自動化できます。

UTL_TO_TEXT

ドキュメントからプレーン・テキスト・データを抽出します

UTL_TO_CHUNKS

データを小さな部分またはチャンクに分割します。

UTL_TO_EMBEDDINGおよびUTL_TO_EMBEDDINGS

データを1つ以上のベクトル埋込みに変換します

UTL_TO_SUMMARY

ドキュメントから要約を抽出します

UTL_TO_GENERATE_TEXT

プロンプト(入力文字列)またはイメージに対するテキストを生成します

資格証明ヘルパー・プロシージャ:

これらのプロシージャを使用すると、データベース内で認証の資格証明を安全に管理できます。 RESTコールを行うためにサードパーティ・サービス・プロバイダへのアクセスを有効にするには、これらの資格証明が必要です。

CREATE_CREDENTIAL

資格証明の名前を作成します

DROP_CREDENTIAL

既存の資格証明名を削除します

プリファレンス・ヘルパー・プロシージャ:

これらのプロシージャを使用すると、ハイブリッド・ベクトル索引の作成時または管理時にCREATE_HYBRID_VECTOR_INDEXおよびALTER_INDEX SQL文で使用されるベクタライザ・プリファレンスを管理できます。

CREATE_PREFERENCE

ベクタライザ・プリファレンスを作成します

DROP_PREFERENCE

既存のベクタライザ・プリファレンスを削除します

チャンカ・ヘルパー・プロシージャ:

これらのプロシージャを使用すると、VECTOR_CHUNKS SQLファンクションまたはUTL_TO_CHUNKS PL/SQLファンクションで使用する語彙と言語のデータ(略称)を構成できます。

CREATE_VOCABULARY

トークン語彙ファイルをデータベースにロードします

DROP_VOCABULARY

既存の語彙データを削除します

CREATE_LANG_DATA

言語データ・ファイルをデータベースにロードします

DROP_LANG_DATA

既存の略称データを削除します

データ・アクセス関数:

このファンクションを使用すると、検索操作を拡張できます。

RERANK

より関連性の高い出力のために検索結果を並べ替えます

ノート:

DBMS_VECTOR_CHAINパッケージでは、Oracle TextのCONTEXTコンポーネント、索引付け、用語抽出、テキスト分析、テキスト要約、単語とテーマの検索およびその他のユーティリティを提供するOracle Databaseテクノロジをインストールする必要があります。

Oracle Textのテキスト処理機能に根本的に依存しているため、UTL_TO_TEXTおよびUTL_TO_SUMMARYチェーン可能ユーティリティ関数とすべてのチャンカ・ヘルパー・プロシージャは、このパッケージ内でのみOracle Textを通じて使用できます。

CREATE_CREDENTIAL

ユーザー認証の詳細をOracle Databaseに格納するための資格証明名を作成するには、DBMS_VECTOR_CHAIN.CREATE_CREDENTIAL資格証明ヘルパー・プロシージャを使用します。

用途

データベース内で認証の資格証明を安全に管理することが目的です。 こうした資格証明は、Cohere、Google AI、Hugging Face、Oracle Cloud Infrastructure (OCI) Generative AI、OpenAI、Vertex AIなどから選択したサードパーティ・サービス・プロバイダへのREST APIコール時にアクセスを可能にするために必要になります。

資格証明名は、ユーザー名、パスワード、アクセス・トークン、秘密キー、指紋などの認証パラメータを保持します。

Oracle Databaseをサービス・プロバイダとして使用している場合は、資格証明を作成する必要はありません。

警告:

データベースの特定の機能により、たとえばREST APIへのアクセスを容易にするJSON仕様を使用することで、サードパーティによって個別に提供されるサービスにアクセスできることもあります。

こうした機能の使用は、お客様自身の責任においてのみ行われ、お客様は当該のサードパーティ・サービスの使用に関連するあらゆる利用規約を遵守する責任を負います。 サードパーティ・サービスに関するその他の利用規約にかかわらず、こうしたデータベース機能を使用することは、お客様がそのリスクを受け入れ、そうしたアクセスにより生じた一切の損害についてOracleの責任または法的責任を明示的に排除することで成立します。

構文

DBMS_VECTOR_CHAIN.CREATE_CREDENTIAL (
    CREDENTIAL_NAME     IN VARCHAR2,
    PARAMS              IN JSON DEFAULT NULL
);

CREDENTIAL_NAME

認証パラメータを保持するために作成する資格証明の名前を指定します。

PARAMS

選択したサービス・プロバイダに基づいて、認証パラメータをJSON形式で指定します。

Generative AIには、次の認証パラメータが必要です:
{ 
"user_ocid"       : "<user ocid>",
"tenancy_ocid"    : "<tenancy ocid>",
"compartment_ocid": "<compartment ocid>",
"private_key"     : "<private key>",
"fingerprint"     : "<fingerprint>" 
}
Cohere、Google AI、Hugging Face、OpenAIおよびVertex AIには、次の認証パラメータが必要です:
{ "access_token": "<access token>" }

表217-2 パラメータ詳細

パラメータ 説明

user_ocid

OCIコンソールのユーザーの詳細ページにリストされている、ユーザーのOracle Cloud Identifier (OCID)。

tenancy_ocid

OCIコンソールのテナンシの詳細ページにリストされている、テナンシのOCID。

compartment_ocid

OCIコンソールのコンパートメント情報ページにリストされている、コンパートメントのOCID。

private_key

OCI秘密キー。

ノート: 生成された秘密キーは次のように表示されます:
-----BEGIN RSA PRIVATE KEY-----
<private key string>
-----END RSA PRIVATE KEY-----
(BEGINENDの行を除く) <private key string>値を単一行または複数行として渡します。

fingerprint

OCIコンソールのAPIキーの下のユーザーの詳細ページにリストされている、OCIプロファイル・キーの指紋。

access_token

サードパーティ・サービス・プロバイダから取得したアクセス・トークン。

必要な権限

このAPIをコールするには、CREATE CREDENTIAL権限が必要です。

  • Generative AIの場合:
    declare
      jo json_object_t;
    begin
      jo := json_object_t();
      jo.put('user_ocid','ocid1.user.oc1..aabbalbbaa1112233aabbaabb1111222aa1111bb');
      jo.put('tenancy_ocid','ocid1.tenancy.oc1..aaaaalbbbb1112233aaaabbaa1111222aaa111a');
      jo.put('compartment_ocid','ocid1.compartment.oc1..ababalabab1112233abababab1111222aba11ab');
      jo.put('private_key','AAAaaaBBB11112222333...AAA111AAABBB222aaa1a/+');
      jo.put('fingerprint','01:1a:a1:aa:12:a1:12:1a:ab:12:01:ab:a1:12:ab:1a');
      dbms_vector_chain.create_credential(
        credential_name   => 'OCI_CRED',
        params            => json(jo.to_string));
    end;
    /
  • Cohereの場合:
    declare
      jo json_object_t;
    begin
      jo := json_object_t();
      jo.put('access_token', 'A1Aa0abA1AB1a1Abc123ab1A123ab123AbcA12a');
      dbms_vector_chain.create_credential(
        credential_name   => 'COHERE_CRED',
        params            => json(jo.to_string));
    end;
    /

エンドツーエンドの例:

この手順を使用してエンドツーエンドのサンプル・シナリオを実行する場合は、LLMを利用するAPIを使用したサマリーおよびテキストの生成を参照してください。

CREATE_LANG_DATA

独自の言語データ・ファイルをデータベースにロードするには、DBMS_VECTOR_CHAIN.CREATE_LANG_DATAチャンカ・ヘルパー・プロシージャを使用します。

用途

選択した言語(languageチャンク化パラメータを使用して指定します)のカスタム言語データを作成します。

言語データ・ファイルには、言語固有の略語トークンが含まれています。 入力言語の文末(EOS)の句読点、略語およびコンテキスト・ルールの知識を使用して、チャンクの文の境界を正確に決定するのに役立つように、このデータをチャンカに提供できます。

使用上のノート

  • サポートされているすべての言語は、デフォルトの言語固有の略語辞書とともに配布されます。 ユーザー指定の言語データ名(PREFERENCE_NAME)を使用して、schema.table.columnにロードされた略語トークンに基づいて言語データを作成できます。

  • 言語データのロード後、VECTOR_CHUNKSまたはUTL_TO_CHUNKSlanguageチャンク化パラメータを指定することで、言語固有のチャンク化を使用できます。

  • 次のデータ・ディクショナリ・ビューに問い合せると、既存の言語データにアクセスできます。
    • ALL_VECTOR_LANGには、使用可能なすべての言語データが表示されます。

    • USER_VECTOR_LANGには、現在のユーザーのスキーマの言語データが表示されます。

    • ALL_VECTOR_ABBREV_TOKENSには、使用可能なすべての言語データの略語トークンが表示されます。

    • USER_VECTOR_ABBREV_TOKENSには、現在のユーザーが所有する言語データの略語トークンが表示されます。

構文

DBMS_VECTOR_CHAIN.CREATE_LANG_DATA (
    PARAMS       IN JSON default NULL
);

PARAMS

JSON形式で入力パラメータを指定します。
{
    table_name, 
    column_name, 
    language,
    preference_name
}

表217-3 パラメータ詳細

パラメータ 説明 必須 デフォルト値

table_name

言語データをロードする表の名前(およびオプションの表の所有者)

はい

値なし

column_name

言語データをロードする言語データ表の列名

はい

値なし

language

サポートされている言語名(「サポートされている言語とデータ・ファイルの場所」を参照)

はい

値なし

preference_name

この言語データのユーザー指定プリファレンス名

はい

値なし

declare
    params CLOB := '{"table_name"      : "eos_data_1",
                     "column_name"     : "token",
                     "language"        : "indonesian",
                     "preference_name" : "my_lang_1"}';
begin
    DBMS_VECTOR_CHAIN.CREATE_LANG_DATA(
        JSON (params));
end;
/

エンドツーエンドの例:

このプロシージャを使用してエンドツーエンドのシナリオ例を実行するには、「カスタム言語データの作成および使用」を参照してください。

CREATE_PREFERENCE

ハイブリッド・ベクトル索引の作成または更新時に使用されるベクトル化プリファレンスを作成するには、DBMS_VECTOR_CHAIN.CREATE_PREFERENCEヘルパー・プロシージャを使用します。

用途

ベクタライザ・プリファレンスを作成すること。

これにより、ハイブリッド・ベクトル索引付けパイプラインのベクトル検索パラメータをカスタマイズできるようになります。 ベクタライザ・プリファレンスの目的は、各種のチャンク化または埋込み戦略を詳しく理解することなく、ドキュメントをチャンクまたは埋込みする方法を構成するための簡単な手段を提供することです。

使用上のノート

ベクタライザ・プリファレンスは、次のチャンク化、埋込みまたはベクトル索引作成パラメータに関連するユーザー指定の値をまとめて保持するJSONオブジェクトです。

  • チャンク化(UTL_TO_CHUNKSおよびVECTOR_CHUNKS)

  • 埋込み(UTL_TO_EMBEDDINGUTL_TO_EMBEDDINGSおよびVECTOR_EMBEDDING)

  • ベクトル索引の作成(distanceaccuracyおよびvector_idxtype)

すべてのベクトル索引プリファレンスは、それらに対応するDBMS_VECTORおよびDBMS_VECTOR_CHAIN APIに定義されているものと同じJSON構文に従います。

ベクタライザ・プリファレンスの作成後にVECTORIZERパラメータを使用すると、このプリファレンス名はCREATE_HYBRID_VECTOR_INDEXおよびALTER_INDEX SQL文のPARAMETERS句のparamstringで渡せるようになります。

プリファレンスの作成はオプションです。 オプションのプリファレンスを指定していないと、索引はシステム・デフォルトを使用して作成されます。

構文

DBMS_VECTOR_CHAIN.CREATE_PREFERENCE (
    PREF_NAME     IN VARCHAR2,
    PREF_TYPE     IN VARCHAR2,
    PARAMS        IN JSON default NULL
);

PREF_NAME

作成するベクタライザ・プリファレンスの名前を指定します。

PREF_TYPE

プリファレンスのタイプ。 次のプリファレンス・タイプのみがサポートされています:

DBMS_VECTOR_CHAIN.VECTORIZER

PARAMS

ベクトル検索固有のパラメータをJSON形式で指定します:

埋込みパラメータ:

{ "model" : <embedding_model_for_vector_generation> }

例:

{ "model" : MY_INDB_MODEL }

modelはONNX埋込みモデルがデータベースに格納される名前を指定します。

ONNX形式のデータベース内埋込みモデルがない場合は、『Oracle Database AI Vector Searchユーザーズ・ガイド』にリストされているステップを実行します。

チャンク化パラメータ:

{
    "by"           :  mode,
    "max"          :  max,
    "overlap"      :  overlap,
    "split"        :  split_condition,
    "vocabulary"   :  vocabulary_name,
    "language"     :  nls_language,
    "normalize"    :  normalize_mode,
    "extended"     :  boolean
}

例:

JSON(
 '{ "by"           :    "vocabulary",
    "max"          :    "100",
    "overlap"      :    "0",
    "split"        :    "none",
    "vocabulary"   :    "myvocab",
    "language"     :    "american",
    "normalize"    :    "all" 
  }')

splitcustomとして、normalizeoptionsとして指定する場合は、custom_listパラメータとnorm_optionsパラメータをそれぞれ追加で指定する必要があります:

JSON(
 '{ "by"           :    "vocabulary",
    "max"          :    "100",
    "overlap"      :    "0",
    "split"        :    "custom",
    "custom_list"  :    [ "<p>" , "<s>" ],
    "vocabulary"   :    "myvocab",
    "language"     :    "american",
    "normalize"    :    "options",
    "norm_options" :    [ "whitespace" ] 
  }')

次の表に、すべてのチャンク化パラメータを示します:

パラメータ 説明および許容される値

by

データを分割するモードを指定します。つまり、文字、単語または語彙トークンの数をカウントして分割します。

有効値:

  • characters (またはchars):

    文字数をカウントして分割します。

  • words:

    単語数をカウントして分割します。

    単語は、英字のシーケンス、数字のシーケンス、個々の句読点、または記号として定義されます。 空白の単語境界のないセグメント化された言語(中国語、日本語、タイ語など)では、各ネイティブ文字が単語とみなされます(つまり、ユニグラム)。

  • vocabulary:

    語彙トークンの数をカウントして分割します。

    語彙トークンは、埋込みモデルで使用されるトークナイザの語彙によって認識される単語または単語の断片です。 語彙ファイルは、チャンカ・ヘルパーAPIのDBMS_VECTOR_CHAIN.CREATE_VOCABULARYを使用してロードできます。

    ノート: 正確な結果を得るには、選択したモデルがチャンク化に使用される語彙ファイルと一致するようにしてください。 語彙ファイルを使用していない場合は、入力長がモデルのトークン制限内で定義されていることを確認してください。

デフォルト値: words

max

各チャンクの最大サイズの制限を指定します。 この設定では、大きいテキストで最大制限に達したときに、固定された位置で入力テキストが分割されます。 maxの単位は、byモードに対応しています。つまり、特定の数の文字、単語、数字、句読点または語彙トークンが最大サイズ制限に達したときにデータが分割されます。

有効値:

  • by characters: 50文字から4000文字

  • by words: 10単語から1000単語

  • by vocabulary: 10トークンから1000トークン

デフォルト値: 100

split [by]

最大サイズ制限に達したときに入力テキストを分割する位置を指定します。 これにより、チャンクに対して適切な境界を定義することで、関連するデータが一緒になるように維持できます。

有効値:

  • none:

    文字、単語または語彙トークンのmax制限で分割します。

  • newlineblanklineおよびspace:

    これらは、max値の前の最後の分割文字で分割される単一分割文字条件です。

    テキストの行の最後で分割するには、newlineを使用します。 空白行(2つの改行などの文字のシーケンス)の最後で分割するには、blanklineを使用します。 空白の最後で分割するには、spaceを使用します。

  • recursively:

    これは、文字(またはシーケンス)の順序付きリストを使用して入力テキストを分割する複数分割文字条件です。

    recursivelyは、次の順序でBLANKLINEnewlinespacenoneとして事前定義されています:

    1. 入力テキストがmax値より大きい場合は、最初の分割文字で分割されます。

    2. 失敗した場合は、2番目の分割文字で分割します。

    3. 同様に続けます。

    4. 分割文字が存在しない場合は、テキスト内のmaxの位置で分割します。

  • sentence:

    これは、文の境界で入力テキストを分割する文末分割条件です。

    この条件では、入力言語の文の句読点およびコンテキスト・ルールの知識を使用して、文の境界が自動的に判断されます。 この言語固有の条件は、主に文末(EOS)の句読点および一般的な略記法に依存しています。

    コンテキスト・ルールは単語情報に基づいているため、この条件はテキストを(文字ではなく)単語または語彙で分割する場合にのみ有効です。

    ノート: この条件は、by wordおよびmaxの設定に従っているため、場合によっては正確な文の境界を判断できないことがあります。 たとえば、文がmax値より大きい場合、文はmaxで分割されます。 同様に、maxの制限内に収まる場合にのみ、テキストに複数の文が含まれます。

  • custom:

    カスタム分割文字リストに基づいて分割します。 カスタム・シーケンスは、制限である16個の分割文字列まで指定でき、最大長はそれぞれ10文字です。

    custom_listパラメータを使用して、有効なテキスト・リテラルの配列を指定します。

    {
        "split"        :  "custom",
        "custom_list"  :  [ "split_chars1", ... ]
    }

    例:

    {
        "split"        :    "custom",
        "custom_list"  :    [ "<p>" , "<s>" ]
    }

    ノート: シーケンスは、タブ(\t)、改行(\n)および改行(\r)の場合にのみ省略できます。

デフォルト値: recursively

overlap

チャンクに含める必要がある先行するテキストの量(正の整数リテラルまたはゼロ)を指定します(存在する場合)。 これは、先行するチャンク・テキストの一部を含めて、関連するテキスト(文など)を論理的に分割するのに役立ちます。

重なりの量は、チャンクの最大サイズの測定方法(文字、単語または語彙トークン)によって異なります。 重なりは、指定されたsplit条件(newlineなど)から始まります。

有効な値: max5%から20%

デフォルト値: 0

language

入力データの言語を指定します。

この句は、別の言語では異なる解釈になる可能性がある特定の文字(句読点や略語など)がテキストに含まれている場合に特に重要です。

有効値:

ノート: エスケープ文字は、SQL予約語でもある言語の略語(たとえば、INASORISなどの言語の略語)とともに使用する必要があります。

例:

SELECT dbms_vector_chain.utl_to_chunks('this is an example', 
   JSON('{ "language" : "\"in\"" }')) 
from dual;
SELECT dbms_vector_chain.utl_to_chunks('this is an example', 
   JSON_OBJECT('language' value '"in"' RETURNING JSON)) 
from dual;

デフォルト値: セッションのNLS_LANGUAGE

normalize

ドキュメントがテキストに変換されるときに発生する可能性のある問題(連続する複数の空白やスマート・クォートなど)を自動的に前処理または後処理します。 高品質のチャンクを抽出するために、正規化モードを使用することをお薦めします。

有効値:

  • none:

    正規化を適用しません。

  • all:

    一般的なマルチバイト(Unicode)の句読点を標準のシングルバイトに正規化します。

  • options:

    norm_optionsパラメータを使用して、正規化オプションの配列を指定します。

    {
        "normalize"    :  "options",
        "norm_options" :  [ "normalize_option1", ... ]
    }
    • punctuation:

      そのテキストの文字セットでサポートされている引用符、ダッシュおよびその他の句読点文字を、共通のASCII形式に変換します。 例:

      • U+2013 (エンダッシュ)はU+002D (ハイフンマイナス)にマップされます

      • U+2018 (左一重引用符)はU+0027 (アポストロフィ)にマップされます

      • U+2019 (右一重引用符)はU+0027 (アポストロフィ)にマップされます

      • U+201B (単一の高逆9引用符)はU+0027 (アポストロフィ)にマップされます

    • whitespace:

      不要な文字を排除することで、空白を最小化します。

      たとえば、空白行は維持しますが、余分な改行、空白またはタブは削除します: " \n \n " => "\n\n"

    • widechar:

      ワイド文字とマルチバイト文字の数字および(a-z)をシングルバイトに正規化します。

      これらは、0-9およびa-z A-Zに相当するマルチバイト文字であり、中国語、日本語または韓国語のテキストで出現することがあります。

    例:

    {
        "normalize"    :  "options",
        "norm_options" :  [ "whitespace" ]
    }

デフォルト値: none

extended

max_string_sizeパラメータをextendedに設定することなく、VARCHAR2文字列の出力制限を32767バイトに増やします。

デフォルト値: 4000または32767 (max_string_size=extendedの場合)

ベクトル索引パラメータ:

{ 
  "distance"        :  <vector_distance>,
  "accuracy"        :  <vector_accuracy>, 
  "vector_idxtype"  :  <vector_idxtype>
}

例:

{ 
  "distance"        :  COSINE,
  "accuracy"        :  95, 
  "vector_idxtype"  :  HNSW
}
パラメータ 説明

distance

ベクトル間の距離を計算するために使用される距離メトリックまたは数学的関数:

  • COSINE
  • MANHATTAN
  • DOT
  • EUCLIDEAN
  • L2_SQUARED
  • EUCLIDEAN_SQUARED

ノート: 現時点では、HAMMINGおよびJACCARDのベクトル距離メトリックはハイブリッド・ベクトル索引ではサポートされていません。

これら各メトリックの詳細は、「ベクトル距離関数および演算子」を参照してください。

デフォルト値: COSINE

accuracy

ベクトル索引を使用して近似検索問合せを実行するときに目指す近似検索の実行のターゲット精度。

ベクトル索引を使用した近似類似検索の理解で説明されているように、使用する索引タイプに応じて、パーセント値を指定するか、内部パラメータ値を指定することによって、デフォルト以外のターゲット精度値を指定できます。

  • Hierarchical Navigable Small World (HNSW)の近似検索の場合:

    HNSW近似検索の場合、ターゲット精度のパーセント値を指定して、検索の精査で考慮される候補の数に影響を与えることができます。 これは、アルゴリズムによって自動的に計算されます。 値が100の場合は、完全検索と同様の結果となる傾向がありますが、システムでは引き続き索引が使用され、完全検索は実行されません。 オプティマイザでは、問合せの述語がある場合は索引を使用する方が高速になる可能性があるため、引き続き索引を使用することが選択されることがあります。 ターゲット精度のパーセンテージ値を指定するかわりに、EFSEARCHパラメータを指定して、索引の精査中に考慮される特定の最大候補数を指定できます。 その数値が大きいほど、精度が高くなります。

    詳細は、「Hierarchical Navigable Small World索引の理解」を参照してください。

  • Inverted File Flat (IVF)の近似検索の場合:

    IVF近似検索の場合、ターゲット精度のパーセント値を指定して、検索の精査に使用されるパーティションの数に影響を与えることができます。 これは、アルゴリズムによって自動的に計算されます。 値が100の場合は、完全検索が実行される傾向がありますが、システムでは引き続き索引が使用され、完全検索は実行されません。 オプティマイザでは、問合せの述語がある場合は索引を使用する方が高速になる可能性があるため、引き続き索引を使用することが選択されることがあります。 ターゲット精度のパーセンテージ値を指定するかわりに、NEIGHBOR PARTITION PROBESパラメータを指定して、検索によって精査されるパーティションの最大数を指定できます。 その数値が大きいほど、精度が高くなります。

    詳細は、「Inverted File Flatベクトル索引の理解」を参照してください。

HNSWとIVFの両方のベクトル索引の有効範囲は、次のとおりです:

> 0 and <= 100

デフォルト値: なし

vector_idxtype

作成するベクトル索引のタイプ:

  • HNSW: HNSWベクトル索引の場合

  • IVF: IVFベクトル索引の場合

これらの各索引タイプの詳細は、「ベクトル索引の様々なカテゴリの管理」を参照してください。

デフォルト値: IVF

Pathsパラメータ:

このフィールドでは、パス・オブジェクトの配列を指定できます。 多数のパス・オブジェクトが存在する可能性があり、各パス・オブジェクトでtypeおよびpath_listを指定する必要があります。

ノート:

ユーザーがpathsフィールドを指定しない場合、ドキュメント全体が考慮されます。
"paths":[
        {"type"      : "<path_type>",
         "path_list" : ["<path_list_array>"]
        }
        ]

JSONドキュメントの例について考えてみましょう:

 {
      "person": 
       {
         "bio": "James is a data scientist who specializes in natural language .. ",
         "profile":
          {
              "text" : "James is a data scientist with expertise in Python programming...",
              "embedding" : [1.60541728E-001,5.76677322E-002,4.0473938E-003,1.2037459E-001,-5.98970801E-004, ..]
          },
         "avatar": "https://example.com/images/James.jpg"
       },
      "product": 
      {
        "description": "A social media analytics tool.", "It helps brands track...",
        "image": "https://example.com/images/data_tool.jpg",
        "embedding" : [1.60541728E-001,5.76677322E-002,4.0473938E-003,1.2037459E-001,-5.98970801E-004, ..]
      }
 }

前述のJSONに対応するpath_listを次に示します:

"paths": [
         {"type"       : "VECTOR",
          "path_list" : ["$.person.profile.embedding", "$.product.embedding"]
         },
         {"type"       : "STRING",
          "path_list" : ["$.person.bio", "$.product.description"]
         }
         ] 

次の表に、pathsパラメータの詳細を示します。

begin
  DBMS_VECTOR_CHAIN.CREATE_PREFERENCE(
    'my_vec_spec',
     DBMS_VECTOR_CHAIN.VECTORIZER,
     json('{ "vector_idxtype" :  "hnsw",
             "model"          :  "my_doc_model",
             "by"             :  "words",
             "max"            :  100,
             "overlap"        :  10,
             "split"          :  "recursively,
             "language"       :  "english",
             "paths":          : [
                                 {
                                  "type"      : "VECTOR",
                                  "path_list" : ["$.person.profile.embedding"]
                                  }
                                 ]  
              }'));
end;
/

CREATE HYBRID VECTOR INDEX my_hybrid_idx on 
    doc_table(text_column) 
    parameters('VECTORIZER my_vec_spec');

関連トピック

CREATE_VOCABULARY

独自のトークン語彙ファイルをデータベースにロードするには、DBMS_VECTOR_CHAIN.CREATE_VOCABULARYチャンカ・ヘルパー・プロシージャを使用します。

用途

ベクトル埋込みモデルで使用されるトークナイザによって認識されるカスタム・トークン語彙を作成します。

語彙には、モデルの統計トレーニング処理中に収集される一連のトークン(単語および単語の断片)が含まれています。 このデータをチャンカに供給すると、埋込みモデルのトークナイザによって課される最大入力制限に近いテキスト・サイズを正確に選択するのに役立ちます。

使用上のノート

  • 通常、サポートされている語彙ファイル(認識されたトークンを含む)は、モデルの配布の一部として含まれています。 対象のモデルに関連付けられた語彙ファイルを使用するようにお薦めします。

    語彙ファイルが使用できない場合は、トークナイザのタイプに応じて、次のいずれかのファイルをダウンロードできます:
    • WordPiece:

      "bert-base-uncased" (英語)または"bert-base-multilingual-cased"モデルの語彙ファイル(vocab.txt)

    • バイトペア・エンコーディング(BPE):

      "GPT2"モデルの語彙ファイル(vocab.json)

      次のpythonスクリプトを使用して、ファイルを抽出します:
      import json
      import sys
       
      with open(sys.argv[1], encoding="utf-8") as f:
        d = json.load(f)
        for term in d:
          print(term)
    • SentencePiece:

      "xlm-roberta-base"モデルの語彙ファイル(tokenizer.json)

      次のpythonスクリプトを使用して、ファイルを抽出します:
      import json
      import sys
       
      with open(sys.argv[1], encoding="utf-8") as f:
        d = json.load(f)
        for entry in d["model"]["vocab"]:
          print(entry[0])

    語彙ファイルは必ずUTF-8エンコーディングで保存してください。

  • ユーザー指定の語彙名(vocabulary_name)を使用して、schema.table.columnにロードされたトークンに基づいて語彙を作成できます。

    語彙データのロード後、by vocabularyチャンク化モード(VECTOR_CHUNKSまたはUTL_TO_CHUNKSを使用)を使用して、トークン数をカウントすることで入力データを分割できます。

  • 次のデータ・ディクショナリ・ビューに問い合せると、既存の語彙データにアクセスできます。
    • ALL_VECTOR_VOCABには、使用可能なすべての語彙が表示されます。

    • USER_VECTOR_VOCABには、現在のユーザーのスキーマの語彙が表示されます。

    • ALL_VECTOR_VOCAB_TOKENSには、使用可能なすべての語彙のトークンのリストが表示されます。

    • USER_VECTOR_VOCAB_TOKENSには、現在のユーザーが所有する語彙のトークンのリストが表示されます。

構文

DBMS_VECTOR_CHAIN.CREATE_VOCABULARY(
    PARAMS      IN JSON default NULL
);

PARAMS

JSON形式で入力パラメータを指定します。
{
    table_name, 
    column_name, 
    vocabulary_name,
    format,
    cased
}

表217-4 パラメータ詳細

パラメータ 説明 必須 デフォルト値

table_name

語彙ファイルをロードする表の名前(およびオプションの表の所有者)

はい

値なし

column_name

語彙ファイルをロードする語彙テーブルの列名

はい

値なし

vocabulary_name

語彙のユーザー指定の名前とオプションの所有者名(現在の所有者以外の場合)

はい

値なし

format

  • SentencePieceトークン化の場合は、xlm

  • WordPieceトークン化の場合は、bert

  • BPEトークン化の場合は、gpt2

はい

値なし

cased

語彙の大文字と小文字の区別。つまり、語彙が大文字または小文字のいずれとして扱われるか

いいえ

false

DECLARE
  params clob := '{"table_name"       : "doc_vocabtab",
                   "column_name"      : "token",
                   "vocabulary_name"  : "doc_vocab",
                   "format"           : "bert",
                   "cased"            : false}';

BEGIN
  dbms_vector_chain.create_vocabulary(json(params));
END;
/

エンドツーエンドの例:

このプロシージャを使用してエンドツーエンドのシナリオ例を実行するには、「カスタム語彙の作成および使用」を参照してください。

DROP_CREDENTIAL

データ・ディクショナリから既存の資格証明名を削除するには、DBMS_VECTOR_CHAIN.DROP_CREDENTIAL資格証明ヘルパー・プロシージャを使用します。

構文

DBMS_VECTOR_CHAIN.DROP_CREDENTIAL (
    CREDENTIAL_NAME      IN VARCHAR2
);

CREDENTIAL_NAME

削除する資格証明の名前を指定します。

  • Generative AIの場合:
    exec dbms_vector_chain.drop_credential('OCI_CRED');
  • Cohereの場合:
    exec dbms_vector_chain.drop_credential('COHERE_CRED');

DROP_LANG_DATA

データ・ディクショナリから略語データを削除するには、DBMS_VECTOR_CHAIN.DROP_LANG_DATAチャンカ・ヘルパー・プロシージャを使用します。

構文

DBMS_VECTOR_CHAIN.DROP_LANG_DATA(
    PREF_NAME     IN VARCHAR2
);

LANG

特定の言語の削除する言語データの名前を指定します。

DBMS_VECTOR_CHAIN.DROP_LANG_DATA('indonesian');

DROP_PREFERENCE

DBMS_VECTOR_CHAIN.DROP_PREFERENCEプリファレンス・ヘルパー・プロシージャは、既存のベクタライザ・プリファレンスを削除するために使用します。

構文

DBMS_VECTOR_CHAIN.DROP_PREFERENCE (PREF_NAME);

PREF_NAME

削除するベクタライザ・プリファレンスの名前。

DBMS_VECTOR_CHAIN.DROP_PREFERENCE ('scott_vectorizer');

DROP_VOCABULARY

データ・ディクショナリから語彙データを削除するには、DBMS_VECTOR_CHAIN.DROP_VOCABULARYチャンカ・ヘルパー・プロシージャを使用します。

構文

DBMS_VECTOR_CHAIN.DROP_VOCABULARY(
    VOCABULARY_NAME    IN VARCHAR2   
);

VOCAB_NAME

削除する語彙の名前を次の形式で指定します:

vocabulary_name

または

owner.vocabulary_name

DBMS_VECTOR_CHAIN.DROP_VOCABULARY('MY_VOCAB_1');

RERANK

DBMS_VECTOR_CHAIN.RERANKファンクションは、より関連性の高い検索出力を取得するために、結果の初期セットを再評価および順序変更するために使用します。

用途

類似性検索と検索拡張生成(RAG)の両方のシナリオで検索結果の関連性と品質を向上させるため。

再ランク付けは、最も関連性の高いドキュメントまたはチャンクが優先されるようにすることで、LLMに取り込まれる情報の品質を向上させます。 これは、ハルシネーションの減少と、生成された出力の精度向上につながります。

この操作について、Oracle AI Vector Searchでは、CohereおよびVertex AIが提供する再ランク付けモデルをサポートしています。

警告:

データベースの特定の機能により、たとえばREST APIへのアクセスを容易にするJSON仕様を使用することで、サードパーティによって個別に提供されるサービスにアクセスできることもあります。

こうした機能の使用は、お客様自身の責任においてのみ行われ、お客様は当該のサードパーティ・サービスの使用に関連するあらゆる利用規約を遵守する責任を負います。 サードパーティ・サービスに関するその他の利用規約にかかわらず、こうしたデータベース機能を使用することは、お客様がそのリスクを受け入れ、そうしたアクセスにより生じた一切の損害についてOracleの責任または法的責任を明示的に排除することで成立します。

構文

DBMS_VECTOR_CHAIN.RERANK(
                QUERY      IN CLOB,
                DOCUMENTS  IN JSON,
                PARAMS     IN JSON default NULL
) return JSON;

この関数は、CLOBとしての問合せと、JSON形式でのドキュメントのリストを受け入れます。 その後、この情報を処理して、再ランク付けされスコアでソートされたドキュメントのリストが含まれているJSONオブジェクトを生成します。

たとえば、再ランク付けされた出力には次のものが含まれます:
{
    "index"   : "1",
    "score"   : "0.99",
    "content" : "Jupiter boasts an impressive system of 95 known moons."
}
内容は次のとおりです。
  • indexは、入力テキストのリスト内のドキュメントの位置を指定します。

  • scoreは、関連性スコアを指定します。

  • contentは、索引に対応する入力テキストを指定します。

QUERY

CLOBとして検索問合せ(通常は初期検索から)を指定します。

DOCUMENTS

次の形式で、文字列のJSON配列(再ランク付けする潜在的な関連ドキュメントのリスト)を指定します:

{
  "documents": [
  "string1",
  "string2",
    ...
  ]
}

PARAMS

次のパラメータのリストをJSON形式で指定します。 これらのパラメータはすべて必須です。

{
  "provider"         : "<service provider>",
  "credential_name"  : "<credential name>",  
  "url"              : "<REST endpoint URL for reranking>",
  "model"            : "<reranking model name>",
  ...
}

表217-5 RERANKパラメータ詳細

パラメータ 説明

provider

再ランク付けのためのアクセスがサポートされているRESTプロバイダ:

  • cohere

  • vertexai

credential_name

次の形式の資格証明の名前:

schema.credential_name

資格証明名には、REST APIコールを行うためのプロバイダにアクセスできるようにする認証資格証明が保持されます。

まず、資格証明を作成および格納するためにDBMS_VECTOR_CHAIN.CREATE_CREDENTIALヘルパー関数をコールすることで資格証明をセットアップしてから、ここで資格証明書の名前を参照する必要があります。

CREATE_CREDENTIALを参照してください。

url

サポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされている、各RESTコールのサードパーティ・プロバイダ・エンドポイントのURL。

model

次の形式での再ランク付けモデルの名前:

schema.model_name

モデル名がスキーマ修飾されていない場合は、プロシージャ実行者のスキーマが使用されます。

追加のRESTプロバイダのパラメータ:

オプションで、再ランク付けのためのプロバイダ固有の追加パラメータを指定します。

重要:

Cohereの例:
{
  "provider"        : "cohere", 
  "credential_name" : "COHERE_CRED",
  "url"             : "https://api.cohere.example.com/rerank",
  "model"           : "rerank-english-v3.0",
  "return_documents": false,
  "top_n"           : 3
}
Vertex AIの例:
{
  "provider"         : "vertexai",
  "credential_name"  : "VERTEXAI_CRED",
  "url"              : "https://googleapis.example.com/default_ranking_config:rank",
  "model"            : "semantic-ranker-512@latest",
  "ignoreRecordDetailsInResponse" : true,
  "topN"             : 3
  }

表217-6 追加のRESTプロバイダ・パラメータ詳細

パラメータ 説明

return_documents

元のドキュメントまたは入力テキストとともに検索結果を返すかどうか(content):

  • false (デフォルト、推奨): 入力テキストを返しません(索引とスコアのみを返します)

  • true: 索引およびスコアとともに入力テキストを返します

ノート: Cohereをプロバイダとして使用する場合は、パフォーマンスを向上させるために、このオプションを無効にしておくことをお薦めします。 デバッグの目的で元のテキストを表示する必要がある場合には、有効にすることもできます。

ignoreRecordDetailsInResponse

元のレコード詳細または入力テキストとともに検索結果を返すかどうか(content):

  • false (デフォルト): 索引およびスコアとともに入力テキストを返します

  • true (推奨): 入力テキストを返しません(索引とスコアのみを返します)

ノート: Vertex AIをプロバイダとして使用する場合は、パフォーマンスを向上させるために、このオプションを有効にしておくことをお薦めします。 デバッグの目的で元のテキストを表示する必要がある場合には、無効にすることもできます。

top_nまたはtopN

最も関連性の高いドキュメントを返す数。

  • Cohereの使用:

    declare
      params clob;
      reranked_output json;
    begin
      params := '
    {
      "provider": "cohere",
      "credential_name": "COHERE_CRED",
      "url": "https://api.cohere.com/v1/rerank",
      "model": "rerank-english-v3.0",
      "return_documents": true,
      "top_n": 3
    }';
    
      reranked_output := dbms_vector_chain.rerank(:query, json(:initial_retrieval_docs), json(params));
      dbms_output.put_line(json_serialize(reranked_output));
    end;
    /
  • Vertex AIの使用:

    declare
      params clob;
      reranked_output json;
    begin
      params := '
    {
      "provider": "vertexai",
      "credential_name": "VERTEXAI_CRED",
      "url": "https://discoveryengine.googleapis.com/v1/projects/1085581009881/locations/global/rankingConfigs/default_ranking_config:rank",
      "model": "semantic-ranker-512@latest",
      "ignoreRecordDetailsInResponse": false,
      "topN": 3
    }';
    
      reranked_output := dbms_vector_chain.rerank(:query, json(:initial_retrieval_docs), json(params));
      dbms_output.put_line(json_serialize(reranked_output));
    end;
    /

エンドツーエンドの例:

この関数を使用してエンドツーエンドのシナリオ例を実行する場合は、RAGの結果を改善するための再ランク付けの使用を参照してください。

UTL_TO_CHUNKS

大きいプレーン・テキスト・ドキュメントをテキストの小さなチャンクに分割するには、DBMS_VECTOR_CHAIN.UTL_TO_CHUNKSチェーン可能ユーティリティ関数を使用します。

用途

テキストからチャンクへの変換を実行します。 このチェーン可能ユーティリティ関数は、操作の際に内部的にVECTOR_CHUNKS SQLファンクションをコールします。

大きなドキュメントを埋め込むには、まず、チャンク化と呼ばれる分割プロセス(「データ変換のステージの理解」を参照)によって、そのドキュメントを複数の適切なサイズのセグメントまたはチャンクに分割する必要があります。 チャンクは、単語(特定の単語や単語の断片を取得)、文(特定の意味を取得)、段落(より広いテーマを取得)のいずれかになります。 単一のドキュメントを複数のチャンクに分割し、それぞれをベクトルに変換できます。

構文

DBMS_VECTOR_CHAIN.UTL_TO_CHUNKS (
    DATA         IN  CLOB | VARCHAR2,
    PARAMS       IN  JSON  default  NULL
) return VECTOR_ARRAY_T;

DATA

この関数は、入力データ型をCLOBまたはVARCHAR2として受け入れます。

CLOBの配列を返します。各CLOBには、次のように、JSON形式のメタデータとともにチャンクが含まれています。

{
    "chunk_id"     : NUMBER,
    "chunk_offset" : NUMBER,
    "chunk_length" : NUMBER, 
    "chunk_data"   : "VARCHAR2(4000)"
}
例:
{"chunk_id":1,"chunk_offset":1,"chunk_length":6,"chunk_data":"sample"}
内容は次のとおりです。
  • chunk_idは、各チャンクのチャンクIDを示します。

  • chunk_offsetは、ソース・ドキュメント内の各チャンクの元の位置を示します(ドキュメントの始まりの位置である1を基準とする)。

  • chunk_lengthは、各チャンクの文字長を示します。

  • chunk_dataは、各チャンクのテキストの部分を示します。

PARAMS

JSON形式で入力パラメータを指定します。

{
    "by"           :     mode,
    "max"          :     max,
    "overlap"      :     overlap,
    "split"        :     split_condition,
    "custom_list"  :     [ split_chars1, ... ],
    "vocabulary"   :     vocabulary_name,
    "language"     :     nls_language,
    "normalize"    :     normalize_mode,
    "norm_options" :     [ normalize_option1, ... ],
    "extended"     :     boolean
}

例:

JSON('
  { "by"           :    "vocabulary",
    "vocabulary"   :    "myvocab",
    "max"          :    "100",
    "overlap"      :    "0",
    "split"        :    "custom",
    "custom_list"  :    [ "<p>" , "<s>" ],
    "language"     :    "american",
    "normalize"    :    "options",
    "norm_options" :    [ "whitespace" ] 
  }')

これらのパラメータの詳細は、次のとおりです:

パラメータ 説明および許容される値

by

データを分割するモードを指定します。つまり、文字、単語または語彙トークンの数をカウントして分割します。

有効値:

  • characters (またはchars):

    文字数をカウントして分割します。

  • words:

    単語数をカウントして分割します。

    単語は、英字のシーケンス、数字のシーケンス、個々の句読点、または記号として定義されます。 空白の単語境界のないセグメント化された言語(中国語、日本語、タイ語など)では、各ネイティブ文字が単語とみなされます(つまり、ユニグラム)。

  • vocabulary:

    語彙トークンの数をカウントして分割します。

    語彙トークンは、埋込みモデルで使用されるトークナイザの語彙によって認識される単語または単語の断片です。 語彙ファイルは、チャンカ・ヘルパーAPIのDBMS_VECTOR_CHAIN.CREATE_VOCABULARYを使用してロードできます。

    ノート: 正確な結果を得るには、選択したモデルがチャンク化に使用される語彙ファイルと一致するようにしてください。 語彙ファイルを使用していない場合は、入力長がモデルのトークン制限内で定義されていることを確認してください。

デフォルト値: words

max

各チャンクの最大サイズの制限を指定します。 この設定では、大きいテキストで最大制限に達したときに、固定された位置で入力テキストが分割されます。 maxの単位は、byモードに対応しています。つまり、特定の数の文字、単語、数字、句読点または語彙トークンが最大サイズ制限に達したときにデータが分割されます。

有効値:

  • by characters: 50文字から4000文字

  • by words: 10単語から1000単語

  • by vocabulary: 10トークンから1000トークン

デフォルト値: 100

split [by]

最大サイズ制限に達したときに入力テキストを分割する位置を指定します。 これにより、チャンクに対して適切な境界を定義することで、関連するデータが一緒になるように維持できます。

有効値:

  • none:

    文字、単語または語彙トークンのmax制限で分割します。

  • newlineblanklineおよびspace:

    これらは、max値の前の最後の分割文字で分割される単一分割文字条件です。

    テキストの行の最後で分割するには、newlineを使用します。 空白行(2つの改行などの文字のシーケンス)の最後で分割するには、blanklineを使用します。 空白の最後で分割するには、spaceを使用します。

  • recursively:

    これは、文字(またはシーケンス)の順序付きリストを使用して入力テキストを分割する複数分割文字条件です。

    recursivelyは、次の順序でBLANKLINEnewlinespacenoneとして事前定義されています:

    1. 入力テキストがmax値より大きい場合は、最初の分割文字で分割されます。

    2. 失敗した場合は、2番目の分割文字で分割します。

    3. 同様に続けます。

    4. 分割文字が存在しない場合は、テキスト内のmaxの位置で分割します。

  • sentence:

    これは、文の境界で入力テキストを分割する文末分割条件です。

    この条件では、入力言語の文の句読点およびコンテキスト・ルールの知識を使用して、文の境界が自動的に判断されます。 この言語固有の条件は、主に文末(EOS)の句読点および一般的な略記法に依存しています。

    コンテキスト・ルールは単語情報に基づいているため、この条件はテキストを(文字ではなく)単語または語彙で分割する場合にのみ有効です。

    ノート: この条件は、by wordおよびmaxの設定に従っているため、場合によっては正確な文の境界を判断できないことがあります。 たとえば、文がmax値より大きい場合、文はmaxで分割されます。 同様に、maxの制限内に収まる場合にのみ、テキストに複数の文が含まれます。

  • custom:

    カスタム分割文字リストに基づいて分割します。 カスタム・シーケンスは、制限である16個の分割文字列まで指定でき、最大長はそれぞれ10文字です。

    custom_listパラメータを使用して、有効なテキスト・リテラルの配列を指定します。

    {
        "split"        :  "custom",
        "custom_list"  :  [ "split_chars1", ... ]
    }

    例:

    {
        "split"        :    "custom",
        "custom_list"  :    [ "<p>" , "<s>" ]
    }

    ノート: シーケンスは、タブ(\t)、改行(\n)および改行(\r)の場合にのみ省略できます。

デフォルト値: recursively

overlap

チャンクに含める必要がある先行するテキストの量(正の整数リテラルまたはゼロ)を指定します(存在する場合)。 これは、先行するチャンク・テキストの一部を含めて、関連するテキスト(文など)を論理的に分割するのに役立ちます。

重なりの量は、チャンクの最大サイズの測定方法(文字、単語または語彙トークン)によって異なります。 重なりは、指定されたsplit条件(newlineなど)から始まります。

有効な値: max5%から20%

デフォルト値: 0

language

入力データの言語を指定します。

この句は、別の言語では異なる解釈になる可能性がある特定の文字(句読点や略語など)がテキストに含まれている場合に特に重要です。

有効値:

ノート: エスケープ文字は、SQL予約語でもある言語の略語(たとえば、INASORISなどの言語の略語)とともに使用する必要があります。

例:

SELECT dbms_vector_chain.utl_to_chunks('this is an example', 
   JSON('{ "language" : "\"in\"" }')) 
from dual;
SELECT dbms_vector_chain.utl_to_chunks('this is an example', 
   JSON_OBJECT('language' value '"in"' RETURNING JSON)) 
from dual;

デフォルト値: セッションのNLS_LANGUAGE

normalize

ドキュメントがテキストに変換されるときに発生する可能性のある問題(連続する複数の空白やスマート・クォートなど)を自動的に前処理または後処理します。 高品質のチャンクを抽出するために、正規化モードを使用することをお薦めします。

有効値:

  • none:

    正規化を適用しません。

  • all:

    一般的なマルチバイト(Unicode)の句読点を標準のシングルバイトに正規化します。

  • options:

    norm_optionsパラメータを使用して、正規化オプションの配列を指定します。

    {
        "normalize"    :  "options",
        "norm_options" :  [ "normalize_option1", ... ]
    }
    • punctuation:

      そのテキストの文字セットでサポートされている引用符、ダッシュおよびその他の句読点文字を、共通のASCII形式に変換します。 例:

      • U+2013 (エンダッシュ)はU+002D (ハイフンマイナス)にマップされます

      • U+2018 (左一重引用符)はU+0027 (アポストロフィ)にマップされます

      • U+2019 (右一重引用符)はU+0027 (アポストロフィ)にマップされます

      • U+201B (単一の高逆9引用符)はU+0027 (アポストロフィ)にマップされます

    • whitespace:

      不要な文字を排除することで、空白を最小化します。

      たとえば、空白行は維持しますが、余分な改行、空白またはタブは削除します: " \n \n " => "\n\n"

    • widechar:

      ワイド文字とマルチバイト文字の数字および(a-z)をシングルバイトに正規化します。

      これらは、0-9およびa-z A-Zに相当するマルチバイト文字であり、中国語、日本語または韓国語のテキストで出現することがあります。

    例:

    {
        "normalize"    :  "options",
        "norm_options" :  [ "whitespace" ]
    }

デフォルト値: none

extended

max_string_sizeパラメータをextendedに設定することなく、VARCHAR2文字列の出力制限を32767バイトに増やします。

デフォルト値: 4000または32767 (max_string_size=extendedの場合)

SELECT D.id doc,
    JSON_VALUE(C.column_value, '$.chunk_id' RETURNING NUMBER) AS id,
    JSON_VALUE(C.column_value, '$.chunk_offset' RETURNING NUMBER) AS pos,
    JSON_VALUE(C.column_value, '$.chunk_length' RETURNING NUMBER) AS siz,
    JSON_VALUE(C.column_value, '$.chunk_data') AS txt
FROM docs D,
   dbms_vector_chain.utl_to_chunks(D.text,
   JSON('{ "by"       : "words",
           "max"      : "100",
           "overlap"  : "0",
           "split"    : "recursively",
           "language" : "american",
           "normalize": "all" }')) C;

エンドツーエンドの例:

この関数を使用してエンドツーエンドのサンプル・シナリオを実行する場合は、埋込みを使用したチャンク化の実行およびチャンク化パラメータの構成を参照してください。

関連トピック

UTL_TO_EMBEDDINGおよびUTL_TO_EMBEDDINGS

DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDINGおよびDBMS_VECTOR_CHAIN.UTL_TO_EMBEDDINGSチェーン可能ユーティリティ関数は、テキスト・ドキュメントおよびイメージから1つ以上のベクトル埋込みを生成するために使用します。

用途

テキスト・ドキュメントおよびイメージから1つ以上のベクトル埋込みを自動的に生成します。

  • テキストからベクトルへ:

    Oracle Databaseまたはサードパーティのサービス・プロバイダにアクセスすることで、テキストから埋込みへの変換を実行できます:

    • サービス・プロバイダとしてのOracle Database (デフォルト設定):

      このAPIは、データベースにロードするONNX形式の埋込みモデルをコールします。

    • サードパーティの埋込みモデル:

      このAPIは、選択したリモート・サービス・プロバイダ(Cohere、生成AI、Google AI、Hugging Face、OpenAIまたはVertex AI)またはローカル・サービス・プロバイダ(Ollama)に対してREST APIコールを実行します。

  • イメージからベクトルへ:

    イメージから埋込みへの変換も実行できます。 このAPIは、選択したイメージ埋込みモデルまたはVertex AIによるマルチモーダル埋込みモデルに対するRESTコールを実行します。 現在、この操作でサポートされているサービス・プロバイダはVertex AIのみであることに注意してください。

警告:

データベースの特定の機能により、たとえばREST APIへのアクセスを容易にするJSON仕様を使用することで、サードパーティによって個別に提供されるサービスにアクセスできることもあります。

こうした機能の使用は、お客様自身の責任においてのみ行われ、お客様は当該のサードパーティ・サービスの使用に関連するあらゆる利用規約を遵守する責任を負います。 サードパーティ・サービスに関するその他の利用規約にかかわらず、こうしたデータベース機能を使用することは、お客様がそのリスクを受け入れ、そうしたアクセスにより生じた一切の損害についてOracleの責任または法的責任を明示的に排除することで成立します。

構文

  • テキストからベクトルへ:

    DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING (
        DATA           IN CLOB,
        PARAMS         IN JSON default NULL
    ) return VECTOR;
    DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDINGS (
        DATA           IN VECTOR_ARRAY_T,
        PARAMS         IN JSON default NULL
    ) return VECTOR_ARRAY_T;
  • イメージからベクトルへ:

    DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDING (
        DATA           IN BLOB,
        MODALITY       IN VARCHAR2,
        PARAMS         IN JSON default NULL
    ) return VECTOR;

DATA

  • テキストからベクトルへ:

    UTL_TO_EMBEDDINGは、テキスト・データ(テキスト文字列または小さいドキュメント)を含むCLOBとして入力を受け入れます。 次に、テキストを1つの埋込み(VECTOR)に変換します。

    UTL_TO_EMBEDDINGSでは、チャンクの配列(VECTOR_ARRAY_T)が埋込みの配列(VECTOR_ARRAY_T)に変換されます。

    ノート:

    データはCLOBまたはCLOBVECTOR_ARRAY_Tですが、最大入力は4000文字です。 大きい入力がある場合は、UTL_TO_CHUNKSを使用して、渡す前にデータを小さいチャンクに分割できます。
  • イメージからベクトルへ:

    UTL_TO_EMBEDDINGは、イメージなどのメディア・ファイルのメディア・データを含むBLOBとして入力を受け入れます。 次に、イメージ入力を1つの埋込み(VECTOR)に変換します。

生成された埋込み出力には、次のものが含まれます:

{
    "embed_id"    : NUMBER,
    "embed_data"  : "VARCHAR2(4000)", 
    "embed_vector": "CLOB"
}
内容は次のとおりです。
  • embed_idは、各埋込みのID番号を示します。

  • embed_dataは、埋込みに変換される入力テキストを示します。

  • embed_vectorは、生成されたベクトル表現を示します。

MODALITY

BLOB入力の場合に、ベクトル化するコンテンツのタイプを指定します。 サポートされている値はimageのみです。

PARAMS

使用するサービス・プロバイダに応じて、入力パラメータをJSON形式で指定します。

プロバイダとしてOracle Databaseを使用する場合:
{
  "provider" : "database", 
  "model"    : "<in-database ONNX embedding model filename>" 
}

表217-7 データベース・プロバイダ・パラメータ詳細

パラメータ 説明

provider

Oracle Databaseをプロバイダとして使用する場合は、database (デフォルト設定)を指定します。 この設定では、ONNX形式の埋込みモデルをデータベースにロードする必要があります。

model

インポートしたONNX埋込みモデルがOracle Databaseに格納される際の、ユーザー指定の名前。

ONNX形式の埋込みモデルがない場合は、「事前トレーニング済モデルからONNX形式への変換」に示すステップを実行します。

サードパーティ・プロバイダを使用している場合:

プロバイダに固有の追加の埋込みパラメータとともに、次のパラメータも設定します:

  • UTL_TO_EMBEDDINGの場合:

    {
      "provider"        : "<AI service provider>", 
      "credential_name" : "<credential name>",
      "url"             : "<REST endpoint URL for embedding service>", 
      "model"           : "<REST provider embedding model name>",
      "transfer_timeout": <maximum wait time for the request to complete>,
      "max_count": "<maximum calls to the AI service provider>",
      "<additional REST provider parameter>": "<REST provider parameter value>" 
    }
  • UTL_TO_EMBEDDINGSの場合:

    {
      "provider"        : "<AI service provider>", 
      "credential_name" : "<credential name>",
      "url"             : "<REST endpoint URL for embedding service>", 
      "model"           : "<REST provider embedding model name>",
      "transfer_timeout": <maximum wait time for the request to complete>,
      "batch_size"      : "<number of vectors to request at a time>",
      "max_count": "<maximum calls to the AI service provider>",
      "<additional REST provider parameter>": "<REST provider parameter value>" 
    }

表217-8 サード・パーティ・プロバイダ・パラメータ詳細

パラメータ 説明

provider

この操作のためにアクセスするサードパーティ・サービス・プロバイダ。 埋込みモデルにアクセスするために、指定したプロバイダに対してRESTコールが行われます。

イメージ入力の場合は、vertexaiを指定します。

テキスト入力の場合は、次のいずれかの値を指定します:

  • cohere

  • googleai

  • huggingface

  • ocigenai

  • openai

  • vertexai

credential_name

次の形式の資格証明の名前:

schema.credential_name

資格証明名には、REST APIコールを行うためのプロバイダにアクセスできるようにする認証資格証明が保持されます。

まず、資格証明を作成および格納するためにDBMS_VECTOR_CHAIN.CREATE_CREDENTIALヘルパー関数をコールすることで資格証明をセットアップしてから、ここで資格証明書の名前を参照する必要があります。 CREATE_CREDENTIALを参照してください。

url

サポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされている、各RESTコールのサードパーティ・プロバイダ・エンドポイントのURL。

model

次の形式でのサードパーティ埋込みモデルの名前:

schema.model_name

スキーマを指定しない場合は、プロシージャ実行者のスキーマが使用されます。

ノート:
  • Generative AIの場合、サポートされているすべてのサードパーティ・モデルがサポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされています。

  • 正確な結果を得るには、選択したテキスト埋込みモデルがチャンク化に使用される語彙ファイルと一致するようにします。 語彙ファイルを使用していない場合は、入力長がモデルのトークン制限内で定義されていることを確認してください。

  • イメージ埋込みを取得するためには、Vertex AIでサポートされている任意のイメージ埋込みモデルまたはマルチモーダル埋込みモデルを使用できます。 マルチモーダル埋込みは、テキストやイメージなどの各種モダリティからデータをベクトル化する手法です。

    埋込みを生成するためにマルチモーダル埋込みモデルを使用する場合は、両方のタイプのコンテンツ(テキストとイメージ)のベクトル化に同じモデルを使用してしてください。 これにより、結果としての埋込みは互換可能になり、同じベクトル空間に配置されるため、類似性検索時には2つのモダリティ間の効果的な比較が可能になります。

transfer_timeout

リクエストを完了するまでの最長待機時間。

デフォルト値は60秒です。 ビジー状態のWebサーバーに対しては、この値を増やすことができます。

batch_size

一度にリクエストするベクトルの最大数。

たとえば、バッチ・サイズが50の場合、100個のチャンクが渡されると、このAPIは、それぞれが50個の文字列の配列で2つのリクエストを送信します。 30個チャンクが渡された場合(定義したバッチ・サイズより小さい場合)、APIはそれらを単一のリクエストで送信します。

RESTコールの場合、入力のバッチを一度に送信する方が1コールごとに1つの入力をリクエストするよりも効率的です。 バッチ・サイズを大きくするとパフォーマンスが向上しますが、特にプロバイダにレート制限がある場合は、バッチ・サイズを小さくすることでメモリーとデータの使用量を削減できることがあります。

デフォルト値や最大許容値は、サードパーティ・プロバイダの設定によって異なります。

max_count

特定のサードパーティ・プロバイダに対してAPIをコールできる最大回数。

整数nに設定すると、max_countによって、指定されたプロバイダのAPIの実行がn回を超えると停止します。 これにより、一定の制限を超えてサードパーティのコールが誤って実行されることを防ぎます。たとえば、購入したサービス量を超過しないようにします。

追加のサードパーティ・プロバイダのパラメータ:

オプションで、プロバイダ固有の追加パラメータを指定します。

表217-9 追加のRESTプロバイダ・パラメータ詳細

パラメータ 説明

input_type

ベクトル化する入力のタイプ。

すべてのサードパーティ・プロバイダの構成例を見てみましょう:

重要:

  • 次の例は、説明を目的としたものです。 使用するパラメータに関する正確な最新の情報については、サードパーティ・プロバイダのドキュメントを参照してください。

  • サポートされているすべてのRESTエンドポイントURLのリストは、サポートされているサードパーティ・プロバイダの操作およびエンドポイントを参照してください。

  • 生成される埋込み結果は、埋込みモデルや浮動小数点精度に応じて、同じ入力と構成のリクエスト間で異なることがあります。 ただし、ベクトル距離は類似するため、問合せには影響しません(また、意味的に正しい結果が得られます)。

Cohereの例:
{
  "provider"       : "cohere",
  "credential_name": "COHERE_CRED",
  "url"            : "https://api.cohere.example.com/embed",
  "model"          : "embed-english-light-v2.0",
  "input_type"     : "search_query"
}
Generative AIの例:
{
  "provider"       : "ocigenai",
  "credential_name": "OCI_CRED",
  "url"            : "https://generativeai.oci.example.com/embedText",
  "model"          : "cohere.embed-english-v3.0",
  "batch_size"     : 10
}
Google AIの例:
{
  "provider"       : "googleai",
  "credential_name": "GOOGLEAI_CRED",
  "url"            : "https://googleapis.example.com/models/",
  "model"          : "embedding-001"
}
Hugging Faceの例:
{
  "provider"       : "huggingface",
  "credential_name": "HF_CRED",
  "url"            : "https://api.huggingface.example.com/",
  "model"          : "sentence-transformers/all-MiniLM-L6-v2"
}
Ollamaの例:
{
  "provider"       : "ollama", 
  "host"           : "local", 
  "url"            : "http://localhost:11434/api/embeddings", 
  "model"          : "phi3:mini"
}
OpenAIの例:
{
  "provider"       : "openai",
  "credential_name": "OPENAI_CRED",
  "url"            : "https://api.openai.example.com/embeddings",
  "model"          : "text-embedding-3-small"
}
Vertex AIの例:
{
  "provider"       : "vertexai",
  "credential_name": "VERTEXAI_CRED",
  "url"            : "https://googleapis.example.com/models/",
  "model"          : "textembedding-gecko:predict"
}

次のように、SELECT句でUTL_TO_EMBEDDING、およびFROM句でUTL_TO_EMBEDDINGSを使用できます。

UTL_TO_EMBEDDING:

  • 生成AIを使用してテキストからベクトルへ:

    次の例では、UTL_TO_EMBEDDINGを使用して、Hello worldを入力として埋込みを生成します。

    ここでは、プロバイダに生成AIを指定してアクセスすることで、cohere.embed-english-v3.0モデルが使用されます。 model値は、サポートされているサードパーティ・プロバイダの操作およびエンドポイントに示されているように、Generative AIで使用する他のサポートされているモデルに置き換えることができます。

    -- declare embedding parameters
    
    var params clob;
    
    begin
     :params := '
    { 
      "provider": "ocigenai",
      "credential_name": "OCI_CRED", 
      "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText",
      "model": "cohere.embed-english-v3.0",
      "batch_size": 10
    }';
    end;
    /
    
    -- get text embedding: PL/SQL example
    
    declare
      input clob;
      v vector;
    begin
      input := 'Hello world';
    
      v := dbms_vector_chain.utl_to_embedding(input, json(params));
      dbms_output.put_line(vector_serialize(v));
    exception
      when OTHERS THEN
        DBMS_OUTPUT.PUT_LINE (SQLERRM);
        DBMS_OUTPUT.PUT_LINE (SQLCODE);
    end;
    /
    
    -- get text embedding: select example
    
    select dbms_vector_chain.utl_to_embedding('Hello world', json(:params)) from dual;
  • Vertex AIを使用してイメージからベクトルへ:

    次の例では、UTL_TO_EMBEDDINGを使用して、Vertex AIのマルチモーダル埋込みモデルにアクセスして埋込みを生成します。

    ここでは、入力はparrots.jpgVEC_DUMPparrots.jpgファイルを格納するローカル・ディレクトリで、モダリティはimageとして指定されます。

    -- declare embedding parameters
    
    var params clob;
    
    begin
      :params := '
    {
      "provider": "vertexai",
      "credential_name": "VERTEXAI_CRED",
      "url": "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/publishers/google/models/",
      "model": "multimodalembedding:predict"
    }';
    end;
    /
    
    -- get image embedding: PL/SQL example
    
    declare
      v vector;
      output clob;
    begin
      v := dbms_vector_chain.utl_to_embedding(
        to_blob(bfilename('VEC_DUMP', 'parrots.jpg')), 'image', json(:params));
      output := vector_serialize(v);
      dbms_output.put_line('vector data=' || dbms_lob.substr(output, 100) || '...');
    end;
    /
    
    -- get image embedding: select example
    
    select dbms_vector_chain.utl_to_embedding(
      to_blob(bfilename('VEC_DUMP', 'parrots.jpg')), 'image', json(:params));
  • データベース内埋込みモデルを使用してテキストからベクトルへ:

    次の例では、UTL_TO_EMBEDDINGを使用して、Oracle DatabaseにロードされたONNX形式の埋込みモデル(doc_model)をコールしてベクトル埋込みを生成します。

    ここでは、プロバイダはdatabaseで、入力はhelloです。

    var params clob; 
    exec :params := '{"provider":"database", "model":"doc_model"}';
    
    select dbms_vector_chain.utl_to_embedding('hello', json(:params)) from dual;

    詳細は、「Oracle Database内でのテキスト文字列から埋込みへの変換」を参照してください。

  • エンドツーエンドの例:

    UTL_TO_EMBEDDINGを使用して様々なエンドツーエンドのシナリオ例を実行するには、「埋込みの生成」を参照してください。

UTL_TO_EMBEDDINGS:

  • データベース内埋込みモデルを使用してテキストからベクトルへ:

    次の例では、UTL_TO_EMBEDDINGSを使用して、Oracle DatabaseにロードされたONNX形式の埋込みモデル(doc_model)をコールして埋込みの配列を生成します。

    ここでは、プロバイダはdatabaseで、入力はdocumentation_tab表に格納されているPDFドキュメントです。 このように、UTL_TO_EMBEDDINGSに渡す前に、まずUTL_TO_CHUNKSを使用してデータを小さいチャンクに分割します。

    CREATE TABLE doc_chunks as
    (select dt.id doc_id, et.embed_id, et.embed_data, to_vector(et.embed_vector) embed_vector
     from
       documentation_tab dt,
       dbms_vector_chain.utl_to_embeddings(
           dbms_vector_chain.utl_to_chunks(dbms_vector_chain.utl_to_text(dt.data), json('{"normalize":"all"}')),
           json('{"provider":"database", "model":"doc_model"}')) t,
       JSON_TABLE(t.column_value, '$[*]' COLUMNS (embed_id NUMBER PATH '$.embed_id', embed_data VARCHAR2(4000) PATH '$.embed_data', embed_vector CLOB PATH '$.embed_vector')) et
    );

    詳細は、「データベースにアップロードされたベクトル埋込みモデルの使用によるSQLクイック・スタート」を参照してください。

  • エンドツーエンドの例:

    UTL_TO_EMBEDDINGSを使用して様々なエンドツーエンドのシナリオ例を実行するには、「チャンク化と埋込みの実行」を参照してください。

UTL_TO_GENERATE_TEXT

DBMS_VECTOR_CHAIN.UTL_TO_GENERATE_TEXTチェーン可能ユーティリティ関数を使用して、サードパーティのテキスト生成モデルにアクセスすることで、所定のプロンプトまたはイメージに対するテキスト・レスポンスを生成します。

用途

自然言語による会話を通じて大規模言語モデル(LLM)と通信すること。 LLM搭載のチャット・インタフェースへの入力として与えられたプロンプトおよびイメージに対して、テキスト形式の回答、説明またはサマリーを生成できます。

  • プロンプトからテキストへ:

    プロンプトには、LLMに尋ねる質問などの入力テキスト文字列を指定できます。 たとえば、"What is Oracle Text?"などです。 プロンプトは、"Summarize the following ..."、"Draft an email asking for ..."または"Rewrite the following ..."などのコマンドでもあり、検索の結果を含めることができます。 LLMは、プロンプトに指定されたタスクに基づいて、テキスト形式の回答または説明で応答します。

    この操作では、このAPIによって、選択したリモート・サードパーティ・プロバイダ(Cohere、生成AI、Google AI、Hugging Face、OpenAIまたはVertex AI)またはローカル・サードパーティ・プロバイダ(Ollama)へのRESTコールが行われます。

  • イメージからテキストへ:

    イメージなどのメディア・ファイルでプロンプトして、画像や写真からテキストを抽出することもできます。 テキストの質問("What is this image about?"や"How many birds are there in this painting?"など)をプロンプトとして、イメージとともに指定します。 LLMは、イメージの内容についてのテキストによる分析または説明で応答します。

    この操作では、このAPIによって、選択したリモート・サードパーティ・プロバイダ(Google AI、Hugging Face、OpenAIまたはVertex AI)またはローカル・サードパーティ・プロバイダ(Ollama)へのRESTコールが実行されます。

警告:

データベースの特定の機能により、たとえばREST APIへのアクセスを容易にするJSON仕様を使用することで、サードパーティによって個別に提供されるサービスにアクセスできることもあります。

こうした機能の使用は、お客様自身の責任においてのみ行われ、お客様は当該のサードパーティ・サービスの使用に関連するあらゆる利用規約を遵守する責任を負います。 サードパーティ・サービスに関するその他の利用規約にかかわらず、こうしたデータベース機能を使用することは、お客様がそのリスクを受け入れ、そうしたアクセスにより生じた一切の損害についてOracleの責任または法的責任を明示的に排除することで成立します。

構文

このファンクションは、テキスト・データが含まれたCLOB (テキスト・プロンプトの場合)またはメディア・データが含まれたBLOB (イメージなどのメディア・ファイルの場合)として入力を受け入れます。 その後、この情報を処理して、生成されたテキストが含まれている新しいCLOBを生成します。

  • プロンプトからテキストへ:

    DBMS_VECTOR_CHAIN.UTL_TO_GENERATE_TEXT (
        	DATA          IN CLOB,
        	PARAMS        IN JSON default NULL
    ) return CLOB;
  • イメージからテキストへ:

    DBMS_VECTOR_CHAIN.UTL_TO_GENERATE_TEXT(
              TEXT_DATA      IN CLOB,
              MEDIA_DATA     IN BLOB,
              MEDIA_TYPE     IN VARCHAR2 default 'image/jpeg',
              PARAMS         IN JSON default NULL
    ) return CLOB;

DATAおよびTEXT_DATA

DATAまたはTEXT_DATA句のCLOBとして、テキスト形式のプロンプトを指定します。

ノート:

Hugging Faceは、入力としてイメージを与えるときに、プロンプトを必要としないイメージ・キャプション・モデルを使用します。 イメージとともにプロンプトを入力すると、プロンプトは無視されます。

MEDIA_DATA

イメージやビジュアルPDFファイルなどのBLOBファイルを指定します。

MEDIA_TYPE

サポートされているイメージ・データMIMEタイプのいずれかで、指定のイメージまたはビジュアルPDFファイル(BLOBファイル)のイメージ形式を指定します。 例:

  • PNGの場合: image/png

  • JPEGの場合: image/jpeg

  • PDFの場合: application/pdf

ノート:

サポートされているイメージ形式の完全なリストは、サードパーティ・プロバイダのドキュメントを参照してください。

PARAMS

テキスト生成のためにアクセスするサービス・プロバイダに応じて、次の入力パラメータをJSON形式で指定します:

{
  "provider"        : "<AI service provider>",
  "credential_name" : "<credential name>",  
  "url"             : "<REST endpoint URL for text generation service>",
  "model"           : "<text generation model name>",
  "transfer_timeout": <maximum wait time for the request to complete>,
  "max_count": "<maximum calls to the AI service provider>",
  "<additional REST provider parameter>": "<REST provider parameter value>"
}

表217-10 UTL_TO_GENERATE_TEXTパラメータの詳細

パラメータ 説明

provider

テキストを生成するためにアクセスするサポート対象のRESTプロバイダ。

次のいずれかの値を指定します。

CLOB入力の場合:

  • cohere

  • googleai

  • huggingface

  • ocigenai

  • openai

  • vertexai

BLOB入力の場合:

  • googleai

  • huggingface

  • openai

  • vertexai

credential_name

次の形式の資格証明の名前:

schema.credential_name

資格証明名には、REST APIコールを行うためのプロバイダにアクセスできるようにする認証資格証明が保持されます。

まず、資格証明を作成および格納するためにDBMS_VECTOR_CHAIN.CREATE_CREDENTIALヘルパー関数をコールすることで資格証明をセットアップしてから、ここで資格証明書の名前を参照する必要があります。 CREATE_CREDENTIALを参照してください。

url

サポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされている、各RESTコールのサードパーティ・プロバイダ・エンドポイントのURL。

model

次の形式でのサードパーティ・テキスト生成モデルの名前:

schema.model_name

モデル名がスキーマ修飾されていない場合は、プロシージャ実行者のスキーマが使用されます。

ノート: Generative AIの場合、サポートされているすべてのサードパーティ・モデルがサポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされています。

transfer_timeout

リクエストを完了するまでの最長待機時間。

デフォルト値は60秒です。 ビジー状態のWebサーバーに対しては、この値を増やすことができます。

max_count

特定のサードパーティ・プロバイダに対してAPIをコールできる最大回数。

整数nに設定すると、max_countによって、指定されたプロバイダのAPIの実行がn回を超えると停止します。 これにより、一定の制限を超えてサードパーティのコールが誤って実行されることを防ぎます。たとえば、購入したサービス量を超過しないようにします。

追加のサードパーティ・プロバイダのパラメータ:

オプションで、プロバイダ固有の追加パラメータを指定します。

表217-11 追加のRESTプロバイダ・パラメータ詳細

パラメータ 説明

max_tokens

出力テキスト内の最大トークン数。

temperature

出力テキストの生成時に使用されるランダム性の度合い(0.0-5.0の範囲)。

プロンプトに対して同じ出力を生成するには、0を使用します。 そのプロンプトに対してランダムな新しいテキストを生成するには、temperatureを大きくします。

ノート: 最初は温度を0に設定します。 ランダムな結果が必要ない場合、推奨される温度値は0から1の間です。 高温では創造的なテキストが生成される可能性があり、ハルシネーションも含まれることがあるため、高い値は推奨されません。

topP

出力内のトークンの確率(0.0-1.0の範囲)。

小さな値ほどランダム応答が少なくなり、大きな値ほどランダム応答が多くなります。

candidateCount

応答のバリエーション数(1-4の範囲)。

maxOutputTokens

応答ごとに生成するトークンの最大数。

すべてのサードパーティ・プロバイダの構成例を見てみましょう:

重要:

Cohereの例:
{
  "provider"       : "cohere", 
  "credential_name": "COHERE_CRED",
  "url"            : "https://api.cohere.example.com/chat",
  "model"          : "command"
}

Generative AIの例:

ノート:

Generative AIの場合で追加のRESTプロバイダ固有のパラメータを渡す場合は、chatRequestにこれらを含める必要があります。
{
  "provider"       : "ocigenai",
  "credential_name": "OCI_CRED",
  "url"            : "https://inference.generativeai.us-example.com/chat",
  "model"          : "cohere.command-r-16k",
  "chatRequest"    : {
                      "maxTokens"    : 256
                     }
}
Google AIの例:
{
  "provider"        : "googleai",
  "credential_name" : "GOOGLEAI_CRED",
  "url"             : "https://googleapis.example.com/models/",
  "model"           : "gemini-pro:generateContent"
}
Hugging Faceの例:
{
  "provider"        : "huggingface",
  "credential_name" : "HF_CRED",
  "url"             : "https://api.huggingface.example.com/models/",
  "model"           : "gpt2"
}
Ollamaの例:
{
  "provider"       : "ollama", 
  "host"           : "local", 
  "url"            : "http://localhost:11434/api/generate", 
  "model"          : "phi3:mini"
}
OpenAIの例:
{
  "provider"        : "openai",
  "credential_name" : "OPENAI_CRED",
  "url"             : "https://api.openai.example.com",
  "model"           : "gpt-4o-mini",
  "max_tokens"      : 60,
  "temperature"     : 1.0
}
Vertex AIの例:
{
  "provider"         : "vertexai",
  "credential_name"  : "VERTEXAI_CRED",
  "url"              : "https://googleapis.example.com/models/",
  "model"            : "gemini-1.0-pro:generateContent",
  "generation_config": {
                        "temperature"    : 0.9,
                        "topP"           : 1,
                        "candidateCount" : 1,
                        "maxOutputTokens": 256
                       }
}

  • プロンプトからテキストへ:

    次の文は、Generative AIへのRESTコールによってテキスト・レスポンスを生成します。 ここに示されるプロンプトは"What is Oracle Text?"です。

    ここでは、cohere.command-r-16kおよびmeta.llama-3.1-70b-instructモデルが使用されます。 model値は、サポートされているサードパーティ・プロバイダの操作およびエンドポイントに示されているように、Generative AIで使用する他のサポートされているモデルに置き換えることができます。

    cohere.command-r-16kモデルの使用:

    -- select example
    
    var params clob;
    exec :params := '
    {
      "provider"       : "ocigenai",
      "credential_name": "OCI_CRED",
      "url"            : "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/chat",
      "model"          : "cohere.command-r-16k",
      "chatRequest"    : {
                          "maxTokens": 256
                         }
    }';
    
    select dbms_vector_chain.utl_to_generate_text(
     'What is Oracle Text?',
     json(:params)) from dual;
    
    -- PL/SQL example
    
    declare
      input clob;
      params clob;
      output clob;
    begin
      input := 'What is Oracle Text?';
    
      params := '
    {
      "provider"       : "ocigenai",
      "credential_name": "OCI_CRED",
      "url"            : "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/chat",
      "model"          : "cohere.command-r-16k",
      "chatRequest"    : {
                          "maxTokens": 256
                         }
    }';
    
      output := dbms_vector_chain.utl_to_generate_text(input, json(params));
      dbms_output.put_line(output);
      if output is not null then
        dbms_lob.freetemporary(output);
      end if;
    exception
      when OTHERS THEN
        DBMS_OUTPUT.PUT_LINE (SQLERRM);
        DBMS_OUTPUT.PUT_LINE (SQLCODE);
    end;
    /

    meta.llama-3.1-70b-instructモデルの使用:

    -- select example
    
    var params clob;
    exec :params := '
    {
       "provider"       : "ocigenai",
       "credential_name": "OCI_CRED",
       "url"            : "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/chat",
       "model"          : "meta.llama-3.1-70b-instruct",
       "chatRequest"    : {
                           "topK" : 1
                          }
    }';
    
    select dbms_vector_chain.utl_to_generate_text(
     'What is Oracle Text?',
     json(:params)) from dual;
    
    -- PL/SQL example
    
    declare
      input clob;
      params clob;
      output clob;
    begin
      input := 'What is Oracle Text?';
    
      params := '
    {
       "provider"       : "ocigenai",
       "credential_name": "OCI_CRED",
       "url"            : "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/chat",
       "model"          : "meta.llama-3.1-70b-instruct",
       "chatRequest"    : {
                           "topK" : 1
                          }
    }';
    
      output := dbms_vector_chain.utl_to_generate_text(input, json(params));
      dbms_output.put_line(output);
      if output is not null then
        dbms_lob.freetemporary(output);
      end if;
    exception
      when OTHERS THEN
        DBMS_OUTPUT.PUT_LINE (SQLERRM);
        DBMS_OUTPUT.PUT_LINE (SQLCODE);
    end;
    /

    エンドツーエンドの例:

    エンドツーエンドのサンプル・シナリオを実行する場合は、テキスト・レスポンスの生成を参照してください。

  • イメージからテキストへ:

    次の文は、OpenAIへのRESTコールによってテキスト・レスポンスを生成します。 ここでの入力は、イメージ(sample_image.jpeg)とプロンプト"Describe this image?"です。

    -- select example
    
    var input clob;
    var media_data blob;
    var media_type clob;
    var params clob;
    
    begin
      :input := 'Describe this image';
      :media_data := load_blob_from_file('DEMO_DIR', 'sample_image.jpeg');
      :media_type := 'image/jpeg';
      :params := '
    {
      "provider"       : "openai",
      "credential_name": "OPENAI_CRED",
      "url"            : "https://api.openai.com/v1/chat/completions",
      "model"          : "gpt-4o-mini",
      "max_tokens"     : 60
    }';
    end;
    /
    
    select dbms_vector_chain.utl_to_generate_text(:input, :media_data, :media_type, json(:params));
    
    -- PL/SQL example
    
    declare
      input clob;
      media_data blob;
      media_type varchar2(32);
      params clob;
      output clob;
    
    begin
      input := 'Describe this image';
      media_data := load_blob_from_file('DEMO_DIR', 'image_file');
      media_type := 'image/jpeg';
      params := '
    {
      "provider"       : "openai",
      "credential_name": "OPENAI_CRED",
      "url"            : "https://api.openai.com/v1/chat/completions",
      "model"          : "gpt-4o-mini",
      "max_tokens"     : 60
    }';
    
      output := dbms_vector_chain.utl_to_generate_text(
        input, media_data, media_type, json(params));
      dbms_output.put_line(output);
    
      if output is not null then
        dbms_lob.freetemporary(output);
      end if;
      if media_data is not null then
        dbms_lob.freetemporary(media_data);
      end if;
    exception
      when OTHERS THEN
        DBMS_OUTPUT.PUT_LINE (SQLERRM);
        DBMS_OUTPUT.PUT_LINE (SQLCODE);
    end;
    /

    エンドツーエンドの例:

    エンドツーエンドのサンプル・シナリオを実行する場合は、イメージ・コンテンツの説明を参照してください。

UTL_TO_TEXT

入力ドキュメント(PDF、DOC、JSON、XML、HTMLなど)をプレーン・テキストに変換するには、DBMS_VECTOR_CHAIN.UTL_TO_TEXTチェーン可能ユーティリティ関数を使用します。

用途

Oracle DatabaseのOracle Textコンポーネント(CONTEXT)を使用して、ファイルからテキストへの変換を実行します。

構文

DBMS_VECTOR_CHAIN.UTL_TO_TEXT (
    DATA          IN CLOB | BLOB,
    PARAMS        IN JSON default NULL
) return CLOB;

DATA

この関数は、入力データ型をCLOBまたはBLOBとして受け入れます。 リモートの場所またはデータベース表にローカルに格納されているファイルからドキュメントを読み取ることができます。

ドキュメントのプレーン・テキスト・バージョンをCLOBとして返します。

Oracle Textでは、約150種類のファイル・タイプがサポートされています。 サポートされているすべてのドキュメント形式の完全なリストは、『Oracle Textリファレンス』を参照してください。

PARAMS

次の入力パラメータをJSON形式で指定します。

{ 
    "plaintext" : "true or false",
    "charset"   : "UTF8" 
}

表217-12 パラメータ詳細

パラメータ 説明

plaintext

プレーン・テキスト出力。

このパラメータのデフォルト値はtrueです。そのため、デフォルトの出力形式はプレーン・テキストになります。

ドキュメントがプレーン・テキストとして返されないようにする場合は、このパラメータをfalseに設定します。

charset

文字セット・エンコーディング。

現在はUTF8のみがサポートされています。

select DBMS_VECTOR_CHAIN.UTL_TO_TEXT (
    t.blobdata, 
     json('{
            "plaintext": "true",
            "charset"  : "UTF8" 
           }')
) from tab t;

エンドツーエンドの例:

このファンクションを使用してエンドツーエンドのサンプル・シナリオを実行する場合は、Oracle Database内でのファイルからテキスト、チャンク、埋込みへの変換を参照してください。

UTL_TO_SUMMARY

DBMS_VECTOR_CHAIN.UTL_TO_SUMMARYチェーン可能ユーティリティ関数は、テキスト・ドキュメントのサマリーを生成するために使用します。

サマリーは、ドキュメント全体の内容を最もよく表す、ドキュメントの主な特徴を含む短くて簡潔な抽出です。 サマリーは、指定した形式に基づいて自由形式の段落または箇条書きにすることができます。

用途

Oracle Databaseまたはサードパーティのサービス・プロバイダにアクセスして、テキストからサマリーへの変換を実行するには:
  • サービス・プロバイダとしてのOracle Database (デフォルト設定):

    社内実装とOracle Databaseを使用します。Oracle Text PL/SQLプロシージャCTX_DOC.GISTを使用してドキュメントからサマリー(要旨)を抽出するために、Oracle Textが内部的に使用されます。

  • サードパーティ要約モデル:

    選択したリモート・サービス・プロバイダ(Cohere、生成AI、Google AI、Hugging Face、OpenAIまたはVertex AI)またはローカル・サービス・プロバイダ(Ollama)に対してREST APIコールを実行します。

ノート:

現在、Generative AIでサポートされているモデルおよびサマリー・エンドポイントが廃止されたため、UTL_TO_SUMMARYはGenerative AIでは機能しません。 以降のリリースで使用可能になる予定です。

警告:

データベースの特定の機能により、たとえばREST APIへのアクセスを容易にするJSON仕様を使用することで、サードパーティによって個別に提供されるサービスにアクセスできることもあります。

こうした機能の使用は、お客様自身の責任においてのみ行われ、お客様は当該のサードパーティ・サービスの使用に関連するあらゆる利用規約を遵守する責任を負います。 サードパーティ・サービスに関するその他の利用規約にかかわらず、こうしたデータベース機能を使用することは、お客様がそのリスクを受け入れ、そうしたアクセスにより生じた一切の損害についてOracleの責任または法的責任を明示的に排除することで成立します。

構文

DBMS_VECTOR_CHAIN.UTL_TO_SUMMARY (
    DATA          IN CLOB,
    PARAMS        IN JSON default NULL
) return CLOB;

DATA

この関数は入力データ型をプレーン・テキストで、CLOBとして受け入れます。

入力ドキュメントの要約もCLOBとして返します。

PARAMS

ドキュメントの要約に使用するサービス・プロバイダに応じて、サマリー・パラメータをJSON形式で指定します。

プロバイダとしてOracle Databaseを使用する場合:
{
  "provider"     : "database",
  "glevel"       : "<summary format>",
  "numParagraphs": <number in the range 1-16>,
  "maxPercent"   : <number in the range 1-100>,
  "num_themes"   : <number in the range 1-50>,
  "language"     : "<name of the language>"
}

表217-13 データベース・プロバイダ・パラメータ詳細

パラメータ 説明

provider

プロバイダとしてOracle Databaseにアクセスする場合は、databaseを指定します(デフォルト設定)。 ドキュメントgistまたはOracle Textで生成された要約を利用します。

glevel

要約を表示するフォーマット:

  • SENTENCE | S: 文のリストとして

  • PARAGRAPH | P: 自由形式の段落

numParagraphs

要約のために選択されたドキュメントの段落(または文)の最大数。 デフォルト値は16です。

numParagraphsパラメータは、このパラメータによって生成される要約のサイズが、maxPercentパラメータによって生成される要約のサイズよりも小さくなる場合にのみ使用されます。これは、この関数が常に最小サイズの要約を返すためです。

maxPercent

要約のために選択されたドキュメントの段落(または文)の最大数であり、ドキュメントの段落(または文)の合計に対する割合です。 デフォルト値は10です。

maxPercentパラメータは、このパラメータによって生成される要約のサイズが、numParagraphsパラメータによって生成される要約のサイズよりも小さくなる場合にのみ使用されます。これは、この関数が常に最小サイズの要約を返すためです。

num_themes

生成するテーマ要約の数。 たとえば、10を指定すると、この関数は上位10のテーマ要約を戻します。 0またはNULLを指定すると、この関数はドキュメント内のすべてのテーマを戻します。

デフォルト値は50です。 51以上のテーマがドキュメントに格納されている場合、概念階層が表示されるのは、トップ50のテーマのみです。

language

サポートされる言語とデータ・ファイルの場所にリストされている要約テキストの言語名。

例:
{
  "provider"          : "database",
  "glevel"            : "sentence",
  "numParagraphs"     : 1
}

サードパーティ・プロバイダを使用している場合:

プロバイダに固有の追加の要約パラメータとともに、次のパラメータも設定します:
{
  "provider"          : "<AI service provider>", 
  "credential_name"   : "<credential name>",
  "url"               : "<REST endpoint URL for summarization service>", 
  "model"             : "<REST provider summarization model name>",
  "transfer_timeout"  : <maximum wait time for the request to complete>,
  "max_count": "<maximum calls to the AI service provider>",
  "<additional REST provider parameter>": "<REST provider parameter value>"
}

表217-14 サード・パーティ・プロバイダ・パラメータ詳細

パラメータ 説明

provider

要約を取得するためにアクセスするサードパーティ・サービス・プロバイダ。 テキスト要約モデルにアクセスするために、指定したプロバイダに対してRESTコールが実行されます。

次のいずれかの値を指定します。

  • cohere

  • googleai

  • huggingface

  • ocigenai

  • openai

  • vertexai

credential_name

次の形式の資格証明の名前:

schema.credential_name

資格証明名には、REST APIコールを行うためのプロバイダにアクセスできるようにする認証資格証明が保持されます。

まず、資格証明を作成および格納するためにDBMS_VECTOR_CHAIN.CREATE_CREDENTIALヘルパー関数をコールすることで資格証明をセットアップしてから、ここで資格証明書の名前を参照する必要があります。 CREATE_CREDENTIALを参照してください。

url

サポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされている、各RESTコールのサードパーティ・プロバイダ・エンドポイントのURL。

model

次の形式でのサードパーティ・テキスト要約モデルの名前:

schema.model_name

モデル名がスキーマ修飾されていない場合は、プロシージャ実行者のスキーマが使用されます。

ノート: Generative AIの場合は、schema.model_nameを指定する必要があります。 Generative AIでサポートされているすべてのサードパーティ・モデルは、サポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされています。

transfer_timeout

リクエストを完了するまでの最長待機時間。

デフォルト値は60秒です。 ビジー状態のWebサーバーに対しては、この値を増やすことができます。

max_count

特定のサードパーティ・プロバイダに対してAPIをコールできる最大回数。

整数nに設定すると、max_countによって、指定されたプロバイダのAPIの実行がn回を超えると停止します。 これにより、一定の制限を超えてサードパーティのコールが誤って実行されることを防ぎます。たとえば、購入したサービス量を超過しないようにします。

追加のサードパーティ・プロバイダのパラメータ:

オプションで、プロバイダ固有の追加パラメータを指定します。

表217-15 追加のRESTプロバイダ・パラメータ詳細

パラメータ 説明

length

要約テキストの概算の長さ:

  • SHORT: およそ2文まで

  • MEDIUM: 3文から5文の間

  • LONG: 6文以上の文

  • AUTO: モデルによって入力サイズに基づいた長さが選択されます

ノート: Generative AIの場合は、この値を大文字で入力する必要があります。

format

要約を表示するフォーマット:

  • PARAGRAPH: 自由形式の段落

  • BULLETS: 箇条書き

ノート: Generative AIの場合は、この値を大文字で入力する必要があります。

temperature

出力テキストの生成時に使用されるランダム性の度合い(0.0-5.0の範囲)。

プロンプトに対して同じ出力を生成するには、0を使用します。 そのプロンプトに対してランダムな新しいテキストを生成するには、temperatureを大きくします。

デフォルトのtemperatureは1で、最大のtemperatureは5です。

ノート: テキストを要約するには、まず温度を0に設定します。 ランダムな結果が必要ない場合に推奨される温度値は、Generative AIの場合は0.2、Cohereの場合は01の間です。 たとえば、この後に様々な要約を選択する予定がある場合は、より高い値を使用します。 要約に高い温度を使用しないでください。高い温度を使用すると、モデルでハルシネーションが含まれている可能性もある創造的なテキストの生成が促進されるためです。

extractiveness

要約内の入力をどの程度再利用するか:

  • LOW: 抽出性の低い要約は言い換えする傾向があります。

  • HIGH: 抽出性の高い要約は、文をそのまま再利用する傾向があります。

ノート: Generative AIの場合は、この値を大文字で入力する必要があります。

max_tokens

出力テキスト内の最大トークン数。

topP

出力内のトークンの確率(0.0-1.0の範囲)。

小さな値ほどランダム応答が少なくなり、大きな値ほどランダム応答が多くなります。

candidateCount

応答のバリエーション数(1-4の範囲)。

maxOutputTokens

応答ごとに生成するトークンの最大数。

ノート:

Generative AIに対してlengthformatおよびextractivenessパラメータを指定する場合は、必ず値を大文字で入力してください。

すべてのサードパーティ・プロバイダの構成例を見てみましょう:

重要:

Cohereの例:
{
  "provider"          : "cohere",
  "credential_name"   : "COHERE_CRED",
  "url"               : "https://api.cohere.example.com/summarize",
  "model"             : "command",
  "length"            : "medium",
  "format"            : "paragraph",
  "temperature"       : 1.0
}
Generative AIの例:
{
 "provider"           : "ocigenai",
 "credential_name"    : "OCI_CRED",
 "url"                : "https://generativeai.oci.example.com/summarizeText",
 "model"              : "cohere.command-r-16k",
 "length"             : "MEDIUM",
 "format"             : "PARAGRAPH"
}
Google AIの例:
{
  "provider"          : "googleai",
  "credential_name"   : "GOOGLEAI_CRED",
  "url"               : "https://googleapis.example.com/models/",
  "model"             : "gemini-pro:generateContent",
  "generation_config" : {
    "temperature"     : 0.9,
    "topP"            : 1,
    "candidateCount"  : 1,
    "maxOutputTokens" : 256
  }
}
Hugging Faceの例:
{
  "provider"          : "huggingface",
  "credential_name"   : "HF_CRED",
  "url"               : "https://api.huggingface.example.co/models/",
  "model"             : "facebook/bart-large-cnn"
}
Ollamaの例:
{
  "provider"          : "ollama", 
  "host"              : "local", 
  "url"               : "http://localhost:11434/api/generate", 
  "model"             : "phi3:mini"
}
OpenAIの例:
{
  "provider"          : "openai",
  "credential_name"   : "OPENAI_CRED",
  "url"               : "https://api.openai.example.com",
  "model"             : "gpt-4o-mini",
  "max_tokens"        : 256,
  "temperature"       : 1.0
}
Vertex AIの例:
{
  "provider"          : "vertexai",
  "credential_name"   : "VERTEXAI_CRED",
  "url"               : "https://googleapis.example.com/models/",
  "model"             : "gemini-1.0-pro:generateContent",
  "generation_config" : {
    "temperature"     : 0.9,
    "topP"            : 1,
    "candidateCount"  : 1,
    "maxOutputTokens" : 256
  }
}

  • Oracle Databaseを使用したサマリーの生成:

    この文では、プロバイダとしてdatabaseを指定します。 ここでは、Oracle Text PL/SQLプロシージャCTX_DOC.GISTが内部的にコールされ、「トランザクション」に関する抽出のサマリーが生成されます。

    -- select example
    
    set serveroutput on
    
    var params clob;
    begin
      :params := '
    {
      "provider": "database",
      "glevel": "sentence",
      "numParagraphs": 1
    }';
    end;
    /
    
    select dbms_vector_chain.utl_to_summary(
     'A transaction is a logical, atomic unit of work that contains one or more SQL statements.  An RDBMS must be able to group SQL statements so that they are either all committed, which means they are applied to the database, or all rolled back, which means they are undone.  An illustration of the need for transactions is a funds transfer from a savings account to a checking account. The transfer consists of the following separate operations:
        1. Decrease the savings account.
        2. Increase the checking account.
        3. Record the transaction in the transaction journal.
        Oracle Database guarantees that all three operations succeed or fail as a unit. For example, if a hardware failure prevents a statement in the transaction from executing, then the other statements must be rolled back.
        Transactions set Oracle Database apart from a file system. If you perform an atomic operation that updates several files, and if the system fails halfway through, then the files will not be consistent. In contrast, a transaction moves an Oracle database from one consistent state to another. The basic principle of a transaction is "all or nothing": an atomic operation succeeds or fails as a whole.',
     json(:params)) from dual;
    
    -- PL/SQL example
    
    declare
      input clob;
      params clob;
      output clob;
    begin
      input := 'A transaction is a logical, atomic unit of work that contains one or more SQL statements.  An RDBMS must be able to group SQL statements so that they are either all committed, which means they are applied to the database, or all rolled back, which means they are undone.  An illustration of the need for transactions is a funds transfer from a savings account to a checking account. The transfer consists of the following separate operations:
        1. Decrease the savings account.
        2. Increase the checking account.
        3. Record the transaction in the transaction journal.
        Oracle Database guarantees that all three operations succeed or fail as a unit. For example, if a hardware failure prevents a statement in the transaction from executing, then the other statements must be rolled back.
        Transactions set Oracle Database apart from a file system. If you perform an atomic operation that updates several files, and if the system fails halfway through, then the files will not be consistent. In contrast, a transaction moves an Oracle database from one consistent state to another. The basic principle of a transaction is "all or nothing": an atomic operation succeeds or fails as a whole.';
    
      params := '
      {
       "provider": "database",
       "glevel": "sentence",
       "numParagraphs": 1
      }';
    
      output := dbms_vector_chain.utl_to_summary(input, json(params));
      dbms_output.put_line(output);
      if output is not null then
        dbms_lob.freetemporary(output);
      end if;
    exception
      when OTHERS THEN
        DBMS_OUTPUT.PUT_LINE (SQLERRM);
        DBMS_OUTPUT.PUT_LINE (SQLCODE);
    end;
    /
  • Generative AIを使用したサマリーの生成:

    これらの文は、プロバイダに生成AIを指定してアクセスすることで、「トランザクション」に関する抽出のサマリーを生成します。

    ここでは、cohere.command-r-16kモデルが集計操作に使用されます。 model値は、サポートされているサードパーティ・プロバイダの操作およびエンドポイントに示されているように、Generative AIで使用する他のサポートされているモデルに置き換えることができます。

    -- select example
    
    var params clob;
    begin
      :params := '
    {  
     "provider": "ocigenai", 
     "credential_name": "OCI_CRED", 
     "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/chat", 
     "model": "cohere.command-r-16k",
     "temperature": "0.0",
     "extractiveness": "LOW"
    }';
    end;
    /
    
    select dbms_vector_chain.utl_to_summary(
     'A transaction is a logical, atomic unit of work that contains one or more SQL statements.  An RDBMS must be able to group SQL statements so that they are either all committed, which means they are applied to the database, or all rolled back, which means they are undone.  An illustration of the need for transactions is a funds transfer from a savings account to a checking account. The transfer consists of the following separate operations:
        1. Decrease the savings account.
        2. Increase the checking account.
        3. Record the transaction in the transaction journal.
        Oracle Database guarantees that all three operations succeed or fail as a unit. For example, if a hardware failure prevents a statement in the transaction from executing, then the other statements must be rolled back.
        Transactions set Oracle Database apart from a file system. If you perform an atomic operation that updates several files, and if the system fails halfway through, then the files will not be consistent. In contrast, a transaction moves an Oracle database from one consistent state to another. The basic principle of a transaction is "all or nothing": an atomic operation succeeds or fails as a whole.',
     json(:params)) from dual;
    
    -- PL/SQL example
    
    declare
      input clob;
      params clob;
      output clob;
    begin
      input := 'A transaction is a logical, atomic unit of work that contains one or more SQL statements.  An RDBMS must be able to group SQL statements so that they are either all committed, which means they are applied to the database, or all rolled back, which means they are undone.  An illustration of the need for transactions is a funds transfer from a savings account to a checking account. The transfer consists of the following separate operations:
        1. Decrease the savings account.
        2. Increase the checking account.
        3. Record the transaction in the transaction journal.
        Oracle Database guarantees that all three operations succeed or fail as a unit. For example, if a hardware failure prevents a statement in the transaction from executing, then the other statements must be rolled back.
        Transactions set Oracle Database apart from a file system. If you perform an atomic operation that updates several files, and if the system fails halfway through, then the files will not be consistent. In contrast, a transaction moves an Oracle database from one consistent state to another. The basic principle of a transaction is "all or nothing": an atomic operation succeeds or fails as a whole.';
    
      params := '
      {
       "provider": "ocigenai",
       "credential_name": "OCI_CRED",
       "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/chat",
       "model": "cohere.command-r-16k",
       "length": "MEDIUM",
       "format": "PARAGRAPH",
       "temperature": 1.0
      }';
    
      output := dbms_vector_chain.utl_to_summary(input, json(params));
      dbms_output.put_line(output);
      if output is not null then
        dbms_lob.freetemporary(output);
      end if;
    exception
      when OTHERS THEN
        DBMS_OUTPUT.PUT_LINE (SQLERRM);
        DBMS_OUTPUT.PUT_LINE (SQLCODE);
    end;
    /
  • エンドツーエンドの例:

    このファンクションを使用してエンドツーエンドのサンプル・シナリオを実行する場合は、サマリーの生成を参照してください。

サポートされている言語およびデータ・ファイルの場所

指定したディレクトリに言語データ・ファイルがデフォルトで配布される、サポートされている言語は次のとおりです。

言語名 略称 データ・ファイル

AFRIKAANS

af

ctx/data/eos/dreosaf.txt

AMERICAN

us

ctx/data/eos/dreosus.txt

ARABIC

ar

ctx/data/eos/dreosar.txt

BASQUE

eu

ctx/data/eos/dreoseu.txt

BELARUSIAN

be

ctx/data/eos/dreosbe.txt

BRAZILIAN PORTUGUESE

ptb

ctx/data/eos/dreosptb.txt

BULGARIAN

bg

ctx/data/eos/dreosbg.txt

CANADIAN FRENCH

frc

ctx/data/eos/dreosfrc.txt

CATALAN

ca

ctx/data/eos/dreosca.txt

CROATIAN

hr

ctx/data/eos/dreoshr.txt

CYRILLIC SERBIAN

csr

ctx/data/eos/dreoscsr.txt

CZECH

cs

ctx/data/eos/dreoscs.txt

DANISH

dk

ctx/data/eos/dreosdk.txt

DARI

prs

ctx/data/eos/dreosprs.txt

DUTCH

nl

ctx/data/eos/dreosnl.txt

EGYPTIAN

eg

ctx/data/eos/dreoseg.txt

ENGLISH

gb

ctx/data/eos/dreosgb.txt

ESTONIAN

et

ctx/data/eos/dreoset.txt

FINNISH

sf

ctx/data/eos/dreossf.txt

FRENCH

f

ctx/data/eos/dreosf.txt

GALICIAN

ga

ctx/data/eos/dreosga.txt

GERMAN

d

ctx/data/eos/dreosd.txt

GERMAN DIN

din

ctx/data/eos/dreosdin.txt

GREEK

el

ctx/data/eos/dreosel.txt

HEBREW

iw

ctx/data/eos/dreosiw.txt

HINDI

hi

ctx/data/eos/dreoshi.txt

HUNGARIAN

hu

ctx/data/eos/dreoshu.txt

ICELANDIC

is

ctx/data/eos/dreosis.txt

INDONESIAN

in

ctx/data/eos/dreosin.txt

ITALIAN

i

ctx/data/eos/dreosi.txt

JAPANESE

ja

ctx/data/eos/dreosja.txt

KOREAN

ko

ctx/data/eos/dreosko.txt

LATIN AMERICAN SPANISH

esa

ctx/data/eos/dreosesa.txt

LATIN BOSNIAN

lbs

ctx/data/eos/dreoslbs.txt

LATIN SERBIAN

lsr

ctx/data/eos/dreoslsr.txt

LATVIAN

lv

ctx/data/eos/dreoslv.txt

LITHUANIAN

lt

ctx/data/eos/dreoslt.txt

MACEDONIAN

mk

ctx/data/eos/dreosmk.txt

MALAY

ms

ctx/data/eos/dreosms.txt

MEXICAN SPANISH

esm

ctx/data/eos/dreosesm.txt

NORWEGIAN

n

ctx/data/eos/dreosn.txt

NYNORSK

nn

ctx/data/eos/dreosnn.txt

PERSIAN

fa

ctx/data/eos/dreosfa.txt

POLISH

pl

ctx/data/eos/dreospl.txt

PORTUGUESE

pt

ctx/data/eos/dreospt.txt

ROMANIAN

ro

ctx/data/eos/dreosro.txt

RUSSIAN

ru

ctx/data/eos/dreosru.txt

SIMPLIFIED CHINESE

zhs

ctx/data/eos/dreoszhs.txt

SLOVAK

sk

ctx/data/eos/dreossk.txt

SLOVENIAN

sl

ctx/data/eos/dreossl.txt

SPANISH

e

ctx/data/eos/dreose.txt

SWEDISH

s

ctx/data/eos/dreoss.txt

THAI

th

ctx/data/eos/dreosth.txt

TRADITIONAL CHINESE

zht

ctx/data/eos/dreoszht.txt

TURKISH

tr

ctx/data/eos/dreostr.txt

UKRAINIAN

uk

ctx/data/eos/dreosuk.txt

URDU

ur

ctx/data/eos/dreosur.txt

関連トピック