カスタムモデルを使用すると、外部 HTTP 埋め込みサービスを OpenSearch Vector Search Edition に接続できます。これにより、プラットフォームはインデックス作成時にデータを自動的にベクトル化し、検索時にクエリを変換します。登録されると、カスタムモデルは組み込みモデルと同じように機能します。テーブルフィールドに割り当てると、OpenSearch がユーザーに代わってそれを呼び出します。
次の4つのモデルタイプがサポートされています。
| モデルタイプの値 | 説明 |
|---|---|
text_embedding | 高密度テキスト埋め込みモデル。 dimension が必要です。 |
text_sparse_embedding | スパーステキスト埋め込みモデル。 |
image_embedding | イメージベクターモデル。 dimension が必要です。 |
image_analyze | イメージコンテンツ解析モデル。 |
前提条件
開始する前に、以下を準備してください。
OpenSearch Vector Search Edition インスタンス
HTTP または HTTPS (PUT または POST) 経由でアクセス可能な外部埋め込みサービス
サービスのエンドポイント URL、HTTP メソッド、および認証情報
カスタムモデルの作成
OpenSearch インスタンスの詳細ページの左側のナビゲーションウィンドウで、[モデル管理] > [モデル] を選択します。
[カスタムモデル] タブで、[モデルの作成] をクリックします。
「[カスタムモデルの作成]」パネルで、モデル構成を JSON オブジェクトとして入力します。
モデル構成の形式
次の例は、密テキスト埋め込みモデルの完全な構成を示しています。各フィールドについては、以下の「パラメーター」セクションで説明しています。
{
"modelName": "custom_model",
"modelType": "text_embedding",
"dimension": 1536,
"url": "http://xxx/api/v2/services/embeddings",
"method": "POST",
"request": {
"header": {
"Authorization": "fj42091fjlgnlsvu023nva",
"Content-Type": "application/json"
},
"urlParams": {
"build": {},
"search": {}
},
"requestBody": "{\"input\": [\"%{input}\"],\"input_type\": \"${input_type}\"}",
"parameters": {
"build": {
"input_type": "document"
},
"search": {
"input_type": "query"
}
}
},
"response": {
"embeddings": "$.result.embeddings[*].embedding"
}
}パラメーター
| パラメーター | 説明 |
|---|---|
modelName | モデルの名前。 |
modelType | モデルのタイプ。有効な値: text_embedding、text_sparse_embedding、image_embedding、image_analyze。説明については、このページ上部の表をご参照ください。 |
dimension | ディメンション数。modelType が text_embedding または image_embedding の場合に必須です。 |
url | モデルサービスのエンドポイント。 |
method | モデルサービスにアクセスするための HTTP メソッド。有効な値: PUT および POST。 |
request | リクエスト構成。 |
request.header | モデルサービスに修正なしで渡される HTTP リクエストヘッダー。認証ヘッダーと Content-Type ヘッダーをここに含めます。 |
request.urlParams | リクエスト URL に追加される URL クエリパラメーター (例: ?abc=123)。 |
request.urlParams.build | インデックス作成時に使用される URL パラメーター。 |
request.urlParams.search | クエリ時に使用される URL パラメーター。 |
request.requestBody | テンプレート文字列としてのリクエストボディ。%{parameter_name} を使用して変数を挿入します。組み込み変数: %{input} (入力テキスト) および %{modal} (マルチモーダルモデルのモダリティ)。 |
request.parameters | リクエストボディテンプレートに挿入されるフェーズ固有のパラメーター。埋め込みサービスがドキュメントのインデックス作成とクエリのエンコーディングで異なるパラメーターを必要とする場合 (例: インデックス作成時に input_type: document を使用し、検索時に input_type: query を使用する非対称埋め込みモデル) に使用します。 |
request.parameters.build | インデックス作成時のリクエストボディで使用されるパラメーター。 |
request.parameters.search | クエリ時のリクエストボディで使用されるパラメーター。 |
response | モデル応答から埋め込みベクトルを抽出する JSON パス式。 |
JSON パスリファレンス
OpenSearch は、モデルの応答から埋め込みベクトルを抽出するために JSON パス式を使用します。すべてのパスは $ (ルート要素) で始まる必要があります。
オペレーター
| オペレーター | 説明 |
|---|---|
$ | ルート要素。すべてのパスは $ で始まる必要があります。 |
* | ワイルドカード。名前または配列インデックスの代わりに任意の値に一致します。 |
.<name> | オブジェクト属性にアクセスします。 |
[<number>] | インデックスで配列要素にアクセスします。 |
例
次の応答が与えられた場合:
{
"store": {
"books": [
{ "title": "java", "price": 56 },
{ "title": "c++", "price": 99 }
]
}
}| 目的 | JSON パス | 結果 |
|---|---|---|
| すべての書籍のタイトルを抽出 | $.store.books[*].title | ["java", "c++"] |
| 最初の書籍のタイトルを抽出 | $.store.books[0].title | ["java"] |
モデルの管理
モデルを検索するには、[カスタムモデル] タブをクリックし、[モデル] ページの [操作] 列を使用して、以下のいずれかの操作を実行できます。
| 操作 | 説明 |
|---|---|
| デバッグ | サンプル入力を送信して応答を検査し、モデルをテストします。返された埋め込みが期待どおりのディメンション数 (dimension 設定と一致) を持ち、その値が有効であることを確認してください。 |
| 編集 | モデル構成を更新します。 |
| 無効化 | モデルがデータとクエリを処理するのを停止します。このモデルを使用するテーブルは、新しいデータをベクトル化したり、関連するクエリを処理したりしなくなります。注意して進めてください。 |
| 復元 | 無効化されたモデルを再度有効にします。 |
| 削除 | モデルを完全に削除します。無効化されたモデルのみ削除できます。 |
テーブルでのカスタムモデルの使用
カスタムモデルをテーブルフィールドに適用するには:
テーブル構成を開きます。
前処理するフィールドの[設定]をクリックします。
利用可能なモデルのリストからカスタムモデルを選択します。


構成を保存すると、OpenSearch はインデックス作成時に(build パラメーターを使用)およびクエリ実行時に(search パラメーターを使用)自動的にモデルを呼び出します。