Claude API 怎么省钱?5 个降低 Token 成本的方法
降低 Claude API 的 Token 成本,核心就三件事:用提示词缓存复用重复的输入前缀(缓存读取价格约为基础输入价的十分之一)、按任务难度选对模型(简单任务别用 Opus)、用参数严格控制输入和输出的长度。把这三点做扎实,账单通常能降到原来的几分之一。下面是 5 个能直接落地的方法。
方法一:开启提示词缓存(Prompt Caching),复用重复前缀
如果你的每次请求都带着一大段固定的 system 提示词、工具定义或少样本示例,那这部分内容每次都被重新计费就是最大的浪费。提示词缓存让你把稳定的前缀缓存起来:缓存命中时,这部分按约 0.1 倍的输入价计费;写入缓存时按约 1.25 倍(5 分钟 TTL)。也就是说,第二次请求开始就能回本。
关键原理:缓存是前缀匹配,前缀里任何一个字节变了,后面全部失效。所以把固定内容放前面、把每次都变的内容(时间戳、用户问题、随机 ID)放最后。渲染顺序是 tools → system → messages。
from anthropic import Anthropic
client = Anthropic() # 自动读取环境变量 ANTHROPIC_API_KEY
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=[
{
"type": "text",
"text": "(这里放你那段几千 token 的固定系统提示词)",
"cache_control": {"type": "ephemeral"}, # 缓存断点
}
],
messages=[{"role": "user", "content": "用户的具体问题放这里,每次都变"}],
)
print(resp.usage.cache_read_input_tokens) # 命中缓存的 token 数
验证方法:看返回的 usage.cache_read_input_tokens。如果重复请求时它一直是 0,说明前缀里藏着「静默失效因子」——最常见的就是把 datetime.now() 写进了 system 提示词。缓存断点每次请求最多 4 个,最短可缓存前缀因模型而异(Opus 系列约 4096 token,Sonnet 4.6 约 2048 token),太短不会缓存。具体配额请以 Anthropic 官网为准。
方法二:按任务分级选模型,别用大炮打蚊子
当前主力模型有三档:Claude Opus 4.8(最强、最贵)、Claude Sonnet 4.6(速度与智能的平衡)、Claude Haiku 4.5(最快最便宜)。它们的输入/输出单价差距很大,把简单任务交给 Haiku、把复杂推理留给 Opus,是最直接的省钱手段。
| 任务类型 | 推荐模型 | 理由 |
|---|---|---|
| 分类、抽取、改写、简单问答 | claude-haiku-4-5 | 足够用,单价最低 |
| 大多数生产场景、Agent、工具调用 | claude-sonnet-4-6 | 性价比最优 |
| 复杂代码、深度推理、长链路任务 | claude-opus-4-8 | 智能上限最高 |
实操建议:在系统里做「分级路由」,先用一次 Haiku 判断难度,难的再升级到 Sonnet 或 Opus。选型细节可以参考 Claude 模型怎么选?Opus / Sonnet / Haiku 选型指南 和 Claude 写代码用哪个模型最划算?实测对比。各模型确切价格请以 Anthropic 官网为准,也可以看 Claude API 价格详解:各模型计费方式与省钱对比。
方法三:用 max_tokens 和 effort 控制输出长度
输出 token 通常比输入贵好几倍(例如输出价是输入价的 5 倍左右),所以控制输出是省钱的高杠杆点。两个参数要会用:
- max_tokens:输出的硬上限。分类这种短输出设到
256就够;不要无脑设很大,但也别设太小导致截断后还要重试。 - effort:放在
output_config里,控制思考深度与整体 token 消耗,取值low/medium/high/xhigh/max。成本敏感、不需要深度推理的任务用low或medium,能省下大量思考 token。
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=256, # 短输出,硬上限压低
thinking={"type": "disabled"}, # 简单任务关掉思考
output_config={"effort": "low"}, # 进一步降低 token 消耗
messages=[{"role": "user", "content": "把这句话分类为正面/负面:……"}],
)
print(resp.content[0].text)
对需要思考的任务,建议用自适应思考 thinking={"type": "adaptive"} 配合较低的 effort,让模型自己决定花多少 token 推理,而不是一律拉满。提示词写得越精炼、约束越明确,输出也越省——这部分可以看 Claude 提示词怎么写?2026 最新新手到进阶完整教程。
方法四:用 count_tokens 精确估算,别拍脑袋
很多人用 OpenAI 的 tiktoken 来估 Claude 的 token,这是错的——它对 Claude 文本通常少算 15%~20%,代码和中文更离谱。Anthropic 提供了官方的 count_tokens 接口,且 token 数是按模型计的,要传你将实际调用的模型 ID。
resp = client.messages.count_tokens(
model="claude-opus-4-8",
messages=[{"role": "user", "content": open("input.txt", encoding="utf-8").read()}],
)
print(resp.input_tokens) # 准确的输入 token 数
在批量任务或长文档处理前先估算,能帮你提前发现「这次请求会不会太贵」「要不要先分块」。token 计算的更多细节可参考 Claude API Token 怎么计算?附在线估算方法。
方法五:批量处理 + 多轮对话裁剪上下文
两类常被忽略的浪费场景:
- 非实时任务用批量接口(Batches API):对延迟不敏感的离线任务(比如一次性给一万条数据打标签),用
POST /v1/messages/batches批量提交,比逐条调用更省。 - 多轮对话裁剪历史:多轮对话每次都会把完整历史重新计费,对话越长越贵。结合提示词缓存(在最后一轮的最后一个内容块打缓存断点)+ 上下文裁剪(清理掉不再需要的旧工具结果),能显著压低长会话成本。
下面是 Node.js 用官方 @anthropic-ai/sdk 调用并打印缓存命中情况的例子:
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic(); // 读取 process.env.ANTHROPIC_API_KEY
const msg = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
system: [
{
type: "text",
text: "(固定的长系统提示词)",
cache_control: { type: "ephemeral" },
},
],
messages: [{ role: "user", content: "本轮的新问题" }],
});
console.log("缓存命中:", msg.usage.cache_read_input_tokens);
console.log("回答:", msg.content[0].text);
多轮对话的上下文管理细节,可以看 Claude API 多轮对话怎么实现?上下文管理详解。如果你刚上手 API,建议先跑通 Claude API Python 示例代码:10 分钟跑通第一个程序,再回来做成本优化。
常见问题
提示词缓存会额外收费吗?开了一定省钱吗?
缓存写入要付约 1.25 倍(5 分钟 TTL)或 2 倍(1 小时 TTL)的输入价,缓存读取只要约 0.1 倍。所以它不是「免费加速」:如果你的前缀每次都变、或者短到不会被缓存,开了反而只付写入费、零读取,得不偿失。只有当同一段较长前缀会被多次复用时才划算。确切的缓存价格倍率请以 Anthropic 官网为准。
把 max_tokens 设得很小能强行省钱吗?
不能滥用。max_tokens 是硬上限,设太小会让输出被截断(返回 stop_reason: "max_tokens"),你还得加大重试,反而多花钱多花时间。正确做法是按任务真实需要的输出长度来设,并配合 effort 和精炼的提示词从源头减少输出。
effort 和思考(thinking)有什么关系,怎么配合最省?
在 Opus 4.8、Sonnet 4.6 等模型上,思考用 thinking={"type": "adaptive"}(自适应),由模型决定何时、思考多少;effort 则控制整体的思考深度和 token 预算。最省的组合通常是:简单任务直接 thinking={"type": "disabled"} + effort: "low";需要推理但要控成本的任务用自适应思考 + medium;只有对正确性要求极高时才上 high 或 max。