仕組み
予測クエリは、Vector Search Edition の組み込み埋め込みモデルを使用して、テキスト、画像、動画などのコンテンツをベクターに変換し、そのベクターに基づいて結果を取得します。
既存のベクターがあり、Vector Search Edition インスタンスで直接クエリを実行したい場合は、「ベクタークエリ」をご参照ください。
エンドポイント
/vector-service/inference-query
上記 URL には、リクエストヘッダー、エンコーディング、その他の要素は含まれていません。
このパスの前に、ご利用のインスタンスのホストアドレスを付加する必要があります。
各パラメーターの詳細については、後述の「リクエスト本文のパラメーター」セクションをご参照ください。
リクエストプロトコル
HTTP
リクエストメソッド
POST
サポートされているフォーマット
JSON
認証
次のメソッドを使用して、権限付与の値を計算します:
パラメーター | タイプ | 説明 |
accessUserName | string | ユーザー名。インスタンスのDetails>Network Informationセクションで確認できます。 |
accessPassWord | string | パスワードです。インスタンスのDetails>Network Information セクションで設定または変更できます。 |
import com.aliyun.darabonba.encode.Encoder;
import com.aliyun.darabonbastring.Client;
public class GenerateAuthorization {
public static void main(String[] args) throws Exception {
String accessUserName = "username";
String accessPassWord = "password";
String realmStr = "" + accessUserName + ":" + accessPassWord + "";
String authorization = Encoder.base64EncodeToString(Client.toBytes(realmStr, "UTF-8"));
System.out.println(authorization);
}
}正しくフォーマットされた権限付与値の例:
cm9vdDp******mdhbA==HTTP リクエストを行う際は、値の前に `Basic ` を付け、`Authorization` ヘッダーで指定します。
例 (リクエストヘッダー内):
Authorization: Basic cm9vdDp******mdhbA==リクエスト本文のパラメーター
パラメーター | 説明 | デフォルト | タイプ | 必須 |
tableName | クエリ対象のテーブル名。 | — | string | はい |
indexName | クエリ対象のインデックス名。 | 最初の設定済みインデックス | string | いいえ |
content | クエリコンテンツ。融合ベクター取得を含まないクエリに使用します。 | — | string | はい (融合ベクター取得以外の場合) |
contents | クエリコンテンツ項目のリスト。複数のモダリティからのコンテンツをサポートする融合ベクター取得に使用します。 | — | list[string] | はい (融合ベクター取得の場合) |
contentType | コンテンツのデータの型。有効値:`text` (テキスト)、`image_encode` (Base64 エンコードされた画像)、`video_uri` (動画の OSS パス)、`video_encode` (Base64 エンコードされた動画)。 フュージョンベクター取得では、各タイプが | — | string | いいえ |
modal | 埋め込みモデルのモダリティ。有効値:`text` (Text-to-Text または Text-to-Image 取得用)、`image` (画像検索用)、`video` (動画取得用、入力としてテキスト、画像、動画をサポート)、`fusion` (融合ベクター取得用、複数のフィールドを単一のベクターにエンコードしてクロスモーダル取得を実現)。 | — | string | はい |
videoFrameTopK | 動画クエリで取得するフレーム数。 | 100 | int | いいえ |
namespace | クエリ対象の名前空間。 | "" | string | いいえ |
topK | 返される結果の数。 | 100 | int | いいえ |
includeVector | 応答にベクターを含めるかどうかを指定します。 | false | bool | いいえ |
outputFields | 応答に含めるフィールドのリスト。 | [] | list[string] | いいえ |
order | 結果のソート順。有効値:ASC (昇順)、DESC (降順)。 | ASC | string | いいえ |
searchParams | アルゴリズム固有のクエリパラメーター: | "" | string | いいえ |
filter | 検索に適用するフィルター式。 | "" | string | いいえ |
scoreThreshold | スコアに基づいて結果をフィルターします。 ユークリッド距離を使用する場合、`scoreThreshold` より小さいスコアの結果を返します。内積を使用する場合、`scoreThreshold` より大きいスコアの結果を返します。 | デフォルトではフィルターなし | float | いいえ |
応答パラメーター
フィールド | 説明 | タイプ |
result | 一致する項目のリスト。 | list[Item] |
totalCount | 結果リスト内の項目数。 | int |
totalTime | エンジンの処理時間 (ミリ秒、ms)。 | float |
errorCode | エラーコード。このフィールドはエラー発生時にのみ表示されます。 | int |
errorMsg | エラーメッセージ。このフィールドはエラー発生時にのみ表示されます。 | string |
Item オブジェクトの定義
フィールド | 説明 | タイプ |
score | 距離スコア。 | float |
fields | フィールド名とその対応する値のマップ。 | map<string, FieldType> |
vector | ベクター値。 | list[float] |
id | プライマリキーの値。型は定義されたフィールドの型と一致します。 | FieldType |
namespace | ベクターの名前空間。このフィールドは名前空間が設定されている場合にのみ返されます。 | string |
API 応答には、内部デバッグ目的で__source__やcoveredPercentなどの追加フィールドが含まれる場合があります。これらのフィールドはビジネスロジックに影響を与えないため、無視しても問題ありません。
例
Text-to-Text 取得
リクエスト本文:
{ "tableName": "gist", "indexName": "test", "content": "hello", "modal": "text", "topK": 3, "searchParams":"{\"qc.searcher.scan_ratio\":0.01}", "includeVector": true }応答:
{ "result":[ { "id": 1, "score":1.0508723258972169, "vector": [0.1, 0.2, 0.3] }, { "id": 2, "score":1.0329746007919312, "vector": [0.2, 0.2, 0.3] }, { "id": 3, "score":0.980593204498291, "vector": [0.3, 0.2, 0.3] } ], "totalCount":3, "totalTime":2.943 }
画像取得
Text-to-Image 取得:
リクエスト本文:
{ "tableName": "gist", "indexName": "test", "content": "Bicycle", "modal": "text", "topK": 3, "searchParams":"{\"qc.searcher.scan_ratio\":0.01}", "includeVector": true }応答:
{ "result":[ { "id": 1, "score":1.0508723258972169, "vector": [0.1, 0.2, 0.3] }, { "id": 2, "score":1.0329746007919312, "vector": [0.2, 0.2, 0.3] }, { "id": 3, "score":0.980593204498291, "vector": [0.3, 0.2, 0.3] } ], "totalCount":3, "totalTime":2.943 }
画像検索:
リクエスト本文:
{ "tableName": "gist", "indexName": "test", "content": "base64-encoded image data", "modal": "image", "topK": 3, "searchParams":"{\"qc.searcher.scan_ratio\":0.01}", "includeVector": true }応答:
{ "totalCount": 5, "result": [ { "id": 5, "score": 1.103209137916565 }, { "id": 3, "score": 1.1278988122940064 }, { "id": 2, "score": 1.1326735019683838 } ], "totalTime": 242.615 }
主体識別
リクエスト本文:
range パラメーターなしの場合:
{ "tableName": "gist", "indexName": "test", "content": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQ", "modal": "image", "searchParams": "{\"crop\": true}", "topK": 3, "includeVector": true }注:
"crop":trueは主体識別を有効にします。`range` パラメーターが指定されていない場合、モデルは自動的に主体を検出します。range パラメーターありの場合:
{ "tableName": "gist", "indexName": "test", "content": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQ", "modal": "image", "searchParams": "{\"crop\": true, \"range\": \"100,100,60,70\"}", "topK": 3, "includeVector": true }"crop":true, "range":"100,100,60,70"は、画像の指定された領域内で主体識別を有効にします。`range` の 4 つの数値は、領域の左上隅の `(x, y)` 座標、幅、高さを表します。応答:
{ "result":[ { "id": 1, "score":1.0508723258972169, "vector": [0.1, 0.2, 0.3] } ], "__meta__": { "__range__": "100,100,60,70;", } "totalCount":1, "totalTime":2.943 }`modal=image` で主体識別を実行すると、応答に `__range__` フィールドが含まれます。
__range__フィールドは、検出された主体の領域を `x,y,width,height` 形式で示します。モデルが複数の主体を識別した場合、それらの領域は
__range__フィールドにスコアの降順でリストされます。クエリはデフォルトで最初 (最高スコア) の主体の結果を返します。
Text-to-Video 取得
リクエスト本文:
{ "tableName": "video", "content": "hello", "modal": "video", "topK": 3, "videoFrameTopK":100, "contentType":"text", "searchParams":"{\"qc.searcher.scan_ratio\":0.01}" }応答:
{ "result":[ { "videoId": 1, "videoUri": "oss://...", "fields" : { "tag" : "demo" }, "clips": [{ "queryStartTime": 5, "startTime": 5, "duration": 5, "queryStartFrameIndex": 150, "queryEndFrameIndex": 300, "startFrameIndex": 150, "endFrameIndex": 300, "sim": 0.8 }] } ], "totalCount":1, "totalTime":2.943 }
ビデオ対ビデオ取得
サポートされている動画フォーマットには、MP4、AVI、MKV、MOV、FLV、WebM があります。
リクエスト本文:
OSS URI を使用する場合:
{ "tableName": "video", "content": "oss://...", "modal": "video", "topK": 3, "videoFrameTopK":100, "contentType":"video_uri", "searchParams":"{\"qc.searcher.scan_ratio\":0.01}" }Base64 エンコードされた動画データを使用する場合:
{ "tableName": "video", "content": "data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAABAGlxxxxxxx", "modal": "video", "topK": 3, "videoFrameTopK":100, "contentType":"video_encode", "searchParams":"{\"qc.searcher.scan_ratio\":0.01}" }フォーマットは
data:video/{format};base64,{base64_video}です。各要素の説明は次のとおりです。video/{format}:動画のフォーマット。たとえば、MP4 ファイルの場合はvideo/mp4を使用します。base64_video:Base64 エンコードされた動画データ。
応答:
{ "result":[ { "videoId": 1, "videoUri": "oss://...", "fields" : { "tag" : "demo" }, "clips": [{ "queryStartTime": 5, "startTime": 5, "duration": 5, "queryStartFrameIndex": 150, "queryEndFrameIndex": 300, "startFrameIndex": 150, "endFrameIndex": 300, "sim": 0.8 }] } ], "totalCount":1, "totalTime":2.943 }
画像による動画取得
サポートされている画像フォーマットには、PNG、JPEG、JPG があります。
リクエスト本文:
{ "tableName": "video", "content": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAxxxxxx", "modal": "video", "topK": 3, "videoFrameTopK":100, "contentType":"image_encode", "searchParams":"{\"qc.searcher.scan_ratio\":0.01}" }画像は Base64 データとして提供されます。エンコードされたデータを
contentパラメーターにdata:image/{format};base64,{base64_image}のフォーマットで渡します。各要素の説明は次のとおりです。image/{format}:画像のフォーマット。たとえば、JPG ファイルの場合はimage/jpegを使用します。base64_image:Base64 エンコードされた画像データ。
応答:
{ "result":[ { "videoId": 1, "videoUri": "oss://...", "fields" : { "tag" : "demo" }, "clips": [{ "queryStartTime": 5, "startTime": 5, "duration": 5, "queryStartFrameIndex": 150, "queryEndFrameIndex": 300, "startFrameIndex": 150, "endFrameIndex": 300, "sim": 0.8 }] } ], "totalCount":3, "totalTime":2.943 }
融合ベクター取得
融合ベクター取得は、テキストや画像など、複数のモダリティからのコンテンツを単一の融合ベクターにエンコードし、クロスモーダル取得を実現します。この機能を使用する前に、テーブル設定で融合ベクターフィールドを構成する必要があります。詳細については、「融合ベクターの構成」をご参照ください。
融合ベクター取得は、他の予測クエリと以下の点で異なります:
modalパラメーターはfusionに設定されます。複数のモダリティからのコンテンツを渡すために、
contentパラメーターの代わりにcontentsパラメーター (リスト) が使用されます。contentTypeパラメーターには、contentsリストの項目に対応する型がカンマ区切りで含まれます。リクエスト本文:
{ "tableName": "gist", "indexName": "test", "contents": ["hello", "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAxxxxxx"], "modal": "fusion", "contentType": "text,image_encode", "topK": 3, "searchParams":"{\"qc.searcher.scan_ratio\":0.01}", "includeVector": true }contentsの最初の要素はテキスト "hello" で、2 番目の要素は Base64 エンコードされた画像データです。contentTypeでは、textとimage_encodeがそれぞれcontentsの 2 つの要素の型に対応しています。応答:
{ "result":[ { "id": 1, "score":1.0508723258972169, "vector": [0.1, 0.2, 0.3] }, { "id": 2, "score":1.0329746007919312, "vector": [0.2, 0.2, 0.3] }, { "id": 3, "score":0.980593204498291, "vector": [0.3, 0.2, 0.3] } ], "totalCount":3, "totalTime":2.943 }