索引是 Vectorize 的"原子"单元。向量被插入索引中,使您能够针对给定输入向量查询索引中的相似向量。
创建索引需要三个输入:
- 短横线命名(kebab-cased)的名称,例如
prod-search-index或recommendations-idx-dev。 - 每个向量的(固定)维度大小,例如 384 或 1536。
- 用于计算向量相似性的(固定)距离度量。
不能使用账户上当前活跃索引的名称创建索引。但是,可以使用已删除索引的名称创建新索引。
索引的配置在创建后无法更改。
使用 wrangler 创建索引:
npx wrangler vectorize create your-index-name --dimensions=NUM_DIMENSIONS --metric=SELECTED_METRIC要创建可接受来自 Workers 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)模型的输出大小决定,是模型如何编码和描述特征到向量嵌入中的函数。
输出维度数量可以影响向量搜索准确性、搜索性能(延迟)和索引的整体大小。较小的输出维度可能搜索更快,这对面向用户的应用很有用。较大的输出维度可以提供更准确的搜索,特别是在较大数据集和/或具有大量相似输入的数据集上。
索引创建的维度数量无法更改。索引期望接收具有相同维度数量的密集向量。
下表列出了一些示例嵌入模型及其输出维度:
| 模型 / 嵌入 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 表示两个向量距离接近,但它们所代表的数据是否 相似 取决于模型表示原始内容的能力。
查询向量时,您可以指定 Vectorize 使用:
- 高精度评分,提高查询匹配分数的精度以及查询结果的准确性。
- 近似评分以获得更快的响应时间。使用近似评分,返回的分数将是查询与返回向量之间真实距离/相似性的近似值。请参阅 评分精度和查询准确性的控制。
距离度量在索引创建后无法更改,每种度量都有不同的评分函数。