你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用支持视觉的聊天模型

支持视觉的聊天模型是 OpenAI 开发的一个大型多模态模型 (LMM),可以分析图像,并为有关图像的问题提供文本回应。 它们结合了自然语言处理和视觉理解。 目前支持视觉的模型有 GPT-4 Turbo with Vision、GPT-4o 和 GPT-4o-mini。

支持视觉的模型可以回答有关所上传的图像中展示的内容的一般问题。

提示

要使用支持视觉的模型,请在已部署的受支持模型上调用会话补全 API。 如果不熟悉会话补全 API,请参阅支持视觉的聊天操作指南

GPT-4 Turbo 模型升级

GPT-4 Turbo 的最新 GA 版本是:

  • gpt-4 版本: turbo-2024-04-09

这是以下预览版模型的替代品:

  • gpt-4 版本: 1106-Preview
  • gpt-4 版本: 0125-Preview
  • gpt-4 版本: vision-preview

OpenAI 与 Azure OpenAI GPT-4 Turbo GA 模型之间的差异

  • OpenAI 的最新 0409 turbo 模型的版本支持所有推理请求的 JSON 模式和函数调用。
  • Azure OpenAI 的最新 turbo-2024-04-09 的版本目前不支持在使用图像(视觉)输入发出推理请求时使用 JSON 模式和函数调用。 基于文本的输入请求(没有 image_url 和内联图像的请求)支持 JSON 模式和函数调用。

与 gpt-4 vision-preview 的差异

  • gpt-4 版本 turbo-2024-04-09 不支持将 Azure AI 特定视觉增强功能与 GPT-4 Turbo with Vision 集成。 这包括光学字符识别 (OCR)、对象接地、视频提示以及改进的图像数据处理。

重要

gpt-4 版本 vision-preview 升级到 turbo-2024-04-09 后,视觉增强预览版功能(包括光学字符识别 (OCR)、对象上下文关联、视频提示)将会停用且不再可供使用。 如果你当前依赖上述任何预览版功能,进行这种自动模型升级将给你的系统造成中断性变更。

GPT-4 Turbo 预配的托管可用性

  • gpt-4 版本: turbo-2024-04-09 可用于标准部署和预配部署。 目前,此模型的预配版本不支持图像/视觉推理请求。 此模型的预配部署仅接受文本输入。 标准模型部署同时接受文本和图像/视觉推理请求。

部署 GPT-4 Turbo with Vision GA

要从 Azure AI Foundry 门户部署 GA 模型,请选择 GPT-4,然后从下拉菜单中选择 turbo-2024-04-09 版本。 gpt-4-turbo-2024-04-09 模型的默认配额将与 GPT-4-Turbo 的当前配额相同。 请参阅区域配额限制

调用会话补全 API

以下命令显示了通过代码使用 GPT-4 Turbo with Vision 模型的最基本方法。 如果这是首次以编程方式使用这些模型,建议先从 GPT-4 Turbo with Vision 快速入门开始。

将 POST 请求发送到 https://{RESOURCE_NAME}.openai.azure.com/openai/deployments/{DEPLOYMENT_NAME}/chat/completions?api-version=2024-02-15-preview

  • RESOURCE_NAME 是 OpenAI 资源的名称
  • DEPLOYMENT_NAME 是 GPT-4 Turbo with Vision 模型部署的名称

必需的标头

  • Content-Type:application/json
  • api-key: {API_KEY}

正文:下列为请求正文示例。 格式与 GPT-4 的聊天补全 API 相同,只是消息内容可以是包含文本和图像(图像的有效 HTTP 或 HTTPS URL 或者 base-64 编码的图像)的数组。

重要

切记设置 "max_tokens" 值,否则返回输出将被截断。

重要

上传图像时,每个聊天请求的上限为 10 个图像。

{
    "messages": [ 
        {
            "role": "system", 
            "content": "You are a helpful assistant." 
        },
        {
            "role": "user", 
            "content": [
	            {
	                "type": "text",
	                "text": "Describe this picture:"
	            },
	            {
	                "type": "image_url",
	                "image_url": {
                        "url": "<image URL>"
                    }
                } 
           ] 
        }
    ],
    "max_tokens": 100, 
    "stream": false 
} 

提示

使用本地图像

如果要使用本地图像,可以使用以下 Python 代码将其转换为 base64,以便将其传递给 API。 在线提供了其他文件转换工具。

import base64
from mimetypes import guess_type

# Function to encode a local image into data URL 
def local_image_to_data_url(image_path):
    # Guess the MIME type of the image based on the file extension
    mime_type, _ = guess_type(image_path)
    if mime_type is None:
        mime_type = 'application/octet-stream'  # Default MIME type if none is found

    # Read and encode the image file
    with open(image_path, "rb") as image_file:
        base64_encoded_data = base64.b64encode(image_file.read()).decode('utf-8')

    # Construct the data URL
    return f"data:{mime_type};base64,{base64_encoded_data}"

# Example usage
image_path = '<path_to_image>'
data_url = local_image_to_data_url(image_path)
print("Data URL:", data_url)

当你的 base64 图像数据准备就绪后,可以在请求正文中将其传递给 API,如下所示:

...
"type": "image_url",
"image_url": {
   "url": "data:image/jpeg;base64,<your_image_data>"
}
...

输出

API 响应应如下所示:

{
    "id": "chatcmpl-8VAVx58veW9RCm5K1ttmxU6Cm4XDX",
    "object": "chat.completion",
    "created": 1702439277,
    "model": "gpt-4",
    "prompt_filter_results": [
        {
            "prompt_index": 0,
            "content_filter_results": {
                "hate": {
                    "filtered": false,
                    "severity": "safe"
                },
                "self_harm": {
                    "filtered": false,
                    "severity": "safe"
                },
                "sexual": {
                    "filtered": false,
                    "severity": "safe"
                },
                "violence": {
                    "filtered": false,
                    "severity": "safe"
                }
            }
        }
    ],
    "choices": [
        {
            "finish_reason":"stop",
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "The picture shows an individual dressed in formal attire, which includes a black tuxedo with a black bow tie. There is an American flag on the left lapel of the individual's jacket. The background is predominantly blue with white text that reads \"THE KENNEDY PROFILE IN COURAGE AWARD\" and there are also visible elements of the flag of the United States placed behind the individual."
            },
            "content_filter_results": {
                "hate": {
                    "filtered": false,
                    "severity": "safe"
                },
                "self_harm": {
                    "filtered": false,
                    "severity": "safe"
                },
                "sexual": {
                    "filtered": false,
                    "severity": "safe"
                },
                "violence": {
                    "filtered": false,
                    "severity": "safe"
                }
            }
        }
    ],
    "usage": {
        "prompt_tokens": 1156,
        "completion_tokens": 80,
        "total_tokens": 1236
    }
}

每个响应都包含 "finish_reason" 字段。 它具有以下可能值:

  • stop:API 返回了完整的模型输出。
  • length:由于 max_tokens 输入参数或模型的标记限制,模型输出不完整。
  • content_filter:由于内容筛选器的标志,省略了内容。

图像处理中的详细信息参数设置:低、高、自动

模型中的 detail 参数提供三种选择:lowhighauto,用于调整模型解释和处理图像的方式。 默认设置为自动,其中模型将根据图像输入的大小在低或高之间做出决定。

  • low 设置:模型不会激活“高分辨率”模式,而是处理分辨率较低的 512x512 版本,从而加快响应速度,减少在细化细节并不重要的方案中的标记消耗。
  • high 设置:模型将激活“高分辨率”模式。 在此设置下,模型首先查看低分辨率图像,然后根据输入图像生成详细的 512x512 段。 每个段使用两倍的标记预算,从而获得对图像的更详细解释。”

有关图像参数如何影响使用的令牌和定价的详细信息,请参阅 - 什么是 Azure OpenAI?图像标记

输出

如此,从模型收到的聊天响应应包括有关图像的增强信息,例如对象标签和边界框以及 OCR 结果。 API 响应应如下所示:

{
    "id": "chatcmpl-8UyuhLfzwTj34zpevT3tWlVIgCpPg",
    "object": "chat.completion",
    "created": 1702394683,
    "model": "gpt-4",
    "choices":
    [
        {
            "finish_reason": {
                "type": "stop",
                "stop": "<|fim_suffix|>"
            },
            "index": 0,
            "message":
            {
                "role": "assistant",
                "content": "The image shows a close-up of an individual with dark hair and what appears to be a short haircut. The person has visible ears and a bit of their neckline. The background is a neutral light color, providing a contrast to the dark hair."
            }
        }
    ],
    "usage":
    {
        "prompt_tokens": 816,
        "completion_tokens": 49,
        "total_tokens": 865
    }
}

每个响应都包含 "finish_reason" 字段。 它具有以下可能值:

  • stop:API 返回了完整的模型输出。
  • length:由于 max_tokens 输入参数或模型的标记限制,模型输出不完整。
  • content_filter:由于内容筛选器的标志,省略了内容。

后续步骤