インデックスは Vectorize の最小単位です。ベクトルをインデックスに挿入し、ある入力ベクトルに対して似たベクトルをインデックスから照会できます。
インデックスの作成には、次の 3 つの入力が必要です。
- ケバブケースの名前(例:
prod-search-indexやrecommendations-idx-dev)。 - 各ベクトルの(固定の)次元数。例: 384 または 1536。
- ベクトルの類似度計算に使う(固定の)距離メトリクス。
アカウント上で現在有効なインデックスと同じ名前では、インデックスを作成できません。ただし、削除済みインデックスが使っていた名前であれば作成できます。
インデックスの設定は、作成後に変更できません。
wrangler でインデックスを作成するには、次を実行します。
npx wrangler vectorize create your-index-name --dimensions=NUM_DIMENSIONS --metric=SELECTED_METRICWorkers AI の @cf/baai/bge-base-en-v1.5 埋め込みモデル(768 次元のベクトルを出力)からのベクトル埋め込みを受け取れるインデックスを作成するには、次のコマンドを使います。
npx wrangler vectorize create your-index-name --dimensions=768 --metric=cosineVectorize は REST API でのインデックス作成にも対応しています。
たとえば、Python スクリプトから直接インデックスを作成するには、次のようにします。
import requests
url = "https://api.cloudflare.com/client/v4/accounts/{}/vectorize/v2/indexes".format("your-account-id")
headers = {
"Authorization": "Bearer <your-api-token>"
}
body = {
"name": "demo-index",
"description": "some index description",
"config": {
"dimensions": 1024,
"metric": "euclidean"
},
}
resp = requests.post(url, headers=headers, json=body)
print('Status Code:', resp.status_code)
print('Response JSON:', resp.json())このスクリプトは、ステータスコード 201 と、指定した設定でインデックスが作成されたことを示す JSON レスポンスボディを出力します。
次元は、ベクトルを生成した機械学習(ML)モデルの出力サイズで決まります。モデルが特徴をどうエンコードし、ベクトル埋め込みとして記述するかの結果です。
出力次元の数は、ベクトル検索の精度、検索性能(レイテンシ)、インデックス全体のサイズに影響します。出力次元が小さいほど検索が速くなることがあり、ユーザー向けアプリケーションに向きます。出力次元が大きいほど、とくに大規模なデータセットや、入力がかなり似ているデータセットで、より正確な検索ができます。
インデックス作成時に指定した次元数は変更できません。インデックスは、同じ次元数の密ベクトルを受け取ることを想定しています。
次の表は、埋め込みモデルの例と、その出力次元です。
| モデル / Embeddings API | 出力次元 | 用途 |
|---|---|---|
Workers AI - @cf/baai/bge-base-en-v1.5 |
768 | テキスト |
OpenAI - ada-002 |
1536 | テキスト |
Cohere - embed-multilingual-v2.0 |
768 | テキスト |
Google Cloud - multimodalembedding |
1408 | マルチモーダル(テキスト、画像) |
距離メトリクスは、ベクトル同士の近さを決める関数です。Vectorize インデックスは、次の距離メトリクスに対応しています。
| メトリクス | 詳細 |
|---|---|
cosine |
距離は -1(最も似ていない)から 1(同一)です。0 は直交ベクトルを表します。 |
euclidean |
ユークリッド(L2)距離です。0 は同一ベクトルを表します。正の数が大きいほど、ベクトルは離れています。 |
dot-product |
負の内積です。負の値が大きいほど、または正の値が小さいほど、ベクトルは似ています。スコア -1000 は -500 より似ており、スコア 15 は 50 より似ています。 |
ベクトルの類似度の判断は、結果のベクトル埋め込みで特徴を表す機械学習モデルの出来に左右されます。たとえば cosine メトリクスでスコアが 0.8511 なら、2 つのベクトルは距離として近いことを意味します。ただし、それらが表すデータが 似ている かどうかは、モデルが元のコンテンツをどれだけうまく表現できるかによります。
ベクトルを照会するとき、Vectorize に次のいずれかを指定できます。
- 高精度スコアリング。照会の一致スコアの精度と、照会結果の正確さが上がります。
- 近似スコアリング。応答時間が短くなります。近似スコアリングでは、返されるスコアは、照会と返されたベクトルの間の実際の距離 / 類似度の近似値です。スコア精度と照会精度の制御 を参照してください。
距離メトリクスはインデックス作成後に変更できません。メトリクスごとにスコア関数は異なります。