Skip to content

视觉与图像

OpenAI 的模型已经不再局限于文本。从 GPT-4o 开始,模型具备了强大的多模态能力——既能"看懂"图片,也能"画出"图片。这意味着你可以将图像作为输入发送给模型进行分析理解,也可以通过文字描述让模型为你生成全新的图像。

本章将分两大部分介绍这些能力:图像输入(Vision)图像生成(DALL-E / gpt-image-1)。无论你是想构建一个能分析产品截图的客服机器人,还是想让 AI 自动为文章配图,这里都能找到对应的 API 用法和最佳实践。


图像输入(Vision)

ℹ️GPT-4o 的视觉能力

GPT-4o 是一个原生的多模态模型,它可以直接接收图像作为输入,并理解图像中的内容。你可以用它来:

  • 描述图片内容:识别物体、场景、人物动作等
  • 分析图表数据:读懂柱状图、折线图、饼图中的趋势和数值
  • 解读文档:提取截图、PDF 渲染图中的文字和结构化信息
  • 代码审查:分析代码截图中的问题
  • 多图对比:同时传入多张图片进行比较分析

无需任何额外配置,只要在消息中附带图像,GPT-4o 就会自动进入视觉模式。

三种图像输入方式

OpenAI Responses API 支持三种方式将图像传递给模型。每种方式各有适用场景,你可以根据实际需求灵活选择。

方式一:URL 直接引用

最简单的方式是直接提供一个公开可访问的图片 URL。模型会在处理请求时自动下载并分析图像。这种方式特别适合分析网络上的图片,比如商品图、新闻配图等,无需在本地做任何预处理。

方式二:Base64 编码

如果图片存储在本地或不方便通过 URL 公开访问,你可以将图片编码为 Base64 字符串后嵌入请求体。这种方式虽然会增大请求体积(Base64 编码后体积约为原文件的 1.37 倍),但完全不依赖外部图片托管服务。

方式三:文件上传

对于需要反复使用的大文件或批量处理场景,你可以先将图片上传到 OpenAI 的文件存储服务,拿到文件 ID 后在请求中引用。这种方式适合企业级应用中的批量图片分析流水线。

python
from openai import OpenAI

client = OpenAI()

# 方法一:URL 方式
response = client.responses.create(
    model="gpt-4o",
    input=[{
        "role": "user",
        "content": [
            {"type": "input_text", "text": "描述这张图片的内容"},
            {"type": "input_image", "image_url": "https://example.com/image.jpg"}
        ]
    }]
)

print(response.output_text)
python
from openai import OpenAI
import base64

client = OpenAI()

# 方法二:Base64 方式
with open("image.png", "rb") as f:
    b64 = base64.standard_b64encode(f.read()).decode()

response = client.responses.create(
    model="gpt-4o",
    input=[{
        "role": "user",
        "content": [
            {"type": "input_text", "text": "这张图表显示了什么趋势?"},
            {"type": "input_image", "image_url": f"data:image/png;base64,{b64}"}
        ]
    }]
)

print(response.output_text)
python
from openai import OpenAI

client = OpenAI()

# 方法三:先上传文件,再引用文件 ID
file = client.files.create(
    file=open("chart.png", "rb"),
    purpose="vision"
)

response = client.responses.create(
    model="gpt-4o",
    input=[{
        "role": "user",
        "content": [
            {"type": "input_text", "text": "分析这张图表的关键数据"},
            {"type": "input_image", "file_id": file.id}
        ]
    }]
)

print(response.output_text)

图像输入方式对比

图像输入方式 优点 缺点 适用场景
URL简单方便图片需公开可访问网络图片分析
Base64无需图片托管请求体积大本地图片处理
文件上传支持大文件需先上传到 OpenAI批量处理场景

多图输入

GPT-4o 支持在一次请求中传入多张图片,模型会综合理解所有图像的内容。这在产品对比、前后效果分析、多角度观察等场景中非常实用。只需在 content 数组中添加多个 input_image 项即可。

需要注意的是,每张图片都会消耗 token,多图请求的 token 成本会显著增加。建议在实际使用中控制同时传入的图片数量,一般不超过 5-10 张为宜。


图像生成(DALL-E / gpt-image-1)

除了理解图像,OpenAI 还提供了强大的图像生成能力。最新的 gpt-image-1 模型在图像质量、提示词遵循度和文字渲染方面都有显著提升,是目前推荐的首选生成模型。

POST/v1/images/generations

图像生成 API 接受一段文本描述(prompt),返回一张或多张生成的图片。你可以控制图片的尺寸、质量、背景透明度等参数。gpt-image-1 模型还特别擅长在图片中准确渲染文字,这在生成 Logo、海报、社交媒体配图等场景中非常有用。

python
from openai import OpenAI
import base64

client = OpenAI()

response = client.images.generate(
    model="gpt-image-1",
    prompt="一只穿着太空服的猫站在月球上,地球在背景中,数字艺术风格",
    size="1024x1024",
    quality="high",
    n=1
)

# 获取 base64 图像数据
image_bytes = base64.standard_b64decode(response.data[0].b64_json)
with open("space_cat.png", "wb") as f:
    f.write(image_bytes)
python
from openai import OpenAI
import base64

client = OpenAI()

# gpt-image-1 支持透明背景,适合生成 Logo 和图标
response = client.images.generate(
    model="gpt-image-1",
    prompt="一个简洁的火箭图标,扁平化设计,蓝色和白色配色",
    size="1024x1024",
    quality="high",
    background="transparent",
    n=1
)

image_bytes = base64.standard_b64decode(response.data[0].b64_json)
with open("rocket_icon.png", "wb") as f:
    f.write(image_bytes)
python
from openai import OpenAI
import base64

client = OpenAI()

# 基于已有图片进行编辑
response = client.images.edit(
    model="gpt-image-1",
    image=open("original.png", "rb"),
    prompt="把背景换成日落时的海滩",
    size="1024x1024"
)

image_bytes = base64.standard_b64decode(response.data[0].b64_json)
with open("edited.png", "wb") as f:
    f.write(image_bytes)

图像生成参数详解

参数 可选值 说明
modelgpt-image-1 / dall-e-3 / dall-e-2生成模型
size1024x1024 / 1536x1024 / 1024x1536 / auto图片尺寸
qualitylow / medium / high / auto图像质量
n1-10生成数量
backgroundtransparent / opaque / auto背景透明度(gpt-image-1)

在选择参数时需要权衡质量和成本。quality="high" 会生成更精细的图像,但消耗的 token(即费用)也更多。对于快速原型和测试,quality="low" 已经足够;正式产品中面向用户展示的图片,建议使用 quality="high"

size 参数的选择取决于你的使用场景。正方形 1024x1024 是通用尺寸;横向 1536x1024 适合桌面壁纸或博客配图;纵向 1024x1536 适合手机壁纸或社交媒体故事。选择 auto 则让模型自动判断最佳尺寸。


最佳实践

💡视觉功能使用技巧

图像输入(Vision)方面:

  • 控制图像尺寸:发送给模型前,将图片缩放到合理的分辨率(通常不超过 2048x2048)。过大的图片不会提升理解效果,反而会大量消耗 token。OpenAI 会自动缩放超大图片,但主动控制尺寸可以让你更好地管理成本。
  • 善用 detail 参数:可以设置 detail: "low" 来降低 token 消耗。低细节模式下,模型使用固定的 85 token 处理图片;高细节模式下,一张大图可能消耗上千 token。对于只需粗略理解的场景(如判断图片主题),低细节模式足矣。
  • 提示词要具体:告诉模型你希望它关注图片的哪个方面。"描述这张图片"和"分析这张图表中 2023 年到 2024 年的增长趋势"会得到截然不同的回答。
  • 多图场景给出顺序:同时传入多张图片时,在文本提示中明确标注"第一张图"、"第二张图",帮助模型正确关联。

图像生成方面:

  • 提示词越详细越好:描述你想要的风格、构图、色调、氛围。例如"水彩风格,暖色调,柔和光线"比"画一幅画"效果好得多。
  • 善用负面描述:可以在 prompt 中说明不想要什么,例如"不要文字水印"。
  • 迭代优化:第一次生成不完美是正常的。调整 prompt 的措辞,增减细节描述,多次尝试以获得最佳效果。

注意事项与局限性

⚠️当前已知的局限性

使用视觉和图像功能时,请注意以下限制:

  • 手写体识别不可靠:虽然 GPT-4o 能识别很多类型的文字,但对于手写体(特别是潦草的手写)识别准确率有限。不建议将其作为关键 OCR 流程的唯一依赖。
  • 空间推理能力有限:模型在理解复杂的空间关系(如"A 在 B 的左上方 3 厘米处")时可能不够精确。对于需要精确空间定位的任务,建议使用专门的计算机视觉工具。
  • 计数可能不准确:让模型数图片中物体的数量时(如"图片里有几个人"),数量较多时容易出错。
  • 医学与专业图像谨慎使用:模型不应作为医学影像(X 光、CT 等)的诊断工具。它可以辅助描述,但不应替代专业医学判断。
  • 图像生成的审核限制:生成 API 内置了安全过滤器,某些涉及暴力、政治敏感或违反使用政策的 prompt 会被拒绝。
  • Token 成本较高:图像输入和生成的 token 消耗都显著高于纯文本。在设计产品时需要考虑成本控制策略,如缓存常见图片的分析结果、限制用户每日调用次数等。

学习检查

0% 完成