OpenAI GPT-Image API图像输入令牌未缓存问题咨询(不符文档)
GPT-Image图像令牌缓存失效问题及疑问
我在用OpenAI的GPT-Image模型(gpt-image-1.5、gpt-image-1、gpt-image-1-mini)生成带固定参考角色的多场景内容。根据官方文档,图像令牌可以缓存,缓存后输入令牌能享75%折扣(比如gpt-image-1.5缓存前每百万令牌$8.00,缓存后$2.00)。但不管我连续发送多少次完全相同的图像,API响应里的cached_tokens始终为0。我的输入令牌主要来自图像,缓存对成本优化至关重要。
已尝试的方法
1. 图像编辑API(/v1/images/edits)
- 使用
toFile()转换下载的图像 - 测试
gpt-image-1.5、gpt-image-1和gpt-image-1-mini三个模型 - 结果:使用量响应中完全没有
cached_tokens字段
2. 结合图像生成工具的Responses API(/v1/responses)
- 通过Files API上传图像,设置
purpose: "vision" - 在
input_image内容块中通过file_id引用图像 - 设置
prompt_cache_key保证路由一致性 - 所有请求中保持
detail: "low"参数一致 - 结果:
usage.input_tokens_details中的cached_tokens始终为0
额外尝试的操作:
- 在消息中直接使用Base64编码的图像
- 使用图像URL(在支持的场景下)
- 不同的请求间隔(等待几秒 vs 快速连续请求)
- 输入令牌总数超过1024(缓存的最低要求)
代码示例
图像编辑API实现方式
import OpenAI, { toFile } from "openai"; const openai = new OpenAI(); async function generateWithEdit(referenceImageUrls, prompt) { // 下载并转换图像 const referenceImages = await Promise.all( referenceImageUrls.map(async (url) => { const response = await fetch(url); return toFile(response.arrayBuffer(), "reference.jpg", { type: "image/jpeg" }); }) ); const response = await openai.images.edit({ model: "gpt-image-1.5", prompt: prompt, image: referenceImages, size: "1024x1536", quality: "low", output_format: "jpeg", }); console.log("Usage:", JSON.stringify(response.usage, null, 2)); // 输出仅显示input_tokens和output_tokens,无cached_tokens细分 return response; } // 使用相同图像运行两次 await generateWithEdit(REFERENCE_URLS, "场景1:角色在森林中行走"); await new Promise(r => setTimeout(r, 2000)); await generateWithEdit(REFERENCE_URLS, "场景2:角色在河边");
使用量输出(无缓存信息):
{ "total_tokens": 15000, "input_tokens": 12000, "output_tokens": 3000, "input_tokens_details": { "text_tokens": 100, "image_tokens": 11900 } }
结合工具调用的Responses API实现方式
import OpenAI from "openai"; const openai = new OpenAI(); async function uploadImage(url, name) { const response = await fetch(url); const file = new File([response.arrayBuffer()], `${name}.jpg`, { type: "image/jpeg" }); const result = await openai.files.create({ file: file, purpose: "vision", }); return result.id; } async function generateWithResponses(fileIds, prompt) { const inputContent = [ // 图像前置以保证前缀一致 ...fileIds.map(id => ({ type: "input_image", file_id: id, detail: "low", // 保持detail参数一致 })), { type: "input_text", text: prompt }, ]; const response = await openai.responses.create({ model: "gpt-5-nano", input: [{ role: "user", content: inputContent }], prompt_cache_key: "my-consistent-cache-key", // 保证路由一致性 tool_choice: { type: "image_generation" }, tools: [{ type: "image_generation", model: "gpt-image-1-mini", // gpt-image-1.5暂不支持 size: "1024x1536", quality: "low", }], }); console.log("Usage:", JSON.stringify(response.usage, null, 2)); return response; } // 上传一次图像 const fileIds = await Promise.all( REFERENCE_URLS.map((url, i) => uploadImage(url, `char-${i}`)) ); // 生成多场景内容 await generateWithResponses(fileIds, "场景1:在森林中行走"); await new Promise(r => setTimeout(r, 2000)); await generateWithResponses(fileIds, "场景2:在河边"); // 相同fileIds,不同提示内容
使用量输出(cached_tokens始终为0):
{ "input_tokens": 12500, "output_tokens": 3000, "total_tokens": 15500, "input_tokens_details": { "text_tokens": 600, "image_tokens": 11900, "cached_tokens": 0 } }
文档参考
OpenAI文档明确说明图像缓存功能可用:
- 提示缓存文档:
"图像:用户消息中包含的图像(链接或Base64编码形式),支持多张图像。需保证detail参数设置一致,因为它会影响图像令牌化。"
- 图像令牌定价页面:
| 模型 | 输入 | 缓存输入 | 输出 |
|---|---|---|---|
| gpt-image-1.5 | $8.00 | $2.00 | $32.00 |
| gpt-image-1 | $10.00 | $2.50 | $40.00 |
| gpt-image-1-mini | $2.50 | $0.25 | $8.00 |
"缓存输入"定价的存在,证明图像缓存功能应该是可行的。
疑问
- 图像API(
/v1/images/edits)是否支持提示缓存? - 结合图像生成工具的Responses API:是否需要特定设置才能启用图像令牌缓存?为什么我的
cached_tokens始终为0? - 针对生成带固定参考角色的多场景内容的需求,正确利用图像输入令牌缓存的方法是什么?
环境信息
- OpenAI Node.js SDK:最新版本(Deno使用
jsr:@openai/openai) - 测试模型:
gpt-image-1.5、gpt-image-1、gpt-image-1-mini - API端点:
/v1/images/edits、/v1/responses - 请求间隔:间隔2秒以上
- 输入令牌总数:含图像的输入令牌超过12000(远高于1024的缓存最低要求)
注:已确认后台未进行缓存,因为使用仪表板显示缓存图像输入的费用为$0。
内容的提问来源于stack exchange,提问作者micaste
相关产品推荐
相关产品推荐

