大多数团队并不直接调用 OpenAI 的端点来用 GPT Image 2.5,中间总隔着点什么,而这点东西常被一句话概括掉:第三方接入。
这底下是三种完全不同的形态,它们决定了谁校验凭证、花掉谁的配额、由谁开账单,以及提示词落在哪里。模型本身见 GPT Image 2.5 是什么。
第三方的三种含义
Azure OpenAI 是同一模型的另一家一手托管。OpenRouter 是多模型聚合器:你只面对它一个账号,背后却是许多供应商。自托管代理如 LiteLLM 或 Cloudflare AI Gateway,整套由你运行。下图画的是最后一种:左边是你服务的小方块,经连线进入中间较大的网关方块,再向右扇出三个目标方块。

| 另一家一手托管 | 聚合器 | 自托管代理 | |
|---|---|---|---|
| 你寻址的对象 | 一个部署 | 一个端点 | 你自己的代理 |
| 上游合约归谁 | 托管方 | 聚合器 | 你 |
| 你运维什么 | 部署配置 | 路由与兜底 | 代理及日志 |
三家都没公布 GPT Image 2.5 的每张图价格。
为什么要区分
跳一次网关,四件事的归属会跟着变。
- 凭证由谁保管
- 配额算在谁头上
- 账单开在哪一层
- 数据由谁留存
鉴权究竟发生在哪
Azure 的图像端点要求必填的 api-key 头,或用 Entra ID 令牌。OpenRouter 要求带 Authorization: Bearer 和 OpenRouter 密钥,上游密钥由它代持。
| 谁校验 | 上游密钥在哪 | |
|---|---|---|
| Azure OpenAI | 微软 | 你的 Azure 订阅 |
| OpenRouter | OpenRouter | 在 OpenRouter 手里 |
| 自托管代理 | 你的代理 | 在你手里,或在网关 |
Cloudflare AI Gateway 写明三种放置方式:统一计费、网关运行时插入的托管密钥,或照常透传请求头。直连 API 的参数形态见 API 总览。
配额与账单归谁
三种形态在不同层级向不同对象收费,只有一家公布了可直接引用的数字。
OpenRouter 的 FAQ 写明:购买额度收 5.5% 手续费、最低 $0.80,推理定价不加价。免费模型限额每天 50 次请求,购买满 10 credits 后升到 1,000 次。
Azure 作为独立服务按自己的价目表计费,参考页上没有每张图价格。
自托管代理的计量跟着你选的上游走;一手侧的免费额度见 免费额度与限制。
返回体与模型 ID
OpenRouter 的模型清单里有 openai/gpt-image-2.5-sunburst 与 openai/gpt-image-2.5-flare。图像端点把图片以 base64 字节放在 data[].b64_json 返回,并给出 media_type 和带花费的 usage。返回体里没有 url 字段。
| 你发送的标识 | 你收到什么 | |
|---|---|---|
| OpenRouter | openai/gpt-image-2.5-sunburst 或 -flare | data[].b64_json 里的 base64 |
| Azure OpenAI | 名为 GPT-Image-2.5-Sunburst 或 -Flare 的部署 | 图像输出,字段形态未见文档 |
| 自托管代理 | 上游期望什么就发什么 | 上游返回什么就收到什么 |
流传很广的一段示例读的是 response.data[0].url,模型写成没后缀的 openai/gpt-image-2.5。两处都错。
Azure 的命名正好相反:你调用自己起的部署名,两个型号都标为正式可用。可达页面上的 api-version 属于更早的 DALL·E 世代,所以 GPT Image 2.5 该填什么值,以及 response_format、quality、style 的取值范围,都未经核实。
失败、重试与计费
OpenRouter 把图像生成计费描述为 all-or-nothing:生成失败或被取消时,端点返回 502 Bad Gateway,不计费。
- 失败的尝试不计费
- 文档里没有幂等键机制
- 换供应商就是换调试对象
provider.allow_fallbacks 控制的正是最后一条:设为 false 后主供应商失败即止,不再尝试其他供应商。Portkey 自估经它的网关比直连多 20-40ms。
重试不会重复扣费
重试只花时间,但它是一次全新生成,也可能换一家供应商。必须固定供应商就把 provider.order 钉住并关掉兜底。只想改一个区域而非整张重摇,那是 评论式编辑,不是重试。
数据落在哪里
请求在中间某一层必须可读,这正是合规同事要问的。
OpenRouter 自述是代理:记录基本请求元数据,提示词与补全默认不记录;会记录请求或无法确认策略的供应商不会被路由到。
Cloudflare AI Gateway 把分析、日志和缓存列为网关能力,开启就等于决定提示词和图片是否留在网关层。
Portkey 自述通过 ISO 27001 与 SOC 2 认证、符合 GDPR 与 HIPAA,并提供不存储请求响应体的选项:这些是厂商声明。
两个可执行案例
例一:聚合器调用
这一调用发送带后缀的模型 ID 并解出 base64 字段,返回体里没有 URL 可读。
# OpenRouter:生成一张图,再解出 data[0].b64_json(返回体里没有 .url 字段)
curl -s https://openrouter.ai/api/v1/images \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"openai/gpt-image-2.5-sunburst","prompt":"A wide shot of a family looking up at a vast cylindrical habitat, retro-futurist illustration, teal and cream palette.","n":1}' \
-o out.json
python3 -c "import base64,json,pathlib; d=json.load(open('out.json')); print('cost', d['usage']['cost']); pathlib.Path('out.png').write_bytes(base64.b64decode(d['data'][0]['b64_json']))"
例二:托管端点调用
这一调用按部署名寻址,并用 api-key 头鉴权。api-version 故意留成占位符:可达参考只记录了一个更早的版本。
# Azure OpenAI:按部署名调用;GPT Image 2.5 对应的 api-version 官方未公布
curl -s "https://${AZURE_OPENAI_ENDPOINT}/openai/deployments/GPT-Image-2.5-Sunburst/images/generations?api-version=${AZURE_OPENAI_API_VERSION}" \
-H "api-key: ${AZURE_OPENAI_KEY}" \
-H "Content-Type: application/json" \
-d '{"prompt":"A wide shot of a family looking up at a vast cylindrical habitat, retro-futurist illustration, teal and cream palette.","n":1,"size":"1024x1024"}' \
-o out.json
Azure 把两个型号都标为正式可用,支持自定义 WIDTHxHEIGHT:两边为 16px 倍数,宽高比 1:3 到 3:1,单边不超过 3840px,总像素 655,360 到 8,294,400,超过 2560x1440 属实验性。同时送参考图的流程见 多图合成。
常见问题
- 哪一种更便宜? 三家都没公布每张图价格,能比的是结构:聚合器手续费落在充值上,托管方按自己的服务计费,代理叠加所选上游的计量。
- 同一份代码能直接搬过去吗? 不能:模型标识、鉴权头名称和要读的返回字段都不同。
- 一个密钥能通吃吗? 不能。凭证属于网关,上游密钥是另一个对象,未必归你。
- 我该选哪个? 取决于你愿意自己承担哪一项责任。