token 经济学
prompt caching 如何复用 KV 降本、断点规则是什么、多轮 agent 的成本累积模式
核心要点:
- prompt caching 复用 KV、跳过 prefill,读价约 10%
- 断点最多 4 个,前缀一变全失效
- 稳定前缀前置以最大化缓存命中
- 多轮 agent 的 input token 随步数平方累积
- model routing 是最大单项成本优化
本文讲 agent 的 token 成本管理。这里的 caching 是 KV 复用降本,与 03-记忆系统 的 compaction(压缩历史)是两回事。
prompt caching 怎么省钱?
核心问题:每轮都把相同的 system prompt 和工具定义重发一遍,这部分能不能不重复计费?
prompt caching 把稳定前缀的 KV 矩阵存在服务器,命中时跳过最贵的 prefill 计算[1]。要理解它得先看推理的两个阶段:
- prefill:一次性计算全部输入 token 的 KV 矩阵——这是最贵的一步,成本随输入长度增长。
- decode:逐 token 生成输出。
prompt caching 缓存 prefill 阶段算出的 KV,命中时直接加载、只处理新内容,既降延迟又降成本——缓存读取定价约为正常输入的 10%。可借鉴的判断:重复的前缀越长,跳过的 prefill 越多,省得越多。
缓存断点怎么放才命中?
核心问题:缓存不是自动的吗,为什么放错位置就不省钱?
Anthropic 靠显式断点 + 前缀哈希,任何断点前的字符变化都会让该缓存完全失效[1]。命中规则很硬:
- 断点:最多 4 个
cache_control标记,命中时系统对前缀做累积哈希,未命中向前回溯最多 20 个 block。 - 失效:断点之前哪怕改一个字符,该断点的缓存条目整个作废。
- TTL:默认 5 分钟(写入价 1.25×),可设 1 小时(写入价 2×);读取价 0.1×。
陷阱:把时间戳、随机 ID 放在 system prompt 开头,会让整个缓存每次都失效。变化的内容必须放在所有稳定内容之后。
这条直接推出布局规则:system prompt + 工具定义(最稳定)放最前、断点设在它们末尾,对话历史等变化内容放后面。与 04-窗口内信息组织 的"稳定前缀前置"同源。OpenAI 则是全自动缓存(1,024 token 起、折扣可达 90%),无需手动断点。
一个具体的成本算例怎么算?
核心问题:caching 到底能省多少,能不能算给我看?
用一个 10 轮 agent 任务算:固定前缀 8,000 token + 每轮新增 500 token,加 caching 省约 60–66%[2]。以 Sonnet 量级定价(基础 $3/MTok、5 分钟写入 $3.75/MTok、读取 $0.30/MTok)粗估(含每轮少量输出):
- 无 caching:每轮都全额计费固定前缀,10 轮重复计费 10 次,总成本约 $0.30–0.40。
- 有 caching:第 1 轮写入缓存(1.25× 价),后 9 轮固定前缀走读取价(0.1×),总成本约 $0.10–0.15,省约 60–66%。
固定前缀越大,省得越多:前缀到 50K+ token 时节省可达 85–90%(与官方多轮对话案例吻合)。可借鉴的判断:agent 的 system prompt 和工具定义越大,caching 的 ROI 越高——这也是为什么 caching 对 agent 比对单轮聊天划算得多。
为什么 agent 的 token 成本会爆炸?
核心问题:单轮调用不贵,为什么 agent 跑一个任务账单高得多?
因为每一步都要重发全部历史,累积 input token 随步数近似平方增长。第 N 步的输入包含前 N-1 步的全部内容,由此推导:一个 10 步任务的 input 成本远高于单步的 10 倍。
两个放大因素:固定 overhead(system prompt + 工具定义,常 2,000–8,000 token)在无 caching 时每次全额计费;输出 token 定价约为输入的 5×(如 Sonnet 量级 $15/1M 对 $3/1M),控制输出长度和减少步数同样重要。这正是上一节 caching 算例要解决的问题——把重复的固定前缀从"每轮全价"降到"一次写入 + 多次 0.1× 读取"。
怎么把成本压下来、不失控?
核心问题:除了缓存,还有哪些手段,怎么防失控烧钱?
三类手段叠加 + 分层预算:model routing 收益最大,软限降级而非报错。
| 手段 | 机制 |
|---|---|
| model routing | 强弱模型分层(Haiku/Sonnet/Opus),子任务用廉价模型 |
| prompt caching | 稳定前缀 KV 复用,读价约 10% |
| 工具结果截断 | 历史深处的原始工具输出裁剪掉(见 04) |
@tbl-agent-ctx-cost-reduction agent token 成本压降手段:model routing、prompt caching、工具结果截断三类方法及其机制
可借鉴的优先级:先做 model routing(单项收益最大),再上 caching,最后做工具结果裁剪。预算则分层设限(per-step / per-run / per-user / 组织级),触达软限时降级模型或缩减上下文,而非返回错误中断任务——既控成本又不牺牲可用性。
Takeaway
| 知识点 | 核心结论 |
|---|---|
| KV cache | 缓存 prefill 的 KV,命中跳过最贵的计算,读价约 10% |
| 断点规则 | 最多 4 个,前缀一变全失效,变化内容必须放后面 |
| 成本算例 | 8K 前缀 + 10 轮,caching 省约 60-66%;50K+ 前缀省 85-90% |
| 成本爆炸 | 多轮 input 随步数平方累积,输出约为输入 5× 价 |
| 优化与预算 | routing > caching > 截断;分层设限,软限降级不报错 |
参考资料
- Anthropic. Prompt Caching. 2025. https://platform.claude.com/docs/en/build-with-claude/prompt-caching
- Anthropic. Pricing / Prompt caching cost examples. 2025. https://platform.claude.com/docs/en/about-claude/pricing