PROC-02-013 供应商Base64素材真实验证20261021
绕过媒体网关入参校验,验证现有图片渠道的真实内联参考图能力
后续方案说明(2026-10-22):用户最终确认图片/视频参考输入统一URL,画布先本地预览、自动后台入库,生成只等待所需文件就绪。此前“已有素材URL、本地新图Base64”的中间方案已被替代。本文保留2026-10-21测试事实及当时建议;当前实施策略以DEV-X-01-005和DEV-X-01-006为准,不沿用下文历史建议中的逐渠道传输选择。
结论与范围
用户明确要求直接测试真实供应商,不能只测试网关入口。2026-10-21 16:59—17:07(Asia/Shanghai)从本机当前渠道配置读取连接,直接请求供应商,不经过网关参考图校验。
13 个图片渠道各选择一个已配置模型,使用真实凭据,共执行 22 次 POST 尝试:16 次取得 HTTP 响应,11 次返回图片并成功下载或解码;其余包含 TLS 握手失败、连接中断、错误响应,以及首轮探针未解析的两次 Markdown 图片响应。8 个渠道通过参考图有效性核验,1 个未通过,4 个无法判断。不同模型、分辨率、大文件、多图和生产稳定性不在本次结论内。
这纠正了仅依据网关 HTTPS/资产 ID 限制制定输入策略的不足:现有网关需要适配上游能力,不能把现有校验当成供应商能力上限。相关策略已回写 DEV-X-01-005 v0.3;网关功能尚未修改或部署。
测试方法
- 使用现场生成的 512×512 PNG:Q7M4 字符、左上红圆、右上蓝方块、左下绿三角、右下橙色 X;原图中心无星形。
- 提示词只要求保留已有图形、颜色、位置和文字,并在空白中心增加黑色五角星,不披露字符内容和四种图形布局。
- 输入只经 Base64 data URL 或 Gemini inlineData 传输,没有预先上传到素材库或提供 HTTPS 参考图。
- 通过标准:HTTP 成功、有可解码图片、视觉核对保留原图独有内容并完成编辑。仅返回 200、图片地址或图片字节不算通过。
- 请求使用渠道实际 model_mapping。Origin-gpt-4k 调用了 gpt-image-2-4k,vakv-gpt-cc 调用了 gpt-image-2-cc。
- 每个请求独立保存脱敏回执、开始时间、耗时、响应摘要、图像摘要和尺寸。未将供应商输出 URL 或明文凭据放入记录。
实际结果
| 配置渠道 | 实际测试模型 | Base64 形式与路径 | 结果 |
|---|---|---|---|
| CookingAI · Gemini | gemini-3.1-flash-image-preview | generateContent,inlineData | 通过;返回 Markdown HTTPS 图片,取得字节后核验通过 |
| CookingAI · GPT | gpt-image-2 | /v1/images/edits,image 字符串 data URL | 通过;images[].image_url 首次返回 400 image is required,改用 image 后通过 |
| CookingAI · Grok | grok-imagine-image | /v1/images/edits,image 字符串 data URL | 通过;image 对象首次返回无关图,改用字符串后通过 |
| Origin-gemini | gemini-3.1-flash-image-preview | generateContent,inlineData | 通过;原生内联图片返回 |
| Origin-GPT | gpt-image-2 | /v1/images/edits,images[].image_url data URL | 通过 |
| Origin-gpt-4k | gpt-image-2-4k | /v1/images/edits,images[].image_url data URL | 通过;本次输出 1024×1024,不据模型名宣称 4K 验收通过 |
| Origin-grok | grok-imagine-image | /v1/images/edits,分别测试 image 对象、image 字符串 | 两次 200 均返回与参考图无关的场景,未通过;不推断该供应商所有模型或协议均不支持 |
| tuba · GPT Adobe | gpt-image-2 | /v1/images/edits,images[].image_url data URL | 首次 TLS 失败;再次连接中断且未取得 HTTP 响应,无法判断,提交结果未知 |
| tuba-gpt-adobe | gpt-image-2 | /v1/images/edits,images[].image_url data URL | 首次 TLS 失败;再次 502 upstream temporarily unavailable,无法判断 |
| vakv · Gemini | gemini-3.1-flash-image-preview | generateContent,inlineData | 通过;返回文本 Markdown data URL,解码核验通过 |
| vakv-gpt-cc | gpt-image-2-cc | /v1/images/edits,images[].image_url data URL | 通过 |
| zdapi · GPT Image 2 | gpt-image-2 | /v1/images/edits,images[].image_url data URL | 首次 TLS 失败;再次连接中断且未取得 HTTP 响应,无法判断,提交结果未知 |
| zdapi · GPT Image 2.5 | gpt-image-2.5-flare | /v1/images/edits,images[].image_url data URL | 503 model_not_found:当前凭据分组无可用渠道;无法判断 Base64 能力 |
本次的“支持”指以上具体渠道、模型与协议组合;未证明任意裸 Base64 字符串均可提交。未测同渠道其它配置模型,未测 /images/generations 的 reference_images data URL。
CookingAI Gemini、CookingAI Grok、Origin Grok 原配置为停用,按用户要求直接测试,未改变其启停。两个 tuba 配置不是相同凭据,分别测试。
协议与策略影响
- Gemini 需要实现请求 inlineData,不能仅发送 fileData.fileUri;部分兼容渠道还将生成图片包装在文本 Markdown 中,返回解析需单独适配,不能当作纯文本成功。
- OpenAI兼容渠道有 images[].image_url 与 image 字符串两种实测有效格式。需要明确编辑接口与参数映射;只放宽现有 reference_images 的入口校验仍不足。
- 画布仍采用 File/Blob 本地预览。发起生成时只提交依赖的字节,由受信任的执行链路按渠道编码,无需所有素材先登记为长期云端资产。保存、分享、长期复用再按统一文件身份处理。
- 长任务仍需一次可恢复的临时输入暂存和执行绑定;不能把未持久化的浏览器 Blob 当作服务端恢复来源。未知提交不得通过换协议重发解决。
- 内联可能减少独立上传、签名、回源的串行等待,但 Base64 并不提高带宽。本次没有与 HTTPS 输入做同模型、同参数的性能对照,不给出加速比例。
执行与证据边界
- 网关主仓基线:8cdf7079a6db463f5b3ef482f9ba7d9cdeff5a1f;业务代码未改动。
- 渠道和凭据通过只读数据库连接读取;只读事务约束启用。解密凭据只在测试进程内使用,没有写出凭据文件。
- 没有修改网关启停、健康、容量、模型映射或生产选路,没有调用管理界面的测试写入接口。
- 真实供应商调用可能产生费用;本次未对账,不宣称失败或连接中断免费。对 502、模型不可用、连接中断不做自动付费重试。TLS 握手失败后进行一次显式复核。
- 首轮 CookingAI/vakv Gemini 返回文本中的 Markdown 图片,探针未解析,随后补充解析并重新验证,原始脱敏记录保留,不将最初的 no_image 误判为供应商不支持。
- 本机证据目录:
/Users/wangzihao/.codex/visualizations/2026/10/21/01a15ce9-52a1-7131-a3b6-da75259ef02f/upstream-base64/。包含 probe.py、inventory.json、逐次 JSON 回执、visual-checks.json、输入和实际输出图片,以及运行日志。证据不随文档发布上传。 - 输入 SHA256:
ea25afe20feb2e27a8f8b9e80a6e7e6a146f0b5685e3cb5e820021744313c47b。 - 文本证据对当前全部渠道明文凭据做精确扫描,匹配数为 0。
协议参考:OpenAI 图片编辑 JSON 输入、xAI 图片编辑。官方协议说明仅用于构造探针,渠道兼容性结论以上表实际输出为准。