跳转到主要内容

本项目支持什么

提示词缓存由支持该能力的上游模型复用输入计算;同一提示词仍然发起新的生成请求。它不等于缓存最终答案,也不代替对话历史。项目识别的字段与实际转换路径如下: 当前 Chat DTO 未声明顶层 prompt_cache_options,不能因上游新版本支持该字段就承诺本项目普通 Chat 转发也支持。内容块扩展、原生 Claude 缓存标记和其他协议之间也不是通用无损映射。全局或渠道透传是部署配置,不能作为所有调用者的默认假设。 网关有可配置的渠道亲和规则,例如 Responses 可用 prompt_cache_key 提取亲和键;规则受路径、模型、权限和会话策略约束。亲和不保证缓存命中,不应套用 OpenRouter 的默认粘性路由、TTL 或 session_id 语义。本文档核对范围内也没有通用的 X-OpenRouter-Cache 响应缓存契约。

准备可复用前缀

把稳定指令、工具定义和参考资料置于前面,变化的问题放在末尾。保持相同的有效内容和顺序;不要为了凑长度填入重复文本。上下文裁剪、摘要、渠道切换与模型参数变化都可能影响复用。 缓存的最小输入长度、有效期、写入和读取价格由模型及部署决定。缓存 key 使用不含个人信息或密钥的业务范围标识,并按租户和内容版本划分;它不是访问控制边界。store: false 也不是禁止所有形式缓存或日志的保证。

可运行:两次请求观察缓存读数

将允许发送给部署方的 UTF-8 参考资料保存为 reference.txt。本例只读取一个不超过 64 KiB 的普通文件,保留前缀并改变末尾问题;执行两次真实生成,没有自动重试。沿用 REST 运行时,同时保存 examples/prompt-cache.mjs 与 http-client.mjs。
输出是两次请求的用量观察,不打印参考资料、回答或缓存 key。cached_tokens: null 表示没有返回该项,0 表示报告零命中;第二次仍为零不算示例失败。两次回答都必须完整,任一失败会停止且不输出最终比较。运行前确认模型接受 prompt_cache_key,资料长度适合该模型;本地 fixture 通过不能证明真实命中率。

读数与排障

Chat 常见字段是 usage.prompt_tokens_details.cached_tokens,Responses 是 usage.input_tokens_details.cached_tokens;Claude 原生使用 cache_read_input_tokens 和 cache_creation_input_tokens。这些字段可能缺失,转接渠道也可能归一化用量。不能把不同协议字段机械相加,或用命中数量自行推断最终账单。 零命中时依次检查:是否有相同且足够长的有效前缀、模型是否支持、字段是否在转换中保留、是否切换上游、缓存是否过期、统计是否返回。使用请求观测关联日志,不记录正文来排障。 依据:30a6d88a4 的 relaykit/dto/openai_request.go、relaykit/dto/claude.go、Chat / Responses 转换器及 setting/operation_setting/channel_affinity_setting.go。专题组织参考 OpenRouter 缓存指南;上游策略见 OpenAI 缓存说明。 Chat API · Responses API · 上下文管理 Read in English