🗃️ Prompt Caching

提示词缓存 - 让 AI 的记忆比金鱼长

更新时间: 2026-04-29 | 分类: API优化

成本优化 API设计 性能提升 Anthropic
"世界上有一种省钱方式叫 Prompt Caching,它就像你的外卖会员卡——每次点同样的菜,都能打折。问题是,AI厂商终于承认了:我们的 prompt 其实大部分都是在重复劳动。"

📖 什么是 Prompt Caching

Prompt Caching(提示词缓存)是一种 API 优化技术,允许开发者缓存频繁使用的提示词部分,在后续请求中直接复用,从而降低延迟、减少 token 成本

一句话解释:就像你背课文——第一次要全背,第二次只需要提醒开头,后面的内容就自动浮现。Prompt Caching 让 AI 也学会了这个"条件反射"。

类比时间

想象你是个外卖骑手:

  • 没有缓存:每次送餐要从头导航,"您好,我是骑手,请问您是。。。"——累不累?
  • 有缓存:系统记住你的"开场白",下次直接跳到"您的餐到了"——快的飞起

Prompt Caching 就是这个"记忆骑手"机制。

⚙️ 工作原理

1. 缓存命中逻辑

// Prompt Caching 的黑魔法 const request = { // 系统提示词 - 缓存这部分 system: "你是一个专业的代码审查助手...", // 🔒 缓存! // 工具定义 - 也缓存 tools: [toolDefinitions], // 🔒 缓存! // 用户消息 - 每次都变 messages: [ { role: "user", content: "帮我review这段代码..." } // ❌ 不缓存 ] }; // 结果:系统提示+工具定义被缓存,下次只算用户消息的token // 成本降低 90%,延迟降低 80%

2. Anthropic 的实现方式

Anthropic 在 2024 年推出了 Prompt Caching 功能,支持以下内容的缓存:

可缓存内容 典型 Token 数 缓存效果
系统提示 (System Prompt) 500-2000 每次请求复用
工具定义 (Tools) 1000-5000 减少重复解析
历史消息前缀 不定 多轮对话加速
图片/文档 1000+ 避免重复编码

3. 缓存生命周期

  • 写入缓存:首次请求 → 计算 → 缓存结果 → 返回响应
  • 命中缓存:相同前缀 → 直接复用 → token 费用 -90%
  • 缓存过期:5分钟无访问 → 自动清除( Anthropic 规则)
⚠️ 注意:缓存不是永久的!Anthropic 的缓存有效期约 5 分钟,频繁使用才能持续命中。如果你的 Agent 一小时才调用一次,那基本等于没用。

🚀 OpenClaw 实战应用

场景:代码审查 Agent

假设你有一个代码审查 Agent,系统提示词有 1500 token,工具定义 2000 token:

# OpenClaw Agent 配置 - 启用 Prompt Caching const agentConfig = { name: "code-reviewer", model: "claude-3-5-sonnet", # 系统提示 - 固定部分,适合缓存 systemPrompt: ` 你是一个专业的代码审查助手。 你的职责是: 1. 发现潜在的 bug 和安全问题 2. 提供改进建议 3. 保持代码风格一致性 ... (共计 1500+ token 的详细指南) `, # 工具定义 - 也适合缓存 tools: [ { name: "analyze_code", ... }, { name: "check_style", ... }, { name: "run_tests", ... } ], # 启用 caching caching: { enabled: true, cacheSystemPrompt: true, // 缓存系统提示 cacheTools: true // 缓存工具定义 } }; # 效果对比 # 无缓存:每次请求 3500+ token 全额计费 # 有缓存:只需计算用户消息 ~200 token # 成本节省:90%+

场景:多轮对话 Agent

# 多轮对话中的缓存利用 # 第一轮:预热缓存 messages = [ { role: "system", content: " lengthy system prompt..." }, { role: "user", content: "帮我写个函数" } ] # → 缓存系统提示,返回响应 # 第二轮:命中缓存 messages = [ { role: "system", content: " lengthy system prompt..." }, // 🔒 命中! { role: "user", content: "帮我写个函数" }, { role: "assistant", content: "好的..." }, { role: "user", content: "能优化一下吗" } // 新消息 ] # → 系统提示+历史消息前缀都命中缓存!
💡 OpenClaw 最佳实践
1. 将固定内容放在消息列表的前面(系统提示、工具定义)
2. 变化内容放在后面(用户最新消息)
3. 高频调用的 Agent 必须开启 caching(成本差 10 倍)
4. 长系统提示 + 多工具定义 = 缓存收益最大化

💰 成本分析

Anthropic 官方定价

操作 价格 说明
写入缓存 正常价格 × 1.25 首次请求贵 25%
命中缓存 正常价格 × 0.10 节省 90%!
缓存存储 免费 Anthropic 不收存储费

实际案例对比

# 案例:代码审查 Agent # 每天处理 1000 次代码审查请求 # 无缓存成本 每次请求: 3500 tokens × $0.003 = $10.50/天 # 有缓存成本 首次写入: 3500 × $0.003 × 1.25 = $0.013 (一次性) 后续命中: 200 × $0.003 × 0.10 = $0.0006/次 每天成本: $0.013 + 999 × $0.0006 = $0.61 # 节省:$10.50 → $0.61,降幅 94%! # 一个月省:($10.50 - $0.61) × 30 = $296.7

一个月省近 $300,这还只是一个 Agent。如果你有 10 个高频 Agent,每月省 $3000+

🆚 与其他缓存方案对比

方案 优点 缺点
Prompt Caching
(Anthropic)
• 官方支持
• 自动管理
• 语义级缓存
• 仅限 Claude
• 5分钟过期
Semantic Caching
(自建)
• 跨模型可用
• 持久存储
• 需要向量数据库
• 相似≠相同
响应缓存
(CDN层)
• 简单粗暴
• 延迟最低
• 精确匹配才命中
• 不适合创意任务

🎯 最佳实践

  1. 结构化 Prompt:将固定内容前置,变化内容后置
  2. 高频 Agent 必开:超过 100 次/天的 Agent,缓存必开
  3. 监控命中率:定期检查缓存命中率,低于 60% 需优化
  4. 避免滥用:低频调用的 Agent 开缓存反而增加首笔成本
  5. 组合使用:Prompt Caching + Semantic Caching = 双重省钱
⚠️ 坑点提醒
1. 缓存写入失败不会报错,只是返回普通响应
2. 修改系统提示会让旧缓存失效
3. 多模型调用需要各自缓存,不能共用

📝 总结

Prompt Caching 就像是给 AI 发了一张"月卡"——第一次全价,后面次数越多越便宜。对于高频调用的 Agent,这是必开功能,月省几千刀不是梦。

但记住:缓存不是免费的午餐。它需要精心设计 prompt 结构、监控命中率、配合业务场景使用。用好了是省钱利器,用不好只是多付 25%。