GPT Image 2 API 接入完整教程:Python / Node.js / Curl 全流程
2026/04/23

GPT Image 2 API 接入完整教程:Python / Node.js / Curl 全流程

GPT Image 2 API 接入开发者教程。涵盖鉴权、所有参数详解、Python 和 Node.js 代码示例、图片编辑、批量生成、错误处理和成本优化——一篇文章学完上线。

如果你想把 GPT Image 2 集成到自己的产品、自动化流水线或批量生成工作流,API 是唯一的路径。这篇文章覆盖了你需要的全部内容——鉴权、参数详解、Python 和 Node.js 代码示例、图片编辑、错误处理、成本优化。

读完这篇你能直接拿去对接生产环境的真实流量。

准备工作

开始前你需要:

  1. 一个 OpenAI 开发者账号(platform.openai.com
  2. 已充值的账单账号(图像生成是付费的,新账号可能有试用额度)
  3. API Key——在 platform.openai.com/api-keys 生成
  4. Python 3.8+ 或 Node.js 18+

国内开发者:稳定 API 接入路径

如果你在国内开发、对 OpenAI 直连不稳定有顾虑,或者希望由一个稳定中转服务统一处理失败重试、汇总计费、SLA 保证,可以发邮件到 support@gpt-image2.art 申请获取一个可商用的 GPT Image 2 中转 API Key。中转服务保留了同样的 gpt-image-2 模型名、同样的参数规范、同样的响应格式——你的代码不需要任何修改,只换 base URL 即可。

第一步:安装 SDK

Python

pip install openai pillow

pillow 是可选的,只有在需要对返回的图片做后处理时才装。

Node.js

npm install openai
# 或
pnpm add openai

第二步:配置 API Key

永远不要硬编码 API Key。用环境变量。

新建 .env 文件:

OPENAI_API_KEY=sk-proj-your-key-here

代码里加载(Python 用 python-dotenv,Node.js 原生支持或用 dotenv)。

第三步:生成第一张图

Python — 最简可运行示例

import os
from openai import OpenAI
import base64

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

result = client.images.generate(
    model="gpt-image-2",
    prompt="一支白色不锈钢保温杯立在浅米色亚麻桌布上,高级产品摄影,1:1 方图。",
    size="1024x1024",
    quality="medium",
    n=1,
)

# 图片以 base64 返回
image_b64 = result.data[0].b64_json
with open("output.png", "wb") as f:
    f.write(base64.b64decode(image_b64))

print("已保存到 output.png")

Node.js — 最简可运行示例

import OpenAI from 'openai';
import fs from 'fs';

const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const result = await client.images.generate({
  model: 'gpt-image-2',
  prompt:
    '一支白色不锈钢保温杯立在浅米色亚麻桌布上,高级产品摄影,1:1 方图。',
  size: '1024x1024',
  quality: 'medium',
  n: 1,
});

const imageB64 = result.data[0].b64_json;
fs.writeFileSync('output.png', Buffer.from(imageB64, 'base64'));
console.log('已保存到 output.png');

Curl — 用于 shell 脚本和快速测试

curl https://api.openai.com/v1/images/generations \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "一支白色不锈钢保温杯立在浅米色亚麻桌布上。",
    "size": "1024x1024",
    "quality": "medium",
    "n": 1
  }'

所有参数详解

参数类型必填说明
modelstring必须是 gpt-image-2
promptstring图像描述,最长 32,000 字符
sizestring纵横比(1:116:99:16)或显式像素(1024x10241536x10241024x1536
resolutionstring1K(约 1MP)/ 2K(约 4MP)/ 4K(约 8MP)——部分中转支持显式分辨率档位
qualitystringlow / medium / high,影响输出 token 数和价格
ninteger一次生成几张,1-10
image_urlsarray1-16 张参考图(图像编辑 / 图生图用,每张 ≤50MB,支持 JPEG / PNG / WEBP)
output_formatstringpng(默认)、jpegwebp
output_compressioninteger0-100,仅 jpeg/webp 有效
backgroundstringtransparent 生成带 alpha 通道的 PNG
moderationstringauto(默认)或 low,影响内容过滤严格度
callback_urlstringHTTPS 回调地址,任务完成后回调(异步中转支持)
userstring稳定的用户 ID,用于 OpenAI 滥用监控

图片编辑——杀手锏

GPT Image 2 的指令编辑能力是它相比 diffusion 模型最大的 API 优势。你上传一张已有图片 + 一段描述要改什么的 prompt。

Python

result = client.images.edit(
    model="gpt-image-2",
    image=open("original.png", "rb"),
    prompt="把杯子的颜色从白色改成藏青色,其他全部保持不变。",
    size="1024x1024",
    quality="medium",
)

with open("edited.png", "wb") as f:
    f.write(base64.b64decode(result.data[0].b64_json))

Node.js

import { toFile } from 'openai';

const result = await client.images.edit({
  model: 'gpt-image-2',
  image: await toFile(fs.createReadStream('original.png'), 'original.png'),
  prompt: '把杯子的颜色从白色改成藏青色,其他全部保持不变。',
  size: '1024x1024',
  quality: 'medium',
});

prompt 里**「其他全部保持不变」**这句话非常关键——不写的话模型可能会重画无关区域。

批量生成:避免触发限流的并发控制

不要傻乎乎地 Promise.all() 100 个请求——会被限流。用受限并发。

Python — 用 asyncio + semaphore

import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI(api_key=os.environ["OPENAI_API_KEY"])

async def generate_one(prompt: str, semaphore: asyncio.Semaphore):
    async with semaphore:
        result = await client.images.generate(
            model="gpt-image-2",
            prompt=prompt,
            size="1024x1024",
            quality="medium",
        )
        return result.data[0].b64_json

async def batch_generate(prompts: list[str], concurrency: int = 5):
    semaphore = asyncio.Semaphore(concurrency)
    tasks = [generate_one(p, semaphore) for p in prompts]
    return await asyncio.gather(*tasks)

results = asyncio.run(batch_generate(["prompt 1", "prompt 2", ...]))

Node.js — 用 p-limit

import pLimit from 'p-limit';

const limit = pLimit(5); // 同时最多 5 个请求

const tasks = prompts.map((prompt) =>
  limit(async () => {
    const result = await client.images.generate({
      model: 'gpt-image-2',
      prompt,
      size: '1024x1024',
      quality: 'medium',
    });
    return result.data[0].b64_json;
  })
);

const results = await Promise.all(tasks);

生产环境的错误处理

API 失败有几种不同情形,每种都要分别处理:

from openai import OpenAI, APIError, RateLimitError, APIConnectionError, BadRequestError
import time

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

def safe_generate(prompt: str, max_retries: int = 3):
    for attempt in range(max_retries):
        try:
            result = client.images.generate(
                model="gpt-image-2",
                prompt=prompt,
                size="1024x1024",
                quality="medium",
            )
            return result.data[0].b64_json

        except RateLimitError:
            # 429——退避后重试
            wait = (2 ** attempt) * 5
            print(f"被限流;等待 {wait} 秒")
            time.sleep(wait)

        except BadRequestError as e:
            # 400——通常是内容策略违规,不要重试
            print(f"请求错误:{e}")
            return None

        except APIConnectionError:
            # 网络抖动——重试
            time.sleep(2 ** attempt)

        except APIError as e:
            # 5xx 服务端错误——退避重试
            time.sleep(2 ** attempt)

    return None

成本优化:具体可执行的几招

1. 选对 quality 档

档位单张成本(1024×1024)适用场景
low~$0.011 / ¥0.08草稿、A/B 测、prompt 迭代
medium~$0.042 / ¥0.30大多数生产用途
high~$0.167 / ¥1.20最终主图、印刷级素材

很多团队默认用 high,结果多付了 4 倍价钱。95% 的活儿用 medium 就够了

2. 用 images.edit 迭代,不要重新 generate

指令编辑和生成同价,但一次就出对,省下 4 次重抽。多轮细节调整下,这是 5 倍成本节省。

3. 重复 prompt 做缓存

如果你的产品场景里同一个 prompt 会反复触发(比如用户预览同样的产品图),用 hash(prompt + size + quality) 做 key 缓存到 CDN。

4. 用 low 探索 + high 定稿

常用的工作流:

# 第一步:5 个 prompt 变体跑 low 档(总共 ¥0.40)
candidates = [generate(p, quality="low") for p in variants]

# 第二步:选最好的,high 档重出
best_prompt = pick_winner(candidates)
final = generate(best_prompt, quality="high")  # ¥1.20

总成本约 ¥1.60,而不是 5 个变体全跑 high 的 ¥6。

5. 在 OpenAI 后台设置硬性消费上限

不要相信代码不出 bug——在 platform.openai.com/account/billing/limits 设置消费上限。

进度反馈(可选)

长批量任务可能想给前端显示进度。图像生成接口本身不是流式的,但你可以包装异步进度上报:

let completed = 0;
const tasks = prompts.map((prompt) =>
  limit(async () => {
    const result = await client.images.generate({ /* ... */ });
    completed++;
    onProgress({ completed, total: prompts.length });
    return result.data[0].b64_json;
  })
);

接入常见错误

错误后果修复
硬编码 API Key被 Git 泄露永远用环境变量
result.data[0].url字段不一定存在(取决于 response_format)b64_json 本地解码
编辑接口上传巨大原图慢 + 贵上传前缩到 1024×1024
忽略 400 错误在不可恢复的失败上耗光重试次数区分 4xx(不重试)和 5xx(重试)
不做并发控制触发 429 雪崩用 semaphore 受限并发
日志直接打印完整 prompt用户输入泄露隐私写日志前 hash 或脱敏

上线前 checklist

完成
API Key 在环境变量里,代码和日志都没有
quality 档位匹配场景(默认 medium)
批量任务有受限并发(p-limit / Semaphore)
错误处理区分 4xx vs 5xx
OpenAI 后台设置硬性消费上限
用户输入做了内容策略合规检查
输出存在自己的存储(不依赖 OpenAI 临时 URL)
重复 prompt 有缓存层
监控了单图成本和错误率

异步任务模式(高并发场景)

高并发批量生成时,部分 GPT Image 2 中转服务支持异步任务模式:你提交请求立刻拿到 task ID,然后轮询任务结果或接收回调。这样可以避免大批量请求时 HTTP 超时。

典型异步流程:

# 1. 提交请求 → 拿到 task_id
response = client.images.generate(
    model="gpt-image-2",
    prompt="...",
    size="1024x1024",
    quality="high",
    callback_url="https://your-app.com/api/image-callback",  # 可选
)
task_id = response.id

# 2. 每隔几秒轮询任务状态
while True:
    status = client.images.retrieve(task_id)
    if status.status == "completed":
        image_url = status.data[0].url
        break
    elif status.status == "failed":
        raise Exception(status.error)
    time.sleep(3)

异步模式适用于:

  • 电商隔夜批量生成几百张产品变体
  • 营销团队跑 A/B prompt 测试
  • 用户提交请求后稍后通知的场景

GPT Image 2 API 常见问题(FAQ)

问:GPT Image 2 API 的模型名是什么? gpt-image-2。所有请求都用这个字符串。

问:GPT Image 2 API 支持图生图 / 图像编辑吗? 支持。用 images.edit + image 参数,或者向支持 image_urls(1-16 张参考图)的中转服务传参。参考图对角色一致性、IP 设计、产品图保持高度一致非常关键。

问:GPT Image 2 API 免费吗? 不免费,按 token 计费。新 OpenAI 账号可能有试用额度,部分第三方中转提供免费试用。

问:GPT Image 2 API 单张图多少钱? 按 1024×1024 算,low / medium / high 大约 $0.011 / $0.042 / $0.167(约 ¥0.08 / ¥0.30 / ¥1.20)。更大尺寸和带参考图的请求成本更高。

问:prompt 最长多少字符? 最多 32,000 字符。但实际超过 1500 字符后边际收益迅速递减。

问:怎么用 API 生成透明背景 PNG? 设置 background: "transparent" + output_format: "png"

问:GPT Image 2 支持哪些分辨率? 常用预设:1024x10241536x10241024x1536。部分中转服务额外支持 1K / 2K / 4K 档位以做显式分辨率控制。

问:API 限流怎么办? 取决于你的 OpenAI 账户档位。免费档限流最严,使用量越大档位越高。用受限并发(p-limit / Semaphore)保持在限流之内。

问:GPT Image 2 API 报错怎么处理? 区分 4xx(不要重试,通常是内容策略违规)和 5xx(可重试,用退避算法)。具体见上面的错误处理章节。

问:能取消正在执行的 GPT Image 2 API 请求吗? 同步请求只能关闭连接。支持异步的中转服务通常有 cancel 接口,但只能在任务还在排队时取消。

问:API 支持流式返回吗? 图像生成本身不是流式(结束时返回完整图)。前端进度条可以包装一层自定义进度上报(见上面"进度反馈"章节)。

想看完整可运行的参考实现?

完整 Next.js + GPT Image 2 + Stripe + 图像存储的参考工程:gpt-image2.art,真实出图案例(带完整 prompt):gpt-image2.art/zh/explore

想要带 SLA 的可商用 API Key?

如果你不想自己折腾 OpenAI 账号、绑卡、解决国内访问稳定性、限流配额——可以发邮件到 support@gpt-image2.art 购买中转 GPT Image 2 API。我们提供:

  • 一个稳定的 API endpoint,内置 failover
  • 人民币计费,不需要 USD 跨境汇款
  • 异步任务模式 + callback 回调原生支持
  • 月用量 > 10K 张的团队享受批量价
  • gpt-image-2 模型名、同参数规范——你的代码不需要改,只换 base URL

延伸阅读

限时免费试用

现在就用 GPT Image 2 出一张图

中文文字稳定渲染、支持局部编辑、带 50+ 现成 Prompt 模板——无需下载,浏览器里即可上手。