1. GPT-4视觉模型介绍
GPT-4视觉模型(GPT-4V)是OpenAI推出的一种多模态人工智能模型,它在GPT-4的基础上集成了视觉理解功能。与传统的文本处理模型不同,GPT-4V能够接收并分析图像内容,并针对图像提供描述、回答问题或进行交互。
应用场景示例:
- 商品识别与分类:电子商务平台可以使用GPT-4V识别商品图片,提供商品描述,帮助改善搜索和推荐系统。
- 辅助医疗决策:虽然GPT-4V不适合直接进行专业的医学影像诊断,但它可以协助医护人员进行初步的图像理解和数据整理。
- 教育与研究:在教学和科研中,GPT-4V可用于分析图表、实验结果,如自动解读科学图像数据。
- 交通监控分析:通过分析路况监控图像,GPT-4V能够辅助交通管理系统进行实时状况报告和事故识别。
2. 简单例子
下面通过一个简单的CURL请求示例来展示如何使用GPT-4视觉模型分析图像:
API请求参数说明:
model
: 指定使用的模型版本,这里为 “gpt-4-vision-preview”。messages
: 包含角色定义和内容,其中内容中可以包含文本和图像链接。max_tokens
: 指定生成文本的最大长度限制。
CURL请求示例:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "这张图片中有什么?"
},
{
"type": "image_url",
"image_url": {
"url": "您的图片链接"
}
}
]
}
],
"max_tokens": 300
}'
通过上方的请求,我们向GPT-4视觉模型提交了一张图片,并问了一个简单的问题:“这张图片中有什么?”。模型会分析图像内容,并根据图像内容提供回答。
3. 以base64编码的方式上传图片
在某些情况下,您可能需要上传本地的图片文件给GPT-4视觉模型。这时,我们可以通过base64编码的方式将图片数据嵌入到API请求中。
Python代码示例:
import base64
import requests
# OpenAI API Key
api_key = "YOUR_OPENAI_API_KEY"
# 将图片转base64格式
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
# 本地图片路径
image_path = "path_to_your_image.jpg"
# 获取图片base64编码格式
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())
在上述代码中,我们首先将本地的图片文件转换为base64编码的字符串,然后将这个字符串作为请求的一部分发送给API。模型返回的内容包含了对图片内容的描述。
4. 处理多图输入
有时候需要一次性分析多张图片。GPT-4视觉模型支持同时接收多个图像输入,并能够让用户询问关于这些图片的问题或比较它们之间的差异。
多图输入示例:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "这些图片中有什么不同?"
},
{
"type": "image_url",
"image_url": {
"url": "第一张图片的链接",
}
},
{
"type": "image_url",
"image_url": {
"url": "第二张图片的链接",
}
}
]
}
],
"max_tokens": 300
}'
在这个请求中,我们向API提交了两张图片,模型会分别分析每一张,并根据提出的问题,给出关于图片的描述和比较。这种方法非常适用于需要对图片集进行总体分析的场景。
5. 设置图片分析详情级别
在使用 GPT-4 视觉模型进行图片分析时,您可以根据需求设置分析的详情级别。通过调整 detail
参数,可选择 low
(低)、high
(高)或 auto
(自动)中的一个。下面为您详细解释每个选项的含义及如何设置:
low
:选择低详情级别会禁用“高分辨率”模型。该模型将接收低分辨率的512像素 x 512像素版本的图片,并用65个tokens的预算来代表图片。这适用于不需要高细节的场景,有助于获得更快的响应速度且消耗更少的输入tokens。high
:高详情级别允许模型首先看到低分辨率的图片,然后基于输入图片的大小,创建512像素方格的详细裁剪版本。每个详细裁剪以65个tokens的双倍预算(即129 tokens)表示。auto
:自动详情级别将根据图片输入的大小决定是使用low
或high
详情级别。
通过如下代码示例可以展示如何设置详情级别:
import base64
import requests
# OpenAI API密钥
api_key = "你的OPENAI_API_KEY"
# 图片路径
image_path = "path_to_your_image.jpg"
# 对图片进行base64编码
base64_image = base64.b64encode(open(image_path, "rb").read()).decode('utf-8')
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
payload = {
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "这张图片中有什么?"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}",
"detail": "high" # 设置为高详情级别
}
}
]
}
],
"max_tokens": 300
}
response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)
print(response.json())
6. 理解模型的局限和管理图片
6.1. 模型的局限性
GPT-4视觉模型尽管功能强大,但它并非万能,了解其局限性对于使用它来进行图片理解至关重要。以下是一些已知限制的概述:
- 医学影像:模型不适合解释专业医学影像,如CT扫描,不应被用作医疗建议。
- 非英文文字:模型处理含有非拉丁字母表文本的图片时可能性能不佳,如日语或韩语文字。
- 空间定位:模型在需要精确蕴含位置关联的任务上表现欠佳,例如识别棋盘上棋子的位置。
- 图像细节:模型可能难以理解图像中的图表或颜色和样式(如实线、虚线)变化的文本。
- 图像旋转:模型可能误解倾斜或颠倒的文本和图像。
6.2 管理会话中的图片
由于Chat Completions API是无状态的,因此需要自己管理传递给模型的消息(包括图片)。如果您希望多次使用相同的图片,每次API请求时都需要重新传递图片数据。
# ...之前示例代码...
# 在需要时重复使用base64_image变量
# 不需要再次进行图片编码,除非你需要更新或更换图片
# 再次请求API作出对新问题的回应
additional_payload = {
"model": "gpt-4-vision-preview",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "根据这张图片,你有哪些建议?"
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
"max_tokens": 300
}
new_response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=additional_payload)
print(new_response.json())
7. 成本计算
使用detail: low
选项的每张图片固定消耗85个tokens。对于detail: high
选项的图片,首先把图片按比例缩放以适应2048px x 2048px的尺寸,然后确保图片短边为768px。之后统计图片分为多少个512px的方块,每个方块消耗170个tokens,并在最后总计数中增加85个tokens。
例如,如果一张图片的尺寸是1024px x 1024px并且选择detail: high
,它的token花费将是:
- 首先,1024小于2048,所以没有初始大小调整。
- 然后,最短的边是1024,所以我们将图像缩小到768 x 768。
- 需要4个512px的正方形块来表示图像,因此最终的令牌成本为170 * 4 + 85 = 765。
如需详细了解成本计算方法,请参考GPT-4视觉模型的文档。
8. 常见问题
下面列举了一些使用 GPT-4 视觉模型时,用户可能遇到的常见问题及其答案:
Q: 是否可以针对gpt-4
的图像功能进行微调?
A: 目前我们不支持对gpt-4
的图像功能进行微调。
Q: 我可以使用gpt-4
生成图像吗?
A: 不,您可以使用dall-e-3
生成图像,使用gpt-4-vision-preview
来理解图像。
Q: 支持哪些类型的文件上传?
A: 我们目前支持PNG (.png)、JPEG (.jpeg和.jpg)、WEBP (.webp)和非动态GIF (.gif)。