上个月,在没有更换任何大模型的情况下,我的 Anthropic API 账单居然暴跌了 70%。我所做的唯一改变,就是调整了缓存断点(cache breakpoints)的位置。以下是我在所有 Claude 集成项目中使用的核心提示词缓存模式。
模式一:优先缓存系统提示词
系统提示词是最容易拿到、也最容易被开发者忽略的省钱手段。我的 Agent 运行着一个包含角色定义、输出格式、安全规则和少样本示例(few-shot examples)的 4,000 Token 系统提示词。在单个会话中,这个提示词是完全静态不变的。在启用缓存之前,我每次调用都必须为这 4,000 个 Token 支付全额输入费用。对于一个需要循环 30 次才能完成任务的 Agent,这相当于产生了 120,000 个纯粹重复的 Token 消耗。
解决办法非常简单,只需添加一个参数。在系统提示词数组的最后一个内容项中,添加一个 cache_control 块,类型设为 "ephemeral"。这样,第一次调用会写入缓存(写入缓存会有轻微溢价),而后续的每一次调用都会直接读取缓存,费用仅为普通输入价格的十分之一左右。
这里有一个必须遵守的硬性规则:对于 Claude Sonnet 模型,缓存的块必须至少包含 1,024 个 Token,否则会被系统默默忽略。我的 4,000 Token 提示词轻松达标。如果你的系统提示词很短(比如只有 200 个 Token),千万不要多此一举添加缓存断点,因为不会起作用。
此外,提示词的顺序至关重要。缓存是按前缀(prefix)匹配工作的。断点之前的所有内容都会被缓存,断点之后的内容则每次重新读取。因此,务必将静态内容(角色、规则、示例)放在最上方,将动态内容(用户查询、当前日期)放在断点下方。如果顺序倒置,由于前缀每次都在变,你的缓存命中率将会彻底崩溃。
从我的实际日志来看,在日均运行 2,000 次的文档分类任务中,3,800 Token 的系统提示词通过缓存,每天帮我节省了约 680 万个计费输入 Token。这是我削减的最大一笔开支。如果你读完本文只想做一件事,请立刻去缓存系统提示词,这只需花费你四分钟时间。
模式二:独立缓存工具定义
工具定义(Tool Definitions)是第二个容易被遗忘的成本黑洞。如果你将 Claude 作为具有函数调用(Function Calling)能力的 Agent 运行,你的工具 Schema 可能会非常庞大。我有一个 Agent 拥有 14 个工具,光是 JSON Schema 就占用了 9,200 个 Token。这些定义在请求中处于最前端(甚至在系统提示词之前),并且在整个会话期间是完全静态的。
你可以在最后一个工具定义之后立即放置一个 cache_control 断点。这样,工具块和系统提示词都会被缓存下来,作为独立的两个前缀共同发挥作用,从而极大降低多轮对话中的基础开销。
【AgentUpdate 深度解析】 提示词缓存(Prompt Caching)不仅是降低 API 成本的“银弹”,更是推动 AI Agent 迈向复杂多轮工作流的底层技术分水岭。相较于 OpenAI 自动且黑盒的缓存机制,Anthropic 提供的显式缓存控制(ephemeral breakpoints)赋予了开发者极致的微调自由度。在复杂的 Agent 循环和 MCP(Model Context Protocol)场景中,工具定义和系统指令的 Token 占比往往超过 80%。通过精细化的缓存分层设计,开发者能够以极低延迟(Time-to-First-Token 显著降低)和极低成本运行高频、长上下文的自主 Agent。这不仅降低了初创团队的算力门槛,更预示着未来 AI 应用的架构设计,必须从单纯的“提示词工程”转向更为严苛的“上下文状态管理工程”。