gpt-image-2 电商图片编辑为什么 400?用 3 个实测请求排查 size、model 和 endpoint
适合读者:正在接入
gpt-image-2图片编辑 API 的后端开发、AI 应用开发、SaaS 工程团队。
文章重点:不讲“提示词玄学”,先用最小请求把链路跑通,再定位size、model、endpoint 这些确定性错误。
先说结论
电商用gpt-image-2做商品图,经常失败的原因不一定是模型不行,很多时候是 API 请求构造不对。
我用 Crazyrouter 做了一组最小实测,测试的是图片编辑接口:
Base URL: https://cn.crazyrouter.com Endpoint: POST /v1/images/edits Model: gpt-image-2 Input: 768x768 本地 demo 商品图 Test date: 2026-07-05实测结果:
| Case | 关键参数 | HTTP | 结果 |
|---|---|---|---|
| 正常图片编辑 | model=gpt-image-2,size=auto | 200 | 返回 PNG,输出图可下载 |
| 错误 size | size=123x456 | 400 | invalid_request |
| 缺少 model | 不传model | 400 | Model name is required |
正常请求耗时约 26 秒,返回 PNG 图片,说明gpt-image-2图片编辑链路可以跑通。两个失败请求说明:size和model是开发接入时最应该先检查的字段。
1. 最小可用请求:先跑通链路
下面是本次跑通的请求形态,真实 token 用环境变量占位:
curlhttps://cn.crazyrouter.com/v1/images/edits\-H"Authorization: Bearer$CRAZYROUTER_API_KEY"\-F"model=gpt-image-2"\-F"size=auto"\-F"quality=low"\-F"n=1"\-F"response_format=url"\-F"image=@./product.png"\-F"prompt=基于输入商品图生成电商场景主图。保留商品主体、包装、已有图案和已有文字;不新增任何品牌标识、授权声明、版权标注或角色形象;只调整背景、光影、台面材质和画面构图。"如果你想复现同样的测试,可以直接使用本站 Crazyrouter 的 OpenAI-compatible 图片接口:
API Base: https://cn.crazyrouter.com/v1 Endpoint: /images/edits Model: gpt-image-2注册地址:
https://crazyrouter.com/register?utm_source=csdn&utm_medium=article&utm_campaign=gpt_image2_ecommerce&utm_content=debug_api_20260705__quickstart环境变量可以这样设置:
exportCRAZYROUTER_API_KEY="你的 API Key"PowerShell:
$env:CRAZYROUTER_API_KEY="你的 API Key"几个关键点:
model必须显式传。- 图片编辑走
/v1/images/edits,不是/v1/chat/completions。 - 文件上传使用
multipart/form-data。 size先用auto,不要直接传电商平台最终尺寸。- 卖点文案、平台裁剪、压缩,建议放到后处理。
如果这个最小请求跑不通,不要急着改提示词。先查:
API key 是否正确 Base URL 是否正确 endpoint 是否正确 model 是否传了 image 字段是否传了 size 是否在模型支持范围内2. 反例一:size 不是任意尺寸
很多电商系统会把“平台最终尺寸”直接塞进size。
例如:
800x800 1200x1200 1920x1080 3:4 9:16但模型 API 的size通常不是任意画布尺寸,而是模型支持的参数值。
我故意跑了一个错误请求:
curlhttps://cn.crazyrouter.com/v1/images/edits\-H"Authorization: Bearer$CRAZYROUTER_API_KEY"\-F"model=gpt-image-2"\-F"size=123x456"\-F"quality=low"\-F"n=1"\-F"image=@./product.png"\-F"prompt=基于输入商品图生成电商场景主图。"返回:
HTTP 400 code: invalid_request message: size dimensions must be multiples of 16 for gpt-image-2这说明size会被模型或网关校验。你想要最终商品图是某个尺寸,不代表模型 API 直接接受这个尺寸。
推荐做法:
模型生成阶段:使用 auto 或已验证白名单尺寸 业务后处理阶段:裁剪、扩边、缩放、压缩到平台尺寸3. 反例二:不传 model 会直接失败
第二个反例是不传model:
curlhttps://cn.crazyrouter.com/v1/images/edits\-H"Authorization: Bearer$CRAZYROUTER_API_KEY"\-F"size=auto"\-F"quality=low"\-F"n=1"\-F"image=@./product.png"\-F"prompt=基于输入商品图生成电商场景主图。"返回:
HTTP 400 message: Model name is required这个错误和提示词没有关系,属于请求构造问题。
实际业务里,缺model通常发生在这些地方:
- 后台配置了默认模型,但服务端没有把字段传出去。
- 聊天请求和图片编辑请求复用了同一个构造器。
- 前端显示了模型名,但异步任务队列里丢了字段。
- 多模型路由层只处理文本模型,没有处理图片模型。
4. 建议加一层请求前校验
服务端发请求前,最好先做参数校验,不要等上游返回 400。
示例:
ALLOWED_IMAGE_SIZES={"auto","1024x1024","2048x1152","3840x2160"}defvalidate_image_edit_request(payload,image_file):errors=[]ifnotpayload.get("model"):errors.append("model is required")ifpayload.get("model")!="gpt-image-2":errors.append("unsupported image edit model")ifnotpayload.get("prompt"):errors.append("prompt is required")ifimage_fileisNone:errors.append("image file is required")size=payload.get("size","auto")ifsizenotinALLOWED_IMAGE_SIZES:errors.append(f"unsupported size:{size}")returnerrors前置校验有两个好处:
- 错误更快返回,不浪费上游请求。
- 错误文案更准确,用户知道该改哪里。
5. endpoint 不要混用
电商生图经常有多个步骤:
| 任务 | 推荐接口 |
|---|---|
| 商品图理解 | 多模态理解或视觉分析 |
| 提示词生成 | chat completions |
| 商品图换背景 | images edits |
| 从零生成场景图 | images generations |
| 卖点文字排版 | 后处理或设计模板 |
| 平台尺寸适配 | 裁剪、扩边、压缩 |
不要因为/v1/chat/completions能返回文字,就把图片编辑也塞进去。图片编辑要上传文件,要走正确 endpoint。
6. 品牌、logo、IP 提示词要收敛
电商商品图里经常有品牌、logo、包装文字、授权标识。提示词里不要写成:
补全品牌 logo 让授权标识更清晰 生成某某角色图案 做成某某品牌同款风格更稳的写法:
保留输入商品图中已经存在的包装、图案和文字。 不新增任何品牌标识、授权声明、版权标注或角色形象。 只调整背景、光影、台面材质和画面构图。让模型负责背景、光影和构图,不要让模型重新生产品牌资产。
7. 最小排查顺序
开发者可以按这个顺序排查:
1. GET /v1/models 确认模型是否可见 2. 用 size=auto 跑最小 images/edits 请求 3. 确认 image 字段能被正确上传 4. 故意测试错误 size,看是否返回 400 5. 故意测试缺 model,看错误文案是否准确 6. 再逐步加入业务 prompt、quality、批量任务 7. 最后再处理渠道 5xx、超时、额度不足等问题8. 本站测试矩阵可以怎么用
我建议把这 3 个测试固定成接入gpt-image-2前的 smoke test:
| 测试项 | 请求特征 | 预期结果 | 说明 |
|---|---|---|---|
| 正常图片编辑 | model=gpt-image-2,size=auto, 上传商品图 | HTTP 200,返回图片 URL | 验证 key、Base URL、endpoint、multipart 上传都正常 |
| 错误尺寸 | size=123x456 | HTTP 400,invalid_request | 验证错误映射,不要把参数错误当成渠道故障 |
| 缺少模型 | 不传model | HTTP 400,提示模型名必填 | 验证任务队列或 SDK 没有丢字段 |
这组测试不需要真实店铺素材,先用一张干净的 demo 商品图就够了。只要这三类结果符合预期,就可以基本确认:API Key、接口地址、图片上传、参数校验和错误处理链路是通的。
后面再接入真实商品图时,问题就更容易归因:如果最小测试稳定成功,业务图失败就重点看素材、提示词、品牌/IP 表达、后处理尺寸和上游临时状态。
本站入口:
https://crazyrouter.com/register?utm_source=csdn&utm_medium=article&utm_campaign=gpt_image2_ecommerce&utm_content=debug_api_20260705__matrix总结
这次实测里,gpt-image-2的图片编辑请求在 Crazyrouter 上可以跑通:model=gpt-image-2、size=auto、/v1/images/edits返回了 HTTP 200 和可下载 PNG。
同时,错误size和缺少model都会稳定触发 HTTP 400。这说明很多电商生图失败并不是模型能力问题,而是请求构造问题。
一句话:先跑通最小请求,再谈提示词优化;先校验model、size、image、endpoint,再排查模型和渠道。
如果你正在接入电商图片编辑,可以先在本站用gpt-image-2跑上面的最小测试,再把结果接入自己的业务队列和错误分类系统:
https://crazyrouter.com/register?utm_source=csdn&utm_medium=article&utm_campaign=gpt_image2_ecommerce&utm_content=debug_api_20260705__final