OhMyGPT

提示词缓存

缓存命中的输入只按新输入的零头计费。一个请求能不能命中,取决于你的代码怎么组织它。

服务商会缓存提示词的开头。之后的请求只要以完全相同的 token 开头,这部分就按缓存输入计费,价格只是普通输入的零头。OhMyGPT 把你组织好的提示词原样交给服务商,所以命中率取决于你自己的代码:每次提示词的开头是否稳定,服务商能否认出哪些请求属于同一个对话。

用 anthropic/claude-haiku-4-5 对同一段 9,150 token 的对话实测:

请求缓存费用
第一轮写入 9,147 token3,168 Credits
开头相同的下一次请求读取 9,147 token275 Credits
同样的提示词,不走缓存无2,535 Credits

查看命中率

  • 单个请求:请求明细里的 usage.cache_read_tokens 与 usage.cache_creation_tokens。
  • 一段时间:用量页的「缓存读取」列,或 GET /v1/usage/summary(需要管理员 Key)返回的 tokens.cache_read,可按模型或 API Key 分组。

一次性请求命中率低是正常的。对话和 agent 循环每一轮都会重发之前的内容,大部分输入应当来自缓存。

让提示词的开头保持不变

缓存从第一个 token 匹配到第一处不同为止,之后的内容都按新输入计费。

  • 不变的内容放前面:系统提示词、工具定义、长篇参考资料;用户的新消息放最后。
  • 系统提示词逐字节保持不变。里面带时间戳、请求 ID、用户名或随机排序的示例,每次都会打断命中;这些内容放进最新一条消息。
  • 对话只往后追加。修改、裁剪或总结之前的消息,会让那条消息之后的缓存全部失效,所以少做,要做就一次多处理一些。
  • 每一轮发送相同的工具、相同的顺序,JSON 序列化时键的顺序固定。
  • 同一个对话里不换模型,每个模型的缓存各自独立。
  • 太短的提示词不会被缓存,最短长度因模型而异。

标出哪些请求属于同一个对话

每一轮都发送同一个会话级的值,服务商才能把重复的提示词送到同一份缓存:

端点字段
Chat Completions、Responsesprompt_cache_key 或 provider.conversation_id(不超过 256 字节)
Anthropic Messagesmetadata.user_id
curl https://api.ohmygpt.com/v1/responses \
  -H "Authorization: Bearer $OHMYGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "openai/gpt-5.4-nano", "prompt_cache_key": "conv-8f2c", "instructions": "<the same long instructions every turn>", "input": "Hi"}'

用 8,351 token 的提示词连发两次,第二次响应的 usage.input_tokens_details 里是 "cached_tokens": 7936。

Claude 只缓存请求里标记过的内容。通过 Chat Completions 或 Responses 调用 Claude 时,多轮请求(带会话标识,或历史里已有助手回合)由 OhMyGPT 代为标记;单轮请求不标记,因为写入缓存比普通输入贵,上表里不走缓存的就是去掉助手回合的同一个请求。通过 Anthropic Messages 调用时,请求原样到达 Claude,需要自己加 cache_control。Claude Code 会加,并在每个请求里带上会话 ID,开箱即用。

本页目录