在流程中处理图像#
实验性功能
这是一个实验性功能,可能会随时更改。了解更多更多。
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/
可以是HTML标准的mime图像类型。将其设置为特定类型可以帮助正确预览图像,或者对于未知类型可以设置为*
。
是图像的序列化表示,支持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+/AAAAAd0SU1FB+QIGBcKN7/nP/UAAAASSURBVDjLY2AYBaNgFIwCdAAABBoAAaNglfsAAAAZdEVYdGNvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVDnr0DLAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIwLTA4LTI0VDIzOjEwOjU1KzAzOjAwkHdeuQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMC0wOC0yNFQyMzoxMDo1NSswMzowMOEq5gUAAAAASUVORK5CYII=”}
path
它可以引用本地磁盘上的图像文件。支持绝对路径和相对路径,但在序列化图像表示存储在文件中的情况下,建议相对于该文件的包含文件夹,如流IO数据的情况。例如:
{“data:image/png;path”: “./my-image.png”}
请注意,在部署场景中不支持path
表示。
批量输入数据#
包含图像的批量输入数据可以有2种格式:
与常规批量输入相同的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"}}