为什么值得接入 GPT-Image-2 API

在 2026 年 4 月的 LM Arena 泄露测试中,GPT-Image-2 以两项能力彻底改变了图像生成 API 的格局:

对于任何涉及海报设计、包装生成、UI 原型截图、信息图自动化的产品,GPT-Image-2 的接入都是从"可以用"到"可以上线"的质变。本文将带你从零完成 GPT-Image-2 API 的完整接入流程。

📌 前置说明

GPT-Image-2 目前处于限制预览阶段,预计 2026 年 4 月底至 5 月正式开放。APIMart 提供兼容 OpenAI 端点的统一接入,发布当天即可用,无需等待 OpenAI 直接配额。

前置准备:获取 API Key

接入 GPT-Image-2 API 有两条路径:

接入方式 端点 优势 注意事项
APIMart(推荐) https://apimart.ai/v1 发布当天可用,兼容 OpenAI SDK,统一账单 需注册 APIMart 账号
OpenAI 直接接入 https://api.openai.com/v1 官方直连 需要 API 等级资质,有用量爬坡期

本文示例均使用 APIMart 端点,代码与 OpenAI 官方端点完全兼容,切换只需改变 base_url 一个参数。

获取 API Key 步骤:

  1. 访问 apimart.ai 注册账号。
  2. 在控制台创建新的 API Key,记录保存(仅显示一次)。
  3. 充值余额或激活免费额度(新用户通常有 $5 免费测试额度)。
🔑 安全提示

永远不要将 API Key 硬编码在源代码中。始终通过环境变量传递,并将 .env 文件加入 .gitignore

鉴权设置

GPT-Image-2 API 使用标准的 Bearer Token 鉴权机制,与 OpenAI API 完全一致。所有请求必须在 HTTP Header 中携带:

Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

推荐通过操作系统环境变量管理密钥:

# macOS / Linux(加入 ~/.bashrc 或 ~/.zshrc 使其永久生效)
export APIMART_API_KEY="sk-your-api-key-here"

# Windows PowerShell
$env:APIMART_API_KEY = "sk-your-api-key-here"

# .env 文件(配合 python-dotenv 或 dotenv npm 包)
APIMART_API_KEY=sk-your-api-key-here

第一个 cURL 请求

下面是调用 GPT-Image-2 API 生成图像的完整 cURL 命令,可直接在终端执行:

curl https://apimart.ai/v1/images/generations \
  -H "Authorization: Bearer $APIMART_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "一张简洁的 SaaS 产品宣传海报,白色背景,顶部蓝色 Banner 显示文字\"季度增长 +37%\",下方三个功能图标及说明文字,现代无衬线字体,商业摄影风格",
    "size": "1792x1024",
    "quality": "high",
    "n": 1,
    "response_format": "url"
  }'

成功响应格式(response_format: url):

{
  "created": 1745280000,
  "data": [
    {
      "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/...",
      "revised_prompt": "一张简洁的 SaaS 产品宣传海报..."
    }
  ]
}

成功响应格式(response_format: b64_json):

{
  "created": 1745280000,
  "data": [
    {
      "b64_json": "iVBORw0KGgoAAAANSUhEUgAAB...",
      "revised_prompt": "..."
    }
  ]
}
💡 提示

url 格式返回的图片链接有效期通常为 1 小时,生产环境请立即下载并存储到自己的对象存储(如 S3 或 OSS)。

Python SDK 代码示例

以下是完整可运行的 Python 示例,使用 OpenAI 官方 Python SDK 连接 GPT-Image-2 API:

# 安装依赖:pip install openai python-dotenv requests
import os
import base64
import requests
from pathlib import Path
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()

# 初始化客户端,指向 APIMart 端点(兼容 OpenAI SDK)
client = OpenAI(
    api_key=os.environ["APIMART_API_KEY"],
    base_url="https://apimart.ai/v1",  # 切换至 OpenAI 直接接入时改为 https://api.openai.com/v1
)

def generate_image(
    prompt: str,
    size: str = "1024x1024",
    quality: str = "high",
    n: int = 1,
    output_path: str = "output.png",
) -> str:
    """
    调用 GPT-Image-2 生成图像并保存到本地。

    Args:
        prompt: 图像描述提示词
        size: 图像尺寸,支持 "1024x1024" / "1792x1024" / "1024x1792" / "2048x2048"
        quality: "standard" 或 "high"(高质量模式)
        n: 生成数量(1–4)
        output_path: 本地保存路径

    Returns:
        保存的本地文件路径
    """
    response = client.images.generate(
        model="gpt-image-2",
        prompt=prompt,
        size=size,
        quality=quality,
        n=n,
        response_format="b64_json",  # 使用 b64_json 避免 URL 过期问题
    )

    image_data = base64.b64decode(response.data[0].b64_json)
    Path(output_path).write_bytes(image_data)
    print(f"图像已保存至:{output_path}")
    return output_path


def generate_batch(prompts: list[str], output_dir: str = "outputs/") -> list[str]:
    """批量生成图像,逐个请求避免触发限速。"""
    import time
    Path(output_dir).mkdir(parents=True, exist_ok=True)
    results = []
    for i, prompt in enumerate(prompts):
        try:
            path = generate_image(
                prompt=prompt,
                output_path=f"{output_dir}/image_{i+1:03d}.png",
            )
            results.append(path)
            if i < len(prompts) - 1:
                time.sleep(0.5)  # 简单限速缓冲
        except Exception as e:
            print(f"第 {i+1} 张生成失败:{e}")
            results.append(None)
    return results


if __name__ == "__main__":
    generate_image(
        prompt=(
            "高端咖啡品牌海报,品牌名 'Aurora Roast' 使用优雅衬线字体显示在顶部,"
            "下方是一杯冒着热气的手冲咖啡特写,深棕色调,影棚布光,"
            "底部文字 '每一杯,都是清晨的仪式感'"
        ),
        size="1792x1024",
        quality="high",
        output_path="coffee_poster.png",
    )

Node.js 代码示例

以下是使用 OpenAI Node.js SDK 接入 GPT-Image-2 的完整示例:

// 安装依赖:npm install openai dotenv
import OpenAI from "openai";
import fs from "fs";
import path from "path";
import dotenv from "dotenv";

dotenv.config();

// 初始化客户端(兼容 OpenAI SDK,仅需修改 baseURL)
const client = new OpenAI({
  apiKey: process.env.APIMART_API_KEY,
  baseURL: "https://apimart.ai/v1",
});

/**
 * 调用 GPT-Image-2 生成图像
 * @param {string} prompt - 图像描述
 * @param {Object} options - 可选参数
 * @returns {Promise<Buffer>} - 图像二进制数据
 */
async function generateImage(prompt, options = {}) {
  const {
    size = "1024x1024",
    quality = "high",
    n = 1,
    outputPath = "output.png",
  } = options;

  const response = await client.images.generate({
    model: "gpt-image-2",
    prompt,
    size,
    quality,
    n,
    response_format: "b64_json",
  });

  const imageBuffer = Buffer.from(response.data[0].b64_json, "base64");
  fs.writeFileSync(outputPath, imageBuffer);
  console.log(`图像已保存至:${outputPath}`);
  return imageBuffer;
}

/**
 * 带指数退避的重试包装器
 * @param {Function} fn - 待重试的异步函数
 * @param {number} maxRetries - 最大重试次数
 */
async function withRetry(fn, maxRetries = 3) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    try {
      return await fn();
    } catch (error) {
      if (attempt === maxRetries) throw error;
      const isRetryable = [429, 500, 502, 503].includes(error?.status);
      if (!isRetryable) throw error;
      const delay = Math.min(1000 * Math.pow(2, attempt), 16000);
      console.log(`第 ${attempt + 1} 次重试,等待 ${delay}ms...`);
      await new Promise((r) => setTimeout(r, delay));
    }
  }
}

// 使用示例
async function main() {
  await withRetry(() =>
    generateImage(
      "极简主义产品展示图:一双白色运动鞋放置在纯白大理石台面上," +
      "自然侧光,右下角清晰显示品牌名 'STRYDE' 和 tagline 'Move Forward'," +
      "高端商业摄影风格,4K 质感",
      {
        size: "1792x1024",
        quality: "high",
        outputPath: "sneaker_ad.png",
      }
    )
  );
}

main().catch(console.error);

请求参数详解

GPT-Image-2 API 请求体支持以下参数,理解每个参数的边界有助于在成本与质量之间取得最佳平衡:

参数 类型 可选值 说明
model string "gpt-image-2" 必填。指定使用 GPT-Image-2 模型。
prompt string 最长 4000 字符 必填。图像描述,支持中英文及混合语言。GPT-Image-2 对中文提示词有原生理解能力。
size string "1024x1024" / "1792x1024" / "1024x1792" / "2048x2048" 图像尺寸。2048x2048 为 GPT-Image-2 标准版最高分辨率,4K 专业版另需申请。
quality string "standard" / "high" high 模式生成更精细的纹理与文字渲染,推荐用于印刷或含文字需求。约贵 30%。
n integer 1–4 单次请求生成图像数量。并行生成,延迟不显著增加,但计费按张数线性叠加。
response_format string "url" / "b64_json" url 返回临时链接(约 1 小时有效);b64_json 返回 Base64 编码图像,适合生产环境直接存储。
user string 任意字符串 可选。传入终端用户 ID,用于滥用检测与请求追踪,推荐生产环境添加。

错误处理:400 / 401 / 429 / 500 重试逻辑

GPT-Image-2 API 遵循标准 HTTP 状态码规范。以下是各类错误的含义与处理建议:

状态码 含义 处理策略
400 请求参数错误(prompt 违规、size 不合法等) 不可重试。检查 error.message,修正请求参数后重新提交。
401 鉴权失败(API Key 无效或过期) 不可重试。检查 Key 是否正确、是否已过期或余额为零。
429 触发限速(RPM 或 TPM 超限) 可重试。读取响应头 Retry-After,按指数退避策略等待后重试。
500 / 502 / 503 服务端内部错误或过载 可重试。使用指数退避,最多 3 次。建议记录日志并上报告警。

以下是 Python 版完整的带指数退避重试逻辑:

import time
import openai

def generate_with_retry(client, prompt: str, max_retries: int = 3, **kwargs):
    """带指数退避的 GPT-Image-2 图像生成函数。"""
    RETRYABLE_CODES = {429, 500, 502, 503}

    for attempt in range(max_retries + 1):
        try:
            return client.images.generate(
                model="gpt-image-2",
                prompt=prompt,
                **kwargs,
            )
        except openai.APIStatusError as e:
            if e.status_code not in RETRYABLE_CODES or attempt == max_retries:
                raise  # 不可重试或已超最大次数,直接抛出

            # 429 时优先读取 Retry-After 头
            retry_after = None
            if e.status_code == 429 and hasattr(e, "response"):
                retry_after = e.response.headers.get("Retry-After")

            wait = float(retry_after) if retry_after else min(2 ** attempt, 16)
            print(f"[{e.status_code}] 第 {attempt + 1} 次重试,等待 {wait:.1f}s...")
            time.sleep(wait)

        except openai.APIConnectionError:
            if attempt == max_retries:
                raise
            time.sleep(2 ** attempt)

    raise RuntimeError("超过最大重试次数")

限速与成本优化

合理控制 GPT-Image-2 API 的调用频率,不仅能避免触发限速,更能有效降低整体成本。

了解限速指标

GPT-Image-2 API 通常有两类限速维度:

成本优化策略

一个 API Key 同时管理 GPT-Image-2 与 Nano Banana

APIMart 统一端点,按任务类型自动路由,无需维护多个 SDK 配置。

获取 API Key →

生产环境检查清单

在将 GPT-Image-2 API 集成推送至生产环境前,请逐项确认以下清单:

常见问题

GPT-Image-2 API 支持中文 prompt 吗?
支持。GPT-Image-2 对中文提示词有原生理解能力,无需翻译成英文。实测发现,中英混写的提示词(如先用中文描述场景,再用英文指定风格参数)通常能取得最佳结果,例如:"一位在东京街头行走的女性,赛博朋克氛围,霓虹灯反光,cinematic, 35mm film grain"。
response_format 应该选 url 还是 b64_json?
生产环境强烈推荐 b64_jsonurl 返回的图片链接通常只有约 1 小时有效期,如果你的业务需要在生成后展示或二次处理,URL 极易过期导致 404。b64_json 让你直接掌握图像二进制数据,可立即持久化到 S3、OSS 或 CDN,彻底避免过期问题。
GPT-Image-2 API 和 DALL·E 3 API 的调用方式一样吗?
基本一样。GPT-Image-2 与 DALL·E 3 共享相同的 OpenAI Images API 端点(/v1/images/generations)和 SDK 接口,切换只需将 model 参数从 "dall-e-3" 改为 "gpt-image-2",其余代码无需修改。GPT-Image-2 新增了更大的 size 选项(2048x2048)和更强的 quality: "high" 模式,这是主要的接口扩展部分。
生成的图像我有版权吗?
根据 OpenAI 服务条款,通过 GPT-Image-2 API 生成的图像版权归属于使用者(即 API 调用方),OpenAI 不主张对生成图像的所有权。但请注意,如果生成图像包含受版权保护的知名人物、品牌商标或艺术风格,可能涉及其他法律问题,建议咨询法律顾问。