OpenAI API 图片输入怎么传:input_image 的网址、Base64、文件 ID 三种写法,附 detail 和限制

想让 OpenAI API 看懂图片?在 Responses 请求的 content 里放 type 为 input_image 的项,图可用网址、Base64 数据 URL 或文件 ID 传入。本文给 Python 和 Node 示例,讲 detail、格式与数量限制和官方列出的局限。

NNathaniel bigo··原创首发·AI 辅助撰写
9 分钟读完
资料核对于 2026-11-05 · 依据官方文档与公开资料整理 其他 账号
本文根据 OpenAI 官方《Images and vision》整理,资料核对于 2026-11-05。配图为本站整理的示意图,不是界面截图。代码里的模型名取自官方当天示例,请以官方模型页为准。本站(bigolab.com)不是 OpenAI 官方网站。API 是按用量计费的独立服务,与 ChatGPT 订阅分开计算,Key 的获取见 /guides/openai-api-key。

适用于谁

  • 已经能用 Python 或 Node 发出第一个请求,想让模型“看图说话”、读图中文字的开发者;
  • 做发票识别、截图问答、商品图描述等小工具的人;
  • 想弄清楚“图片到底怎么塞进请求里、会不会很贵”的人。

第一次调用的写法见 /guides/openai-api-python-quickstart,本文默认你已经有可用的 Key 并能跑通文字请求。

结论先说

  1. 图片放进 input 里某条用户消息的 content 数组,一项文字(input_text)加一项或多项图片(input_image)。
  2. 官方给了三种传图方式:完整网址、Base64 编码的数据 URL、先用 Files API 上传再引用文件 ID。
  3. detail 控制图片预处理,取值 low、high、original、auto,不写默认 auto;具体哪个模型支持哪几档,要看官方当天的表。
  4. 有硬限制:支持 PNG、JPEG、WEBP、非动画 GIF;一次请求最多 1,500 张图、负载总量最多 512 MB。
  5. 图片按 token 计费,也占速率限制里的每分钟 token 数。价格以官方价格页当天为准,见 /guides/openai-api-price-official-table。

三种给模型传图的方式:网址、Base64 数据 URL、文件 ID

图:本站根据 OpenAI 官方《Images and vision》 整理的示意图

一、传网址:最省事

如果图片已经放在网上、而且能被公开访问,直接给网址就行。官方示例的结构如下(Python):

python
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-6-astra",  # 以官方模型页当天为准
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": "这张图里有什么?"},
                {
                    "type": "input_image",
                    "image_url": "https://example.com/your-image.jpg",
                },
            ],
        }
    ],
)

print(response.output_text)

注意几点:

  • content 是个数组,文字和图片是并列的两项;
  • 网址必须是官方所说的“完整网址”(fully qualified URL),也就是带 https:// 的;
  • 网址要能被 OpenAI 的服务访问到,需要登录才能看的图、只在公司内网能打开的图,这种写法不适用(这一条是本站根据“需要可访问”做的推断,请按自己的情况实测)。

二、传 Base64:本地文件最常用

图片在你自己的电脑上时,可以读出来编码成 Base64,再拼成数据 URL 放进 image_url。官方 Node 示例(保存为 .mjs 文件运行):

javascript
import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI();

const base64Image = fs.readFileSync("example.jpg", "base64");

const response = await openai.responses.create({
  model: "gpt-6-astra", // 以官方模型页当天为准
  input: [
    {
      role: "user",
      content: [
        { type: "input_text", text: "这张图里有什么?" },
        {
          type: "input_image",
          image_url: `data:image/jpeg;base64,${base64Image}`,
          detail: "auto",
        },
      ],
    },
  ],
});

console.log(response.output_text);

Python 的写法同理,官方示例用 base64.b64encode(...) 编码后拼出 f"data:image/jpeg;base64,{base64_image}"。要点是数据 URL 开头的类型要和实际文件格式一致:JPEG 写 image/jpeg,PNG 写 image/png。这一条是本站根据官方 PNG 示例(data:image/png;base64,)归纳的。

三、传文件 ID:同一张图多次用

官方说,也可以先用 Files API 上传文件,再在请求里引用文件 ID。上传时 purpose 填 vision:

python
from openai import OpenAI

client = OpenAI()

with open("example.jpg", "rb") as f:
    uploaded = client.files.create(file=f, purpose="vision")

response = client.responses.create(
    model="gpt-6-astra",  # 以官方模型页当天为准
    input=[
        {
            "role": "user",
            "content": [
                {"type": "input_text", "text": "这张图里有什么?"},
                {"type": "input_image", "file_id": uploaded.id},
            ],
        }
    ],
)

print(response.output_text)

这个写法对应官方 Python 文件 ID 示例。上传一次、多次引用,比每次都重新编码一大串 Base64 更省请求体积。

四、detail 怎么选

官方的 detail 说明:

取值官方说的适用场景
low粗略理解图片。资源消耗随模型而不同,官方特别说明 low 不一定比 high 用的 token 少
high标准的高保真理解,不需要原图精确坐标时用
original大图、密集图、对空间位置敏感的图或 computer use,且模型支持时
auto用模型的默认处理方式

官方还提醒:做 OCR、找很小的物体、computer use 这类要看清细节或要精确坐标的任务,在模型支持时用 "detail": "original"。需要精确坐标时,建议先把图片缩放到模型的限制内再发送,并把返回的坐标映射回原图。

不同模型支持的档位不同。例如官方表里,较老的 gpt-4o 系列只有 low、high、auto,没有 original。所以模型名换了,detail 也要核对。

五、限制与费用

官方「Image input requirements」列出:

  • 文件类型:PNG、JPEG、WEBP、非动画 GIF;
  • 请求大小:一次请求总负载最大 512 MB;
  • 图片数量:一次请求最多 1,500 张;
  • 对按 patch 计 token 的模型,每张图最多 30,000 个 patch;超过的图会被拒绝,不会自动缩小,需要你自己先缩小尺寸再试。

费用方面,官方说图片会转换成可计费的输入 token,并且也占速率限制里的每分钟 token 数。想估算一张图要多少 token,官方有「Image input cost calculator」,可以按模型、图片尺寸和 detail 选择估算。本文不写单价,以官方价格页当天为准。请求一旦触发限流,处理方法见 /guides/openai-api-429-error。

六、官方列出的局限

传图后答非所问怎么办:小字、图过大、医学影像、旋转图、计数

图:本站根据 OpenAI 官方《Images and vision》 整理的示意图,处理办法为本站补充

官方在「Limitations」里写明视觉模型会犯错,设计应用时要考虑:

  • 医学影像:不适合解读 CT 等专业医学影像,也不应当用来做医疗建议;
  • 非拉丁文字:对日文、韩文等非拉丁字母的文字,效果可能不理想;
  • 小字:把图里的文字放大;模型支持时也可用 original;
  • 旋转:可能误读旋转或倒置的文字和图片;
  • 图表样式:线条颜色、实线虚线点线混用时,可能看不懂;
  • 空间推理:不擅长精确定位,官方举的例子是识别棋盘局面;
  • 准确性:生成的描述或标题可能不对;
  • 图片形状:全景图、鱼眼图效果不好;
  • 元数据:模型不处理原始文件名和元数据,图片分析前可能被缩放;
  • 计数:给出的物体数量可能只是近似;
  • 验证码:出于安全原因,系统会阻止提交 CAPTCHA。

所以别把模型的识别结果直接当最终结论。需要准确数字的场景(比如发票金额),建议让程序再校验一遍,这是本站的建议。

常见问题

Q:能一次传多张图吗?

可以,在 content 数组里放多项 input_image 即可。官方提醒每张图都按 token 计费,数量越多越贵。

Q:和 Chat Completions 的传图写法一样吗?

官方端点对照表里 Chat Completions 也能分析图片并返回文字,具体字段本文没有核对,不展开。Responses 与它的区别见 /guides/openai-responses-api,本文只写 Responses 写法。

Q:想让模型“画图”而不是“看图”?

这是另一个能力,官方在同一页的开头区分了:生成图片用 Images API 或 Responses 的图像生成工具,不是 input_image。

Q:提示图片格式不支持?

对照上面的格式表:动图 GIF 不行,其他格式需先转成 PNG、JPEG 或 WEBP。

参考资料

  • OpenAI 官方:Images and vision — https://developers.openai.com/api/docs/guides/images-vision

Nathaniel 的更多内容

  1. 01

    Claude Code 在 Windows 上的常见坑:Git Bash 还是 PowerShell、路径反斜杠、假报错、WSL 怎么选

    Windows 上用 Claude Code,装好之后最容易踩的是:用哪个 shell、路径写法不一致、grep 没匹配就报错、钩子没生效、WSL 和原生怎么选。本文逐条按官方文档整理原因和处理办法,附三段提示词和一张对照表。

    Claude0
  2. 02

    Claude Code Hooks 实战「提交前自动跑测试」:PreToolUse 拦住 git commit,测试不过就退出码 2,附 Windows 注意点

    只写一个完整例子:让 Claude Code 每次要执行 git commit 之前,先自动跑项目测试,没通过就拦下并把输出交给它修。本文按官方 Hooks 文档给出脚本、settings.json 配置、测试方法、排错和 Windows 的两处坑。

    Claude0
  3. 03

    Claude Code 自定义斜杠命令与 Skill 实战:从零写一个「生成更新日志」的 /release-notes,含传参、预执行命令和调试

    概念看过了,还是不知道从哪下手?本文按 Claude Code 官方「Extend Claude with skills」写一个完整可用的例子:用 /release-notes 根据 git 记录生成更新日志,覆盖目录、frontmatter、传参、预执行命令、预授权和调试。

    Claude0
  4. 04

    Claude Code 部署网站:先写 Dockerfile 和 compose 在本机跑通,再按清单上云服务器,别让它直接改线上

    想让 Claude Code 帮你把网站部署到云服务器。本文只写通用做法,按 Docker 官方文档讲:让它写 Dockerfile、.dockerignore 和 compose,在本机跑通,端口和数据卷怎么设,再给出上线清单,并说明为什么不要让它直接动线上机器。

    Claude0
  5. 05

    Claude Code 写爬虫与数据清洗:先查 robots.txt 和网站条款,控制频率,原始数据留一份再清洗

    想让 Claude Code 写爬虫抓数据再清洗。本文先讲合规:robots.txt 不是授权也不是安全措施、网站条款要自己读;再讲怎么用 Python 标准库检查规则、小样本先试、保存原始数据,以及用 pandas 清洗,附四段提示词。

    Claude0
  6. 06

    Claude Code 写 Chrome 扩展:按 Manifest V3 起步,加载未打包的扩展,改了哪些文件要重新加载

    想让 Claude Code 帮你写一个 Chrome 扩展。本文按 Chrome 官方扩展文档讲:manifest.json 的最小写法、在 chrome://extensions 加载未打包的扩展、哪些改动要刷新、怎么看控制台和报错,再给四段提示词,以及权限要尽量少。

    Claude0

同产品的其他教程

  1. 01

    OpenAI API 的 token 怎么算、怎么估算费用:input_tokens 计数接口、tiktoken 和隐藏的输出 token

    发请求前想知道会用多少 token?官方有 Responses 的 input_tokens 计数接口,能把文字、图片、文件、工具定义一起算准;本地 tiktoken 只适合纯文本。本文给 Python 和 Node 示例,讲输出 token 为什么可能比看到的多,以及怎么估算费用。

    ChatGPT0
  2. 02

    OpenAI API Node.js / TypeScript 快速上手:npm install openai、example.mjs 第一个请求,到流式、函数调用、联网搜索

    用 Node.js 调 OpenAI API:设置 OPENAI_API_KEY 环境变量,npm install openai,新建 example.mjs,用 client.responses.create 发出第一个请求。并列出图片、文件、流式、函数调用、联网搜索和错误捕获的 Node 写法。

    ChatGPT0
  3. 03

    OpenAI API 用量层级(usage tiers)与速率限制怎么提升:Free、Build、Launch、Grow 和后台 Limits 页

    OpenAI API 的限速不是固定的:官方按累计购买额度把组织分成 Free、Build、Launch、Grow 四个层级,达到门槛自动升级。本文讲 RPM、TPM 等指标、怎么在后台查自己的限额、响应头怎么读、花费上限和限速的区别,以及怎么让限额变得够用。

    ChatGPT0
  4. 04

    OpenAI API 报错 400、401、403、404、429、500、503 怎么排查:按官方错误码页逐个看原因和解决办法

    调用 OpenAI API 返回 400、401、403、404、429、500、503,各自什么意思?本文按官方 Error codes 页,每个状态码一节,写清官方给的原因和解决办法,并说明 404 在官方页面里的位置、429 的六种情形,附 Python 和 Node 的错误捕获写法。

    ChatGPT0
  5. 05

    OpenAI Realtime API 是什么:语音到语音会话、WebRTC 与 WebSocket、临时密钥和事件机制

    Realtime API 让模型直接处理音频,做可以随时打断的语音助手。本文按官方文档讲它是什么、什么时候用、浏览器接入的流程、session 与事件、可用声音、60 分钟会话上限、安全标识,以及它和转写、文字转语音的分工。

    ChatGPT0
  6. 06

    OpenAI 图像生成 API 怎么用:gpt-image 系列、images.generate 与 Responses 工具、尺寸质量和遮罩编辑

    用 OpenAI API 生成或编辑图片,有 Image API 和 Responses 里的 image_generation 工具两条路。本文按官方文档给 Python 和 Node 示例,讲 gpt-image 模型选择、尺寸质量格式参数、遮罩编辑、被拦截时的错误处理,以及需要组织验证的提醒。

    ChatGPT0

0 条评论

登录 后参与评论

还没有评论,来抢沙发~