Claude Code 省钱实战指南:如何将 AI 编程成本降低 80%

Claude Code 界面示意图

引言:为什么你的 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 会自动做这些事:

  1. 去除冗余内容:清理工具输出中的图片和大型冗余内容
  2. 生成精炼摘要:用当前模型生成对话的精炼摘要
  3. 保留关键上下文:自动重新注入最近读过的 5 个文件(防止”失忆”)
  4. 保留计划信息:保留 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.jsonyarn.lock 等文件硬编码排除在上下文之外。

建议:在 CLAUDE.md 中明确排除其他大型生成文件,比如构建产物、日志文件等。


第七部分:启动速度优化(顺带了解)

Claude Code 的”启动快”并非偶然,而是精心设计的 IO 优化:

  1. 并发预取:在所有模块加载之前就并发启动系统信息读取和凭证预取
  2. 并行运行:与模块加载过程并行运行
  3. 后台准备:第一帧渲染完成后,继续后台预取 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 的缓存架构

三条核心原则值得铭记:

  1. 保持前缀稳定:固定模型、固定 CLAUDE.md、避免动态内容注入
  2. 用好缓存杠杆:把常用上下文写入 CLAUDE.md,10 倍折扣从第二轮起生效
  3. 控制历史增长:一任务一会话,主动 /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 编程工具。