你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

为矢量搜索编制二进制矢量索引

注释

Azure AI 搜索可通过Azure门户、REST API 和Azure SDK获取。 它也是 Foundry IQ 的基础;Foundry IQ 是一个托管式知识层,可将企业内容转化为供 Microsoft Foundry 门户中的智能体使用的、可复用且具备权限感知能力的知识库。

Azure AI 搜索支持 Collection(Edm.Byte) 打包的二进制类型,进一步减少矢量数据的存储和内存占用。 可以将此数据类型用于模型输出,例如 Cohere 的 Embed v3 二进制嵌入模型或任何其他嵌入 模型或进程,这些模型将向量输出为二进制字节。

为二进制向量配置索引有三个步骤:

  • 添加用于指定二元矢量比较的哈明距离的矢量搜索算法
  • 添加指向算法的矢量配置文件
  • 添加一个类型为 Collection(Edm.Byte) 的矢量字段并指定 Hamming distance

本文使用 REST API 进行说明,但也可以使用Azure SDK或Azure门户将二进制字段添加到索引。 使用 索引 - 创建 或 索引 - 创建或更新 REST API 将二进制数据类型分配给字段。

提示

如果要调查二元向量对其更小的占用空间的支持,则还可以考虑Azure AI 搜索中的向量量化和存储缩减功能。 输入是 float32 或 float16 嵌入。 输出的数据以更小的格式存储。 有关详细信息,请参阅 使用二进制或标量量化进行压缩 并 分配窄数据类型。

先决条件

  • 熟悉 如何创建索引 和 添加向量字段。

  • 二进制向量,每个维度由一个位表示,这些位封装到 uint8 值中,每个值包含八个位。 可以使用直接生成 打包的二进制 向量的模型或在索引和检索期间将向量量化为客户端应用程序中的二进制向量来获取这些向量。

限制

  • 导入数据向导中不支持Azure门户。

  • 不支持 AML 技能中的二进制字段,这些字段用于从 Microsoft Foundry 模型目录中集成向量化模型。

添加矢量搜索算法和矢量信息

矢量搜索算法在编制索引期间创建查询导航结构。 对于二进制向量字段,系统使用 Hamming 距离指标执行矢量比较。

若要为二进制向量配置矢量搜索,请执行如下操作:

  1. 设置 索引 - 创建或更新 (REST API) 请求。

  2. 在索引架构中,添加一个指定配置文件和算法的 vectorSearch 部分。

  3. 添加一个或多个使用相似性指标的hamming。 分层导航小型世界 (HNSW) 算法很常见,同时也可以使用汉明距离和详尽的 K 最近的邻域 (KNN)。

  4. 添加一个或多个用于指定算法的矢量属性配置文件。

以下示例演示了基本 vectorSearch 配置。

  "vectorSearch": { 
    "profiles": [ 
      { 
        "name": "myHnswProfile", 
        "algorithm": "myHnsw", 
        "compression": null, 
        "vectorizer": null 
      } 
    ], 
    "algorithms": [ 
      { 
        "name": "myHnsw", 
        "kind": "hnsw", 
        "hnswParameters": { 
          "metric": "hamming" 
        } 
      }, 
      { 
        "name": "myExhaustiveKnn", 
        "kind": "exhaustiveKnn", 
        "exhaustiveKnnParameters": { 
          "metric": "hamming" 
        } 
      } 
    ] 
  }

将二进制字段添加到索引

索引的字段集合必须包括文档键、矢量字段以及混合搜索方案所需的任何其他字段。

二进制字段使用 Collection(Edm.Byte) 类型,并包含打包形式的嵌入内容。 例如,如果原始嵌入维度为 1024,则打包的二进制向量长度为 ceiling(1024 / 8) = 128。 通过在字段上设置 vectorEncoding 属性来获取打包的形式。

若要向索引添加二进制向量字段,请执行以下操作:

  1. 将字段添加到字段集合,并为其命名。

  2. 将数据类型设置为 Collection(Edm.Byte).

  3. 将vectorEncoding设置为packedBit以用于二进制编码。

  4. 将dimensions设置为1024。 指定原始(未打包)矢量维度。

  5. 将 vectorSearchProfile 设置为在上一步中定义的配置文件。

  6. 将searchable设置为true。

以下字段定义是索引架构中的二进制向量字段的示例。

  "fields": [ 
    . . . 
    { 
      "name": "my-binary-vector-field", 
      "type": "Collection(Edm.Byte)", 
      "vectorEncoding": "packedBit", 
      "dimensions": 1024, 
      "vectorSearchProfile": "myHnswProfile",
      "searchable": true
    },
   . . . 
  ]