开发工作流

Claude Code 省钱大法:Token 消耗直降 80%

APR 714 阅读

本文详解 Claude Code 的 Token 计费机制与缓存策略,提供八类优化手段和九条实战技巧,帮助开发者将 Token 消耗降低高达 80%。

上篇提到过缓存机制,刚好最近 Claude Code 的核心作者给 OpenClaw 提交了三个 PR,主要解决缓存过低导致烧 Token 太快的问题。本文基于对 Claude Code 源码的分析,拆解其 Token 计费机制,并给出可立即执行的优化策略。

一、每轮对话的真实开销

每发一条消息,在无缓存的情况下,系统会将以下内容完整打包重新发送给 API:

  • 系统指令(角色定义、行为准则)
  • 约 40 个工具的完整定义
  • CLAUDE.md 项目上下文
  • Git 状态快照
  • 完整对话历史
  • 本轮消息

第 30 条消息的实际输入量 = 前 29 条的全部内容 + 新消息。因此,无缓存时每轮输入量呈线性增长。

二、提示缓存:10 倍折扣从哪里来

Anthropic 的 Claude 支持 KV Cache:当请求前缀与上次完全相同时,跳过重新计算,直接读取缓存。

以 Sonnet 4.6 为例,三种计费价格如下:

  • 正常输入:$3.00 / 百万 token
  • 缓存写入:$3.75 / 百万 token(首次建立缓存,贵 25%)
  • 缓存读取:$0.30 / 百万 token(命中缓存,省 90%)

系统提示通常占每轮输入 token 的 60–80%。只要前缀不变,这部分每轮只需支付一折费用。

Claude Code 在每个请求中精确放置 3 个缓存断点:

  1. 第一个断点在 identity 文本(角色定义);
  2. 第二个断点包含其余所有系统内容(CLAUDE.md、Git 状态、环境信息等);
  3. 第三个断点在最新一条消息上。

历史消息不设断点——旧消息中的工具调用结果会被替换为轻量级引用,减少重复传输体积。工具定义虽无断点,但因 Anthropic 的 prompt caching 是前缀匹配,断点前的所有内容均可享受缓存折扣。

Pro 用户专属:1 小时缓存 TTL

默认缓存 5 分钟过期。Pro / Max 订阅且未超额的用户,特定请求类型可自动升级为 1 小时有效期。免费用户和超额用户无此福利,这也是推荐直接订阅 Claude 而非使用中转站的原因之一。

Image

三、四类“缓存杀手”

缓存基于严格的字符级哈希。前缀任意一个字节变化,整个缓存即失效。

杀手 1:会话中切换模型 缓存绑定具体模型。从 Sonnet 切换到 Opus,缓存清零,系统提示需重新支付写入费。

示例:一个 20,000 token 的系统提示,切换前每轮 $0.006(读取价),切换后当轮 $0.075(写入价),成本增加 12 倍。

杀手 2:会话中修改 CLAUDE.md CLAUDE.md 内容合并于系统提示的第二个断点。内容变更会导致该块哈希变化,整个系统提示缓存立即失效。

建议:开会话前写好 CLAUDE.md,开始后不再修改。

杀手 3:注入精确时间戳 Claude Code 仅在系统提示中注入日期(精确到天)。若通过 API 注入秒级时间戳,每次请求哈希都不同,缓存永远无法命中。

杀手 4:工具描述里的随机路径 源码注释明确指出:若工具描述混入随机 UUID 路径,每次请求内容不同,缓存前缀变化,等于每次全价付费。Claude Code 已改用内容哈希路径规避此问题。

Image

四、子智能体:搜索任务用便宜模型跑

Explore Agent(代码库探索) 搜索文件和代码时,Claude Code 自动启动 Explore Agent,使用 Haiku 而非主对话的 Sonnet 或 Opus(注意:不共享缓存)。

  • Haiku 比 Sonnet 便宜 73%
  • Haiku 比 Opus 便宜 95%
  • 同时跳过 CLAUDE.md 加载,节省数千 token

模糊描述会触发多轮搜索,成本更高:

  • 模糊:“帮我找处理登录的文件” → 多轮搜索
  • 精确:“读 src/services/auth.ts” → 直接读取

Plan Agent(架构设计) 制定实现计划时,启动 Plan Agent,同样跳过 CLAUDE.md,专注设计不涉及执行(继承主对话模型)。

五、/compact:最容易被忽略的节省手段

/compact 将整个对话历史压缩为摘要,并以此重新开始对话,大幅缩小上下文体积。

压缩时自动执行:

  • 去除工具输出中的图片和大型冗余内容
  • 用当前模型生成精炼摘要
  • 重新注入最近读过的 5 个文件(防止“失忆”)
  • 保留 Plan 和激活的 Skills 上下文

关键细节:压缩请求与主对话共享相同缓存前缀,压缩本身也享受缓存折扣。

用法建议:

  • 完成子任务后立即压缩,不要等自动触发
  • 压缩时附加指令,如 /compact 保留 API 设计决策和文件修改记录,比让模型自行判断更精准

六、JSON 文件是隐藏的 Token 黑洞

Claude Code 本地估算 token 数时:

  • 普通代码:4 字节 ≈ 1 token
  • JSON 文件:2 字节 ≈ 1 token

JSON 的 token 密度是普通代码的 2 倍。例如 package-lock.json 动辄数万 token,一旦被读入上下文即造成巨大浪费。不过,常用的 package-lock.json、yarn.lock 等默认已被硬编码排除。

七、启动速度优化(顺带了解)

Claude Code 在模块加载前就并发启动系统信息读取和凭证预取,并与模块加载并行运行。第一帧渲染完成后,继续后台预取 CLAUDE.md、Git 状态、模型能力等数据。用户打第一个字前,上下文已在后台准备就绪——“启动快”靠的是将 IO 操作隐藏在打字间隙中。

八、9 条实战策略

架构层(节省 50–80%)

  1. 一个会话一个任务:话题切换后,旧对话历史变成每轮付费的噪音,新任务应开新会话。
  2. 主动 /compact:完成子任务即压缩,并附上定制保留指令。
  3. 固定模型,不中途切换:需换模型时开新会话,保留当前缓存。
  4. 开会话前写好 CLAUDE.md:会话中修改等于主动使系统提示缓存失效。

提示词层(节省 20–50%) 5. 一次说完比追问更省 token:三条消息 = 三次完整上下文加载;一条消息 = 一次。 6. 编辑原始消息,不要发新消息纠正:每条新消息永久追加进历史,后续每轮都要为其付费。Claude Code 支持直接编辑历史消息(按两次 Esc 可回滚)。 7. 给精确路径,不让 AI 搜索:模糊描述触发多轮 Explore Agent 调用,精确路径直接读取。 8. 在 CLAUDE.md 中排除大型生成文件。 9. 分段工作:将大任务拆成多个独立会话,每段各自压缩,比单次长会话更可控。

Image

九、CLAUDE.md 的真实 ROI

CLAUDE.md 注入系统提示后参与缓存:首轮付写入费(贵 25%),后续每轮只付读取费(省 90%)。

以 5,000 token 的 CLAUDE.md、使用 20 轮对话为例:

  • 有 CLAUDE.md:约 0.4 元人民币
  • 无 CLAUDE.md,每轮手工提供:约 2 元人民币

节省接近 90%。建议将项目架构说明、编码规范、常用 API 文档摘要写入 CLAUDE.md,并尽可能精简。合理运用 /init 功能初始化。

关闭 Thinking 模式 默认 adaptive 模式按需启用扩展思考,思考 token 与输出 token 同价计费。对于文件编辑、格式化、搜索替换等简单任务,可手动关闭以节省推理开销。

结语

省 Token 的本质是让操作习惯对齐缓存架构。

三条核心原则:

  1. 保持前缀稳定:固定模型、固定 CLAUDE.md、避免动态内容注入
  2. 用好缓存杠杆:把常用上下文写入 CLAUDE.md,10× 折扣从第二轮起生效
  3. 控制历史增长:一任务一会话,主动 /compact,批量提问

同样的 Max 套餐,操作习惯不同,实际可用量差距可达 3~5 倍甚至更高。

文章来源
来源:x.com
原文链接
点击查看评论

评论

(0)

登录后即可发表评论

立即登录