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

在智能体检索中显示文档嵌入的图像(预览版)

注释

Azure AI 搜索可通过Azure门户、REST API 和Azure SDK获取。 它还支撑着 Foundry IQ——这是一个托管知识层,可将企业内容转化为供 Microsoft Foundry 门户中的代理使用的可复用、具备权限感知能力的知识库。

Important

标记为“预览”的特性、功能或属性不受服务级别协议 (SLA) 保障,不建议用于生产工作负载,并且在正式发布之前可能会更改或受到限制。 Azure AI 搜索预览条款适用于所有预览功能,无论是独立功能还是正式版功能的一部分。

使用图像呈现(预览版),可在代理式检索期间呈现源文档中嵌入的图像(如示意图、图表、信息图、扫描表单和产品图片),以便大型语言模型(LLM)在生成答案时结合视觉上下文与文本进行推理。

启用图像服务时,Azure AI 搜索:

  • 在编制索引时,从受支持的文档中提取图像,并将其存储在客户提供Azure Blob 资产存储中。

  • 在查询时,在 检索操作期间提取这些图像,对其进行 base64 编码,并将其作为多模式内容注入到生成合成答案的 LLM 提示符中。

本文介绍如何在知识库上启用映像服务、按请求重写映像、检查映像服务统计信息以及规划存储帐户生命周期要求。

使用支持

Azure 门户 Microsoft Foundry 门户 .NET SDK Python SDK Java SDK JavaScript SDK REST API
❌ ❌ ✔️ ✔️ ✔️ ✔️ ✔️

先决条件

限制和注意事项

  • 图像服务只能通过代理检索中的 retrieve API 使用。 如果没有自定义解决方案或配置,经典 /docs/search 查询不会向下游应答合成提供文档嵌入的图像。

  • 图像服务仅在 应答合成 输出模式下运行。 extractiveData 输出模式跳过图像服务。

  • 图像服务仅适用于基于文件的索引知识来源,这些知识来源已配置 assetStore,且其已编制索引的区块填充了 image_path 值。

  • 在混合知识库中,只有受支持的知识源类型(blob、已编入索引的 OneLake 和已编入索引的 SharePoint)才会为下游答案合成提供嵌入在文档中的图像。 其他类型仍可提供文本基础。

  • 对于使用 ingestionPermissionOptions 引入文档级权限(包括 ACL、RBAC 范围或 Microsoft Purview 敏感度标签)的知识源,不支持提供图像。 资产存储创建基础知识存储,知识存储不支持权限继承。

  • 检索响应架构不为发送到模型的单个资产存储图像路径或图像字节定义字段。 imageServing 活动报告了检索到并发送给模型的图像的聚合统计信息。

  • 在存储帐户级别(独立于对索引内容的访问权限)控制对映像的访问。 任何对资产存储账户具有读取访问权限的身份都可以获取其中的映像。

  • 不要将机密(帐户密钥、令牌、连接字符串)存储在源文档中,因为内容可以作为地面数据返回。

  • 由于图像下载和多模式令牌处理,图像服务会增加答案合成延迟。 分别在启用和禁用镜像服务的情况下运行具有代表性的查询,并将响应延迟与报告的 imageServing 活动进行比较。

  • 内容理解可以为 PDF 和 DOCX 文件生成不同的图像结果。 如果需要一致的嵌入式图像提取和语言化,请将源文档转换为 PDF,或使用代表性内容测试每个源格式。

图像服务的工作原理

映像服务有两个阶段:

  • 索引: 在知识源上配置标准内容提取和资产存储时,生成的内容理解技能以语义方式对文档进行分块,保留表作为 Markdown,并使用配置的 LLM 来描述嵌入的数字。 图形说明会成为由嵌入技能进行向量化的增强型 Markdown 的一部分。 该技能还会将图像提取到你的 Blob 资产存储中,并向重叠的块添加 image_path 引用。

    配置资产存储时,搜索服务还会与知识源一起预配 知识存储 来保留提取的图像项目。 可以像任何其他一样检查和管理此知识存储。

  • 检索: 当检索操作在启用图像服务的情况下运行时,搜索服务将从资产存储中提取匹配的图像,base64 对其进行编码,并将其作为多模式内容包含在答案合成提示中。

配置资产存储和应用程序访问

图像服务跨越三个信任边界。 在编制索引时,搜索服务会将图像项目写入资产存储。 在查询时,搜索服务从资产存储读取以检索图像。 如果应用程序需要在 UI 中呈现图像,则应用程序还会从资产存储中读取图像。 将每条路径配置为遵循最小权限访问原则。

搜索服务对资产存储的访问权限

  • 为搜索服务使用 Microsoft Entra ID 和托管标识。 在存储帐户范围内分配 存储 Blob 数据参与者 角色的标识,因为索引器会写入映像项目,检索操作会读取它们。 当源容器和资产容器共享该帐户时,该角色还提供源 Blob 读取访问权限。

  • 不要在资产存储容器上启用匿名公共访问。

应用程序对图像引用的访问权限

生成的索引存储 image_path 资源存储中的图像引用。 检索响应架构不为发送到模型的各个资产存储图像路径或图像字节定义专用字段。 可选的 sourceData 是结构化参考数据,其中不需要 image_path。

若要在应用程序中显示索引图像,请执行以下操作:

  1. 在资产存储帐户范围内为应用程序分配 存储 Blob 数据读取者 角色。

  2. 为应用程序的标识分配 “搜索索引数据读取器” 角色,以便其可以查询已生成的索引。

  3. 通过应用程序控制的查询或服务端点,从生成的索引中获取经授权的 image_path。

  4. 验证该引用是否解析到预期的存储帐户和资产容器。 在进行 blob 查找之前,拒绝不受信任的路径。

  5. 使用应用程序的标识从资产容器中提取生成的 Blob 名称。

这种分离使您可以将谁能查看源图像与谁能调用检索 API 分开控制。

在知识源上配置资产存储

在受支持的索引知识来源的 assetStore 中配置 ingestionParameters。 资产存储是你拥有的 blob 容器,搜索服务将图像项目写入其中。

有关源专用说明,请参阅:

启用了图像服务的最简 Blob 知识来源如下所示:

PUT https://{service-name}.search.windows.net/knowledgesources/my-blob-ks?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}

{
  "name": "my-blob-ks",
  "kind": "azureBlob",
  "azureBlobParameters": {
    "connectionString": "ResourceId=<storage-resource-id>",
    "containerName": "source-documents",
    "ingestionParameters": {
      "assetStore": {
        "connectionString": "ResourceId=<storage-resource-id>",
        "containerName": "image-assets"
      },
      "chatCompletionModel": {
        "kind": "azureOpenAI",
        "azureOpenAIParameters": {
          "resourceUri": "https://{foundry-resource}.services.ai.azure.com",
          "deploymentId": "gpt-4o",
          "modelName": "gpt-4o"
        }
      },
      "embeddingModel": {
        "kind": "azureOpenAI",
        "azureOpenAIParameters": {
          "resourceUri": "https://{foundry-resource}.services.ai.azure.com",
          "deploymentId": "text-embedding-3-large",
          "modelName": "text-embedding-3-large"
        }
      },
      "contentExtractionMode": "standard",
      "aiServices": {
        "uri": "https://{foundry-resource}.services.ai.azure.com"
      }
    }
  }
}

注释

  • 将 <storage-resource-id> 替换为 Azure 存储帐户的资源 ID。 ResourceId=<storage-resource-id>连接格式告知搜索服务对两个容器使用其托管标识。

  • 托管资产存储的 Azure 存储帐户在知识库的整个生命周期内都必须保持可用,并且可供搜索服务访问。 如果更改网络规则、轮换密钥、交换标识或移动存储帐户的方式阻止搜索服务读取资产存储,则图像服务无法向模型提供这些图像。 在检索活动方面比较 imagesRetrieved 和 imagesSentToModel,并认真规划和测试存储帐户更改。

配置结果

assetStore、disableImageVerbalization 和 chatCompletionModel 的组合决定了索引器存储的内容以及模型在查询时看到的内容:

  • 资源库 + 文本化(默认):assetStore 设置,disableImageVerbalization 保持为 false,chatCompletionModel 设置。 索引器将图像保存到资产存储中,并将文本说明存储在索引中。 检索活动可以报告 verbalizationUsed 为 true.

  • 仅资产存储:assetStore 已设置,disableImageVerbalization 设为 true,chatCompletionModel 非必需。 索引器将图像保存到资产存储,但不生成文本说明。 检索活动可以报告 verbalizationUsed 为 false.

  • 没有资源存储,模型设置:assetStore 未设置,chatCompletionModel 已设置。 仅文本说明,无图像项目。 图像服务不适用。

  • 无资产存储,无模型: 无图像处理。

验证资产存储配置

等待导入完成后再继续:

  • 在 Azure 门户中检查索引器状态或使用 Get 索引器状态 (REST API)。

  • 检查已编入索引的块的 image_path 字段是否已填充。 如果 image_path 为空,请检查索引器状态、知识源资产存储配置、源文档内容和资产容器内容。

  • 检查资产存储容器。 你应该会看到索引器在引入过程中写入的图像 Blob 对象。

在知识库上启用映像服务

将知识库定义中的知识源引用的 enableImageServing 设置为 true。 此设置将成为面向知识源的每个检索请求的默认值。

知识库定义还指定了在查询时间用于答案合成的 LLM。 此设置独立于你在知识源的 chatCompletionModel 上设置的任何 ingestionParameters,后者在索引期间驱动映像口头化。

如果你的知识库引用了多个知识来源,请仅对配置了 enableImageServing 的支持的基于文件的索引类型设置 assetStore。 不受支持的类型(如搜索索引、远程 SharePoint 或 Web)仍会提供文本依据,但不会向下游答案生成提供文档中嵌入的图像。

PUT https://{service-name}.search.windows.net/knowledgebases/my-kb?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}

{
  "name": "my-kb",
  "knowledgeSources": [
    {
      "name": "my-blob-ks",
      "enableImageServing": true
    }
  ],
  "outputMode": "answerSynthesis",
  "models": [
    {
      "kind": "azureOpenAI",
      "azureOpenAIParameters": {
        "resourceUri": "https://{foundry-resource}.services.ai.azure.com",
        "deploymentId": "gpt-4o",
        "modelName": "gpt-4o"
      }
    }
  ]
}

验证镜像服务是否已启用

向知识库端点发送 GET 请求,并验证知识源引用是否包含 "enableImageServing": true。

使用图像服务进行检索

针对知识库调用 检索操作 。 要根据每个请求覆盖知识库默认值,请在 enableImageServing 下的匹配条目中设置 knowledgeSourceParams。

POST https://{service-name}.search.windows.net/knowledgebases/my-kb/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}

{
  "retrievalReasoningEffort": { "kind": "medium" },
  "outputMode": "answerSynthesis",
  "includeActivity": true,
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "What's the wiring configuration shown in the installation guide?" }
      ]
    }
  ],
  "knowledgeSourceParams": [
    {
      "knowledgeSourceName": "my-blob-ks",
      "kind": "azureBlob",
      "enableImageServing": true
    }
  ]
}

注释

仅当outputMode为answerSynthesis时,镜像服务才会运行。 使用 extractiveData 的请求会跳过图像服务,即使已设置 enableImageServing 也是如此。

检索时发生的情况

对于与匹配内容关联的图像引用,搜索服务将从资产存储下载相应的图像,对其进行 base64 编码,并将其作为多模式内容传递给下游应答合成模型。 在activity.imageServing中查看汇总图像服务统计信息。 有关确切的响应形状,请参阅 知识检索 - 检索 (REST API)的参考文档。

验证检索行为

检索响应可以提供以下图像服务信号:

  • 当 true 为 includeActivity 时,如果服务记录了图像提供操作,activity 数组会针对某个知识源报告 imageServing 活动。

  • imagesSentToModel 的值大于 0 表示该服务报告称其已向下游答案合成模型提供了图像。

优先规则

当知识库定义和检索请求都指定 enableImageServing时,检索请求中的值优先。 完整优先级为:

  1. 检索请求中的 knowledgeSourceParams[].enableImageServing 值(如果已设置)。
  2. 知识库定义中匹配知识库引用的值(如果已设置)。
  3. false (默认值)。

下表汇总了九种组合。

知识库定义(enableImageServing) 检索请求(enableImageServing) 是否已启用镜像服务?
true true Yes
true false No
true 未设置 Yes
false true Yes
false false No
false 未设置 No
未设置 true Yes
未设置 false No
未设置 未设置 No

检查图像服务统计信息

当映像服务运行时,检索响应在 imageServing 数组内的每个知识源包含一个 activity 部分。 使用此部分可将从资产存储中检索到的图像与发送到模型的图像进行比较。

"activity": [
  {
    "type": "azureBlob",
    "knowledgeSourceName": "my-blob-ks",
    "imageServing": {
      "verbalizationUsed": true,
      "imagesRetrieved": 5,
      "imagesSentToModel": 4,
      "totalImageSizeBytes": 248361
    }
  }
]

字段报告:

  • verbalizationUsed:检索活动的由服务报告的图像文字说明统计数据。

  • imagesRetrieved:从资产存储中检索的图像数。

  • imagesSentToModel:发送到下游模型的图像数。

  • totalImageSizeBytes:发送到模型的图像的总大小(以字节为单位)。

如果 imagesRetrieved 大于 imagesSentToModel,则不是每个检索到的图像都发送到模型。

分别检查imagesSentToModel和verbalizationUsed。 响应可以同时将 verbalizationUsed 报告为 true,并报告发送给模型的一张或多张图像。

对图像服务进行端到端测试

使用以下示例之一测试完整设置:

这些示例会创建 Blob 知识源和知识库,比较在禁用和启用图像服务时的检索请求,并检查图像服务统计信息。 他们还使用独立的通配符索引查询来选取 image_path 并下载该资源。 这些示例会选择一个以分号分隔的引用项,从相对路径中删除诸如 11.7: 之类的投影前缀,或者对绝对路径进行 URL 解码并删除其开头的 asset-container 段。 这些转换只是示例行为,并非 retrieve API 的保证。 所选资产没有证据表明同一图像促成了特定的检索响应。

典型的 A/B 比较清单:

  • 选择一个只能根据示意图、图表或扫描图像来回答的问题。

  • 运行检索请求 enableImageServing: false 并捕获答案。

  • 使用 enableImageServing: true 运行相同的检索请求,并比较答案、延迟时间和报告的活动情况。

  • 将答案差异视为观察 A/B 信号,而不是证明图像导致了差异。 imagesSentToModel 值大于 0 表示服务报告称其已向模型提供了图像。

清理资源

在删除知识源之前,请先删除知识库。 删除这些 Azure AI 搜索资源并不会删除 Azure 存储中的源文档或投影图像 Blob。 仅在没有任何保留的数据引入或检索管道仍需使用这些 Blob 时,才分别删除它们。

故障排除

使用imageServing中的 活动块作为第一个诊断。 下表列出了针对常见症状的检查项,且不预设单一原因。

症状 检查
imagesRetrieved 为 0,适用于图像丰富的文档 检查索引器状态和警告、对应索引块中已填充的 image_path 值,以及资产容器中的映像 blob。 确认源文档中包含可提取的图像,并且搜索服务标识在存储帐户范围内具有 Storage Blob Data Contributor 角色。
检索响应没有 imageServing 块 确认该请求将 includeActivity 设置为 true。 应用请求、知识库和默认优先级后检查有效 enableImageServing 值。 确认 outputMode 为 answerSynthesis,并检查源活动错误和警告。
verbalizationUsed 不同于预期 检查 disableImageVerbalization、chatCompletionModel以及最新的索引器状态。 独立于 imagesSentToModel 检查 verbalizationUsed。 响应可以报告同时发送的文本内容和图像。
启用图像服务后,答案合成失败或超时 将代表性请求与已启用和禁用的图像服务进行比较。 检查活动错误和警告、答案合成模型部署状态、模型和存储帐户的搜索服务标识权限以及资产存储可用性。
您的应用程序无法呈现独立查询的 image_path 确认独立索引查询返回可用的 image_path、被引用的 blob 存在,并且应用程序可以独立于 retrieve 访问该 blob。 检查应用程序标识是否具有索引查询的Search Index Data Reader以及资产存储帐户范围的 Storage Blob Data Reader。