你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将图像合并到提示流(预览版)
多模式大型语言模型 (LLM) 可以处理和解释各种形式的数据输入,提供了一个可以将仅限语言系统的功能提升到新高度的强大工具。 在各种数据类型中,图像对于许多实际应用程序都很重要。 将图像数据合并到 AI 系统中提供了一个实现视觉理解的基本层。
本文内容:
- 如何在提示流中使用图像数据
- 如何使用内置的 GPT-4V 工具分析图像输入。
- 如何构建可以处理图像和文本输入的聊天机器人。
- 如何使用图像数据创建批处理运行。
- 如何使用具有图像数据的联机终结点。
重要
提示流图像支持目前处于公共预览状态。 此预览版没有附带服务级别协议,建议不要用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款。
提示流中的图像类型
提示流输入和输出支持将图像作为新的数据类型。
若要在提示流创作页中使用图像数据,请执行以下操作:
添加流输入,选择“图像”作为数据类型。 你可以在流文件夹中上传或拖放图像文件、粘贴剪贴板中的图像,或者指定图像 URL 或相对图像路径。
在将图像馈送给 LLM 之前,可能需要使用 Python 工具对其进行预处理,例如可以将图像调整或裁剪为较小的图像。
重要
若要使用 Python 函数处理图像,需要使用
Image
类,从promptflow.contracts.multimedia
包将其导入。 Image 类用于表示提示流中的“图像”类型。 它旨在处理以字节为单位的图像数据格式,这在需要直接处理或操作图像数据时很方便。若要返回处理的图像数据,需要使用
Image
类来包装图像数据。 通过提供图像数据(以字节为单位)和 MIME 类型mime_type
来创建Image
对象。 MIME 类型让系统可以理解图像数据的格式,对于未知类型,它可以是*
。运行 Python 节点并检查输出。 在此示例中,Python 函数将返回已处理的图像对象。 选择相应图像输出以预览图像。 如果 Python 节点中的图像对象设置为流输出,则也可以在流输出页面中预览图像。
使用 GPT-4V 工具
Azure OpenAI GPT-4 Turbo with Vision 工具和 OpenAI GPT-4V 是提示流中的内置工具,可以使用 OpenAI GPT-4V 模型根据输入图像回答问题。 可以通过在流创作页中选择“更多工具”来找到该工具。
将 Azure OpenAI GPT-4 Turbo with Vision 工具添加到流中。 确保已建立 Azure OpenAI 连接,且可使用 GPT-4 vision-preview 模型。
用于在 GPT-4V 工具中撰写提示的 Jinja 模板遵循与 LLM 工具中的聊天 API 类似的结构。 若要在提示中表示图像输入,可以使用语法 ![image]({{INPUT NAME}})
。 图像输入可以在 user
、system
和 assistant
消息中传递。
撰写提示后,选择“验证并分析输入”按钮以分析输入占位符。 由 ![image]({{INPUT NAME}})
表示的图像输入将解析为图像类型,输入名称为“INPUT NAME”。
你可以通过以下方法为图像输入分配值:
- 来自图像类型流输入的引用。
- 来自其他节点的图像类型输出的引用。
- 上传、拖动、粘贴图像,或者指定图像 URL 或相对图像路径。
生成聊天机器人以处理图像
在本部分中,你将了解如何构建可以处理图像和文本输入的聊天机器人。
假设你想要构建一个聊天机器人,该机器人需要可以同时回答有关图像和文本的任何问题。 你可以按照以下步骤实现此目的:
创建聊天流。
添加聊天输入,选择“列表”作为数据类型。 在聊天框中,用户可以输入混合的文本和图像序列,提示流服务会将该序列转换为列表。
-
在此示例中,
{{question}}
引用聊天输入,这是一个由文本和图像组成的列表。 (可选)你可以将任何自定义逻辑添加到流以处理 GPT-4V 输出。 例如,可以添加内容安全工具来检测答案中是否包含任何不当内容,并向用户返回最终答案。
现在,可以测试聊天机器人。 打开聊天窗口,并输入包含图像的任何问题。 聊天机器人将根据图像和文本输入回答问题。 聊天输入值是自动从聊天窗口中的输入回填的。 你可以在聊天框中找到包含图像的文本,这些内容将转换为由文本和图像组成的列表。
使用图像数据创建批处理运行
通过批处理运行,可以使用广泛的数据集测试流。 表示图像数据的方法有三种:通过图像文件、公共图像 URL 或 Base64 字符串。
- 图像文件:若要在批处理运行中使用图像文件进行测试,你需要准备一个数据文件夹。 此文件夹应包含一个
jsonl
格式的批处理运行条目文件(该文件位于根目录中),以及存储在同一文件夹或子文件夹中的所有图像文件。 在该条目文件中,应使用格式{"data:<mime type>;path": "<image relative path>"}
来引用每个图像文件。 例如{"data:image/png;path": "./images/1.png"}
。 - 公共图像 URL:也可以使用以下格式在条目文件中引用图像 URL:
{"data:<mime type>;url": "<image URL>"}
。 例如{"data:image/png;url": "https://www.example.com/images/1.png"}
。 - Base64 字符串:可以使用以下格式在条目文件中引用 Base64 字符串:
{"data:<mime type>;base64": "<base64 string>"}
。 例如{"data:image/png;base64": "iVBORw0KGgoAAAANSUhEUgAAAGQAAABLAQMAAAC81rD0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABlBMVEUAAP7////DYP5JAAAAAWJLR0QB/wIt3gAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB+QIGBcKN7/nP/UAAAASSURBVDjLY2AYBaNgFIwCdAAABBoAAaNglfsAAAAZdEVYdGNvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVDnr0DLAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIwLTA4LTI0VDIzOjEwOjU1KzAzOjAwkHdeuQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMC0wOC0yNFQyMzoxMDo1NSswMzowMOEq5gUAAAAASUVORK5CYII="}
。
总之,提示流使用唯一的字典格式来表示图像,即 {"data:<mime type>;<representation>": "<value>"}
。 此处,<mime type>
表示 HTML 标准 MIME 图像类型,<representation>
表示支持的图像表示形式:path
、url
和 base64
。
创建批处理运行
在流创作页中,选择“评估”按钮启动批处理运行。 在“批处理运行”设置中,选择一个数据集,该数据集可以是一个文件夹(包含条目文件和图像文件),也可以是一个文件(仅包含条目文件)。 你可以预览条目文件并执行输入映射,以将条目文件中的列与流输入对齐。
查看批处理运行结果
你可以在运行详细信息页面中检查批处理运行输出。 选择输出表中的图像对象以轻松预览图像。
如果批处理运行输出中包含图像,可以检查包含输出 jsonl 文件和输出图像的 flow_outputs 数据集。
使用具有图像数据的联机终结点
目前,部署详细信息页中的“测试”选项卡不支持图像输入或输出。 它很快会得到支持。
目前,你可以通过发送包含图像输入的请求来测试终结点。
若要使用具有图像输入的联机终结点,应使用 {"data:<mime type>;<representation>": "<value>"}
格式来表示图像。 在这种情况下,<representation>
可以是 url
或 base64
。
如果流生成了图像输出,则输出将以 base64
格式返回,例如 {"data:<mime type>;base64": "<base64 string>"}
。