你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
从存储中消除可选矢量实例
Azure AI 搜索会存储特定工作负载中使用的矢量字段的多个副本。 如果不需要支持特定行为,例如在查询响应中返回原始矢量,则可以在索引中设置属性以忽略该工作负载的存储空间。
先决条件
- 具有
vectorSearch
配置的搜索索引中的矢量字段,使用分层可导航小世界 (HNSW) 或详尽的 K 最近的邻域 (KNN) 算法和新的矢量配置文件。
如何存储矢量字段
对于每个矢量字段,有三个矢量副本:
实例 | 使用情况 |
---|---|
从嵌入模型或对索引的推送请求接收的源矢量(采用 JSON 格式) | 用于增量数据刷新,以及如果需要在查询响应中返回“可检索”矢量。 |
原始全精度矢量 | 如果矢量未压缩,则用于评分;如果通过压缩矢量获取了查询结果,则用于可选的重新评分。 仅当矢量字段进行标量或二进制量化时,才应用重新评分。 |
HNSW 图形中近似最近的邻域 (ANN) 搜索中的矢量 | 用于查询执行。 |
可以设置属性,从矢量存储永久放弃前两个实例。
ANN 矢量查询执行需要最后一个实例(矢量和图形)。 标量或二进制量化等有损压缩技术将应用于此矢量实例。 如果要抵消有损压缩,应保留第二个实例以进行重新评分。
设置 stored
属性
stored
属性是矢量字段定义上的一个布尔值,用于确定是否为可检索的矢量字段内容(源实例)分配存储空间。 默认情况下,stored
属性为 true。 如果查询响应中不需要原始矢量内容,则可以通过将 stored
更改为 false 来为每个字段节省最多 50% 的存储空间。
将 stored
设置为 false 的注意事项:
由于矢量不是人类可读的,因此可在 RAG 方案中在发送到 LLM 的结果中省略这些标量,并在搜索页面上呈现的结果中省略它们。 然而,如果在使用矢量内容的下游进程中使用矢量,请保留它们。
但是,如果索引策略包括部分文档更新,例如现有文档上的“merge”或“mergeOrUpload”,则设置
stored=false
可阻止在合并期间对这些字段进行内容更新。 在对搜索文档的每个“merge”或“mergeOrUpload”操作中,必须完整提供矢量字段,以及要更新的非矢量字段,否则将删除矢量。
设置 stored=false
属性是不可逆的。 该属性是在创建物理数据结构时在矢量字段上创建索引期间设置的。 如果以后需要可检索的矢量内容,则必须删除并重新生成索引,或创建并加载具有新属性的新字段。
下示例显示搜索索引的字段集合。 将 stored
设置为 false 以永久删除向量字段的可检索存储。
PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2024-07-01
Content-Type: application/json
api-key: [admin key]
{
"name": "demo-index",
"fields": [
{
"name": "vectorContent",
"type": "Collection(Edm.Single)",
"retrievable": false,
"stored": false,
"dimensions": 1536,
"vectorSearchProfile": "vectorProfile"
}
]
}
要点摘要
适用于具有矢量数据类型的字段。
影响磁盘上的存储,而不是内存,并且对查询没有影响。 查询执行使用不受
stored
属性影响的单独矢量索引,因为始终会存储矢量的副本。stored
属性是在向量字段上创建索引期间设置的,并且是不可逆的。 如果以后想要检索内容,则必须删除并重建索引,或者创建并加载具有新属性的新字段。默认情况下,
stored
设置为 true,retrievable
设置为 false。 在默认配置中,会存储可检索的副本,但不会在结果中自动返回。 当stored
为 true 时,可以随时在 true 和 false 之间切换可检索retrievable
,而无需重建索引。 当stored
为 false 时,retrievable
也必须为 false 并且不能更改。
设置 rescoreStorageMethod
属性
注意
此功能目前处于公开预览状态。 此预览版没有附带服务级别协议,建议不要用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款。
矢量字段定义上的 rescoreStorageMethod
属性用于确定是否为原始全精度矢量分配存储空间。 默认情况下,rescoreStorageMethod
属性设置为 preserveOriginals
。 如果不使用为查询压缩矢量提供的过度采样和重新评分缓解措施,则可以通过将 rescoreStorageMethod
更改为 discardOriginals
来节省矢量存储空间。
如果打算使用标量或二进制量化,建议将 rescoreStorageMethod
保留为 preserveOriginals
。
若要设置此属性,请执行以下操作:
使用创建索引或创建或更新索引 2024-11-01-preview REST API,或提供该功能的 Azure SDK beta 包。
使用配置文件、算法和压缩将
vectorSearch
部分添加到索引。在“压缩”下,添加
rescoringOptions
,将enableRescoring
设置为 true、将defaultOversampling
设置为正整数,并将rescoreStorageMethod
设置为preserveOriginals
。PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2024-11-01-preview { "name": "demo-index", "fields": [. . . ], . . . "vectorSearch": { "profiles": [ { "name": "myVectorProfile", "algorithm": "myHnsw", "compression": "myScalarQuantization" } ], "algorithms": [ { "name": "myHnsw", "kind": "hnsw", "hnswParameters": { "metric": "cosine", "m": 4, "efConstruction": 400, "efSearch": 500 }, "exhaustiveKnnParameters": null } ], "compressions": [ { "name": "myScalarQuantization", "kind": "scalarQuantization", "rescoringOptions": { "enableRescoring": true, "defaultOversampling": 10, "rescoreStorageMethod": "preserveOriginals" }, "scalarQuantizationParameters": { "quantizedDataType": "int8" }, "truncationDimension": null } ] } }