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パッケージ内のモジュール化された柔軟な関数のセットです。 これらを連鎖して、エンドツーエンドのデータ変換および類似検索操作を自動化できます。 |
|
ドキュメントからプレーン・テキスト・データを抽出します |
|
データを小さな部分またはチャンクに分割します。 |
|
データを1つ以上のベクトル埋込みに変換します |
|
ドキュメントから要約を抽出します |
|
プロンプト(入力文字列)またはイメージに対するテキストを生成します |
|
資格証明ヘルパー・プロシージャ: これらのプロシージャを使用すると、データベース内で認証の資格証明を安全に管理できます。 RESTコールを行うためにサードパーティ・サービス・プロバイダへのアクセスを有効にするには、これらの資格証明が必要です。 |
|
資格証明の名前を作成します |
|
既存の資格証明名を削除します |
|
プリファレンス・ヘルパー・プロシージャ: これらのプロシージャを使用すると、ハイブリッド・ベクトル索引の作成時または管理時に |
|
ベクタライザ・プリファレンスを作成します |
|
既存のベクタライザ・プリファレンスを削除します |
|
チャンカ・ヘルパー・プロシージャ: これらのプロシージャを使用すると、 |
|
トークン語彙ファイルをデータベースにロードします |
|
既存の語彙データを削除します |
|
言語データ・ファイルをデータベースにロードします |
|
既存の略称データを削除します |
|
データ・アクセス関数: このファンクションを使用すると、検索操作を拡張できます。 |
|
より関連性の高い出力のために検索結果を並べ替えます |
ノート:
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形式で指定します。
{
"user_ocid" : "<user ocid>",
"tenancy_ocid" : "<tenancy ocid>",
"compartment_ocid": "<compartment ocid>",
"private_key" : "<private key>",
"fingerprint" : "<fingerprint>"
}
{ "access_token": "<access token>" }
表217-2 パラメータ詳細
パラメータ | 説明 |
---|---|
|
OCIコンソールのユーザーの詳細ページにリストされている、ユーザーのOracle Cloud Identifier (OCID)。 |
|
OCIコンソールのテナンシの詳細ページにリストされている、テナンシのOCID。 |
|
OCIコンソールのコンパートメント情報ページにリストされている、コンパートメントのOCID。 |
|
OCI秘密キー。 ノート: 生成された秘密キーは次のように表示されます:
(BEGIN とEND の行を除く) <private key string> 値を単一行または複数行として渡します。
|
|
OCIコンソールのAPIキーの下のユーザーの詳細ページにリストされている、OCIプロファイル・キーの指紋。 |
|
サードパーティ・サービス・プロバイダから取得したアクセス・トークン。 |
必要な権限
この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_CHUNKS
でlanguage
チャンク化パラメータを指定することで、言語固有のチャンク化を使用できます。 -
次のデータ・ディクショナリ・ビューに問い合せると、既存の言語データにアクセスできます。
-
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
{
table_name,
column_name,
language,
preference_name
}
表217-3 パラメータ詳細
パラメータ | 説明 | 必須 | デフォルト値 |
---|---|---|---|
|
言語データをロードする表の名前(およびオプションの表の所有者) |
はい |
値なし |
|
言語データをロードする言語データ表の列名 |
はい |
値なし |
|
サポートされている言語名(「サポートされている言語とデータ・ファイルの場所」を参照) |
はい |
値なし |
|
この言語データのユーザー指定プリファレンス名 |
はい |
値なし |
例
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_EMBEDDING
、UTL_TO_EMBEDDINGS
およびVECTOR_EMBEDDING
) -
ベクトル索引の作成(
distance
、accuracy
および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"
}')
split
をcustom
として、normalize
をoptions
として指定する場合は、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" ]
}')
次の表に、すべてのチャンク化パラメータを示します:
パラメータ | 説明および許容される値 |
---|---|
|
データを分割するモードを指定します。つまり、文字、単語または語彙トークンの数をカウントして分割します。 有効値:
デフォルト値: |
|
各チャンクの最大サイズの制限を指定します。 この設定では、大きいテキストで最大制限に達したときに、固定された位置で入力テキストが分割されます。 有効値:
デフォルト値: |
|
最大サイズ制限に達したときに入力テキストを分割する位置を指定します。 これにより、チャンクに対して適切な境界を定義することで、関連するデータが一緒になるように維持できます。 有効値:
デフォルト値: |
|
チャンクに含める必要がある先行するテキストの量(正の整数リテラルまたはゼロ)を指定します(存在する場合)。 これは、先行するチャンク・テキストの一部を含めて、関連するテキスト(文など)を論理的に分割するのに役立ちます。 重なりの量は、チャンクの最大サイズの測定方法(文字、単語または語彙トークン)によって異なります。 重なりは、指定された 有効な値: デフォルト値: |
|
入力データの言語を指定します。 この句は、別の言語では異なる解釈になる可能性がある特定の文字(句読点や略語など)がテキストに含まれている場合に特に重要です。 有効値:
ノート: エスケープ文字は、SQL予約語でもある言語の略語(たとえば、 例:
デフォルト値: セッションの |
|
ドキュメントがテキストに変換されるときに発生する可能性のある問題(連続する複数の空白やスマート・クォートなど)を自動的に前処理または後処理します。 高品質のチャンクを抽出するために、正規化モードを使用することをお薦めします。 有効値:
デフォルト値: |
|
デフォルト値: |
ベクトル索引パラメータ:
{
"distance" : <vector_distance>,
"accuracy" : <vector_accuracy>,
"vector_idxtype" : <vector_idxtype>
}
例:
{
"distance" : COSINE,
"accuracy" : 95,
"vector_idxtype" : HNSW
}
パラメータ | 説明 |
---|---|
|
ベクトル間の距離を計算するために使用される距離メトリックまたは数学的関数:
ノート: 現時点では、 これら各メトリックの詳細は、「ベクトル距離関数および演算子」を参照してください。 デフォルト値: |
|
ベクトル索引を使用して近似検索問合せを実行するときに目指す近似検索の実行のターゲット精度。 ベクトル索引を使用した近似類似検索の理解で説明されているように、使用する索引タイプに応じて、パーセント値を指定するか、内部パラメータ値を指定することによって、デフォルト以外のターゲット精度値を指定できます。
HNSWと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
パラメータの詳細を示します。
パラメータ |
許容値 |
|
このフィールドの有効な値は次のとおりです:
|
|
有効なJSON形式のパスが少なくとも1つあるパス( ノート: |
例
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
{
table_name,
column_name,
vocabulary_name,
format,
cased
}
表217-4 パラメータ詳細
パラメータ | 説明 | 必須 | デフォルト値 |
---|---|---|---|
|
語彙ファイルをロードする表の名前(およびオプションの表の所有者) |
はい |
値なし |
|
語彙ファイルをロードする語彙テーブルの列名 |
はい |
値なし |
|
語彙のユーザー指定の名前とオプションの所有者名(現在の所有者以外の場合) |
はい |
値なし |
|
|
はい |
値なし |
|
語彙の大文字と小文字の区別。つまり、語彙が大文字または小文字のいずれとして扱われるか |
いいえ |
|
例
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パラメータ詳細
パラメータ | 説明 |
---|---|
|
再ランク付けのためのアクセスがサポートされているRESTプロバイダ:
|
|
次の形式の資格証明の名前:
資格証明名には、REST APIコールを行うためのプロバイダにアクセスできるようにする認証資格証明が保持されます。 まず、資格証明を作成および格納するために CREATE_CREDENTIALを参照してください。 |
|
サポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされている、各RESTコールのサードパーティ・プロバイダ・エンドポイントのURL。 |
|
次の形式での再ランク付けモデルの名前:
モデル名がスキーマ修飾されていない場合は、プロシージャ実行者のスキーマが使用されます。 |
追加のRESTプロバイダのパラメータ:
オプションで、再ランク付けのためのプロバイダ固有の追加パラメータを指定します。
重要:
-
次の例は、説明を目的としたものです。 追加パラメータの使用に関する正確な最新情報は、サードパーティ・プロバイダのドキュメントを参照してください。
-
サポートされているすべてのRESTエンドポイントのリストは、「サポートされているサードパーティ・プロバイダの操作およびエンドポイント」を参照してください。
{
"provider" : "cohere",
"credential_name" : "COHERE_CRED",
"url" : "https://api.cohere.example.com/rerank",
"model" : "rerank-english-v3.0",
"return_documents": false,
"top_n" : 3
}
{
"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プロバイダ・パラメータ詳細
パラメータ | 説明 |
---|---|
|
元のドキュメントまたは入力テキストとともに検索結果を返すかどうか(
ノート: Cohereをプロバイダとして使用する場合は、パフォーマンスを向上させるために、このオプションを無効にしておくことをお薦めします。 デバッグの目的で元のテキストを表示する必要がある場合には、有効にすることもできます。 |
|
元のレコード詳細または入力テキストとともに検索結果を返すかどうか(
ノート: Vertex AIをプロバイダとして使用する場合は、パフォーマンスを向上させるために、このオプションを有効にしておくことをお薦めします。 デバッグの目的で元のテキストを表示する必要がある場合には、無効にすることもできます。 |
|
最も関連性の高いドキュメントを返す数。 |
例
-
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" ]
}')
これらのパラメータの詳細は、次のとおりです:
パラメータ | 説明および許容される値 |
---|---|
|
データを分割するモードを指定します。つまり、文字、単語または語彙トークンの数をカウントして分割します。 有効値:
デフォルト値: |
|
各チャンクの最大サイズの制限を指定します。 この設定では、大きいテキストで最大制限に達したときに、固定された位置で入力テキストが分割されます。 有効値:
デフォルト値: |
|
最大サイズ制限に達したときに入力テキストを分割する位置を指定します。 これにより、チャンクに対して適切な境界を定義することで、関連するデータが一緒になるように維持できます。 有効値:
デフォルト値: |
|
チャンクに含める必要がある先行するテキストの量(正の整数リテラルまたはゼロ)を指定します(存在する場合)。 これは、先行するチャンク・テキストの一部を含めて、関連するテキスト(文など)を論理的に分割するのに役立ちます。 重なりの量は、チャンクの最大サイズの測定方法(文字、単語または語彙トークン)によって異なります。 重なりは、指定された 有効な値: デフォルト値: |
|
入力データの言語を指定します。 この句は、別の言語では異なる解釈になる可能性がある特定の文字(句読点や略語など)がテキストに含まれている場合に特に重要です。 有効値:
ノート: エスケープ文字は、SQL予約語でもある言語の略語(たとえば、 例:
デフォルト値: セッションの |
|
ドキュメントがテキストに変換されるときに発生する可能性のある問題(連続する複数の空白やスマート・クォートなど)を自動的に前処理または後処理します。 高品質のチャンクを抽出するために、正規化モードを使用することをお薦めします。 有効値:
デフォルト値: |
|
デフォルト値: |
例
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
またはCLOB
のVECTOR_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形式で指定します。
{
"provider" : "database",
"model" : "<in-database ONNX embedding model filename>"
}
表217-7 データベース・プロバイダ・パラメータ詳細
パラメータ | 説明 |
---|---|
|
Oracle Databaseをプロバイダとして使用する場合は、 |
|
インポートした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 サード・パーティ・プロバイダ・パラメータ詳細
パラメータ | 説明 |
---|---|
|
この操作のためにアクセスするサードパーティ・サービス・プロバイダ。 埋込みモデルにアクセスするために、指定したプロバイダに対してRESTコールが行われます。 イメージ入力の場合は、 テキスト入力の場合は、次のいずれかの値を指定します:
|
|
次の形式の資格証明の名前:
資格証明名には、REST APIコールを行うためのプロバイダにアクセスできるようにする認証資格証明が保持されます。 まず、資格証明を作成および格納するために |
|
サポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされている、各RESTコールのサードパーティ・プロバイダ・エンドポイントのURL。 |
|
次の形式でのサードパーティ埋込みモデルの名前:
スキーマを指定しない場合は、プロシージャ実行者のスキーマが使用されます。 ノート:
|
|
リクエストを完了するまでの最長待機時間。 デフォルト値は |
|
一度にリクエストするベクトルの最大数。 たとえば、バッチ・サイズが RESTコールの場合、入力のバッチを一度に送信する方が1コールごとに1つの入力をリクエストするよりも効率的です。 バッチ・サイズを大きくするとパフォーマンスが向上しますが、特にプロバイダにレート制限がある場合は、バッチ・サイズを小さくすることでメモリーとデータの使用量を削減できることがあります。 デフォルト値や最大許容値は、サードパーティ・プロバイダの設定によって異なります。 |
|
特定のサードパーティ・プロバイダに対してAPIをコールできる最大回数。 整数nに設定すると、 |
追加のサードパーティ・プロバイダのパラメータ:
オプションで、プロバイダ固有の追加パラメータを指定します。
表217-9 追加のRESTプロバイダ・パラメータ詳細
パラメータ | 説明 |
---|---|
|
ベクトル化する入力のタイプ。 |
すべてのサードパーティ・プロバイダの構成例を見てみましょう:
重要:
-
次の例は、説明を目的としたものです。 使用するパラメータに関する正確な最新の情報については、サードパーティ・プロバイダのドキュメントを参照してください。
-
サポートされているすべてのRESTエンドポイントURLのリストは、サポートされているサードパーティ・プロバイダの操作およびエンドポイントを参照してください。
-
生成される埋込み結果は、埋込みモデルや浮動小数点精度に応じて、同じ入力と構成のリクエスト間で異なることがあります。 ただし、ベクトル距離は類似するため、問合せには影響しません(また、意味的に正しい結果が得られます)。
{
"provider" : "cohere",
"credential_name": "COHERE_CRED",
"url" : "https://api.cohere.example.com/embed",
"model" : "embed-english-light-v2.0",
"input_type" : "search_query"
}
{
"provider" : "ocigenai",
"credential_name": "OCI_CRED",
"url" : "https://generativeai.oci.example.com/embedText",
"model" : "cohere.embed-english-v3.0",
"batch_size" : 10
}
{
"provider" : "googleai",
"credential_name": "GOOGLEAI_CRED",
"url" : "https://googleapis.example.com/models/",
"model" : "embedding-001"
}
{
"provider" : "huggingface",
"credential_name": "HF_CRED",
"url" : "https://api.huggingface.example.com/",
"model" : "sentence-transformers/all-MiniLM-L6-v2"
}
{
"provider" : "ollama",
"host" : "local",
"url" : "http://localhost:11434/api/embeddings",
"model" : "phi3:mini"
}
{
"provider" : "openai",
"credential_name": "OPENAI_CRED",
"url" : "https://api.openai.example.com/embeddings",
"model" : "text-embedding-3-small"
}
{
"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.jpg
、VEC_DUMP
はparrots.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パラメータの詳細
パラメータ | 説明 |
---|---|
|
テキストを生成するためにアクセスするサポート対象のRESTプロバイダ。 次のいずれかの値を指定します。
|
|
次の形式の資格証明の名前:
資格証明名には、REST APIコールを行うためのプロバイダにアクセスできるようにする認証資格証明が保持されます。 まず、資格証明を作成および格納するために |
|
サポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされている、各RESTコールのサードパーティ・プロバイダ・エンドポイントのURL。 |
|
次の形式でのサードパーティ・テキスト生成モデルの名前:
モデル名がスキーマ修飾されていない場合は、プロシージャ実行者のスキーマが使用されます。 ノート: Generative AIの場合、サポートされているすべてのサードパーティ・モデルがサポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされています。 |
|
リクエストを完了するまでの最長待機時間。 デフォルト値は |
|
特定のサードパーティ・プロバイダに対してAPIをコールできる最大回数。 整数nに設定すると、 |
追加のサードパーティ・プロバイダのパラメータ:
オプションで、プロバイダ固有の追加パラメータを指定します。
表217-11 追加のRESTプロバイダ・パラメータ詳細
パラメータ | 説明 |
---|---|
|
出力テキスト内の最大トークン数。 |
|
出力テキストの生成時に使用されるランダム性の度合い( プロンプトに対して同じ出力を生成するには、 ノート: 最初は温度を |
|
出力内のトークンの確率( 小さな値ほどランダム応答が少なくなり、大きな値ほどランダム応答が多くなります。 |
|
応答のバリエーション数( |
|
応答ごとに生成するトークンの最大数。 |
すべてのサードパーティ・プロバイダの構成例を見てみましょう:
重要:
-
次の例は、説明を目的としたものです。 追加パラメータの使用に関する正確な最新情報は、サードパーティ・プロバイダのドキュメントを参照してください。
-
サポートされているすべてのRESTエンドポイントURLのリストは、サポートされているサードパーティ・プロバイダの操作およびエンドポイントを参照してください。
{
"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
}
}
{
"provider" : "googleai",
"credential_name" : "GOOGLEAI_CRED",
"url" : "https://googleapis.example.com/models/",
"model" : "gemini-pro:generateContent"
}
{
"provider" : "huggingface",
"credential_name" : "HF_CRED",
"url" : "https://api.huggingface.example.com/models/",
"model" : "gpt2"
}
{
"provider" : "ollama",
"host" : "local",
"url" : "http://localhost:11434/api/generate",
"model" : "phi3:mini"
}
{
"provider" : "openai",
"credential_name" : "OPENAI_CRED",
"url" : "https://api.openai.example.com",
"model" : "gpt-4o-mini",
"max_tokens" : 60,
"temperature" : 1.0
}
{
"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 パラメータ詳細
パラメータ | 説明 |
---|---|
|
プレーン・テキスト出力。 このパラメータのデフォルト値は ドキュメントがプレーン・テキストとして返されないようにする場合は、このパラメータを |
|
文字セット・エンコーディング。 現在は |
例
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 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形式で指定します。
{
"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 データベース・プロバイダ・パラメータ詳細
パラメータ | 説明 |
---|---|
|
プロバイダとしてOracle Databaseにアクセスする場合は、 |
|
要約を表示するフォーマット:
|
|
要約のために選択されたドキュメントの段落(または文)の最大数。 デフォルト値は
|
|
要約のために選択されたドキュメントの段落(または文)の最大数であり、ドキュメントの段落(または文)の合計に対する割合です。 デフォルト値は
|
|
生成するテーマ要約の数。 たとえば、 デフォルト値は |
|
サポートされる言語とデータ・ファイルの場所にリストされている要約テキストの言語名。 |
{
"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 サード・パーティ・プロバイダ・パラメータ詳細
パラメータ | 説明 |
---|---|
|
要約を取得するためにアクセスするサードパーティ・サービス・プロバイダ。 テキスト要約モデルにアクセスするために、指定したプロバイダに対してRESTコールが実行されます。 次のいずれかの値を指定します。
|
|
次の形式の資格証明の名前:
資格証明名には、REST APIコールを行うためのプロバイダにアクセスできるようにする認証資格証明が保持されます。 まず、資格証明を作成および格納するために |
|
サポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされている、各RESTコールのサードパーティ・プロバイダ・エンドポイントのURL。 |
|
次の形式でのサードパーティ・テキスト要約モデルの名前:
モデル名がスキーマ修飾されていない場合は、プロシージャ実行者のスキーマが使用されます。 ノート: Generative AIの場合は、 |
|
リクエストを完了するまでの最長待機時間。 デフォルト値は |
|
特定のサードパーティ・プロバイダに対してAPIをコールできる最大回数。 整数nに設定すると、 |
追加のサードパーティ・プロバイダのパラメータ:
オプションで、プロバイダ固有の追加パラメータを指定します。
表217-15 追加のRESTプロバイダ・パラメータ詳細
パラメータ | 説明 |
---|---|
|
要約テキストの概算の長さ:
ノート: Generative AIの場合は、この値を大文字で入力する必要があります。 |
|
要約を表示するフォーマット:
ノート: Generative AIの場合は、この値を大文字で入力する必要があります。 |
|
出力テキストの生成時に使用されるランダム性の度合い( プロンプトに対して同じ出力を生成するには、 デフォルトのtemperatureは ノート: テキストを要約するには、まず温度を |
|
要約内の入力をどの程度再利用するか:
ノート: Generative AIの場合は、この値を大文字で入力する必要があります。 |
|
出力テキスト内の最大トークン数。 |
|
出力内のトークンの確率( 小さな値ほどランダム応答が少なくなり、大きな値ほどランダム応答が多くなります。 |
|
応答のバリエーション数( |
|
応答ごとに生成するトークンの最大数。 |
ノート:
Generative AIに対してlength
、format
およびextractiveness
パラメータを指定する場合は、必ず値を大文字で入力してください。
すべてのサードパーティ・プロバイダの構成例を見てみましょう:
重要:
-
次の例は、説明を目的としたものです。 追加パラメータの使用に関する正確な最新情報は、サードパーティ・プロバイダのドキュメントを参照してください。
-
サポートされているすべてのRESTエンドポイントURLのリストは、サポートされているサードパーティ・プロバイダの操作およびエンドポイントを参照してください。
{
"provider" : "cohere",
"credential_name" : "COHERE_CRED",
"url" : "https://api.cohere.example.com/summarize",
"model" : "command",
"length" : "medium",
"format" : "paragraph",
"temperature" : 1.0
}
{
"provider" : "ocigenai",
"credential_name" : "OCI_CRED",
"url" : "https://generativeai.oci.example.com/summarizeText",
"model" : "cohere.command-r-16k",
"length" : "MEDIUM",
"format" : "PARAGRAPH"
}
{
"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
}
}
{
"provider" : "huggingface",
"credential_name" : "HF_CRED",
"url" : "https://api.huggingface.example.co/models/",
"model" : "facebook/bart-large-cnn"
}
{
"provider" : "ollama",
"host" : "local",
"url" : "http://localhost:11434/api/generate",
"model" : "phi3:mini"
}
{
"provider" : "openai",
"credential_name" : "OPENAI_CRED",
"url" : "https://api.openai.example.com",
"model" : "gpt-4o-mini",
"max_tokens" : 256,
"temperature" : 1.0
}
{
"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 |
|
AMERICAN |
us |
|
ARABIC |
ar |
|
BASQUE |
eu |
|
BELARUSIAN |
be |
|
BRAZILIAN PORTUGUESE |
ptb |
|
BULGARIAN |
bg |
|
CANADIAN FRENCH |
frc |
|
CATALAN |
ca |
|
CROATIAN |
hr |
|
CYRILLIC SERBIAN |
csr |
|
CZECH |
cs |
|
DANISH |
dk |
|
DARI |
prs |
|
DUTCH |
nl |
|
EGYPTIAN |
eg |
|
ENGLISH |
gb |
|
ESTONIAN |
et |
|
FINNISH |
sf |
|
FRENCH |
f |
|
GALICIAN |
ga |
|
GERMAN |
d |
|
GERMAN DIN |
din |
|
GREEK |
el |
|
HEBREW |
iw |
|
HINDI |
hi |
|
HUNGARIAN |
hu |
|
ICELANDIC |
is |
|
INDONESIAN |
in |
|
ITALIAN |
i |
|
JAPANESE |
ja |
|
KOREAN |
ko |
|
LATIN AMERICAN SPANISH |
esa |
|
LATIN BOSNIAN |
lbs |
|
LATIN SERBIAN |
lsr |
|
LATVIAN |
lv |
|
LITHUANIAN |
lt |
|
MACEDONIAN |
mk |
|
MALAY |
ms |
|
MEXICAN SPANISH |
esm |
|
NORWEGIAN |
n |
|
NYNORSK |
nn |
|
PERSIAN |
fa |
|
POLISH |
pl |
|
PORTUGUESE |
pt |
|
ROMANIAN |
ro |
|
RUSSIAN |
ru |
|
SIMPLIFIED CHINESE |
zhs |
|
SLOVAK |
sk |
|
SLOVENIAN |
sl |
|
SPANISH |
e |
|
SWEDISH |
s |
|
THAI |
th |
|
TRADITIONAL CHINESE |
zht |
|
TURKISH |
tr |
|
UKRAINIAN |
uk |
|
URDU |
ur |
|
関連トピック