Claude Code 省钱实战指南:如何将 AI 编程成本降低 80%
引言:为什么你的 Claude Code 账单总是超标?
如果你正在使用 Claude Code 进行日常开发工作,可能已经注意到一个令人困惑的现象:明明只是简单的代码修改,为什么 token 消耗却像滚雪球一样越滚越大?更奇怪的是,有些开发者做同样的任务,成本却能比你低好几倍。
这不是运气问题,而是对 Claude Code 底层计费机制理解程度的差异。
本文将带你深入理解 Claude Code 的 token 消耗原理,揭示 Anthropic 官方从未明确说明的缓存折扣机制,并提供一套经过验证的实战策略,帮助你将 AI 编程成本降低 50% 到 80%,同时保持甚至提升开发效率。
第一部分:Claude Code 到底是怎么计费的?
每轮对话的真实开销
要理解如何省钱,首先得明白钱是怎么花出去的。
当你向 Claude Code 发送一条消息时,系统实际上会把以下内容全部打包发送给 API:
| 组成部分 | 说明 | 大致占比 |
|---|---|---|
| 系统指令 | 角色定义、行为准则 | 约 20% |
| 工具定义 | 约 40 个工具的完整描述 | 约 30% |
| CLAUDE.md | 项目上下文文件 | 约 15% |
| Git 状态 | 当前仓库的快照信息 | 约 10% |
| 对话历史 | 之前所有的消息记录 | 约 20% |
| 本轮消息 | 你刚刚输入的内容 | 约 5% |
关键洞察:在第 30 条消息时,实际输入量 = 前 29 条的全部内容 + 新消息。这意味着无缓存状态下,每轮输入量是线性增长的。
想象一下,如果你和 Claude 讨论了一个小时,积累了 20 轮对话,那么第 21 轮时,系统需要把前面所有的对话内容都重新发送一遍——即使这些内容你已经看过无数次了。
这就是为什么长会话的后期,响应速度会变慢,成本会飙升的根本原因。
第二部分:提示缓存机制——10 倍折扣的秘密
什么是 KV Cache?
Anthropic 为 Claude Code 提供了一项名为 Prompt Caching(提示缓存) 的技术。简单来说:如果当前请求的前缀与上次完全相同,系统会跳过重新计算,直接读取缓存结果。
这带来了三种截然不同的计费价格(以 Claude 4 Sonnet 为例):
| 计费类型 | 价格(每百万 token) | 相比正常价格 |
|---|---|---|
| 正常输入 | $3.00 | 基准价 |
| 缓存写入 | $3.75 | 贵 25%(首次建立缓存) |
| 缓存读取 | $0.30 | 便宜 90%(命中缓存) |
数学上的惊喜:系统提示通常占每轮输入 token 的 60-80%。只要前缀不变,这部分每轮只需要支付一折的价格。
Claude Code 的缓存断点在哪里?
通过对 Claude Code 源码的逆向分析,可以确认每个请求精确放置了 3 个缓存断点:
第 1 个断点:Identity 文本
-
包含 Claude 的角色定义和行为准则 -
这是系统提示中最稳定的部分
第 2 个断点:项目上下文合并块
-
包含 CLAUDE.md、Git 状态、环境信息等所有剩余内容 -
这两块合起来就是每轮 90% 折扣的来源
第 3 个断点:最新一条消息
-
只有最新消息被打断点 -
历史消息不打断点——旧消息里的工具调用结果会被替换成轻量级引用
重要说明:工具定义没有专门的断点,但 Anthropic 的缓存机制是前缀匹配,断点之前的所有内容会一起按缓存价计费,因此工具定义实际上也享受了缓存折扣。
Pro 用户的隐藏福利:1 小时缓存 TTL
默认情况下,缓存有效期只有 5 分钟。这意味着如果你停下来喝杯咖啡再回来,缓存已经失效,系统提示需要重新支付写入费用。
但 Pro / Max 订阅用户(且未超额的情况下)享有特殊待遇:特定请求类型会自动升级为 1 小时有效期。
1 小时的 TTL 基本消除了短暂中断导致的缓存失效问题。这也是为什么本文更推荐你自己订阅 Claude Pro,而不是使用第三方中转站——后者通常无法享受这一福利。
第三部分:四类”缓存杀手”——你踩过这些坑吗?
缓存基于严格的字符级哈希。前缀中任意一个字节的变化,都会导致整个缓存失效。以下是四个最常见的”缓存杀手”:
杀手 1:会话中切换模型
缓存是绑定到具体模型的。当你在对话中从 Sonnet 切换到 Opus,缓存会立即清零,系统提示需要重新支付写入费。
成本对比:
-
一个 20,000 token 的系统提示 -
切模型前每轮成本:$0.006(读取价) -
切模型后当轮成本:$0.075(写入价) -
一次切换多付 12 倍
正确做法:需要换模型时,直接开一个新会话,这样新会话可以建立独立的缓存。
杀手 2:会话中修改 CLAUDE.md
CLAUDE.md 的内容被合并在系统提示的第二个断点里。一旦内容改变,这个大块的哈希值就会变化,整个系统提示缓存立即失效。
正确做法:在开会话前就写好 CLAUDE.md,会话开始后尽量不动。
杀手 3:注入精确时间戳
Claude Code 在系统提示里会注入当前日期,但只精确到天。
如果你通过 API 集成 Claude Code 时,把精确到秒的时间戳塞进系统提示,每次请求的哈希都会不同,缓存永远无法命中。
正确做法:避免在系统提示中放入每秒变化的内容。
杀手 4:工具描述里的随机路径
Claude Code 的源码注释中明确提到:如果工具描述里混入了随机 UUID 路径,每次请求的工具描述都会不同,等于每次都要全价付费。
实测表明,这会导致 12 倍的成本惩罚。
Claude Code 内部已经改用内容哈希路径来规避这个问题,但如果你在使用自定义工具,需要特别注意这一点。
第四部分:子智能体——让便宜模型做搜索任务
Claude Code 有一个不太为人知的优化策略:自动使用更便宜的模型处理特定任务。
Explore Agent(代码库探索)
当你需要搜索文件和代码时,Claude Code 会自动启动 Explore Agent,使用的是 Haiku 模型,而非主对话的 Sonnet 或 Opus。
成本差异:
-
Haiku 比 Sonnet 便宜 73% -
Haiku 比 Opus 便宜 95% -
同时跳过 CLAUDE.md 加载,省掉数千 token
重要提示:子智能体不共享主对话的缓存,因此从长对话来看,使用子智能体更省 token,因为避免了双向链接的缓存开销。
如何优化 Explore Agent 的使用?
你给的描述越模糊,Explore Agent 跑的轮数越多,每轮都是一次 Haiku 调用。
| 描述方式 | 结果 | 成本 |
|---|---|---|
| 模糊:”帮我找处理登录的文件” | 多轮搜索 | 高 |
| 精确:”读 src/services/auth.ts” | 直接读取 | 低 |
经验法则:给精确路径比让 AI 搜索便宜得多。
Plan Agent(架构设计)
当你让 Claude Code 制定实现计划时,它会启动 Plan Agent。这个子智能体同样跳过 CLAUDE.md,专注于设计而不涉及执行。
Plan Agent 继承主对话的模型选择,因此如果你使用的是 Sonnet,Plan Agent 也会使用 Sonnet。
第五部分:/compact——最容易被忽略的节省手段
/compact 是 Claude Code 中最被低估的命令。它会把整个对话历史压缩成一份摘要,然后以摘要重新开始对话,上下文体积大幅缩小。
压缩时 Claude Code 会自动做这些事:
-
去除冗余内容:清理工具输出中的图片和大型冗余内容 -
生成精炼摘要:用当前模型生成对话的精炼摘要 -
保留关键上下文:自动重新注入最近读过的 5 个文件(防止”失忆”) -
保留计划信息:保留 Plan 和激活的 Skills 上下文
关键细节:压缩请求也享受缓存折扣
压缩请求与主对话会共享相同的缓存前缀。这意味着压缩本身也享受缓存折扣,不会浪费已积累的系统提示缓存。
使用建议:
-
完成子任务后立即压缩,不要等自动触发 -
附加定制指令:例如 /compact 保留 API 设计决策和文件修改记录,比让 Claude 自己猜保留什么更准确
第六部分:JSON 文件——隐藏的 Token 黑洞
Claude Code 在本地估算 token 数时,使用不同的计算规则:
| 文件类型 | Token 计算规则 | 密度对比 |
|---|---|---|
| 普通代码 | 4 字节 ≈ 1 token | 基准 |
| JSON 文件 | 2 字节 ≈ 1 token | 2 倍密度 |
这意味着 JSON 文件的 token 密度是普通代码的 2 倍。
一个典型的 package-lock.json 动辄包含数万 token,一旦被读入上下文就是巨大的浪费。
好消息:Claude Code 已经默认将常用的 package-lock.json、yarn.lock 等文件硬编码排除在上下文之外。
建议:在 CLAUDE.md 中明确排除其他大型生成文件,比如构建产物、日志文件等。
第七部分:启动速度优化(顺带了解)
Claude Code 的”启动快”并非偶然,而是精心设计的 IO 优化:
-
并发预取:在所有模块加载之前就并发启动系统信息读取和凭证预取 -
并行运行:与模块加载过程并行运行 -
后台准备:第一帧渲染完成后,继续后台预取 CLAUDE.md、Git 状态、模型能力等数据
用户体验:你在打第一个字之前,上下文已经在后台准备好了。这种”无感加载”靠的是把 IO 操作藏在你打字的间隙里。
第八部分:九条实战策略
基于以上原理,以下是经过验证的九条实战策略,分为架构层和提示词层两个维度。
架构层策略(节省 50-80%)
1. 一个会话一个任务
话题切换后,旧对话历史变成每轮都要付费的噪音。新任务开新会话,避免为无关历史买单。
2. 主动使用 /compact
完成子任务即压缩,附上定制保留指令,不要等自动触发。
3. 固定模型,不中途切换
需要换模型就开新会话,保留当前所有缓存。
4. 开会话前写好 CLAUDE.md
会话中改 CLAUDE.md 等于主动让系统提示缓存失效。
提示词层策略(节省 20-50%)
5. 一次说完比追问更省 Token
三条消息 = 三次完整上下文加载。一条消息 = 一次。
低效做法:
-
“总结这个文件” -
“列出要点” -
“起个标题”
高效做法:
-
“总结这个文件,列出要点,建议标题”
6. 编辑原始消息,不要发新消息纠正
每条新消息永久追加进历史,后续每轮都要为它付费。Claude Code 支持直接编辑历史消息(按两次 Esc 就能回滚历史记录)。
7. 给精确路径,不让 AI 搜索
模糊描述触发 Explore Agent 多轮搜索,精确路径直接读取。
8. 在 CLAUDE.md 里排除大型生成文件
参见第六部分的 JSON 文件说明。
9. 分段工作
单次长会话的 token 消耗是连续的。把大任务拆成几个独立会话,每段各自压缩,比一条龙跑到底更可控。
第九部分:CLAUDE.md 的真实 ROI 计算
CLAUDE.md 注入系统提示后参与缓存。第一轮付写入费(贵 25%),后续每轮只付读取费(省 90%)。
成本对比案例
假设一个 5,000 token 的 CLAUDE.md,使用 20 轮对话:
有 CLAUDE.md 的情况:
-
首轮:写入费用 -
后续 19 轮:读取费用 -
总计约 0.4 RMB
无 CLAUDE.md,每轮手工提供:
-
20 轮都是正常输入费用 -
总计约 2 RMB
节省比例:接近 90%
使用建议
Claude.md 文件每次都会加载,因此要分清并规划好全局配置和项目配置,并且尽可能精简。
省 token 的策略:
-
首轮对话讲得详细 -
或者开 Plan 代替详细说明
追求效率的策略:
把项目架构说明、编码规范、常用 API 文档摘要全写进去,越详细越划算。
推荐做法:合理运用 Claude Code 的 /init 功能来初始化项目配置。
关闭 Thinking 模式
默认的 Adaptive 模式会按需启用扩展思考,思考 token 与输出 token 同价计费。
对于文件编辑、格式化、搜索替换等简单任务,可以手动关闭 Thinking 模式,节省推理开销。
结语:省 Token 的本质是什么?
省 Token 的本质不是抠门,而是让你的操作习惯对齐 Claude Code 的缓存架构。
三条核心原则值得铭记:
-
保持前缀稳定:固定模型、固定 CLAUDE.md、避免动态内容注入 -
用好缓存杠杆:把常用上下文写入 CLAUDE.md,10 倍折扣从第二轮起生效 -
控制历史增长:一任务一会话,主动 /compact,批量提问
同样的 Max 套餐,操作习惯不同,实际可用量差距可能达到 3-5 倍甚至更多。
希望这篇指南能帮助你在使用 Claude Code 时,既保持高效开发,又合理控制成本。
常见问题解答(FAQ)
Q: Claude Code 的缓存机制对所有用户都可用吗?
A: 是的,缓存机制对所有用户都可用,但 Pro / Max 订阅用户享有更长的缓存有效期(1 小时 vs 5 分钟),这能显著降低短暂中断后的重新写入成本。
Q: 我可以在会话中修改 CLAUDE.md 吗?
A: 技术上可以,但不建议。修改 CLAUDE.md 会导致系统提示的第二个缓存断点失效,整个系统提示需要重新支付写入费用(贵 25%)。建议在开会话前就确定好 CLAUDE.md 的内容。
Q: 什么时候应该使用 /compact?
A: 最佳时机是完成一个子任务后。不要等到对话历史自动触发压缩,主动压缩能让你更精确地控制保留哪些上下文信息。
Q: 使用子智能体(Explore Agent)会比主对话更便宜吗?
A: 是的。Explore Agent 使用 Haiku 模型,比 Sonnet 便宜 73%,比 Opus 便宜 95%。但子智能体不共享主对话的缓存,因此适合独立的搜索任务。
Q: 为什么我的 token 消耗比同事高很多?
A: 可能的原因包括:频繁切换模型、会话中修改 CLAUDE.md、对话历史过长未压缩、给 AI 模糊的搜索指令等。建议对照本文的”九条实战策略”逐一排查。
Q: JSON 文件真的那么耗 token 吗?
A: 是的。JSON 文件的 token 密度是普通代码的 2 倍(2 字节 ≈ 1 token,而普通代码是 4 字节 ≈ 1 token)。好在 Claude Code 已经默认排除了 package-lock.json 等常见的大型生成文件。
Q: 我应该把所有项目文档都放进 CLAUDE.md 吗?
A: 取决于你的使用模式。如果你会在一个会话中进行多轮对话,详细的 CLAUDE.md 能帮你节省 90% 的上下文成本。但如果只是偶尔使用,过长的 CLAUDE.md 会增加首轮的写入成本。建议根据实际使用频率权衡。
Q: 缓存写入比正常输入贵 25%,这划算吗?
A: 绝对划算。虽然首次写入贵 25%,但从第二轮开始,缓存读取比正常输入便宜 90%。只要你的会话超过 2 轮,整体成本就会显著降低。
本文基于 Claude Code 源码分析和 Anthropic 官方文档整理,旨在帮助开发者更高效、更经济地使用 AI 编程工具。

