OpenAI ChatGPT 视觉API

介绍

GPT-4 with Vision(gpt-4-vision-preview),有时称为 GPT-4V 或视觉 API,允许模型接收图片并回答与之相关的问题。从历史上看,语言模型系统一直受限于只接受单一的输入模态,即文本。对于许多用例,这限制了像 GPT-4 这样的模型可以使用的领域。

GPT-4 with vision(gpt-4-vision-preview) 目前可供所有具有 GPT-4 访问权限的开发人员使用,可以通过模型和已更新以支持图片输入的 Chat Completions API 进行访问。请注意, Assistants API 目前不支持图片输入。

需要注意以下几点:

  • GPT-4 with vision 并不是一个行为与 GPT-4 不同的模型,只有在用于模型的系统提示方面有轻微差异。
  • GPT-4 with vision 并不是一个在文本任务上表现更差的不同模型,因为它具有视觉能力,它只是在 GPT-4 上增加了视觉功能。
  • GPT-4 with vision 是该模型的增强能力的一组。

快速入门

可以通过两种主要方式将图片提供给模型:网络图片链接或 图片的base64 编码。图片可以在消息中传递。目前,我们不支持第一条消息中的图片,但将来可能会更改。

from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4-vision-preview",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "What’s in this image?"},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
                    },
                },
            ],
        }
    ],
    max_tokens=300,
)

print(response.choices[0])

该模型最擅长回答有关图片中存在的内容的一般问题。虽然它确实了解图片中对象之间的关系,但它尚未优化以回答有关图片中某些对象位置的详细问题。例如,你可以根据冰箱里的东西问它,晚餐的一些想法是什么,但如果你给它看一个房间的图片,并问它椅子在哪里,它可能无法正确回答问题。

上传 base 64 编码图片

如果本地有一个图片或一组图片,则可以将它们以 base 64 编码格式传递到模型,下面是一个运行示例:

import base64
import requests

# OpenAI API Key
api_key = "YOUR_OPENAI_API_KEY"

# Function to encode the image
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode('utf-8')

# Path to your image
image_path = "path_to_your_image.jpg"

# Getting the base64 string
base64_image = encode_image(image_path)

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}"
}

payload = {
    "model": "gpt-4-vision-preview",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "What’s in this image?"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": f"data:image/jpeg;base64,{base64_image}"
            }
          }
        ]
      }
    ],
    "max_tokens": 300
}

response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)

print(response.json())

多个图片输入

聊天对话 API 能够接收和处理 多个 “base64 编码格式” 或 “图片网址” 的图片输入。该模型将处理每张图片,并使用来自所有图片的信息来回答问题。

from openai import OpenAI

client = OpenAI()
response = client.chat.completions.create(
    model="gpt-4-vision-preview",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "What are in these images? Is there any difference between them?",
                },
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
                    },
                },
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
                    },
                },
            ],
        }
    ],
    max_tokens=300,
)
print(response.choices[0])

在这里,模型显示了同一图片的两个副本,并且可以独立回答有关两个或每个图片的问题。

低保真或高保真图片理解

通过控制参数(具有两个选项low和high)或 ,您可以控制模型如何处理图片并生成其文本理解。

  • low将禁用“高分辨率”模型。该模型将收到低分辨率 512 x 512 版本的图片,并以 65 个代币的预算表示图片。这允许 API 返回更快的响应,并为不需要高细节的用例使用更少的输入令牌。
  • high将启用“高分辨率”模式,该模式首先允许模型查看低分辨率图片,然后根据输入图片大小将输入图片创建为 512px 正方形的详细裁剪。每个详细的作物都使用两倍的代币预算(65 个代币),总共 129 个代币。

管理映像

与 Google 助理 API 不同,聊天完成 API 不是有状态的。这意味着您必须自己管理传递给模型的消息(包括图片)。如果要多次将同一图片传递给模型,则必须在每次向 API 发出请求时传递图片。

对于长时间运行的对话,我们建议通过 URL 而不是 base64 传递图片。还可以通过提前缩小图片大小以小于预期的最大大小来改善模型的延迟。对于低分辨率模式,我们期望图片为 512 像素 x 512 像素。对于高静止模式,图片的短边应小于 768 像素,长边应小于 2,000 像素。

模型处理图片后,将从 OpenAI 服务器中删除该图片,并且不会保留。我们不会使用通过 OpenAI API 上传的数据来训练我们的模型。

局限性

虽然具有视觉功能的 GPT-4 功能强大,可用于多种情况,但了解该模型的局限性很重要。以下是我们注意到的一些限制:

  • 医学图片:该模型不适合解释 CT 扫描等专业医学图片,不应用于医疗建议。
  • 非英语:在处理包含非拉丁字母文本(如日语或韩语)的图片时,模型可能无法发挥最佳性能。
  • 大文本:放大图片中的文本以提高可读性,但避免裁剪重要细节。
  • 旋转:模型可能会误解旋转/颠倒的文本或图片。
  • 视觉元素:模型可能难以理解颜色或样式(如实线、虚线或虚线)变化的图形或文本。
  • 空间推理:该模型难以完成需要精确空间定位的任务,例如识别国际象棋位置。
  • 准确性:在某些情况下,模型可能会生成不正确的描述或标题。
  • 图片形状:该模型在处理全景和鱼眼图片时遇到困难。
  • 元数据和调整大小:模型不处理原始文件名或元数据,并且在分析之前调整图片大小,从而影响其原始尺寸。
  • 计数:可以给出图片中对象的近似计数。
  • 验证码:出于安全原因,我们实施了一个系统来阻止提交验证码。

计算成本

图片输入以令牌计量和收费,就像文本输入一样。给定图片的令牌成本由两个因素决定:其大小和每个image_url块上的选项。所有图片每张花费 85 个代币。 首先将图片缩放以适合 2048 x 2048 正方形,保持其纵横比。然后,对它们进行缩放,使图片的最短边长 768 像素。最后,我们计算图片由多少个 512px 的正方形组成。每个方块花费 170 个代币。另外 85 个代币总是添加到最终总数中。detaildetail: lowdetail: high

以下是演示上述内容的一些示例。

  • 模式下的 1024 x 1024 方形图片需要 765 个代币detail: high
    • 1024 小于 2048,因此没有初始调整大小。
    • 最短边是 1024,因此我们将图片缩小到 768 x 768。
    • 需要 4 个 512px 的方形图块来表示图片,因此最终的代币成本为 。170 * 4 + 85 = 765
  • 模式下的 2048 x 4096 图片需要 1105 个令牌detail: high
    • 我们将图片缩小到 1024 x 2048 以适合 2048 正方形。
    • 最短边是 1024,因此我们进一步缩小到 768 x 1536。
    • 需要 6 个 512px 图块,因此最终的代币成本为 。170 * 6 + 85 = 1105
  • 大多数情况下,一张 4096 x 8192 的图片需要 85 个代币detail: low
    • 无论输入大小如何,低细节图片都是固定成本。

常见问题

我可以微调图片功能吗?gpt-4

不可以,我们目前不支持微调图片功能。gpt-4

我可以用来生成图片吗?gpt-4

不,您可以使用它来生成图片和理解图片。dall-e-3gpt-4-vision-preview

我可以上传什么类型的文件?

我们目前支持 PNG (.png)、JPEG(.jpeg 和 .jpg)、WEBP (.webp) 和非动画 GIF (.gif)。

我可以上传的图片大小有限制吗?

是的,我们将每张图片上传的图片限制为 20MB。

我可以删除我上传的图片吗?

不会,我们会在模型处理图片后自动为您删除图片。

在哪里可以了解有关 GPT-4 with Vision 注意事项的更多信息?

您可以在 GPT-4 with Vision 系统卡中找到有关我们的评估、准备和缓解工作的详细信息。

我们进一步实施了一个系统来阻止提交验证码。

GPT-4 with Vision 的速率限制如何工作?

我们在令牌级别处理图片,因此我们处理的每个图片都计入每分钟令牌数 (TPM) 限制。有关用于确定每个图片的令牌计数的公式的详细信息,请参阅计算成本部分。

GPT-4 with Vision 能理解图片元数据吗?

否,模型不接收图片元数据。

如果我的图片不清晰会怎样?

如果图片模棱两可或不清晰,模型将尽最大努力对其进行解释。但是,结果可能不太准确。一个好的经验法则是,如果普通人无法以低/高分辨率模式使用的分辨率看到图片中的信息,那么模型也无法看到。

引用OpenAI官方文档翻译链接

  1. OpenAI ChatGPT支持的模型
  2. OpenAI ChatGPT开发人员快速入门
  3. OpenAI ChatGPT生成图片API
  4. OpenAI ChatGPT文字转语音API
  5. OpenAI ChatGPT语音转文字API
  6. OpenAI ChatGPT视觉API
  7. OpenAI ChatGPT函数调用API
posted @ 2023-11-14 10:12  ryan-Z  阅读(1136)  评论(0编辑  收藏  举报