怎么让ChatGPT理解图片?

298 阅读4分钟

前言

你知道如何让ChatGPT理解图片吗?今天带你一起快速入门,来看看怎么让ChatGPT 快速理解你的图片。

视觉理解:让AI“看懂”图片

OpenAI的部分模型拥有视觉理解能力,这意味着它们可以接受图片输入并基于这些图片进行回答。以往,语言模型只能处理文本输入,但现在,它们也能理解并分析图片内容。

支持视觉输入的模型

  • o1
  • gpt-4o
  • gpt-4o-mini
  • gpt-4-turbo

快速入门

目前我们有2种方式可以把图像传递给模型,传递图像链接或者传递 Base64 编码的图像,来看一段代码:

import 'dotenv/config';
import OpenAI from "openai";
const openai = new OpenAI({
    apiKey: process.env.OPENAI_API_KEY
});

const response = await openai.chat.completions.create({
  model: "gpt-4o-mini",
  messages: [
    {
      role: "user",
      content: [
        { type: "text", text: "图片中有什么?" },
        {
          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",
          },
        },
      ],
    },
  ],
  store: true,
});

console.log(response.choices[0]);

在上面这个案例中,我们给content传递了两组数据,第一组数据中,我们询问”图片中有什么?“,第二组数据中,我们通过链接的方式把图片传递给了模型。

Base64 编码这种方式也很简单,我们只需要把 image_url 中的url地址,换成 Base64 编码 即可。

解析多张图片

你还可以将多张图片传给模型,让它对比并回答它们的不同之处。就像下面这样:

import 'dotenv/config';
import OpenAI from "openai";
const openai = new OpenAI({
    apiKey: process.env.OPENAI_API_KEY
});

const response = await openai.chat.completions.create({
  model: "gpt-4o-mini",
  messages: [
    {
      role: "user",
      content: [
        { type: "text", text: "这几张图片有什么区别?" },
        {
          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",
          },
        }
      ],
    },
  ],
});
console.log(response.choices[0]);

在这里,模型被展示的是同一张图像的两个副本。它可以回答关于这两幅图像的问题,也可以独立回答每幅图像的问题。

低分辨率与高分辨率图像解析

你可以通过detail参数来控制模型处理图像时的分辨率,分别是:

  • low:低分辨率,适合不要求细节的场景,API响应更快,适用于快速查询。
  • high:高分辨率,模型先处理低分辨率图像,然后用更高的细节处理每个512px x 512px的图像块,适用于需要更多图像细节的任务。
import 'dotenv/config';
import OpenAI from "openai";
const openai = new OpenAI({
    apiKey: process.env.OPENAI_API_KEY
});

const response = await openai.chat.completions.create({
  model: "gpt-4o-mini",
  messages: [
    {
      role: "user",
      content: [
        { type: "text", text: "这张图片里有什么?" },
        {
          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",
            "detail": "low" // 可选 low 或 high
          },
        },
      ],
    },
  ],
});

console.log(response.choices[0]);

视觉理解的限制

尽管模型能够识别图像中的内容,并回答关于图像的常规问题,但它并不总是能够准确识别细节。例如,如果你上传一张房间的图片并询问“椅子在哪里?”,模型可能无法正确回答,再比如,对于医院的CT 扫描等专门的医学图像,也不适合解释。

因此,了解其限制是很重要的。

怎么选择模型?

可能有小伙伴会问:那你为啥选择了“gpt-4o”这个模型呢?

这里就涉及到了 OpenAI 开发中一个非常重要的点了:如何选择模型?

我这里选择的大型模型 gpt-4o 有很高的智力水平和性能,但是每个Token也贵,与之对应的,还有个小型模型 gpt-4o-mini,它没有 gpt-4o 那么智能和性能好,但是优势是便宜。

还有像 o1 这样的推理模型,可以进行高级推理、编码和多步规划,它的返回速度会比较慢,因为它需要更多的思考。

OpenAI 提供了很多模型让我们选择,具体怎么选择,我们留在后面的视频详细讲。

不过,在生成图片的过程中,大家一定要注意 tokens 的消耗,每次输入和输出都会消耗一定的Token,而且Token数量过多可能导致响应被截断,甚至丢失内容!💰

所以,大家在开发过程中一定要关注 tokens 的消耗情况,毕竟都是花的美元。

总结

通过OpenAI的视觉能力,AI可以理解图片内容,并根据这些内容回答问题。你可以根据需要选择不同的分辨率,甚至上传多个图片进行对比。虽然目前的技术尚有局限,但对于许多应用场景,它已经非常强大了。期待未来图像理解技术的进一步发展!