OpenRouter新技术让多轮Agent调用成本降至1.75倍
OpenRouter推出PromptCaching与StickyRouting技术,针对多轮Agent交互中重复提示计费问题,缓存读取成本可降至常规输入的0 1至0 5倍。需注意首次写入开销及提供商漂移风险,建议使用session_id维持粘性路由以确保持续优化。
在多轮交互场景中,智能体每一轮都需重复提交相同的系统提示、工具定义、架构规范及策略指令。即便一个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默认TTL为5分钟,支持手动延长至1小时;Gemini实施隐式缓存,有效期约3–5分钟,而且读取行为不会刷新TTL。
第三个原因,提示头部内容频繁变更。正确的做法是:将固定要素(如系统指令、工具声明、交互模式、参考材料)前置,而将易变内容(如用户提问、时间戳、工具执行结果)后置。如果第一条系统消息中嵌入了实时时间戳,会导致每轮提示被视为全新输入,这类字段如无必要,建议移到后续消息中。
第四个原因,请求被分发至不同提供商。智能体工作流务必设置`session_id`并依赖粘性路由,以维持会话始终运行于已预热的提供商之上。如果手动指定`provider.order`参数,会覆盖粘性路由逻辑。

成本节约效果是随着轮次递增而越来越显著的。对于多轮对话,如果重复内容随交互自然增长,可以启用自动缓存;如果明确知道哪些大块文本需要长期复用(比如检索所得文档、长篇参考资料、角色设定卡、结构化CSV数据),适合采用显式缓存断点;对于智能体对话、客服工单、实时聊天线程、自动化工作流等场景,尤其当开场消息存在轮次间动态变化时,必须使用`session_id`;对于较长的Anthropic会话,如果默认5分钟缓存容易过期,应主动配置1小时TTL。
如何验证缓存是否生效?其实很简单,通过响应体中的`usage.prompt_tokens_details.cached_tokens`字段就能判断——数值大于零即表示命中;`cache_write_tokens`显示本次写入量;`cache_discount`则反映单次生成所获得的成本减免。上述指标同样可以在Activity页面或`/api/v1/generation`接口响应中获取。
来源:https://www.php.cn/faq/2865488.html?uid=1246273
相关热点
继续查看同栏目近期热点。
延伸阅读
补充最近整理过的热点入口。
