你当前正在访问 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

若要设置此属性,请执行以下操作:

  1. 使用创建索引创建或更新索引 2024-11-01-preview REST API,或提供该功能的 Azure SDK beta 包。

  2. 使用配置文件、算法和压缩将 vectorSearch 部分添加到索引。

  3. 在“压缩”下,添加 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
                }
            ]
        }
    }