"世界上有一种省钱方式叫 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. 长系统提示 + 多工具定义 = 缓存收益最大化
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层) |
• 简单粗暴 • 延迟最低 |
• 精确匹配才命中 • 不适合创意任务 |
🎯 最佳实践
- 结构化 Prompt:将固定内容前置,变化内容后置
- 高频 Agent 必开:超过 100 次/天的 Agent,缓存必开
- 监控命中率:定期检查缓存命中率,低于 60% 需优化
- 避免滥用:低频调用的 Agent 开缓存反而增加首笔成本
- 组合使用:Prompt Caching + Semantic Caching = 双重省钱
⚠️ 坑点提醒:
1. 缓存写入失败不会报错,只是返回普通响应
2. 修改系统提示会让旧缓存失效
3. 多模型调用需要各自缓存,不能共用
1. 缓存写入失败不会报错,只是返回普通响应
2. 修改系统提示会让旧缓存失效
3. 多模型调用需要各自缓存,不能共用
📝 总结
Prompt Caching 就像是给 AI 发了一张"月卡"——第一次全价,后面次数越多越便宜。对于高频调用的 Agent,这是必开功能,月省几千刀不是梦。
但记住:缓存不是免费的午餐。它需要精心设计 prompt 结构、监控命中率、配合业务场景使用。用好了是省钱利器,用不好只是多付 25%。