Compartir a través de

使用 Azure Foundry 模型目录中的嵌入模型进行集成矢量化

重要

根据补充使用条款,此功能以公共预览版提供。 Skillsets 的最新预览版 - 创建或更新(REST API) 支持此功能。

本文介绍如何从 Microsoft Foundry 模型目录中 访问嵌入模型,以便在 Azure AI 搜索中的索引编制和查询执行期间进行矢量转换。

工作流要求从目录中部署模型,其中包括从 Azure 和其他公司嵌入模型。 根据每个提供商的计费结构,部署模型是可计费的。

部署模型后,可以在编制索引期间将其用于集成向量化,也可以与 Microsoft Foundry 模型目录向量器 一起使用,以便进行查询。

小窍门

使用 导入数据(新) 向导 生成技能集,其中包含用于在 Foundry 上部署的嵌入模型的 AML 技能。 该向导会生成用于输入、输出和映射的 AML 技能定义,这样你就可以在编写任何代码之前轻松测试模型。

先决条件

支持的嵌入模型

模型目录中支持的嵌入模型因使用方法而异:

从模型目录部署嵌入模型

  1. 按照 以下说明 将受支持的模型部署到项目。

  2. 记下目标 URI、密钥和模型名称。 在搜索索引中定义向量化器以及在索引期间调用模型终结点的技能集时,需要用到这些值。

    如果首选 令牌身份验证 而不是基于密钥的身份验证,则只需复制 URI 和模型名称。 但是,请记下模型部署到的区域。

  3. 配置搜索索引和索引器以使用已部署的模型。

AML 示例技能负载

从模型目录中部署嵌入模型时,可以使用 Azure AI 搜索中的 AML 技能连接到它们,以便为工作负荷编制索引。

本部分介绍 AML 技能定义和索引映射。 它包含一个已配置的示例负载,以与其对应的已部署端点一起使用。 有关详细信息,请参阅技能上下文和输入注释语言

Cohere 嵌入模型

此 AML 技能有效负载适用于以下嵌入模型:

  • Cohere-embed-v3-english
  • Cohere-embed-v3-多语言
  • Cohere-embed-v4

它假定你要使用 Text Split 技能对内容进行分块,因而要矢量化的文本位于 /document/pages/* 路径中。 如果文本来自其他路径,请相应地更新对 /document/pages/* 路径的所有引用。

你必须将 /v1/embed 路径添加到从 Azure AI Foundry 部署中复制的 URL 的末尾。 还可以更改 input_typetruncateembedding_types 输入的值,以更好地适应用例。

从目录部署模型时,便会生成 URI 和密钥。 有关这些值的详细信息,请参阅如何使用 Azure AI Foundry 部署 Cohere Embed 模型

{
  "@odata.type": "#Microsoft.Skills.Custom.AmlSkill",
  "context": "/document/pages/*",
  "uri": "<YOUR_MODEL_URL_HERE>/v1/embed",
  "key": "<YOUR_MODEL_KEY_HERE>",
  "inputs": [
    {
      "name": "texts",
      "source": "=[$(/document/pages/*)]"
    },
    {
      "name": "input_type",
      "source": "='search_document'"
    },
    {
      "name": "truncate",
      "source": "='NONE'"
    },
    {
      "name": "embedding_types",
      "source": "=['float']"
    }
  ],
  "outputs": [
    {
      "name": "embeddings",
      "targetName": "aml_vector_data"
    }
  ]
}

此外,Cohere 模型的输出并非直接就是嵌入数组,而是包含该数组的 JSON 对象。 在通过 indexProjectionsoutputFieldMappings 将其映射到索引定义时,需要相应选择它。 下面是一个 indexProjections 有效负载示例,可用于实现此映射。

如果您在技能定义中选择了不同的embedding_types,请在float路径中把source更改为您选择的类型。

"indexProjections": {
  "selectors": [
    {
      "targetIndexName": "<YOUR_TARGET_INDEX_NAME_HERE>",
      "parentKeyFieldName": "ParentKey", // Change this to the name of the field in your index definition where the parent key will be stored
      "sourceContext": "/document/pages/*",
      "mappings": [
        {
          "name": "aml_vector", // Change this to the name of the field in your index definition where the Cohere embedding will be stored
          "source": "/document/pages/*/aml_vector_data/float/0"
        }
      ]
    }
  ],
  "parameters": {}
}

示例向量器有效负载

与 AML 技能不同, Microsoft Foundry 模型目录向量器是专为仅处理可通过模型目录部署的嵌入模型而定制的。 主要区别在于,不必担心请求和响应载荷。 但是,必须提供与modelName中的“模型 ID”相对应的,该ID是您在部署模型后复制的。

以下是一个示例有效负载,演示如何在给定从 Foundry 复制的属性的情况下在索引定义上配置矢量器。

对于 Cohere 模型,不应像使用技能那样将 /v1/embed 路径添加到 URL 末尾。

"vectorizers": [
    {
        "name": "<YOUR_VECTORIZER_NAME_HERE>",
        "kind": "aml",
        "amlParameters": {
            "uri": "<YOUR_URL_HERE>",
            "key": "<YOUR_PRIMARY_KEY_HERE>",
            "modelName": "<YOUR_MODEL_ID_HERE>"
        },
    }
]

使用令牌身份验证进行连接

搜索服务必须具有 系统或用户分配的托管标识,并且该标识必须具有项目的 所有者参与者 权限。 然后,可以从技能定义和向量器定义中删除 key 字段,并将其替换为 resourceId。 如果项目和搜索服务位于不同的区域,则还提供字段 region

"uri": "<YOUR_URL_HERE>",
"resourceId": "subscriptions/<YOUR_SUBSCRIPTION_ID_HERE>/resourceGroups/<YOUR_RESOURCE_GROUP_NAME_HERE>/providers/Microsoft.MachineLearningServices/workspaces/<YOUR_AML_WORKSPACE_NAME_HERE>/onlineendpoints/<YOUR_AML_ENDPOINT_NAME_HERE>",
"region": "chinanorth", // Only needed if project is in different region from search service

注释

此集成目前不支持 Cohere 模型的令牌身份验证。 必须使用基于密钥的身份验证。