You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

"缓存输入"定价的存在,证明图像缓存功能应该是可行的。

疑问

  1. 图像API(/v1/images/edits)是否支持提示缓存?
  2. 结合图像生成工具的Responses API:是否需要特定设置才能启用图像令牌缓存?为什么我的cached_tokens始终为0?
  3. 针对生成带固定参考角色的多场景内容的需求,正确利用图像输入令牌缓存的方法是什么?

环境信息

  • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 20:34:54