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

将图像合并到提示流(预览版)

多模式大型语言模型 (LLM) 可以处理和解释各种形式的数据输入,提供了一个可以将仅限语言系统的功能提升到新高度的强大工具。 在各种数据类型中,图像对于许多实际应用程序都很重要。 将图像数据合并到 AI 系统中提供了一个实现视觉理解的基本层。

本文内容:

  • 如何在提示流中使用图像数据
  • 如何使用内置的 GPT-4V 工具分析图像输入。
  • 如何构建可以处理图像和文本输入的聊天机器人。
  • 如何使用图像数据创建批处理运行。
  • 如何使用具有图像数据的联机终结点。

重要

提示流图像支持目前处于公共预览状态。 此预览版没有附带服务级别协议,建议不要用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

提示流中的图像类型

提示流输入和输出支持将图像作为新的数据类型。

若要在提示流创作页中使用图像数据,请执行以下操作:

  1. 添加流输入,选择“图像”作为数据类型。 你可以在流文件夹中上传或拖放图像文件、粘贴剪贴板中的图像,或者指定图像 URL 或相对图像路径。 流创作页面的屏幕截图,其中显示了将流输入添加为图像类型。

  2. 预览图像。 如果图像未正确显示,请删除图像并重新添加。 显示图像预览流输入的流创作页面的屏幕截图。

  3. 在将图像馈送给 LLM 之前,可能需要使用 Python 工具对其进行预处理,例如可以将图像调整或裁剪为较小的图像使用 python 工具执行图像预处理的屏幕截图。

    重要

    若要使用 Python 函数处理图像,需要使用 Image 类,从 promptflow.contracts.multimedia 包将其导入。 Image 类用于表示提示流中的“图像”类型。 它旨在处理以字节为单位的图像数据格式,这在需要直接处理或操作图像数据时很方便。

    若要返回处理的图像数据,需要使用 Image 类来包装图像数据。 通过提供图像数据(以字节为单位)和 MIME 类型mime_type来创建 Image 对象。 MIME 类型让系统可以理解图像数据的格式,对于未知类型,它可以是 *

  4. 运行 Python 节点并检查输出。 在此示例中,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 工具的屏幕截图。

用于在 GPT-4V 工具中撰写提示的 Jinja 模板遵循与 LLM 工具中的聊天 API 类似的结构。 若要在提示中表示图像输入,可以使用语法 ![image]({{INPUT NAME}})。 图像输入可以在 usersystemassistant 消息中传递。

撰写提示后,选择“验证并分析输入”按钮以分析输入占位符。 由 ![image]({{INPUT NAME}}) 表示的图像输入将解析为图像类型,输入名称为“INPUT NAME”。

你可以通过以下方法为图像输入分配值:

  • 来自图像类型流输入的引用。
  • 来自其他节点的图像类型输出的引用。
  • 上传、拖动、粘贴图像,或者指定图像 URL 或相对图像路径。

生成聊天机器人以处理图像

在本部分中,你将了解如何构建可以处理图像和文本输入的聊天机器人。

假设你想要构建一个聊天机器人,该机器人需要可以同时回答有关图像和文本的任何问题。 你可以按照以下步骤实现此目的:

  1. 创建聊天流。

  2. 添加聊天输入,选择“列表”作为数据类型。 在聊天框中,用户可以输入混合的文本和图像序列,提示流服务会将该序列转换为列表。 聊天输入类型配置的屏幕截图。

  3. 将 GPT-4V 工具添加到流中。  聊天流中 GPT-4V 工具的屏幕截图。

    在此示例中,{{question}} 引用聊天输入,这是一个由文本和图像组成的列表。

  4. (可选)你可以将任何自定义逻辑添加到流以处理 GPT-4V 输出。 例如,可以添加内容安全工具来检测答案中是否包含任何不当内容,并向用户返回最终答案。 使用内容安全工具处理 gpt-4v 输出的屏幕截图。

  5. 现在,可以测试聊天机器人。 打开聊天窗口,并输入包含图像的任何问题。 聊天机器人将根据图像和文本输入回答问题。 聊天输入值是自动从聊天窗口中的输入回填的。 你可以在聊天框中找到包含图像的文本,这些内容将转换为由文本和图像组成的列表。 聊天机器人与图像交互的屏幕截图。

注意

若要使聊天机器人能够使用富文本和图像进行回复,请将聊天输出设为 list 类型。 该列表应包含字符串(对于文本)和提示流图像对象(对于图像),其中的内容将按自定义顺序排列。 使用富文本和图像进行响应的聊天机器人的屏幕截图。

使用图像数据创建批处理运行

通过批处理运行,可以使用广泛的数据集测试流。 表示图像数据的方法有三种:通过图像文件、公共图像 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> 表示支持的图像表示形式:pathurlbase64

创建批处理运行

在流创作页中,选择“评估”按钮启动批处理运行。 在“批处理运行”设置中,选择一个数据集,该数据集可以是一个文件夹(包含条目文件和图像文件),也可以是一个文件(仅包含条目文件)。 你可以预览条目文件并执行输入映射,以将条目文件中的列与流输入对齐。 批量运行数据选择的屏幕截图。

查看批处理运行结果

你可以在运行详细信息页面中检查批处理运行输出。 选择输出表中的图像对象以轻松预览图像。

批处理运行输出的屏幕截图。

如果批处理运行输出中包含图像,可以检查包含输出 jsonl 文件和输出图像的 flow_outputs 数据集

批处理运行流输出的屏幕截图。

使用具有图像数据的联机终结点

你可以将流部署到联机终结点以进行实时推理

目前,部署详细信息页中的“测试”选项卡不支持图像输入或输出。 它很快会得到支持。

目前,你可以通过发送包含图像输入的请求来测试终结点。

若要使用具有图像输入的联机终结点,应使用 {"data:<mime type>;<representation>": "<value>"} 格式来表示图像。 在这种情况下,<representation> 可以是 urlbase64

如果流生成了图像输出,则输出将以 base64 格式返回,例如 {"data:<mime type>;base64": "<base64 string>"}

后续步骤