为什么这两条折扣能叠加
按 Anthropic Batch Processing 文档(访问于 2026-05-19),Batches 内部仍走 Messages API 协议,cache_control 字段照常解析。这意味着同一段 system prompt 在 batch 内仍能触发 cache_write / cache_read 区分计费,只是最终结算价在 Messages API 原价基础上再 ×0.5。
单价测算表(Claude Sonnet 4.6 为例)
按 Anthropic Pricing(访问于 2026-05-19),Sonnet 4.6 input base 单价 $3/MTok。1M token system prompt 在不同模式下的实际花费:
| 模式 | 单价(每 1M input token) | vs base 价 |
|---|---|---|
| 实时调用、无 cache | $3.00 | 100% |
| 实时 + cache write(首次) | $3.75 | 125% |
| 实时 + cache read(命中) | $0.30 | 10% |
| Batch + 无 cache | $1.50 | 50% |
| Batch + cache write(首次) | $1.875 | 62.5% |
| Batch + cache read(命中) | $0.15 | 5% |
注:Batch 折扣按 Anthropic Batches 2026 年 5 月公开规则计算,实际以官方页为准。
叠加后实测:SEO 批量生成场景
应用:Solopreneur 每周生成 200 篇 SEO 长文(每篇 1500 字),system prompt 4K token(品牌语气 + 站点风格 + 选题清单)。
不优化:
input: (4K + 500 user) × 200 = 900K token
output: 1500 token × 200 = 300K token
成本 ≈ 900K×$3 + 300K×$15 = $2.7 + $4.5 = $7.2/M token 加权 ≈ $6.84
只开 Prompt Caching(实时):
4K system 缓存,200 次中 199 次走 cache_read
input 成本 ≈ 4K×1.25×$3/1M + 4K×199×$0.3/1M + 500×200×$3/1M
≈ $0.015 + $0.239 + $0.3 = $0.554
output 不变 $4.5
小计 ≈ $5.05 → 省 26%
叠加 Batch API:
实时单价的 1/2
小计 ≈ $2.52 → 省 63%
如果 output 也走 Batch(本来就是):
全部 batch 价
input cache_read: $0.554 × 0.5 = $0.277
output: $4.5 × 0.5 = $2.25
小计 ≈ $2.53 → 省 63%
实际能压到 5% 的极致场景是「output 极少 + input 巨大且高度复用」的离线任务,例如批量内容打分、批量分类标注。
Solopreneur 5 个适合的离线场景
| 场景 | system prompt 大小 | 批量大小 | 实测降本 |
|---|---|---|---|
| 每日 SEO 内容批量生成 | 4-6K | 50-300 篇 | 60-75% |
| 文档批量摘要(知识库索引) | 2-4K + 文档 | 100-2000 个 | 70-85% |
| 客服邮件批量起草 | 3-5K(品牌 FAQ) | 50-500 封 | 65-80% |
| A/B prompt 评测打分 | 1-2K(评分细则) | 200-5000 条 | 80-92% |
| 离线 RAG embedding | — | 10K-1M chunks | 50%(走 batch 折扣) |
按 Anthropic Customer Stories(访问于 2026-05-19)公开案例,做内容批量生成的 SaaS 普遍报告打开 Prompt Caching 后 token 账单降 40-60%,叠加 Batch 后再降一半。
怎么开 Prompt Caching(代码示例)
按 Anthropic Prompt Caching Docs(访问于 2026-05-19):
import anthropic
client = anthropic.Anthropic()
SYSTEM_PROMPT = "..." # 4-6K token 的稳定品牌指令
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2000,
system=[
{
"type": "text",
"text": SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"},
}
],
messages=[{"role": "user", "content": user_input}],
)
# 看响应里的 usage
print(response.usage.cache_creation_input_tokens) # 首次写入
print(response.usage.cache_read_input_tokens) # 后续命中
print(response.usage.input_tokens) # 非缓存部分
关键:cache_control 标记的 block 累计 token 必须 ≥ 1024(Sonnet / Opus / Haiku 4.5 起统一 1024 条件),否则 cache_write 不会触发。
怎么提交 Batch(代码示例)
batch = client.messages.batches.create(
requests=[
{
"custom_id": f"task-{i}",
"params": {
"model": "claude-sonnet-4-6",
"max_tokens": 2000,
"system": [{
"type": "text",
"text": SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"},
}],
"messages": [{"role": "user", "content": tasks[i]}],
}
}
for i in range(200)
]
)
# 轮询直到 processing_status == "ended",然后下载 results_url
常见坑
坑 1:cache_control 加在错误位置
cache 是「以 block 为粒度」的。如果你把 system prompt 拆 5 个 text block,只有最后一个加 cache_control,前面 4 个不缓存。正确做法是把要缓存的 block 整段标记。
坑 2:5 分钟窗口内 batch 没跑完
ephemeral cache 5 分钟过期。如果一批 batch 提交后 3 小时才跑完,cache 早就过期,每条都按首次写入计费。Anthropic 在 Batch 内部会复用 cache(同一 batch 内 cache_read 不会因为执行时间长而失效),但跨 batch 不行。所以建议同类任务集中到一个 batch 提交。
坑 3:1 小时 cache 比 5 分钟贵
Anthropic 还提供 1 小时 cache(type: "ephemeral", ttl: "1h"),cache_write 倍率 2x(更贵),适合「跨 batch 复用」场景。Solopreneur 大部分场景 5 分钟够用。
坑 4:Batch 不支持流式
Batch 是同步任务,没有 streaming。如果你的代码默认开了 stream=True,提交 Batch 时要去掉这个字段。
中转方支持情况
签约中转方前用 100 条小批测试,看:
- 账单上 cache_read 是否真的按 base 价的 10% 收
- batch 端点是否能正常提交并返回 batch_id
- results_url 能否下载到完整 JSONL
如果用一条主推 GPT-5.5 / Claude 4.7 的低价 API 中转,既透传 cache_control 又原样支持 Batches 端点,Solopreneur 把这两个折扣同时享受到,月账单从 $2000 量级压到 $100-200 是正常实测区间。