大多数团队并不直接调用 OpenAI 的端点来用 GPT Image 2.5,中间总隔着点什么,而这点东西常被一句话概括掉:第三方接入。

这底下是三种完全不同的形态,它们决定了谁校验凭证、花掉谁的配额、由谁开账单,以及提示词落在哪里。模型本身见 GPT Image 2.5 是什么

第三方的三种含义

Azure OpenAI 是同一模型的另一家一手托管。OpenRouter 是多模型聚合器:你只面对它一个账号,背后却是许多供应商。自托管代理如 LiteLLM 或 Cloudflare AI Gateway,整套由你运行。下图画的是最后一种:左边是你服务的小方块,经连线进入中间较大的网关方块,再向右扇出三个目标方块。

本站自绘示意图:左侧一个小方块,经连线接向中间较大的网关方块,右侧再扇出三个目标方块
本站自绘示意图,非官方示例 AI Tool Blog
另一家一手托管聚合器自托管代理
你寻址的对象一个部署一个端点你自己的代理
上游合约归谁托管方聚合器
你运维什么部署配置路由与兜底代理及日志

三家都没公布 GPT Image 2.5 的每张图价格。

为什么要区分

跳一次网关,四件事的归属会跟着变。

  • 凭证由谁保管
  • 配额算在谁头上
  • 账单开在哪一层
  • 数据由谁留存

鉴权究竟发生在哪

Azure 的图像端点要求必填的 api-key 头,或用 Entra ID 令牌。OpenRouter 要求带 Authorization: Bearer 和 OpenRouter 密钥,上游密钥由它代持。

谁校验上游密钥在哪
Azure OpenAI微软你的 Azure 订阅
OpenRouterOpenRouter在 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-sunburstopenai/gpt-image-2.5-flare。图像端点把图片以 base64 字节放在 data[].b64_json 返回,并给出 media_type 和带花费的 usage。返回体里没有 url 字段。

你发送的标识你收到什么
OpenRouteropenai/gpt-image-2.5-sunburst-flaredata[].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_formatqualitystyle 的取值范围,都未经核实。

失败、重试与计费

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 属实验性。同时送参考图的流程见 多图合成

常见问题

  • 哪一种更便宜? 三家都没公布每张图价格,能比的是结构:聚合器手续费落在充值上,托管方按自己的服务计费,代理叠加所选上游的计量。
  • 同一份代码能直接搬过去吗? 不能:模型标识、鉴权头名称和要读的返回字段都不同。
  • 一个密钥能通吃吗? 不能。凭证属于网关,上游密钥是另一个对象,未必归你。
  • 我该选哪个? 取决于你愿意自己承担哪一项责任。