在流中处理图像#
实验性功能
这是一个实验性功能,随时可能更改。了解更多。
PromptFlow 定义了一个用于表示图像数据的契约。
数据类#
promptflow.contracts.multimedia.Image
Image 类是 bytes
的子类,因此您可以直接使用该对象访问二进制数据。它有一个额外的属性 source_url
来存储图像的原始 URL,如果您想将 URL 而不是图像内容传递给 GPT-4V 模型等 API,这将很有用。
流输入中的数据类型#
将流输入的类型设置为 image
,promptflow 将其视为图像。
在提示模板中引用图像#
在支持图像的提示模板中(例如在 OpenAI GPT-4V 工具中),使用 Markdown 语法表示模板输入是图像:
。在这种情况下,test_image
将在发送到 LLM 模型之前替换为 base64 或 source_url(如果已设置)。
序列化/反序列化#
Promptflow 使用一个特殊的字典来表示图像。{"data:image/<mime-type>;<representation>": "<value>"}
<mime-type>
可以是 HTML 标准的 mime 图像类型。将其设置为特定类型有助于正确预览图像,也可以是*
表示未知类型。<representation>
是图像的序列化表示,有 3 种受支持的类型url
它可以指向公共可访问的网页 URL。例如:
{“data:image/png;url”: “https://developer.microsoft.com/_devcom/images/logo-ms-social.png”}
base64
它可以是图像的 base64 编码。例如:
{“data:image/png;base64”: “iVBORw0KGgoAAAANSUhEUgAAAGQAAABLAQMAAAC81rD0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABlBMVEUAAP7////DYP5JAAAAAWJLR0QB/wIt3gAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAdclSU1FB+QIGBcKN7/nP/UAAAASSURBVDjLY2AYBaNgFIwCdAAABBoAAaNglfsAAAAZdEVYdGNvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVDnr0DLAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIwLTA4LTI0VDIzOjEwOjU1KzAzOjAwkHdeuQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMC0wOC0yNFQyMzoxMDo1NSswMzowMOEq5gUAAAAASUVORK5CYII=”}
path
它可以引用本地磁盘上的图像文件。绝对路径和相对路径都受支持,但在序列化图像表示存储在文件中,相对于该文件所在文件夹的路径是推荐的,如流 IO 数据的情况。例如:
{“data:image/png;path”: “./my-image.png”}
请注意,部署场景不支持 path
表示。
批量输入数据#
包含图像的批量输入数据可以有两种格式
与常规批量输入相同的 jsonl 格式,只是某些列可能是序列化的图像数据或包含图像的复合数据类型(字典/列表)。序列化图像只能是 Url 或 Base64。例如:
{"question": "How many colors are there in the image?", "input_image": {"data:image/png;url": "https://developer.microsoft.com/_devcom/images/logo-ms-social.png"}} {"question": "What's this image about?", "input_image": {"data:image/png;url": "https://developer.microsoft.com/_devcom/images/404.png"}}
一个文件夹,其中包含根路径下的 jsonl 文件,该文件包含文件引用格式的序列化图像。引用的文件存储在文件夹中,其相对于根路径的相对路径用作文件引用中的路径。以下是一个批量输入示例,请注意
input.jsonl
的名称是任意的,只要它是 jsonl 文件即可BatchInputFolder |----input.jsonl |----image1.png |----image2.png
input.jsonl
的内容{"question": "How many colors are there in the image?", "input_image": {"data:image/png;path": "image1.png"}} {"question": "What's this image about?", "input_image": {"data:image/png;path": "image2.png"}}