在流中处理图像#

实验性功能

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

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/<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 表示。

批量输入数据#

包含图像的批量输入数据可以有两种格式

  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"}}