前言
你知道如何让ChatGPT理解图片吗?今天带你一起快速入门,来看看怎么让ChatGPT 快速理解你的图片。
视觉理解:让AI“看懂”图片
OpenAI的部分模型拥有视觉理解能力,这意味着它们可以接受图片输入并基于这些图片进行回答。以往,语言模型只能处理文本输入,但现在,它们也能理解并分析图片内容。
支持视觉输入的模型:
o1gpt-4ogpt-4o-minigpt-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可以理解图片内容,并根据这些内容回答问题。你可以根据需要选择不同的分辨率,甚至上传多个图片进行对比。虽然目前的技术尚有局限,但对于许多应用场景,它已经非常强大了。期待未来图像理解技术的进一步发展!