大家都在讨论缓存命中率,却忽略了缓存 TTL
最近看到大家都在讨论 Agent 的缓存前缀、缓存命中率以及 Token 价格,但我发现有一个容易被忽略的点:缓存其实是有 TTL(有效期)的。
如果长时间没有请求,缓存最终可能过期。虽然 Session 的历史消息还在,但之前缓存的计算结果可能无法继续复用。对于一个已经积累几十万 Token 的 Agent 来说,重新处理完整上下文,意味着额外的延迟和成本。
于是我查了一下各家模型的缓存 TTL:
| 厂商 | 缓存 TTL |
|---|---|
| Anthropic / Claude | 默认 5 分钟,可选 1 小时 |
| OpenAI / GPT | 部分新模型至少 30 分钟,支持更长的保留策略 |
| Google / Gemini | 显式缓存默认 1 小时,可自定义 |
| DeepSeek | 通常数小时至数天 |
| 阿里云 / Qwen | 显式缓存 5 分钟,隐式不固定 |
| Moonshot / Kimi | 部分模型默认 5 分钟,可选 1 小时 |
| xAI / Grok | 未公布固定 TTL |
| 火山方舟 | 专用上下文缓存默认 24 小时,可设 1 小时至 7 天 |
不同厂商的自动缓存和显式缓存机制并不完全相同,不能只看 TTL 判断缓存效果。
比较让我意外的是 DeepSeek,它的磁盘缓存通常可以保留数小时到数天。这至少说明 DeepSeek 在缓存存储与复用机制上有自己的设计思路,我猜这可能也是它能控制推理成本的原因之一。当然,缓存保留时间长不代表一定能命中,更不能单凭 TTL 解释模型价格。
这也让我开始思考一个问题:
既然缓存有有效期,为什么不在缓存即将过期之前,主动进行上下文压缩?
例如,假设缓存 TTL 为 1 小时,可以考虑在空闲约 54~55 分钟时提前触发压缩,预留几分钟的执行缓冲。
这样就有机会利用尚未过期的缓存完成长上下文压缩,把几十万 Token 的历史整理成更短的摘要,降低用户回来继续对话时的重新计算成本。
当然,具体提前多久还需要结合压缩耗时、缓存续期规则和任务状态来决定,并不是固定提前 5 分钟就一定最优。
我自己也在学习和开发 Agent,这让我意识到:
上下文管理不只是 Token 快满了才压缩,还可以结合缓存 TTL、任务状态和计算成本,选择更合适的压缩时机。
有时候优化 Agent 的成本,不一定要从模型本身入手,也可以从这些容易被忽略的工程细节入手。