在流程中处理图像#

实验性功能

这是一个实验性功能,可能会随时更改。了解更多更多

PromptFlow 定义了一个表示图像数据的契约。

数据类#

promptflow.contracts.multimedia.Image Image 类是 bytes 的子类,因此您可以直接使用对象访问二进制数据。它有一个额外的属性 source_url 来存储图像的原始 URL,如果您想将 URL 而不是图像内容传递给像 GPT-4V 模型这样的 API,这将非常有用。

流程输入中的数据类型#

将流程输入的类型设置为image,promptflow会将其视为图像。

提示模板中的参考图像#

在支持图像的提示模板中(例如在OpenAI GPT-4V工具中),使用markdown语法表示模板输入是图像:![image]({{test_image}})。在这种情况下,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种格式:

  1. 与常规批量输入相同的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"}}
    
  2. 一个包含根路径下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"}}