コンテンツにスキップ

ベクトルの挿入

Vectorize インデックスは、任意のポイントでベクトルを挿入できるようにします。Vectorize は、インデックスを裏で最適化し、新しいベクトルが追加されたり既存のベクトルが更新されたりしても、ベクトル検索が効率的に保たれるようにします。

サポートされているベクトル形式

Vectorize は、3つの形式のベクトルをサポートしています:

ほとんどの場合、number[] 配列は他の API を扱う際に最も簡単であり、ほとんどの機械学習 API の戻り値の型です。

メタデータ

メタデータは、挿入またはアップサート時にベクトルに添付できるオプションのキーと値のペアのセットであり、ベクトル自体に関するデータを埋め込んだり共置したりすることができます。

メタデータのキーは空であってはならず、ドット文字(.)やダブルクオート文字(")を含むことができず、ドル文字($)で始まってはなりません。

メタデータは以下の目的で使用できます:

  • ベクトル埋め込みが表すコンテンツを検索するためのオブジェクトストレージキー、データベース UUID、またはその他の識別子を含める。
  • 生のコンテンツ(メタデータの制限まで)、これにより小さなコンテンツの追加検索をスキップできます。
  • ベクトル埋め込みが生成された日時や生成方法を説明する日付、タイムスタンプ、またはその他のメタデータ。

例えば、画像を表すベクトル埋め込みには、生成元のR2オブジェクトへのパス、フォーマット、カテゴリのルックアップを含めることができます:

{ id: '1', values: [32.4, 74.1, 3.2, ...], metadata: { path: 'r2://bucket-name/path/to/image.png', format: 'png', category: 'profile_image' } }

ネームスペース

ネームスペースは、インデックス内のベクトルをセグメント化する方法を提供します。例えば、顧客、商人、または店舗 ID によって。

ベクトルをネームスペースに関連付けるには、挿入またはアップサート操作を行う際にオプションで namespace: string 値を提供できます。クエリ時には、検索対象のネームスペースをオプションのパラメータとして渡すことができます。

ネームスペースは最大64文字(バイト)までの長さで、インデックスごとに最大1,000のネームスペースを持つことができます。詳細については、制限のドキュメントを参照してください。

クエリ操作でネームスペースが指定されると、そのネームスペース内のベクトルのみが検索に使用されます。ネームスペースフィルタリングは、ベクトル検索の前に適用されます。

ネームスペースを持つベクトルを挿入するには:

// モックベクトル
// 機械学習モデルからのベクトルは通常、約100から1536次元の幅があります(またはそれ以上)。
const sampleVectors: Array<VectorizeVector> = [
{
id: "1",
values: [32.4, 74.1, 3.2, ...],
namespace: "text",
},
{
id: "2",
values: [15.1, 19.2, 15.8, ...],
namespace: "images",
},
{
id: "3",
values: [0.16, 1.2, 3.8, ...],
namespace: "pdfs",
},
];
// ベクトルを挿入し、挿入されたベクトルのカウントとそのベクトル ID を返します。
let inserted = await env.TUTORIAL_INDEX.insert(sampleVectors);

ネームスペース内のベクトルをクエリするには:

// queryVector はネームスペース内のベクトルに対して検索されます(のみ)
let matches = await env.TUTORIAL_INDEX.query(queryVector, {
namespace: "images",
});

Workers API

Cloudflare Worker 内のインデックスで利用可能な insert() および upsert() メソッドを使用して、現在のインデックスにベクトルを挿入します。

// モックベクトル
// 機械学習モデルからのベクトルは通常、約100から1536次元の幅があります(またはそれ以上)。
const sampleVectors: Array<VectorizeVector> = [
{
id: "1",
values: [32.4, 74.1, 3.2, ...],
metadata: { url: "/products/sku/13913913" },
},
{
id: "2",
values: [15.1, 19.2, 15.8, ...],
metadata: { url: "/products/sku/10148191" },
},
{
id: "3",
values: [0.16, 1.2, 3.8, ...],
metadata: { url: "/products/sku/97913813" },
},
];
// ベクトルを挿入し、挿入されたベクトルのカウントとそのベクトル ID を返します。
let inserted = await env.TUTORIAL_INDEX.insert(sampleVectors);

追加の例については、Vectorize APIを参照してください。

wrangler CLI

ベクトル埋め込みを直接一括アップロードできます:

  • ファイルは改行区切りの JSON(NDJSON 形式)でなければなりません:各完全なベクトルは改行で区切られ、配列やオブジェクト内には含まれません。
  • ベクトルは完全であり、各ベクトルに一意の文字列 id を含める必要があります。

NDJSON 形式のファイルの例:

{ "id": "4444", "values": [175.1, 167.1, 129.9], "metadata": {"url": "/products/sku/918318313"}}
{ "id": "5555", "values": [158.8, 116.7, 311.4], "metadata": {"url": "/products/sku/183183183"}}
{ "id": "6666", "values": [113.2, 67.5, 11.2], "metadata": {"url": "/products/sku/717313811"}}
Terminal window
wrangler vectorize insert <your-index-name> --file=embeddings.ndjson

HTTP API

Vectorize は、REST APIを介してベクトルを挿入することもサポートしており、既存の機械学習ツールや言語(Python を含む)から Vectorize インデックスを操作できます。

例えば、Python スクリプトから直接 NDJSON 形式 で埋め込みを挿入するには:

import requests
url = "https://api.cloudflare.com/client/v4/accounts/{}/vectorize/v2/indexes/{}/insert".format("your-account-id", "index-name")
headers = {
"Authorization": "Bearer <your-api-token>"
}
with open('embeddings.ndjson', 'rb') as embeddings:
resp = requests.post(url, headers=headers, files=dict(vectors=embeddings))
print(resp)

このコードは、embeddings.ndjson に定義されたベクトルを指定されたインデックスに挿入します。Pandas を含む Python ライブラリも、組み込みの read_json メソッドを介して NDJSON 形式をサポートしています:

import pandas as pd
data = pd.read_json('embeddings.ndjson', lines=True)