相关文章推荐
千杯不醉的香槟  ·  Flask ...·  2 年前    · 
玩命的青蛙  ·  eXeScope 6.5 ...·  2 年前    · 
聪明的柚子  ·  openlayers 添加点线面 ...·  2 年前    · 
近视的金鱼  ·  html - ...·  2 年前    · 

本文中标记了“(预览版)”的项目目前为公共预览版。 此预览版未提供服务级别协议,不建议将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

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

本文内容:

  • 如何在提示流中使用图像数据
  • 如何使用内置的 GPT-4V 工具分析图像输入。
  • 如何构建可以处理图像和文本输入的聊天机器人。
  • 如何使用图像数据创建批处理运行。
  • 如何使用具有图像数据的联机终结点。
  • 必须对此功能使用 基于中心的项目 。 不支持 Azure AI Foundry 项目 。 请参阅 如何知道我拥有哪种类型的项目? 创建基于中心的项目

    提示流中的图像类型

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

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

  • 添加流输入,选择“图像”作为数据类型 。 你可以在流文件夹中上传或拖放图像文件、粘贴剪贴板中的图像,或者指定图像 URL 或相对图像路径。

    from promptflow import tool
    from promptflow.contracts.multimedia import Image as PFImage 
    from PIL import Image as Image 
    import io
    @tool
    def process_image(input_image: PFImage) -> PFImage:
        # convert the input image data to a BytesIO object
        data_byteIO = io.BytesIO(input_image)
        # Open the image data as a PIL Image object
        image = Image.open(data_byteIO)
        # crop image
        cropped_image = image.crop((100, 100, 900, 900))
        # Convert the cropped image back to BytesIO
        byte_arr = io.BytesIO()
        cropped_image.save(byte_arr, format = 'JPEG')
        # Create a new prompt flow Image object with the cropped image data
        # This image is now ready to be returned
        cropped_PF_image = PFImage(byte_arr.getvalue(), mime_type = "image/jpeg")
        return cropped_PF_image
    > [!IMPORTANT]
    > To process images using a Python function, you need to use the `Image` class that you import from the `promptflow.contracts.multimedia` package. The `Image` class is used to represent an `Image` type within prompt flow. It is designed to work with image data in byte format, which is convenient when you need to handle or manipulate the image data directly.
    > To return the processed image data, you need to use the `Image` class to wrap the image data. Create an `Image` object by providing the image data in bytes and the [MIME type](https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types) `mime_type`. The MIME type lets the system understand the format of the image data, or it can be `*` for unknown type.
    
  • 运行 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 工具中撰写提示的 Jinja 模板遵循与 LLM 工具中的聊天 API 类似的结构。 若要在提示中表示图像输入,可以使用语法 ![image]({{INPUT NAME}})。 图像输入可以在 usersystemassistant 消息中传递。

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

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

  • 来自图像类型流输入的引用。
  • 来自其他节点的图像类型输出的引用。
  • 上传、拖动、粘贴图像,或者指定图像 URL 或相对图像路径。
  • 生成聊天机器人以处理图像

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

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

  • 创建聊天流。

  • 在“输入”中,选择“列表”作为数据类型。 在聊天框中,用户可以输入混合的文本和图像序列,提示流服务会将该序列转换为列表。 在该条目文件中,应使用格式 {"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> 表示支持的图像表示形式: path url base64

    创建批处理运行

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

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

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

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

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

    通过使用变体优化提示来循环访问和优化流