为什么 System Prompt 要分段缓存?
Prompt Cache:成本降低 90%
问题场景
System Prompt 很大:
- 身份定义:500 tokens
- 规范说明:1000 tokens
- 项目上下文(CLAUDE.md):5000 tokens
- Git 状态:500 tokens
- 环境信息:500 tokens
- 总计:7500 tokens
每次调用都发送:
100 次调用 × 7500 tokens × $0.003 / 1K = $2.25
问题:大部分内容是"静态"的,每次都发送很浪费。
解决方案:Prompt Cache
Anthropic 的 Prompt Cache
原理:
- 标记"可缓存"的部分
- 第一次:正常计费
- 后续:缓存命中,只收 10% 费用
代码证据:
// src/services/api/claude.ts
const systemPrompt = [
{
type: "text",
text: identitySection,
cache_control: { type: "ephemeral" } // 缓存
},
{
type: "text",
text: rulesSection,
cache_control: { type: "ephemeral" } // 缓存
},
{
type: "text",
text: claudeMdContent,
cache_control: { type: "ephemeral" } // 缓存
},
{
type: "text",
text: gitStatus // 不缓存(动态变化)
}
]
成本对比
无缓存:
100 次 × 7500 tokens × $0.003 / 1K = $2.25
有缓存:
第 1 次:7500 tokens × $0.003 / 1K = $0.0225
后 99 次:7500 tokens × $0.0003 / 1K × 99 = $0.2227
总计:$0.2452
节省:
$2.25 - $0.2452 = $2.00(节省 89%)
分段策略
静态部分(缓存)
- 身份定义
- 规范说明
- CLAUDE.md(项目规范)
- 环境信息
特点:很少变化
动态部分(不缓存)
- Git 状态
- 当前时间
- 临时上下文
特点:每次都变化
关键要点
- Prompt Cache 降低成本 90%
- 分段策略:静态缓存,动态不缓存
- Claude Code 使用
cache_control: { type: "ephemeral" } - 真实节省:每 100 次调用节省 $2
字数:约 800 字
阅读时间:约 2 分钟