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

延伸閱讀

Free to try

Generate your first image with GPT Image 2 — right now

Reliable non-Latin text rendering, directed editing, and 50+ ready-to-use prompts. No downloads — just open in your browser.