クエリベクトル
インデックスをクエリすること、またはベクトル検索は、入力ベクトルを提供することでインデックスを検索し、設定された距離メトリックに基づいて最も近いベクトルを返すことを可能にします。
オプションとして、メタデータフィルターやネームスペースを適用して、ベクトル検索空間を絞り込むことができます。
インデックスにクエリとしてベクトルを渡すには、インデックス自体のquery()メソッドを使用します。
クエリベクトルは、JavaScriptの数値の配列、32ビット浮動小数点数または64ビット浮動小数点数である必要があります:number[]、Float32Array、またはFloat64Array。 ベクトルを挿入する場合とは異なり、クエリベクトルにはIDやメタデータは必要ありません。
// クエリベクトルの次元は、クエリされるVectorizeインデックスの次元と一致する必要がありますlet queryVector = [54.8, 5.5, 3.1, ...];let matches = await env.YOUR_INDEX.query(queryVector);これは、Vectorizeインデックスに設定された距離メトリックに基づいて、以下のような一致のセットを返します。cosine距離メトリックを使用した例の応答:
{ "matches": { "count": 5, "matches": [ { "score": 0.999909486, "id": "5" }, { "score": 0.789848214, "id": "4" }, { "score": 0.720476967, "id": "4444" }, { "score": 0.463884663, "id": "6" }, { "score": 0.378282232, "id": "1" } ] }}オプションとして、返される結果の数や、結果にメタデータと値を含めるかどうかを変更できます:
// クエリベクトルの次元は、クエリされるVectorizeインデックスの次元と一致する必要がありますlet queryVector = [54.8, 5.5, 3.1, ...];// topKのデフォルトは5; returnValuesのデフォルトはfalse; returnMetadataのデフォルトは"none"let matches = await env.YOUR_INDEX.query(queryVector, { topK: 1, returnValues: true, returnMetadata: "all",});これは、Vectorizeインデックスに設定された距離メトリックに基づいて、以下のような一致のセットを返します。cosine距離メトリックを使用した例の応答:
{ "matches": { "count": 1, "matches": [ { "score": 0.999909486, "id": "5", "values": [58.79999923706055, 6.699999809265137, 3.4000000953674316, ...], "metadata": { "url": "/products/sku/55519183" } } ] }}追加の例については、Vectorize APIを参照してください。
Workers AIのテキスト埋め込みモデルから埋め込みを生成する場合、env.AI.run()からの応答タイプは、応答ベクトルのshape - 例:[1,768] - とベクトルdataを含むオブジェクトです:
interface EmbeddingResponse { shape: number[]; data: number[][];}
let userQuery = "ユーザーまたはサービスからのクエリ";const queryVector: EmbeddingResponse = await env.AI.run( "@cf/baai/bge-base-en-v1.5", { text: [userQuery], },);ベクトルをVectorizeインデックスのquery()メソッドに渡すときは、トップレベルの応答ではなく、.dataサブオブジェクトのベクトル埋め込みのみを渡します。
例えば:
let matches = await env.TEXT_EMBEDDINGS.query(queryVector.data[0], { topK: 1 });queryVectorまたはqueryVector.dataを渡すと、query()がエラーを返します。
OpenAIのJavaScriptクライアントAPI ↗および埋め込みAPI ↗を使用する場合、embeddings.createからの応答タイプは、モデル、使用情報、および要求されたベクトル埋め込みを含むオブジェクトです。
const openai = new OpenAI({ apiKey: env.YOUR_OPENAPI_KEY });
let userQuery = "ユーザーまたはサービスからのクエリ";
let embeddingResponse = await openai.embeddings.create({ input: userQuery, model: "text-embedding-ada-002",});Workers AIと同様に、Vectorizeインデックスをクエリする際には、EmbeddingResponseラッパーではなく、ベクトル埋め込み自体(.embedding[0])を提供する必要があります:
let matches = await env.TEXT_EMBEDDINGS.query(embeddingResponse.embedding[0], { topK: 1,});