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

Azure OpenAI Embedding 技能

重要

根据补充使用条款,此功能以公共预览版提供。 2023-10-01-preview REST API支持此功能的第一次迭代。 2024-05-01-preview REST API添加了更多属性,并支持 Azure OpenAI 上的更多文本嵌入模型。

Azure OpenAI 嵌入技能连接到Azure OpenAI资源上已部署的嵌入模型,以在索引期间生成嵌入项。 数据在部署模型的地理位置进行处理。

Azure 门户中的导入和矢量化数据向导使用Azure OpenAI 嵌入技能来矢量化内容。 可以运行向导并查看生成的技能集,了解向导如何为 text-embedding-ada-002 模型生成技能。

注意

此技能绑定到 Azure OpenAI,并按现有 Azure OpenAI 即用即付价格收费。

@odata.type

Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill

数据限制

文本输入的最大大小应为 8,000 个标记。 如果输入超出允许的最大值,模型将引发“请求无效”错误。 有关详细信息,请参阅 Azure OpenAI 文档中的令牌关键概念。 如果需要数据分块,请考虑使用文本拆分技能

技能参数

参数区分大小写。

输入 说明
resourceUri 在本例中,模型提供程序的 URI 是 Azure OpenAI 资源。 此参数仅支持具有域 openai.azure.com的 URL,例如 https://<resourcename>.openai.azure.com。 如果 Azure OpenAI 终结点具有具有域cognitiveservices.azure.com的 URL,例如https://<resourcename>.cognitiveservices.azure.com,必须先为 Azure OpenAI 资源创建一openai.azure.com自定义子域,然后https://<resourcename>.openai.azure.com改用。
apiKey 用于访问模型的密钥。 如果你提供密钥,请将 authIdentity 留空。 如果同时设置 apiKeyauthIdentity,则会在连接上使用 apiKey =。
deploymentId 已部署的 Azure OpenAI 嵌入模型的名称。 模型应该是嵌入模型,例如 text-embedding-ada-002。 有关支持的模型,请参阅 Azure OpenAI 模型列表
authIdentity 搜索服务用于连接到 Azure OpenAI 的用户托管标识。 可以使用系统托管标识或用户托管标识。 若要使用系统托管标识,请将 apiKeyauthIdentity 留空。 会自动使用系统托管标识。 托管标识必须具有认知服务 OpenAI 用户权限才能将文本发送到 Azure OpenAI。
modelName 如果使用 2024-05-01-preview REST API 创建技能集,则需要此属性。 将此属性设置为在提供程序(通过resourceUri指定,通过deploymentId确定)上部署的 Azure OpenAI 嵌入模型部署名称。 目前受支持的值为text-embedding-ada-002text-embedding-3-largetext-embedding-3-small
dimensions (可选,在 2024-05-01-preview REST API 中引入)。 如果模型支持减少嵌入维度,则为要生成的嵌入维度。 下面列出了受支持的范围。 如果未指定,则默认为每个模型的最大维度。 对于使用 2023-10-01-preview 创建的技能集,维度固定为 1536。

modelName支持的维度

Azure OpenAI 嵌入技能支持的维度取决于配置的modelName

modelName 最小维度 最大维度
text-embedding-ada-002 1536 1536
text-embedding-3-large 1 3072
text-embedding-3-small 1 1536

技能输入

输入 说明
text 要矢量化的输入文本。 如果使用数据分块,则源可能是 /document/pages/*

技能输出

输出 说明
embedding 输入文本的矢量化嵌入。

示例定义

考虑具有以下字段的记录:

{
    "content": "Microsoft released Windows 10."
}

然后,技能定义可能会如下所示:

{
  "@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
  "description": "Connects a deployed embedding model.",
  "resourceUri": "https://my-demo-openai-eastus.openai.azure.com/",
  "deploymentId": "my-text-embedding-ada-002-model",
  "modelName": "text-embedding-ada-002",
  "dimensions": 1536,
  "inputs": [
    {
      "name": "text",
      "source": "/document/content"
    }
  ],
  "outputs": [
    {
      "name": "embedding"
    }
  ]
}

示例输出

对于给定的输入文本,将生成矢量化嵌入输出。

{
  "embedding": [
        0.018990106880664825,
        -0.0073809814639389515,
        .... 
        0.021276434883475304,
      ]
}

输出驻留在内存中。 若要将此输出发送到搜索索引中的字段,必须定义一个 outputFieldMapping,用于将矢量化的嵌入输出(即数组)映射到一个矢量字段。 假设技能输出驻留在文档的嵌入节点中,且 content_vector 是搜索索引中的字段,那么索引器中的 outputFieldMapping 应如下所示:

  "outputFieldMappings": [
    {
      "sourceFieldName": "/document/embedding/*",
      "targetFieldName": "content_vector"
    }
  ]

最佳做法

以下是使用此技能时需要考虑的一些最佳做法:

  • 如果达到 Azure OpenAI TPM(每分钟令牌数)限制,请考虑配额限制咨询以便可以相应地解决。 有关 Azure OpenAI 实例性能的详细信息,请参阅Azure OpenAI 监视文档。

  • 理想情况下,用于此技能的 Azure OpenAI 嵌入模型部署应与用于其他用例的部署(包括查询向量器)分开。 这有助于为其特定用例定制每个部署,从而优化性能并轻松确定来自索引器和索引嵌入调用的流量。

  • Azure OpenAI 实例应位于同一区域,或者至少在地理上靠近托管 AI 搜索服务的区域。 这可降低延迟并提高服务之间的数据传输速度。

  • 如果 Azure OpenAI TPM(每分钟令牌数)大于配额和限制文档中发布的默认值,请向 Azure AI 搜索团队提交支持案例,以便可以相应地进行调整。 这有助于索引过程不会因记录的默认 TPM 限制而不必要地减慢(如果你有更高的限制)。

  • 有关使用此技能的示例和工作代码示例,请参阅以下链接:

错误和警告

条件 结果
null 或无效 URI 错误
null 或无效的 deploymentID 错误
文本为空 警告
文本大于 8,000 个标记 错误

另请参阅