OpenRouter推出全新技术:多轮 Agent 调用成本最高可砍到 1.75 倍
多轮对话里,AI 智能体每次都要重复发送那一大堆系统提示词、工具定义、架构和策略指令。想想看,一个 6 轮的会话,哪怕唯一变化的就是用户的最新消息或者工具返回的结果,开头那堆重复的内容却可能被计费 6 次。这成本,简直是个黑洞。OpenRouter 最近推出的 Prompt Caching 配合 Sticky Routing,目标就是堵上这个窟窿。
Prompt Caching 的思路很简单:服务提供商从缓存里读出提示词中重复的部分,而不是每次都按全价来收钱。而 Sticky Routing 则负责把会话“粘”在同一个持有热缓存的提供商上,确保这个机制能跨轮次持续生效。
缓存读取成本:正常输入的 0.1 到 0.5 倍
缓存读取的价格,各家不一样。Anthropic Claude Sonnet 4.6 上,缓存读取是每百万 token 0.30 美元,而输入价格是 3.00 美元,正好是 0.1 倍。DeepSeek 和阿里通义千问也是 0.1 倍;OpenAI 是 0.25 到 0.5 倍;Gemini、Grok、月之暗面是 0.25 倍;Groq 则是 0.5 倍。
但得注意,缓存不是免费的午餐。首次请求得付缓存写入的费用,而且有些提供商的写入成本比普通输入还高。Anthropic 默认 5 分钟 TTL 的写入成本是输入价格的 1.25 倍,1 小时 TTL 更是到了 2.0 倍——一次从来没用过的写入,成本反而比不用缓存还高。OpenAI GPT-5.6 及之后版本写入成本是 1.25 倍输入价格。Google Gemini、Grok、月之暗面、Groq 的写入则是免费的。
热缓存的隐形陷阱:提供商漂移
缓存写入后,如果下一轮请求被路由到不同的提供商,那热缓存就失效了。OpenRouter 支持 70 多个提供商,第二轮就撞上冷端点的概率可不低。这就是 Sticky Routing 的价值所在——在缓存请求后,当这个提供商的缓存读取价格低于常规输入时,后续请求会被固定回同一个端点。如果该提供商不可用,就回退到下一个可用的端点,而不是让请求失败。
默认情况下,OpenRouter 是通过哈希对话的第一条系统消息和第一条非系统消息来识别会话的。但智能体常常在轮次之间重写开头消息(比如总结状态、重新排序工具上下文),导致哈希值变化、会话漂移。解决办法是用显式的 session_id。设置之后,OpenRouter 直接拿它作为粘性路由的键,粘性在首次成功请求后就会生效,而不是等到缓存命中后才启动。session_id 可以作为请求体的顶层字段,或者用 x-session-id 请求头发送,在整个对话期间要保持稳定,控制在 256 字符以内。
缓存未命中的四大原因
原因一:提示词不够长,没达到提供商的最低要求。Anthropic Claude Opus 4.5–4.8 和 Haiku 4.5 需要 4096 token,Haiku 3.5 需要 2048 token,Sonnet 4/4.5/4.6 和 Opus 4/4.1 需要 1024 token;OpenAI 需要 1024 token;Gemini 2.5 Pro 需要 4096 token,Flash 需要 1024 token。
原因二:缓存过期了。Anthropic 默认是 5 分钟,也可以选 1 小时;Gemini 的隐式缓存大概是 3–5 分钟,而且读取时不会重置 TTL。
原因三:提示词的开头老在变。应该把稳定的内容(系统指令、工具、模式、参考资料)放在前面,而变化的内容(用户问题、时间戳、工具输出)放在后面。第一条系统消息里的时间戳,会让每一轮提示词看起来都是新的,不是特别必要的话,应该移到后面的消息里。
原因四:请求被路由到了不同的提供商。智能体工作流应该设置 session_id,并依赖粘性路由,把会话留在已经预热好的提供商上。如果自己设置了 provider.order,会覆盖粘性路由。

节省的成本会随着轮次增加而增长。对于多轮对话,当重复使用的内容随着对话增长时,用自动缓存;当确切知道哪些大块内容应该被缓存时(比如检索文档、长参考文件、角色卡、CSV 数据),用显式缓存断点;对于智能体会话、支持工单、聊天线程、工作流运行,以及开场消息可能在轮次之间变化的对话,用 session_id;对于比较长的 Anthropic 会话,当默认的 5 分钟缓存可能过期时,用 1 小时缓存。
要确认缓存是否生效,可以检查响应里的 usage.prompt_tokens_details.cached_tokens 字段,大于零就是命中了;cache_write_tokens 显示写入量;cache_discount 可以看单次生成的成本影响。这些信息在 Activity 页面或者 /api/v1/generation API 里也能找到。