响应缓存:相同请求零成本 | OpenRouter
OpenRouter 推出响应缓存功能,允许开发者缓存相同的 API 请求,以毫秒级响应返回结果且不计费。缓存位于供应商之前,对请求细节进行哈希处理。支持流式和非流式,适用于多种端点,并提供 TTL 控制和缓存清除等功能。适用于代理重试、测试套件和重复提示等场景。
OpenRouter 近日宣布推出响应缓存功能,允许开发者通过添加请求头来缓存完全相同的 API 调用,从而大幅降低延迟和成本。该功能在模型供应商之前设置一个缓存层,当请求启用缓存时,OpenRouter 会对请求体、模型、API 密钥和流式模式进行哈希,生成唯一的缓存键。如果之前有过相同的请求且未过期,缓存响应将立即返回,无需调用供应商,也不消耗任何令牌。
缓存功能同时支持流式和非流式请求。对于流式缓存响应,系统会通过相同的管道重放,因此客户端代码无需任何更改。文本、图像、音频、文档和工具调用均可正常缓存。多模态输入(如 base64 图像、音频剪辑、文件附件)也会包含在缓存键哈希中。但需注意,非常大的多模态载荷(内部卸载处理)不适合缓存。标准大小的请求则完全兼容。
需要注意的是,响应缓存与提示缓存不同。提示缓存(许多供应商原生支持)在消息共享公共前缀时降低提示部分的成本;而响应缓存则完全跳过供应商,直接从 OpenRouter 的边缘缓存返回完整响应。
缓存响应时间极短,通常在 80-300 毫秒之间,其中大部分是序列化和网络传输时间,缓存查找本身平均仅需 4 毫秒。相比之下,典型的未缓存请求——例如 Gemini 2.5 Flash 需要约 1.3 秒,Kimi K2.6 需要 4.6 秒,GPT-5.5 需要 9.1 秒。缓存命中的计费为零:不收取提示令牌、完成令牌,完全免费。
启用缓存非常简单:在每个希望缓存的 API 调用中添加 X-OpenRouter-Cache: true 请求头即可。此外,还可以通过预设(Presets)配置,在预设配置中设置 cache_enabled: true,这样所有使用该预设的请求都会自动启用缓存,无需在每个请求中额外添加头。用户还可以通过 X-OpenRouter-Cache-TTL 控制缓存持续时间(1 秒到 24 小时,默认 5 分钟)。如果需要强制获取最新响应,可以发送 X-OpenRouter-Cache-Clear: true 来清除指定请求的缓存。OpenRouter 还会在响应头中返回缓存状态信息:X-OpenRouter-Cache-Status 指示命中或未命中,X-OpenRouter-Cache-Age 和 X-OpenRouter-Cache-TTL 帮助用户了解缓存性能。
该功能在多个场景下尤为有用。例如,在代理重试中,当代理工作流中途失败时,可以从头重试,缓存步骤会瞬间且免费返回,用户只需为新工作付费。在测试套件中,可以反复运行 LLM 支持的测试而无需消耗令牌,首次运行填充缓存后,后续运行既确定又免费。对于重复上下文处理,如果应用向同一模型发送相同的提示(相同系统提示、相同用户输入、相同参数),只有第一次调用需要付费。
目前,响应缓存适用于包括 /chat/completions、/responses、/messages 和 /embeddings 在内的多数生成端点。其他端点如旧版 /completions、/audio/speech(TTS)、/audio/transcriptions(STT)、/rerank 和视频生成暂不支持。该功能目前处于测试阶段,OpenRouter 正在观察性能表现,然后再锁定 API 接口。缓存命中不计入供应商速率限制(因为请求未到达供应商),并且在活动日志中会显示缓存指示器,方便监控。更多详情请参阅官方文档。