你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
注意
Azure AI 搜索可通过Azure门户、REST API 和Azure SDK获取。 它也是 Foundry IQ 的基础;Foundry IQ 是一个托管式知识层,可将企业内容转化为供 Microsoft Foundry 门户中的智能体使用的、可复用且具备权限感知能力的知识库。
Important
这些特性和功能支持与其他Microsoft 服务和第三方服务的连接。 使用这些服务受其各自的条款的约束,可能会导致数据处理或存储超出Azure符合性边界,以及流入Azure符合性边界的数据。
您有责任管理您的数据是否会流出您组织的合规和地理边界之外及其任何相关影响,并确保已配置适当的权限、边界和审批。
你负责仔细查看和测试在特定用例上下文中生成的应用程序,并做出所有适当的决策和自定义。 这包括实施自己的负责任的 AI 缓解措施,例如元系统、内容筛选器或其他安全系统,并确保应用程序满足适当的质量、可靠性、安全性和可信度标准。 有关详细信息,请参阅 Azure AI 搜索 透明度说明。
本文介绍如何通过 AI 增强和技能集来生成字幕。 图像通常包含与搜索方案相关的有用信息。 可以将 图像矢量化 以表示搜索索引中的视觉内容。 或者,可以使用 AI 增强和技能集 从图像中创建和提取可搜索的 文本。
GenAI 提示技能可以生成数据源中每个图像的说明,索引器会将该说明推送到搜索索引中。 若要查看描述,请运行一个在响应中包含它们的查询。
先决条件
若要在技能集中处理图像内容,需要:
- 支持的数据源。 建议Azure 存储。
- 包含图像的文件或 blob。
- 对支持的数据源的读取访问权限。 本文使用基于密钥的身份验证,但索引器也可以使用搜索服务身份和 Microsoft Entra ID 身份验证进行连接。 对于基于角色的访问控制,在数据源上分配角色以允许服务标识进行读取访问。 如果要在本地开发计算机上进行测试,请确保在支持的数据源上也具有读取访问权限。
- 为图像操作配置的 搜索索引器。
- 具有 GenAI 提示技能的技能集。
- 搜索索引,其中包含用于接收已生成文本输出的字段,以及索引器中建立关联的输出字段映射。
可以选择定义投影,以将经过图像分析的输出接受到知识存储中以用于数据挖掘方案。
为图像处理配置索引器
设置源文件后,通过在索引器配置中设置 imageAction 参数来启用映像规范化。 图像规范化有助于使图像更统一,以便进行下游处理。 图像规范化包括以下操作:
- 大图像的大小调整为最大高度和宽度,使其统一。
- 对于具有指定方向的元数据的图像,将调整图像旋转以进行垂直加载。
请注意,启用
创建或更新索引器 以设置配置属性:
{ "parameters": { "configuration": { "dataToExtract": "contentAndMetadata", "parsingMode": "default", "imageAction": "generateNormalizedImages" } } }dataToExtract设置为contentAndMetadata(必需)。parsingMode验证是否已设置为默认值(必需)。此参数确定索引中创建的搜索文档的粒度。 默认模式设置一对一对应关系,以便一个 Blob 生成一个搜索文档。 如果文档很大,或者技能需要较小的文本块,则可以添加将文档细分为分页的文本拆分技能,以便处理。 但对于搜索场景,如果扩充包含图像处理,则每个文档需要一个 Blob。
将
imageAction设置为启用扩充树中的normalized_images节点(必需)generateNormalizedImages以生成规范化图像数组作为文档破解的一部分。generateNormalizedImagePerPage(仅适用于 PDF)生成规范化图像数组,其中 PDF 中的每个页面呈现到一个输出图像。 对于非 PDF 文件,此参数的行为与设置generateNormalizedImages的行为类似。 但是,由于必须生成多个图像,因此设置generateNormalizedImagePerPage可以通过设计(尤其是大型文档)降低索引操作的性能。
(可选)调整生成的规范化图像的宽度或高度:
normalizedImageMaxWidth 以像素为单位。 默认值为 2,000。 最大值为 10,000。
normalizedImageMaxHeight 以像素为单位。 默认值为 2,000。 最大值为 10,000。
关于规范化图像
如果 imageAction 设置为 非任何值,则新 normalized_images 字段包含图像数组。 每个图像都是具有以下成员的复杂类型:
| 图像成员 | 描述 |
|---|---|
| 数据 | BASE64 编码的 JPEG 格式规范化图像字符串。 |
| 宽度 | 规范化图像的宽度(以像素为单位)。 |
| 高度 | 规范化图像的高度(以像素为单位)。 |
| 原始宽度 | 规范化前图像的原始宽度。 |
| 原始高度 | 规范化前图像的原始高度。 |
| rotationFromOriginal | 创建规范化图像时发生的逆时针旋转角度(度)。 介于 0 度和 360 度之间的值。 此步骤从相机或扫描仪生成的图像中读取元数据。 通常为 90 度的倍数。 |
| contentOffset | 从其提取图像的内容字段中的字符偏移。 此字段仅适用于具有嵌入图像的文件。 从 PDF 文档中提取的图像的 contentOffset 始终位于从文档中提取的页面上的文本末尾。 这意味着映像出现在该页面上的所有文本之后,无论映像在页面上的原始位置如何。 |
| 页码 | 如果图像是从 PDF 中提取或呈现的,则此字段包含从 1 开始提取或呈现的 PDF 中的页码。 如果图像不是来自 PDF,则此字段为 0。 |
示例值:normalized_images
[
{
"data": "BASE64 ENCODED STRING OF A JPEG IMAGE",
"width": 500,
"height": 300,
"originalWidth": 5000,
"originalHeight": 3000,
"rotationFromOriginal": 90,
"contentOffset": 500,
"pageNumber": 2
}
]
定义图像处理技能集
本部分通过提供与图像处理相关的技能输入、输出和模式的上下文来补充 技能参考 文章。
- 创建或更新技能集以添加技能。
创建技能集的基本框架并配置 Foundry 工具后,可以专注于每个单独的图像技能,定义输入和源上下文,并将输出映射到索引或知识存储中的字段。
注意
有关将图像处理与下游自然语言处理相结合的示例技能集,请参阅 REST 教程:使用 REST 和 AI 从 Azure blob 生成可搜索内容。 它演示如何将技能图像处理输出馈送到实体识别和关键短语提取中。
图像处理的示例输入
如前所述,图像在文档破解过程中提取,然后作为初步步骤进行规范化。 规范化图像是任何图像处理技能的输入,始终以以下两种方式之一在扩充的文档树中表示:
-
/document/normalized_images/*专用于整体处理文档。
{
"@odata.type": "#Microsoft.Skills.Custom.ChatCompletionSkill",
"context": "/document/normalized_images/*",
"uri": "https://contoso.openai.azure.com/openai/deployments/contoso-gpt-4o/chat/completions?api-version=2025-01-01-preview",
"apiKey": "<YOUR-API-KEY here>",
"inputs": [
{
"name": "image",
"source": "/document/normalized_images/*/data"
},
{
"name": "systemMessage",
"source": "='You are a useful artificial intelligence assistant that helps people.'"
},
{
"name": "userMessage",
"source": "='Describe what you see in this image in 20 words or less in Spanish.'"
}
],
"outputs": [
{
"name": "response",
"targetName": "captionedImage"
}
]
}
将 JSON 架构响应与文本输入配合使用的示例
此示例演示如何对语言模型使用结构化输出。 此功能目前主要受 OpenAI 语言模型支持,尽管将来可能会更改此功能。
{
"@odata.type": "#Microsoft.Skills.Custom.ChatCompletionSkill",
"context": "/document/content",
"uri": "https://contoso.openai.azure.com/openai/deployments/contoso-gpt-4o/chat/completions?api-version=2025-01-01-preview",
"apiKey": "<YOUR-API-KEY here>",
"inputs": [
{
"name": "systemMessage",
"source": "='You are a useful artificial intelligence assistant that helps people.'"
},
{
"name": "userMessage",
"source": "='How many languages are there in the world and what are they?'"
}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "structured_output",
"strict": true,
"schema": {
"type": "object",
"properties": {
"total": {
"type": "number"
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"total",
"languages"
],
"additionalProperties": false
}
}
},
"outputs": [
{
"name": "response",
"targetName": "responseJsonForLanguages"
}
]
}
将输出映射到搜索字段
输出文本被表示为一个内部扩展文档树中的节点,每个节点必须映射到搜索索引中的字段,或映射到知识库中的投影,以便在您的应用中使内容可用。
首先,使用 创建或更新 - 索引 添加字段以接受技能输出。
在以下字段集合示例中:
-
content是 Blob 内容。 -
metadata_storage_name包含文件的名称(设置为retrievabletrue)。 -
metadata_storage_path是 Blob 的唯一路径,是默认文档键。 -
merged_content是文本合并的输出(当映像嵌入时很有用)。 -
captioned_image是技能输出,必须是字符串字段才能捕获搜索索引中的所有语言模型输出。
"fields": [
{
"name": "content",
"type": "Edm.String",
"filterable": false,
"retrievable": true,
"searchable": true,
"sortable": false
},
{
"name": "metadata_storage_name",
"type": "Edm.String",
"filterable": true,
"retrievable": true,
"searchable": true,
"sortable": false
},
{
"name": "metadata_storage_path",
"type": "Edm.String",
"filterable": false,
"key": true,
"retrievable": true,
"searchable": false,
"sortable": false
},
{
"name": "captioned_image",
"type": "Edm.String",
"filterable": false,
"retrievable": true,
"searchable": true,
"sortable": false
}
]
接下来,使用 更新 - 索引器 将技能集输出(扩充树中的节点)映射到索引字段。
扩充文档是内部文档。 若要在扩充的文档树中外部化节点,请设置一个输出字段映射,指定哪个索引字段接收节点内容。 应用通过索引字段访问扩充数据。 以下示例演示已扩充文档中的 文本 节点(OCR 输出),该节点映射到搜索索引中的 文本 字段。
"outputFieldMappings": [
{
"sourceFieldName": "/document/normalized_images/*/captionedImage",
"targetFieldName": "captioned_image"
}
]
运行索引器,通过语言模型标题和索引调用源文档检索、图像处理。
验证结果
针对索引运行查询以检查图像处理的结果。 使用 搜索资源管理器 作为搜索客户端或发送 HTTP 请求的任何工具。 以下查询选择包含图像处理的输出的字段。
POST /indexes/[index name]/docs/search?api-version=[api-version]
{
"search": "A cat in a picture",
"select": "metadata_storage_name, captioned_image"
}