216 DBMS_VECTOR
DBMS_VECTOR
パッケージは、ユーザー・データからのチャンクや埋込みの抽出、特定のプロンプトに対するテキストの生成、索引の正確性のレポートなど、Oracle AI Vector Searchでの一般的な操作をサポートするAPIを提供します。
これらの関数は、JSON形式で入力パラメータを受け入れます。
216.1 DBMS_VECTORのサブプログラムの要約
この表は、DBMS_VECTOR
サブプログラムを示し、簡単に説明しています。
表216-1 DBMS_VECTORパッケージ・サブプログラム
サブプログラム | 説明 |
---|---|
ONNXモデルに関連するプロシージャ: これらのプロシージャを使用すると、ONNXモデルをOracle Databaseにロードできます。また、そのONNXモデルを削除できます。 |
|
ONNXモデルをデータベースにロードします |
|
LOAD_ONNX_MODEL_CLOUD | オブジェクト・ストレージからデータベースにONNXモデルをロードします |
ONNXモデルを削除します |
|
チェーン可能ユーティリティ(UTL)関数: これらの関数は、ベクトル・ユーティリティのPL/SQLパッケージ内のモジュール化された柔軟な関数のセットです。 これらを連鎖して、エンドツーエンドのデータ変換および類似検索操作を自動化できます。 |
|
データを小さな部分またはチャンクに分割します。 |
|
データを1つ以上のベクトル埋込みに変換します |
|
プロンプト(入力文字列)またはイメージに対するテキストを生成します |
|
資格証明ヘルパー・プロシージャ: これらのプロシージャを使用すると、データベース内で認証の資格証明を安全に管理できます。 RESTコールを行うためにサードパーティ・サービス・プロバイダへのアクセスを有効にするには、これらの資格証明が必要です。 |
|
資格証明の名前を作成します |
|
既存の資格証明名を削除します |
|
データ・アクセス関数: これらの関数を使用すると、データの取得、索引の作成、および単純な類似検索操作を実行できます。 |
|
ベクトル索引を作成します |
|
ベクトル索引の再構築します |
|
ベクトル索引作成のステータスを示します |
|
ベクトル索引ユーザーおよび索引名に対するチェックポイント機能を有効にします |
|
ベクトル索引ユーザーおよび索引名に対するチェックポイント機能を無効にします |
|
ベクトル索引に必要なベクトル・メモリー・サイズを判断します |
|
類似性検索問合せを実行します |
|
より関連性の高い出力のために検索結果を並べ替えます |
|
精度レポート関数: これらの関数を使用すると、既存の検索索引の精度を判断し、過去のワークロードで実行された近似検索によって達成された精度値を取得できます。 |
|
ベクトル索引の精度を検証します |
|
近似検索によって達成された精度値を取得します |
ノート:
DBMS_VECTOR
は、テキスト処理や要約操作をサポートしない軽量パッケージです。 そのため、UTL_TO_TEXT
およびUTL_TO_SUMMARY
チェーン可能ユーティリティ関数とすべてのチャンカ・ヘルパー・プロシージャは、拡張DBMS_VECTOR_CHAIN
パッケージ内でのみ使用できます。
216.1.1 CREATE_CREDENTIAL
ユーザー認証の詳細をOracle Databaseに格納するための資格証明名を作成するには、DBMS_VECTOR.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.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>" }
表216-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.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.create_credential( credential_name => 'COHERE_CRED', params => json(jo.to_string)); end; /
エンドツーエンドの例:
この手順を使用してエンドツーエンドのサンプル・シナリオを実行する場合は、LLMを利用するAPIを使用したサマリーおよびテキストの生成を参照してください。
216.1.2 CREATE_INDEX
ベクトル索引を作成するには、DBMS_VECTOR.CREATE_INDEX
プロシージャを使用します。
用途
Hierarchical Navigable Small World (HNSW)ベクトル索引やInverted File Flat (IVF)ベクトル索引などのベクトル索引を作成します。
構文
DBMS_VECTOR.CREATE_INDEX (
idx_name IN VARCHAR2,
table_name IN VARCHAR2,
idx_vector_col IN VARCHAR2,
idx_include_cols IN VARCHAR2 DEFAULT NULL,
idx_partitioning_scheme IN VARCHAR2 default 'LOCAL',
idx_organization IN VARCHAR2,
idx_distance_metric IN VARCHAR2 DEFAULT COSINE,
idx_accuracy IN NUMBER DEFAULT 90,
idx_parameters IN CLOB,
idx_parallel_creation IN NUMBER DEFAULT 1
);
パラメータ
パラメータ | 説明 |
---|---|
|
作成する索引の名前。 |
|
索引を作成する表。 |
|
索引を作成するVector列。 |
idx_include_cols |
索引でカバーされる列名のカンマ区切りリスト。 |
|
IVF索引のパーティション化スキーム:
IVF索引は、パーティション表のグローバル索引とローカル索引の両方をサポートします。 デフォルトでは、これらの索引は重心によってグローバルにパーティション化されます。 ローカルIVF索引を作成することを選択できます。これにより、実表のパーティションまたはサブパーティションと索引パーティションの間に1対1の関係が提供されます。 これらのパーティション化スキームの詳細は、「Inverted File Flatベクトル索引のパーティション化スキーム」を参照してください。 |
|
索引構成:
これらの組織タイプの詳細は、「ベクトル索引の様々なカテゴリの管理」を参照してください。 |
|
ベクトル間の距離を計算するために使用される距離メトリックまたは数学的関数:
これら各メトリックの詳細は、「ベクトル距離関数および演算子」を参照してください。 |
|
近似検索問合せの実行時に目指す近似検索の実行のターゲット精度。 ベクトル索引を使用した近似類似検索の理解で説明されているように、使用する索引タイプに応じて、パーセント値を指定するか、内部パラメータ値を指定することによって、デフォルト以外のターゲット精度値を指定できます。
|
|
ベクトル索引のタイプと関連パラメータ。 索引付けパラメータをJSON形式で指定します:
|
|
索引作成に使用されるパラレル・スレッドの数。 |
例
-
HNSW索引のneighborsとefConstructionを指定します:
dbms_vector.create_index( 'v_hnsw_01', 'vpt01', 'EMBEDDING', NULL, NULL, 'INMEMORY NEIGHBOR GRAPH', 'EUCLIDEAN', 95, '{"type" : "HNSW", "neighbors" : 3, "efConstruction" : 4}');
-
IVF索引のパーティション数を指定します:
dbms_vector.create_index( 'V_IVF_01', 'vpt01', 'EMBEDDING', NULL, NULL, 'NEIGHBOR PARTITIONS', 'EUCLIDEAN', 95, '{"type" : "IVF", "partitions" : 5}');
216.1.3 DISABLE_CHECKPOINT
DISABLE_CHECKPOINT
プロシージャは、特定のHierarchical Navigable Small World (HNSW)索引ユーザーおよびHNSW索引名に対するチェックポイント機能を無効にするために使用します。 この操作は、HNSW索引に対する古いチェックポイントのすべてをパージします。 また、HNSWグラフのリフレッシュの一環として今後のチェックポイントの作成も無効にします。
構文
DBMS_VECTOR.DISABLE_CHECKPOINT('INDEX_USER',['INDEX_NAME']);
INDEX_USER
HNSWベクトル索引所有者のユーザー名を指定します。
INDEX_NAME
チェックポイント機能を無効にするHNSWベクトル索引の名前を指定します。
INDEX_NAME
句はオプションです。 索引名を指定していないと、このプロシージャは、指定されたユーザーのすべてのHNSWベクトル索引のチェックポイント機能を無効にします。
例
-
索引名と索引ユーザーの両方を使用する場合:
DBMS_VECTOR.DISABLE_CHECKPOINT('VECTOR_USER','VIDX1');
-
索引ユーザーのみを使用する場合:
DBMS_VECTOR.DISABLE_CHECKPOINT('VECTOR_USER');
216.1.4 DROP_CREDENTIAL
データ・ディクショナリから既存の資格証明名を削除するには、DBMS_VECTOR.DROP_CREDENTIAL
資格証明ヘルパー・プロシージャを使用します。
構文
DBMS_VECTOR.DROP_CREDENTIAL (
CREDENTIAL_NAME IN VARCHAR2
);
CREDENTIAL_NAME
削除する資格証明の名前を指定します。
例
-
Generative AIの場合:
exec dbms_vector.drop_credential('OCI_CRED');
-
Cohereの場合:
exec dbms_vector.drop_credential('COHERE_CRED');
216.1.5 ENABLE_CHECKPOINT
ENABLE_CHECKPOINT
プロシージャは、特定のHierarchical Navigable Small World (HNSW)索引ユーザーおよびHNSW索引名に対するチェックポイント機能を有効にするために使用します。
ノート:
-
このプロシージャでは、索引によるチェックポイントの作成のみを許可します。 チェックポイントは、次回のHNSWグラフのリフレッシュの一環として作成されます。
-
デフォルトでは、HNSWチェックポイントは有効になっています。 必要に応じて、
DBMS_VECTOR.DISABLE_CHECKPOINT
プロシージャを使用して無効にできます。
構文
DBMS_VECTOR.ENABLE_CHECKPOINT('INDEX_USER',['INDEX_NAME']);
INDEX_USER
HNSWベクトル索引所有者のユーザー名を指定します。
INDEX_NAME
チェックポイント機能を有効にするHNSWベクトル索引の名前を指定します。
INDEX_NAME
句はオプションです。 索引名を指定していないと、このプロシージャは、指定されたユーザーのすべてのHNSWベクトル索引のチェックポイント機能を有効にします。
例
-
索引名と索引ユーザーの両方を使用する場合:
DBMS_VECTOR.ENABLE_CHECKPOINT('VECTOR_USER','VIDX1');
-
索引ユーザーのみを使用する場合:
DBMS_VECTOR.ENABLE_CHECKPOINT('VECTOR_USER');
216.1.6 DROP_ONNX_MODELプロシージャ
このプロシージャは指定したONNXを削除します。
構文
DBMS_VECTOR.DROP_ONNX_MODEL (model_name IN VARCHAR2, force IN BOOLEAN DEFAULT FALSE);
パラメータ
表216-3 DROP_ONNX_MODELプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
[schema_name.]model_name形式の機械学習のONNXモデル名。 スキーマを指定しない場合は、ユーザー独自のスキーマが使用されます。 |
|
無効な場合でも、機械学習のONNXモデルの削除を強制実行します。 ONNXモデルは、モデルの作成プロセスが重大なシステム・エラーで中断された場合に無効になることがあります。 |
使用上のノート
ONNXモデルを削除するには、そのモデルの所有者であるか、またはDB_DEVELOPER_ROLE
が必要です。
例
次のコマンドを使用すると、スキーマに存在するdoc_model
という名前の有効なONNXモデルを削除できます。
BEGIN DBMS_VECTOR.DROP_ONNX_MODEL(model_name => 'doc_model'); END; /
216.1.7 GET_INDEX_STATUS
GET_INDEX_STATUS
プロシージャは、ベクトル索引作成のステータスを問い合せるために使用します。
構文
DBMS_VECTOR.GET_INDEX_STATUS ('USER_NAME','INDEX_NAME');
USER_NAME
ベクトル索引所有者のユーザー名を指定します。
INDEX_NAME
ベクトル索引の名前を指定します。 Hierarchical Navigable Small World (HNSW)索引とInverted File Flat (IVF)索引の両方について、索引作成ステータスの問合せができます。
使用上のノート
-
GET_INDEX_STATUS
プロシージャは、ベクトル索引の作成時にのみ使用できます。 -
Percentage
値は、Hierarchical Navigable Small World (HNSW)索引の場合にのみ出力されます(Inverted File Flat (IVF)索引の場合には出力されません)。 -
HNSWベクトル索引の
Stage
に示される値は、次のとおりです:値 説明 HNSW Index Initialization
HNSWベクトル索引作成の初期化フェーズ
HNSW Index Auxiliary Tables Creation
HNSW近傍グラフ・ベクトル索引の内部補助表の作成
HNSW Index Graph Allocation
HNSWグラフ用のベクトル・メモリー・プールからのメモリーの割当て
HNSW Index Loading Vectors
ベクトル・プール・メモリーへの実表ベクトルのロード
HNSW Index Graph Construction
以前にロードされたベクトルによる多層HNSWグラフの作成
HNSW Index Load From Checkpoints
HNSWベクトル索引はチェックポイントからロードされています
HNSW Index Graph Complete
HNSWベクトル索引グラフが完了しました
HNSW Index Creation Completed
HNSWベクトル索引の作成完了
-
IVFベクトル索引の
Stage
に示される値は、次のとおりです:値 説明 IVF Index Initialization
IVFベクトル索引作成の初期化フェーズ
IVF Index Centroids Creation
実表ベクトルのサンプルでクラスタ・セントロイドを計算するK平均クラスタリング・フェーズ
IVF Index Centroid Partitions Creation
実表ベクトルの重心の割当てフェーズ
IVF Index Creation Completed
IVFベクトル索引の作成完了
例
exec DBMS_VECTOR.GET_INDEX_STATUS('VECTOR_USER','VIDX_HNSW');
結果:
"VECTOR_USER"."IDX1" inst# 2 HNSW Index Initialization
"VECTOR_USER"."IDX1" inst# 1 HNSW Index Graph Construction (76.25%)
exec DBMS_VECTOR.GET_INDEX_STATUS('VECTOR_USER','VIDX_HNSW');
結果:
"VECTOR_USER"."IDX1" inst# 2 HNSW Index Load Vectors (22%)
"VECTOR_USER"."IDX1" inst# 1 HNSW Index Graph Construction (100%)
exec DBMS_VECTOR.GET_INDEX_STATUS('VECTOR_USER','VIDX_HNSW');
結果:
"VECTOR_USER"."IDX1" HNSW Index Creation Completed
216.1.8 INDEX_ACCURACY_QUERY
特定の問合せベクトル、上位Kおよびターゲット精度についてベクトル索引の精度を検証するには、DBMS_VECTOR.INDEX_ACCURACY_QUERY
関数を使用します。
構文
DBMS_VECTOR.INDEX_ACCURACY_QUERY (
OWNER_NAME IN VARCHAR2,
INDEX_NAME IN VARCHAR2,
QV IN VECTOR,
TOP_K IN NUMBER,
TARGET_ACCURACY IN NUMBER
) return VARCHAR2;
DBMS_VECTOR.INDEX_ACCURACY_QUERY (
OWNER_NAME IN VARCHAR2,
INDEX_NAME IN VARCHAR2,
QV IN VECTOR,
TOP_K IN NUMBER,
QUERY_PARAM IN JSON
) return VARCHAR2;
パラメータ
表216-4 DBMS_VECTORのINDEX_ACCURACY_QUERY (IN)パラメータ
パラメータ | 説明 |
---|---|
owner_name |
ベクトル索引の所有者の名前。 |
index_name |
ベクトル索引の名前。 |
qv |
問合せベクトルを指定します。 |
top_k |
精度計算の |
target_accuracy |
ベクトル索引のターゲット精度値。 |
ベクトル索引の精度を判断する方法の詳細は、「Oracle Database AI Vector Searchユーザーズ・ガイド」の索引精度レポートを参照してください。
216.1.9 INDEX_ACCURACY_REPORT
DBMS_VECTOR.INDEX_ACCURACY_REPORT
関数を使用すると、過去のワークロードから、特定のベクトル索引を使用した近似検索で得られた精度値を特定の期間取得できます。
構文
DBMS_VECTOR.INDEX_ACCURACY_REPORT (
OWNER_NAME IN VARCHAR2,
INDEX_NAME IN VARCHAR2,
START_TIME IN TIMESTAMP WITH TIME ZONE,
END_TIME IN TIMESTAMP WITH TIME ZONE
) return NUMBER;
パラメータ
表216-5 DBMS_VECTORのINDEX_ACCURACY_REPORT (IN)パラメータ
パラメータ | 説明 |
---|---|
owner_name |
ベクトル索引の所有者の名前。 |
index_name |
ベクトル索引の名前。 |
start_time |
精度計算の対象とする問合せベクターの取得開始時刻を指定します。 |
end_time |
精度計算の対象とする問合せベクトルの最終時点を指定します。 |
ベクトル索引の精度を判断する方法の詳細は、「Oracle Database AI Vector Searchユーザーズ・ガイド」の索引精度レポートを参照してください。
216.1.10 INDEX_VECTOR_MEMORY_ADVISOR
INDEX_VECTOR_MEMORY_ADVISOR
プロシージャは、特定のベクトル索引に必要なベクトル・メモリー・サイズを判断するために使用します。 これは、シミュレートされた各ベクトル・メモリー・サイズに適合する索引の数を評価する際に役立ちます。
構文
-
ベクトル索引に格納するベクトル・ディメンションの数とタイプを使用する場合。
DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR( INDEX_TYPE IN VARCHAR2, NUM_VECTORS IN NUMBER, DIM_COUNT IN NUMBER, DIM_TYPE IN VARCHAR2, PARAMETER_JSON IN CLOB, RESPONSE_JSON OUT CLOB);
-
ベクトル索引を作成する表とベクトル列を使用する場合:
DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR( TABLE_OWNER IN VARCHAR2, TABLE_NAME IN VARCHAR2, COLUMN_NAME IN VARCHAR2, INDEX_TYPE IN VARCHAR2, PARAMETER_JSON IN CLOB, RESPONSE_JSON OUT CLOB);
表216-6 構文の詳細: INDEX_VECTOR_MEMORY_ADVISOR
パラメータ | 説明 |
---|---|
|
ベクトル索引のタイプ:
|
|
ベクトル索引の作成に使用するベクトルの数。 |
|
|
|
ベクトルのディメンションのタイプ。 使用可能な値は次のとおりです。
|
|
ベクトル索引を作成する表の所有者名。 |
|
ベクトル索引を作成する表の名前。 |
|
ベクトル索引を作成するベクトル列の名前。 |
|
JSON形式の入力パラメータ。 次のいずれかの形式のみを指定できます:
ノート: |
|
JSON形式のレスポンス文字列。 |
例
-
パラメータ・リストの近傍を使用する場合:
SET SERVEROUTPUT ON; DECLARE response_json CLOB; BEGIN DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR( INDEX_TYPE=>'HNSW', NUM_VECTORS=>10000, DIM_COUNT=>768, DIM_TYPE=>'FLOAT32', PARAMETER_JSON=>'{"neighbors":32}', RESPONSE_JSON=>response_json); END; /
結果:
Suggested vector memory pool size: 59918628 Bytes
-
パラメータ・リストの精度を使用する場合:
SET SERVEROUTPUT ON; DECLARE response_json CLOB; BEGIN DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR( INDEX_TYPE=>'HNSW', NUM_VECTORS=>10000, DIM_COUNT=>768, DIM_TYPE=>'FLOAT32', PARAMETER_JSON=>'{"accuracy":90}', RESPONSE_JSON=>response_json); END; /
結果:
Suggested vector memory pool size: 53926765 Bytes
-
ベクトル索引を作成する表とベクトル列を使用する場合:
SET SERVEROUTPUT ON; DECLARE response_json CLOB; BEGIN DBMS_VECTOR.INDEX_VECTOR_MEMORY_ADVISOR( 'VECTOR_USER', 'VECTAB', 'DATA_VECTOR', 'HNSW', RESPONSE_JSON=>response_json); END; /
結果の例:
Using default accuracy: 90% Suggested vector memory pool size: 76396251 Bytes
216.1.11 LOAD_ONNX_MODEL
この手順では、ONNXモデルをデータベースにロードできます。
構文
DBMS_VECTOR.LOAD_ONNX_MODEL ( directory VARCHAR2, file_name VARCHAR2, model_name VARCHAR2, metadata JSON);
DBMS_VECTOR.LOAD_ONNX_MODEL(
model_name IN VARCHAR2,
model_data IN BLOB,
metadata IN JSON);
パラメータ
表216-7 LOAD_ONNX_MODELプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
データ・ダンプのディレクトリ名。 たとえば、 |
|
ONNXモデルの名前を指定する |
|
|
|
これはモデルのONNX表現を保持する |
|
モデルを記述するメタデータのJSONによる記述。 このメタデータには、モデルでサポートされている機械学習関数を少なくとも記述する必要があります。 モデルのメタデータ・パラメータの詳細は、「ONNXモデルのJSONメタデータ・パラメータ」を参照してください。 |
例
次の例は、DBMS_VECTOR.LOAD_ONNX_MODEL
プロシージャを使用したコード・スニペットを示しています。 完全なステップバイステップの例は、ONNXモデルのインポートおよび埋込みの生成で説明しています。
EXECUTE DBMS_VECTOR.LOAD_ONNX_MODEL(
'DM_DUMP',
'my_embedding_model.onnx',
'doc_model',
JSON('{"function" : "embedding", "embeddingOutput" : "embedding", "input": {"input": ["DATA"]}}'));
DBMS_VECTOR.LOAD_ONNX_MODEL('my_embedding_model.onnx',
:blob_bind_variable,
JSON('{"function" : "embedding",
"embeddingOutput" : "embedding" ,
"input":{"input": ["DATA"]}}'));
BLOB
変数を定義し、LOAD_ONNX_MODEL
プロシージャで使用する方法を示す完全な例として、次のものがあります:
CREATE OR REPLACE MY_LOAD_EMBEDDING_MODEL(embedding_model_name VARCHAR2, onnx_blob BLOB) IS
BEGIN
DBMS_VECTOR.LOAD_ONNX_MODEL(embedding_model_name,
onnx_blob,
JSON('{"function" : "embedding",
"embeddingOutput" : "embedding" ,
"input":{"input": ["DATA"]}}'));
END;
/
使用上のノート
モデルの名前は、次のような他の機械学習モデルで使用されるものと同じ制限に従います。
- スキーマ名を指定する場合は、128文字に制限されます。
- モデル名は123文字に制限されており、引用符なしの識別子のルールに従う必要があります。名前に使用できるのは、英数字、アンダースコア(_)、ドル記号($)およびシャープ記号(#)のみです。 最初の文字は、英字にする必要があります。
- モデルのサイズは1GBに制限されます。
- モデルは外部イニシャライザに依存しないようにします。 イニシャライザおよびその他のONNXの概念の詳細は、https://onnx.ai/onnx/intro/concepts.htmlを参照してください。
-
Pythonユーティリティによって準備されるモデルの入出力属性には、デフォルトの入力名および出力名があります。 これらのモデルは、JSONパラメータなしでロードできます。 例:
EXECUTE DBMS_VECTOR.LOAD_ONNX_MODEL('DM_DUMP', 'my_embedding_model.onnx', 'doc_model'));
参照:
機械学習タスクにONNXモデルを使用する例については、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください216.1.11.1 ONNXモデル用のJSONメタデータ・パラメータ
IMPORT_ONNX_MODEL
(DBMS_DATA_MINING
)、 LOAD_ONNX_MODEL
(DBMS_VECTOR
)またはLOAD_ONNX_MODEL_CLOUD
(DBMS_VECTOR
)プロシージャを使用してモデルをインポートする場合は、JSONパラメータとしてメタデータを指定します。
パラメータ
フィールド | 値タイプ | 説明 |
---|---|---|
function
|
文字列 |
regression、classification、clusteringまたはembeddingを指定します。 これは必須の設定です。 ノート: モデルのインポート時に必要なJSONパラメータは、機械学習機能のみです。 |
input
|
なし | モデル入力のマッピングを指定します。 詳細は、使用方法の入力に関する項を参照してください。 |
regressionOutput |
文字列 | 回帰結果を格納する回帰モデル出力の名前。 出力は、サポートされている回帰出力タイプのサポートされるシェイプのテンソルであることが想定されます。 詳細は、使用方法の出力に関する項を参照してください。 |
classificationProbOutput |
文字列 | 確率を格納する分類モデル出力の名前。 出力は、サポートされているシェイプのfloat型(幅32/64)のテンソル値である必要があります。 使用方法の「出力確率の自動正規化」を参照してください。 |
clusteringDistanceOutput |
文字列 | 距離を格納するクラスタリング・モデル出力の名前。 出力は、サポートされているシェイプのfloat型(幅16/32/64)です。 |
clusteringProbOutput |
文字列 | 確率を格納するクラスタリング・モデル出力の名前。 出力は、サポートされているシェイプのfloat型(幅16/32/64)です。 |
classificationLabelOutput |
文字列 |
ラベル情報を保持するモデル出力の名前。 分類のラベルを指定するための次のメタデータ・パラメータがあります。
このパラメータに値を指定しない場合、またはモデルの機能が分類でない場合は、エラーが発生します。 ユーザーは、ラベル情報を保持するモデル出力に |
normalizeProb |
文字列 | 出力確率の自動正規化について記述します。 使用方法の「出力確率の自動正規化」を参照してください。 |
labels |
なし |
分類に使用されるラベル。 カスタム・ラベルを使用する場合は、JSONメタデータのlabelsフィールドを使用してラベルを指定します。 このフィールドは、クラス数と同じ長さの配列に設定できます。 クラスiのラベルは、ラベル配列の索引iに格納する必要があります。 文字列の配列を使用する場合、 ラベルまたは |
embeddingOutput
|
文字列 | 生成された埋込みを保持するモデル出力。 |
suitableDistanceMetrics |
文字列 | モデルに適した距離メトリックの名前の配列。 名前は、Oracle VECTOR_DISTANCE 演算子に使用される距離メトリックの名前である必要があります。 サポートされている距離メトリックを確認するには、「ベクトル距離メトリック」を参照してください。
このパラメータは情報提供のみを目的としています。 |
normalization |
ブール | ブール値は、正規化が出力ベクトルに適用されるかどうかを示します。 値1は、正規化が適用されることを意味します。 正規化は、標準または長さが1になるように埋込みベクトルを変換するプロセスです。 正規化されたベクトルでは方向が維持されますが、長さは1になります。 結果のベクトルは、多くの場合、単位ベクトルと呼ばれます。 |
maxSequenceLength |
数値 | モデルにとって意味のあるトークン(入力)シーケンスの最大長。 このパラメータは、モデルが処理する各入力シーケンス内のトークン、単語または要素の数に制限を設定します。 これにより、モデルの入力サイズが均一になります。 たとえば、パラメータが使用されるタスクに応じて、値は128または512から4096になります。 機械翻訳モデルでは、maxSequenceLength を512にして、翻訳タスクに最大512個のトークンの文または段落を格納できます。
このパラメータは情報提供のみを目的としています。 |
pooling |
文字列 | 出力ベクトルに対して実行されるプーリング関数を示します。
このパラメータは情報提供のみを目的としています。 |
modelDescription |
オブジェクト | 既存のONNXメタデータのモデルの記述を補完するために、ユーザーがモデルに記述を追加できるJSONオブジェクト。
このパラメータは情報提供のみを目的としています。 |
languages |
文字列 | 言語名または略称のカンマ区切りリスト。『Oracle Databaseグローバリゼーション・サポート・ガイド』の「A.1 言語」を参照してください。 多言語埋込みモデルをインポートする場合は、メタデータとして言語または言語の略称を指定します。
このパラメータは情報提供のみを目的としています。 |
tokenizer |
文字列 | トークナイザはテキストを単語に変換するために使用されます。 bert、gpt2、bpe、wordpiece、sentencepiece、clipなどの様々なトークナイザを使用できます。
このパラメータは情報提供のみを目的としています。 |
embeddingLayer |
文字列 | 埋込みレイヤーの識別子。 ニューラル・ネットワークの隠れ層として機能する埋込みレイヤーは、入力データを高い次元から低い次元に変換し、入力の関係およびデータ処理効率に対するネットワークの理解を高めます。 埋込みレイヤーは、カテゴリ・データまたは個別データの処理と分析に役立ちます。 これを実現するために、カテゴリを連続した埋込みに変換し、重要な意味的な関係とそれらの間の類似度を取得します。 たとえば、一部のトランスフォーマの最後の非表示状態、または残差ネットワーク内のレイヤーです。
このパラメータは情報提供のみを目的としています。 |
defaultOnNull |
なし |
JSONの欠落値の置換を指定するには、 |
ノート:パラメータでは大文字と小文字が区別されます。 出力パラメータ名とデフォルト値の多くのデフォルト規則により、指定する必要のある情報を最小限に抑えることができます。 suitableDistanceMetrics
などのパラメータは情報提供専用のものであり、この情報をモデルのインポート時に指定する必要はありません。 JSON記述子では、入力属性を1つのみ指定できます。 それより多く指定すると、エラーが表示されます。 normalizeProb
フィールドがJSONメタデータ・パラメータとして指定されている場合、エラーが発生します。
使用上のノート
モデルの名前は、次のような他の機械学習モデルで使用されるものと同じ制限に従います。
-
入力
ONNX表現からモデルをインポートする場合、スコアリングに使用される属性の名前と実際のONNX入力をマップする方法を指定する必要があります。 スコアリング演算子は、これらの属性名を使用して、使用する列を識別します。 (たとえば、
PREDICTION
)。 次の規則に従って、入力フィールドを使用して属性名を指定します。指定なし: inputフィールドが指定されていない場合、属性名は名前によってモデル入力に直接マップされます。 つまり、属性名がJSONメタデータに指定されていない場合、入力テンソルの名前が属性名として使用されます。 各モデル入力には、次元
[batch_size, value]
が必要です。 JSONメタデータでinput
を指定しない場合、値は1である必要があります。 モデルの入力がすでにその形式に準拠している場合は、追加のメタデータを指定する必要はありません。 埋込みモデルの場合は、バッチで使用できる単一の入力が提供されます。 ここで、JSONメタデータでinput
パラメータを指定しない場合、有効なモデルは[batch_size, 1]
となります。モデルによって暗黙的に指定されているか、入力フィールドを使用して明示的に設定したかに関係なく、すべての属性名が列名に対して有効なOracle Database識別子であるようにする必要があります。 モデル内の各属性名は一意である必要があり、重複が存在しないようにします。
1より大きい次元を持つ入力テンソルを使用するモデルの属性名を明示的に指定できます((batch_size, 2)など)。 この場合、これらの値を独立した属性名として解釈するには、それぞれの名前を指定する必要があります。 これは、スコアリング操作で複数の入力属性を受け取ることができるモデルである回帰、分類、クラスタリングに対して実行できます。
-
出力
モデルには複数の出力がある場合があるため、特定の機械学習手法の対象の出力を指定できます。 モデル出力を指定するには、次の方法があります。
- モデルのインポート時に、対象の出力名をJSONで指定します。 指定された名前が有効なモデル出力でない場合(特定の機械学習機能の有効な出力を示す表を参照)、エラーが表示されます。
- 指定された機械学習手法(
classificationProbOutput
など)で予期される出力名と一致する出力がモデルで生成され、明示的に指定しなかった場合、出力は自動的に想定されます。 - 出力名を指定せず、モデルに1つの出力がある場合、システムでは、単一の出力が機械学習手法に固有のデフォルトに対応しているとみなされます。 埋込み機械学習機能の場合、デフォルト値は
embeddingOutput
です。モデルの出力を指定しない場合、または指定した機械学習機能でサポートされていない出力を指定した場合は、エラーがレポートされます。 次の表に、特定の機械学習機能でサポートされている出力を示します。
機械学習機能 出力 回帰 regressionOutput
分類 classificationProbOutput
clustering clusteringDistanceOutput
埋込み embeddingOutput
前述のモデル出力のいずれも指定されていない場合、または指定した機械学習機能でサポートされていない出力を指定した場合、エラーが表示されます。
-
出力確率の自動正規化
多くのユーザーは、マルチクラス分類モデルの出力を正規化するためにsoftmax関数を広く採用しています。この関数により、これらのモデルの結果を簡単に解釈できるようになります。 softmax関数は、実数のベクトルを確率分布に変換する数学関数です。 これはsoftargmaxまたは正規化された指数関数とも呼ばれます。 この関数は、
classificationProbOutput
やclusteringProbOutput
などの出力確率を保持するテンソルにsoftmax正規化を適用する必要があるモデル・インポート時に指定できます。 softmax正規化に適用する必要がある正規化を定義するには、normalizeProb
を指定します。 デフォルト設定はnone
で、正規化が適用されないことを示します。 確率出力にsoftmax関数を適用するには、softmax
を選択します。 このフィールドに他の値を指定すると、インポート時にエラーが発生します。 また、分類およびクラスタリング以外のモデルにこのフィールドを指定した場合も、エラーが発生します。
例: 埋込みモデル用のJSONメタデータ・パラメータの指定
次の例は、DBMS_VECTOR.IMPORT_ONNX_MODEL
プロシージャを使用してONNX埋込みモデルをデータベースにインポートする際に、JSONメタデータ・パラメータを指定する方法の簡単な例を示しています。
DBMS_VECTOR.IMPORT_ONNX_MODEL('my_embedding_model.onnx', 'doc_model',
JSON('{"function" : "embedding",
"embeddingOutput" : "embedding" ,
"input":{"input": ["DATA"]}}'));
例: 埋込みモデル用のすべてのJSONメタデータ・パラメータの指定
次の例は、埋込みモデルをインポートするためにすべてのJSONメタデータ・パラメータ(embeddingLayer
を除く)を指定する方法を示しています。
DECLARE
metadata JSON;
mdtxt varchar2(4000);
BEGIN
metadata := JSON(q'#
{
"function" : "embedding",
"embeddingOutput" : "embedding",
"input" : { "input" : ["txt"]},
"maxSequenceLength" : 512,
"tokenizer" : "bert",
"suitableDistanceMetrics" : [ "DOT", "COSINE", "EUCLIDEAN"],
"pooling" : "Mean Pooling",
"normalization" : true,
"languages" : ["US"],
"modelDescription" : {
"description" : "This model was tuned for semantic search: Given a query/question, if can find relevant passages. It was trained on a large and diverse set of (question, a
nswer) pairs.",
"url" : "https://example.co/sentence-transformers/my_embedding_model"}
}
#');
-- load the onnx model
DBMS_VECTOR.IMPORT_ONNX_MODEL('my_embedding_model.onnx', 'doc_model', metadata);
END;
/
参照:
機械学習タスクにONNXモデルを使用する例については、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください216.1.12 LOAD_ONNX_MODEL_CLOUD
このプロシージャを使用すると、オブジェクト・ストレージからデータベースにONNXモデルをロードできます。
構文
DBMS_VECTOR.LOAD_ONNX_MODEL_CLOUD ( model_name IN VARCHAR2, credential IN VARCHAR2, uri IN VARCHAR2, metadata IN JSON DEFAULT JSON('{"function" : "embedding", '|| '"embeddingOutput" : "embedding", "input": {"input":["DATA"]}}') );
パラメータ
表216-8 LOAD_ONNX_MODEL_CLOUDプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
モデル名の形式は、 |
|
オブジェクト・ストアへのアクセスに使用する資格証明の名前。 |
|
ONNXモデルのURI。 |
|
モデルを記述するメタデータのJSONによる記述。 このメタデータには、モデルでサポートされている機械学習関数を少なくとも記述する必要があります。 モデルのメタデータ・パラメータの詳細は、「ONNXモデルのJSONメタデータ・パラメータ」を参照してください。 |
例
次の例には、DBMS_VECTOR.LOAD_ONNX_MODEL_CLOUD
プロシージャを使用したコード・スニペットが含まれています。
EXECUTE DBMS_VECTOR.LOAD_ONNX_MODEL_CLOUD(
model_name => 'database',
credential => 'MYCRED',
uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/all-MiniLM-L6-v2.onnx',
metadata => JSON('{"function" : "embedding", "embeddingOutput" : "embedding" , "input": {"input": ["DATA"]}}')
);
使用上のノート
モデルの名前は、次のような他の機械学習モデルで使用されるものと同じ制限に従います。
- スキーマ名を指定する場合は、128文字に制限されます。
- モデル名は123文字に制限されており、引用符なしの識別子のルールに従う必要があります。名前に使用できるのは、英数字、アンダースコア(_)、ドル記号($)およびシャープ記号(#)のみです。 最初の文字は、英字にする必要があります。
- モデルのサイズは1GBに制限されます。
- モデルは外部イニシャライザに依存しないようにします。 イニシャライザおよびその他のONNXの概念の詳細は、https://onnx.ai/onnx/intro/concepts.htmlを参照してください。
-
Pythonユーティリティによって準備されるモデルの入出力属性には、デフォルトの入力名および出力名があります。 これらのモデルは、JSONパラメータなしでロードできます。 例:
EXECUTE DBMS_VECTOR.LOAD_ONNX_MODEL_CLOUD( 'database', 'MYCRED', 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/all-MiniLM-L6-v2.onnx' );
参照:
機械学習タスクにONNXモデルを使用する例については、『Oracle Machine Learning for SQLユーザーズ・ガイド』を参照してください216.1.13 QUERY
上位k件の結果をJSON配列として返す類似検索操作を実行するには、DBMS_VECTOR.QUERY
関数を使用します。
構文
問合せがオーバーロードされ、CLOB
に加えてVECTOR
型としてquery_vector
が渡されるバージョンがサポートされます。
DBMS_VECTOR.QUERY (
TAB_NAME IN VARCHAR2,
VEC_COL_NAME IN VARCHAR2,
QUERY_VECTOR IN CLOB,
TOP_K IN NUMBER,
VEC_PROJ_COLS IN JSON_ARRAY_T DEFAULT NULL,
IDX_NAME IN VARCHAR2 DEFAULT NULL,
DISTANCE_METRIC IN VARCHAR2 DEFAULT 'COSINE',
USE_INDEX IN BOOLEAN DEFAULT TRUE,
ACCURACY IN NUMBER DEFAULT '90',
IDX_PARAMETERS IN CLOB DEFAULT NULL
) return JSON_ARRAY_T;
DBMS_VECTOR.QUERY (
TAB_NAME IN VARCHAR2,
VEC_COL_NAME IN VARCHAR2,
QUERY_VECTOR IN VECTOR,
TOP_K IN NUMBER,
VEC_PROJ_COLS IN JSON_ARRAY_T DEFAULT NULL,
IDX_NAME IN VARCHAR2 DEFAULT NULL,
DISTANCE_METRIC IN VARCHAR2 DEFAULT 'COSINE',
USE_INDEX IN BOOLEAN DEFAULT TRUE,
ACCURACY IN NUMBER DEFAULT '90',
IDX_PARAMETERS IN CLOB DEFAULT NULL
) return JSON_ARRAY_T;
パラメータ
JSON形式で入力パラメータを指定します。
表216-9 DBMS_VECTOR.QUERYパラメータ
パラメータ | 説明 |
---|---|
|
問い合せる表名 |
|
Vector列名 |
|
問合せベクトルは、 |
|
返される結果の数。 |
|
結果の一部として推定される列。 |
|
問い合せた索引の名前。 |
|
距離計算メトリック。 デフォルトは |
|
検索が近似検索と完全検索のいずれであるかを指定します。 デフォルトはTRUE (近似)です。 |
|
最低限必要な問合せの精度を指定します。 |
|
渡される |
DATA
この関数は、入力データ型をVARCHAR2
、NUMBER
、JSON
、BOOLEAN
またはCLOB
として受け入れます。
216.1.14 REBUILD_INDEX
ベクトル索引を再作成するには、DBMS_VECTOR.REBUILD_INDEX
関数を使用します。
用途
Hierarchical Navigable Small World (HNSW)ベクトル索引やInverted File Flat (IVF)ベクトル索引などのベクトル索引を再構築します。 idx_name
のみが指定されている場合は、get_ddl
を使用して索引を再作成します。 すべてのパラメータを指定すると、索引を削除してからdbms_vector.create_index()
へのコールが実行されます。
構文
DBMS_VECTOR.REBUILD_INDEX (
idx_name IN VARCHAR2,
table_name IN VARCHAR2 DEFAULT NULL,
idx_vector_col IN VARCHAR2 DEFAULT NULL,
idx_include_cols IN VARCHAR2 DEFAULT NULL,
idx_partitioning_scheme IN VARCHAR2 DEFAULT NULL,
idx_organization IN VARCHAR2 DEFAULT NULL,
idx_distance_metric IN VARCHAR2 DEFAULT 'COSINE',
idx_accuracy IN NUMBER DEFAULT 90,
idx_parameters IN CLOB DEFAULT NULL,
idx_parallel_creation IN NUMBER DEFAULT 1,
);
パラメータ
パラメータ | 説明 |
---|---|
|
再作成する索引の名前。 |
|
索引を作成する表。 |
|
索引を作成するVector列。 |
idx_include_cols |
索引でカバーされる列名のカンマ区切りリスト。 |
|
IVF索引のパーティション化スキーム:
IVF索引は、パーティション表のグローバル索引とローカル索引の両方をサポートします。 デフォルトでは、これらの索引は重心によってグローバルにパーティション化されます。 ローカルIVF索引を作成することを選択できます。これにより、実表のパーティションまたはサブパーティションと索引パーティションの間に1対1の関係が提供されます。 これらのパーティション化スキームの詳細は、「Inverted File Flatベクトル索引のパーティション化スキーム」を参照してください。 |
|
索引構成:
これらの組織タイプの詳細は、「ベクトル索引の様々なカテゴリの管理」を参照してください。 |
|
ベクトル間の距離を計算するために使用される距離メトリックまたは数学的関数:
これら各メトリックの詳細は、「ベクトル距離関数および演算子」を参照してください。 |
|
近似検索問合せの実行時に目指す近似検索の実行のターゲット精度。 ベクトル索引を使用した近似類似検索の理解で説明されているように、使用する索引タイプに応じて、パーセント値を指定するか、内部パラメータ値を指定することによって、デフォルト以外のターゲット精度値を指定できます。
|
|
ベクトル索引のタイプと関連パラメータ。 索引付けパラメータをJSON形式で指定します:
|
|
索引作成に使用されるパラレル・スレッドの数。 |
例
-
HNSW索引のneighborsとefConstructionを指定します:
dbms_vector.rebuild_index( 'v_hnsw_01', 'vpt01', 'EMBEDDING', NULL, NULL, 'INMEMORY NEIGHBOR GRAPH', 'EUCLIDEAN', 95, '{"type" : "HNSW", "neighbors" : 3, "efConstruction" : 4}');
-
IVF索引のパーティション数を指定します:
dbms_vector.rebuild_index( 'V_IVF_01', 'vpt01', 'EMBEDDING', NULL, NULL, 'NEIGHBOR PARTITIONS', 'EUCLIDEAN', 95, '{"type" : "IVF", "partitions" : 5}');
216.1.15 RERANK
DBMS_VECTOR.RERANK
関数は、より関連性の高い検索出力を取得するために、結果の初期セットを再評価および順序変更するために使用します。
用途
類似性検索と検索拡張生成(RAG)の両方のシナリオで検索結果の関連性と品質を向上させるため。
再ランク付けは、最も関連性の高いドキュメントまたはチャンクが優先されるようにすることで、LLMに取り込まれる情報の品質を向上させます。 これは、ハルシネーションの減少と、生成された出力の精度向上につながります。
この操作について、Oracle AI Vector Searchでは、CohereおよびVertex AIが提供する再ランク付けモデルをサポートしています。
警告:
データベースの特定の機能により、たとえばREST APIへのアクセスを容易にするJSON仕様を使用することで、サードパーティによって個別に提供されるサービスにアクセスできることもあります。
こうした機能の使用は、お客様自身の責任においてのみ行われ、お客様は当該のサードパーティ・サービスの使用に関連するあらゆる利用規約を遵守する責任を負います。 サードパーティ・サービスに関するその他の利用規約にかかわらず、こうしたデータベース機能を使用することは、お客様がそのリスクを受け入れ、そうしたアクセスにより生じた一切の損害についてOracleの責任または法的責任を明示的に排除することで成立します。
構文
DBMS_VECTOR.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>",
...
}
表216-10 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
}
表216-11 追加の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.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.rerank(:query, json(:initial_retrieval_docs), json(params)); dbms_output.put_line(json_serialize(reranked_output)); end; /
エンドツーエンドの例:
この関数を使用してエンドツーエンドのシナリオ例を実行する場合は、RAGの結果を改善するための再ランク付けの使用を参照してください。
216.1.16 UTL_TO_CHUNKS
大きいプレーン・テキスト・ドキュメントをテキストの小さなチャンクに分割するには、DBMS_VECTOR.UTL_TO_CHUNKS
チェーン可能ユーティリティ関数を使用します。
用途
テキストからチャンクへの変換を実行します。 このチェーン可能ユーティリティ関数は、操作の際に内部的にVECTOR_CHUNKS
SQLファンクションをコールします。
大きなドキュメントを埋め込むには、まず、チャンク化と呼ばれる分割プロセス(「データ変換のステージの理解」を参照)によって、そのドキュメントを複数の適切なサイズのセグメントまたはチャンクに分割する必要があります。 チャンクは、単語(特定の単語や単語の断片を取得)、文(特定の意味を取得)、段落(より広いテーマを取得)のいずれかになります。 単一のドキュメントを複数のチャンクに分割し、それぞれをベクトルに変換できます。
構文
DBMS_VECTOR.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.utl_to_chunks(D.text,
JSON('{ "by" : "words",
"max" : "100",
"overlap" : "0",
"split" : "recursively",
"language" : "american",
"normalize": "all" }')) C;
エンドツーエンドの例:
この関数を使用してエンドツーエンドのサンプル・シナリオを実行する場合は、埋込みを使用したチャンク化の実行およびチャンク化パラメータの構成を参照してください。
関連トピック
216.1.17 UTL_TO_EMBEDDING and UTL_TO_EMBEDDINGS
DBMS_VECTOR.UTL_TO_EMBEDDING
およびDBMS_VECTOR.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.UTL_TO_EMBEDDING ( DATA IN CLOB, PARAMS IN JSON default NULL ) return VECTOR;
DBMS_VECTOR.UTL_TO_EMBEDDINGS ( DATA IN VECTOR_ARRAY_T, PARAMS IN JSON default NULL ) return VECTOR_ARRAY_T;
-
イメージからベクトルへ:
DBMS_VECTOR.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>"
}
表216-12 データベース・プロバイダ・パラメータ詳細
パラメータ | 説明 |
---|---|
|
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>" }
表216-13 サード・パーティ・プロバイダ・パラメータ詳細
パラメータ | 説明 |
---|---|
|
この操作のためにアクセスするサードパーティ・サービス・プロバイダ。 埋込みモデルにアクセスするために、指定したプロバイダに対してRESTコールが行われます。 イメージ入力の場合は、 テキスト入力の場合は、次のいずれかの値を指定します:
|
|
次の形式の資格証明の名前:
資格証明名には、REST APIコールを行うためのプロバイダにアクセスできるようにする認証資格証明が保持されます。 まず、資格証明を作成および格納するために |
|
サポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされている、各RESTコールのサードパーティ・プロバイダ・エンドポイントのURL。 |
|
次の形式でのサードパーティ埋込みモデルの名前:
スキーマを指定しない場合は、プロシージャ実行者のスキーマが使用されます。 ノート:
|
|
リクエストを完了するまでの最長待機時間。 デフォルト値は |
|
一度にリクエストするベクトルの最大数。 たとえば、バッチ・サイズが RESTコールの場合、入力のバッチを一度に送信する方が1コールごとに1つの入力をリクエストするよりも効率的です。 バッチ・サイズを大きくするとパフォーマンスが向上しますが、特にプロバイダにレート制限がある場合は、バッチ・サイズを小さくすることでメモリーとデータの使用量を削減できることがあります。 デフォルト値や最大許容値は、サードパーティ・プロバイダの設定によって異なります。 |
|
特定のサードパーティ・プロバイダに対してAPIをコールできる最大回数。 整数nに設定すると、 |
追加のサードパーティ・プロバイダのパラメータ:
オプションで、プロバイダ固有の追加パラメータを指定します。
表216-14 追加の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",
"max_count" : 500
}
{
"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"
}
ノート:
これは、LlamafileやvLLMなど、多数のOpenAI互換サード・パーティ・プロバイダの構成を設定する方法の一例にすぎません。 provider
値にはopenai
を指定する必要がありますが、url
値は、選択したサード・パーティ・プロバイダのRESTエンドポイントによって異なります。
資格証明を無効にするには、host
をlocal
に設定します。 サード・パーティ・プロバイダでモデル名(Ollama、vLLMなど)が必要な場合は、model
を目的のモデルに設定します。 それ以外の場合は、model
をany
などの任意の文字列に設定できます(たとえば、Llamafileを使用している場合)。
{
"provider": "openai",
"url": "http://localhost:8080/v1/chat/completions",
"host": "local",
"model": "any"
}
{
"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.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.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.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.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.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.utl_to_embeddings( dbms_vector.utl_to_chunks(dbms_vector.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
を使用して様々なエンドツーエンドのシナリオ例を実行するには、「チャンク化と埋込みの実行」を参照してください。
216.1.18 UTL_TO_GENERATE_TEXT
DBMS_VECTOR.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.UTL_TO_GENERATE_TEXT ( DATA IN CLOB, PARAMS IN JSON default NULL ) return CLOB;
-
イメージからテキストへ:
DBMS_VECTOR.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>"
}
表216-15 UTL_TO_GENERATE_TEXTパラメータの詳細
パラメータ | 説明 |
---|---|
|
テキストを生成するためにアクセスするサポート対象のRESTプロバイダ。 次のいずれかの値を指定します。
|
|
次の形式の資格証明の名前:
資格証明名には、REST APIコールを行うためのプロバイダにアクセスできるようにする認証資格証明が保持されます。 まず、資格証明を作成および格納するために |
|
サポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされている、各RESTコールのサードパーティ・プロバイダ・エンドポイントのURL。 |
|
次の形式でのサードパーティ・テキスト生成モデルの名前:
モデル名がスキーマ修飾されていない場合は、プロシージャ実行者のスキーマが使用されます。 ノート: Generative AIの場合、サポートされているすべてのサードパーティ・モデルがサポートされているサードパーティ・プロバイダの操作およびエンドポイントにリストされています。 |
|
リクエストを完了するまでの最長待機時間。 デフォルト値は |
|
特定のサードパーティ・プロバイダに対してAPIをコールできる最大回数。 整数nに設定すると、 |
追加のサードパーティ・プロバイダのパラメータ:
オプションで、プロバイダ固有の追加パラメータを指定します。
表216-16 追加の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.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.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.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.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.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.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; /
エンドツーエンドの例:
エンドツーエンドのサンプル・シナリオを実行する場合は、イメージ・コンテンツの説明を参照してください。