
用了 Claude Code 一段时间,发现 Token 消耗量比你想象的要高?这篇文章帮你系统性地降低 Token 成本。
Claude 的计费区分输入和输出:
Token 类型 | 说明 | 价格相对 |
|---|---|---|
输入 Token | 发送给 Claude 的内容(你的消息 + 文件 + 系统提示) | 较低 |
输出 Token | Claude 生成的回复 | 较高(约 3-5 倍) |
关键认知:让 Claude「多说」,成本会比「多读」更高。
缓存命中的折扣高达 90%,这是省钱的核心杠杆。
Prompt Caching 的核心逻辑:
首次请求:完整输入 token 计费
5 分钟内再次请求:缓存命中,只计费 10%
缓存过期(5 分钟):重新完整计费
省钱关键:让「固定的内容」被缓存,让「可变的内容」精简。
随时查看当前消耗:
/cost
显示内容: - 当前会话 token 总量 - 输入/输出 token 分拆 - 预估费用 - 缓存命中率(如果有)
建议:养成每完成一个大任务就 /cost 的习惯,建立成本感知。
消耗 token 的「大户」:
场景 | 典型消耗 | 说明 |
|---|---|---|
读取大文件 | 10-100K+ | 一次请求就消耗大量输入 token |
长对话历史 | 累计增长 | 每轮对话都带上之前的内容 |
反复读取相同文件 | 浪费 | 没有利用缓存 |
输出生成 | 高额 | 输出 token 价格更高 |
MCP 工具定义 | 每个 1-5K | 每个 MCP 都有固定的工具定义开销 |
/context
/cost
/context && /cost
知道钱花在哪,才能有针对性地优化。
Claude 的 Prompt Caching 会缓存「稳定的上下文前缀」:
缓存的内容(稳定):
├── 系统提示(System Prompt)
├── CLAUDE.md
├── Skills(被加载的)
├── MCP 工具定义
└── 对话历史的早期部分
不缓存的内容(多变):
├── 最新几轮对话
├── 新读取的文件
└── 工具调用结果
核心原则:越靠前的内容越容易被缓存。
CLAUDE.md 是缓存的「黄金地段」——每次请求都会带上,且位置靠前。
不好的写法:频繁修改、内容冗长
这是一个 React 项目...
[50 行注释和示例代码]
[过时的临时备注]
[每次修改都增加新内容]
好的写法:精简、稳定、核心规则
React 18 + TypeScript + Vite 项目。
## 规范
- 组件用箭头函数
- 样式用 Tailwind
- 测试放 __tests__/
## 命令
- 开发: npm run dev
- 测试: npm test
为什么稳定很重要?
修改 CLAUDE.md → 缓存失效 → 重新完整计费
保持不变 → 缓存命中 → 只计费 10%
Skills 默认在会话开始时加载,消耗上下文。设置延迟加载:
---
disable-model-invocation: true
---
效果:
- 不会自动加载到上下文
- 只有手动调用 /skill-name 时才加载
- 减少预热成本
适合延迟加载的 Skills: - 不常用的功能(如特定框架的调试) - 大型 Skills(内容很多) - 专用工具(只在特定场景需要)
缓存 TTL 是 5 分钟。理解这个时间窗口,能帮你省钱:
连续工作模式(推荐)
时间轴:
00:00 ──┬── 任务 A 开始 ──┬── 任务 B 开始 ──┬── 任务 C 开始
│ (首次计费) │ (缓存命中) │ (缓存命中)
│ │ │
└──── 5分钟内 ────┴──── 5分钟内 ────┴── 持续命中
缓存有效 缓存有效
成本:首次请求全额 + 后续请求 10%
断续工作模式(浪费)
时间轴:
00:00 ──┬── 任务 A 开始 ──┬── 休息 10 分钟 ──┬── 任务 B 开始
│ (首次计费) │ │ (缓存过期)
│ │ │ (重新全额计费)
└──── 5分钟 ──────┴──── 缓存过期 ─────┴── 缓存失效
成本:首次请求全额 + 再次请求全额
最佳实践:
场景 | 策略 | 效果 |
|---|---|---|
有多个相似任务 | 集中处理,保持缓存热度 | 高命中率 |
长时间休息前 | 用 /compact 压缩对话 | 下次恢复更快 |
休息后回来 | 先 /cost 看缓存状态 | 了解是否需要重新预热 |
/cost
输出中会显示缓存相关的信息。如果缓存命中率低,检查: - CLAUDE.md 是否频繁修改 - 是否在读取大量新文件 - 会话是否中断太久
任务类型 | 推荐模型 | 原因 |
|---|---|---|
简单查询、格式转换 | Sonnet | 成本低,速度快 |
代码补全、小修改 | Sonnet | 足够智能 |
复杂重构、架构设计 | Opus | 理解能力强 |
调试疑难问题 | Opus | 推理深度够 |
大规模代码分析 | Opus[1m] | 需要大上下文 |
说明:以 Claude 原生模型为例。如果使用国产大模型(如 DeepSeek、通义千问等),请查阅对应模型提供商官网了解定价和能力差异。
默认用 Sonnet:
claude
claude --model sonnet
复杂任务切 Opus:
/model opus
... 完成复杂任务 ...
/model sonnet # 切回 Sonnet
成本对比:
Sonnet: 3/M 输入 + 15/M 输出
Opus: 15/M 输入 + 75/M 输出
Opus 价格是 Sonnet 的 5 倍!
1M 上下文扩展,什么时候用?
场景 | 建议 |
|---|---|
分析整个代码库 | 用 Opus[1m],一次读完 |
长时间多轮重构 | 用 Opus[1m],保持上下文 |
简单的日常任务 | 不需要,200K 够用 |
读取少量文件 | 不需要,标准模式更省 |
权衡公式:
单次大任务:Opus[1m] 可能更省(避免多次启动、重复加载)
多个小任务:Sonnet + /clear 更省(每个小任务独立计费)
claude --model sonnet
claude --model opus
claude --model "opus[1m]"
/model sonnet
/model opus
/model "opus[1m]"
/model
差的模式:逐个启动会话
会话 1:修复 bug A(启动开销:加载 CLAUDE.md、Skills、MCP)
会话 2:修复 bug B(再次启动开销)
会话 3:修复 bug C(再次启动开销)
好的模式:批量处理
一个会话:
修复 bug A、B、C,每个完成后 /compact
启动开销只有一次,缓存持续命中。
大文件分析是 token 消耗大户。用子 Agent 隔离:
你:分析整个项目的架构
你:用子 Agent 分析项目架构,返回关键发现
原理:
主会话:
├── 对话历史(小)
├── 子 Agent 返回的摘要(几 K token)
└── 当前上下文(小)
子 Agent(独立上下文):
├── 读取 50 个文件(大)
├── 分析处理
└── 返回摘要给主会话
主会话的上下文不会被撑爆。
命令 | 作用 | 成本影响 |
|---|---|---|
/compact | 压缩对话历史 | 保留关键信息,继续利用缓存 |
/clear | 清空一切 | 缓存失效,重新开始 |
使用时机:
/context 显示 70%:/compact(压缩,保留缓存)
/context 显示 90%:/clear(清空,接受重新计费)
切换完全不同的任务:/clear(反正缓存也要失效)
继续相关任务:/compact(尽量保持缓存)
你:读取 package.json
Claude:好的,内容是...
你:再读取一下 package.json
Claude:好的,内容是...(又一次 token 消耗)
你:读取 package.json
Claude:好的
你:修改刚才读取的 package.json,把 react 升级到 19
技巧:Claude 会记住当前会话读取过的文件,不需要重复指令。
输出 token 价格是输入的 3-5 倍,让 Claude 少说话:
你:详细解释一下这个函数是做什么的
你:这个函数的作用是什么?一句话回答
你:有什么建议?
你:列出 3 个最可能的性能瓶颈
Claude Code 本身有几个省钱相关的功能:
功能 | 命令 | 作用 |
|---|---|---|
上下文查看 | /context | 了解当前上下文消耗 |
成本查看 | /cost | 查看当前会话成本 |
上下文压缩 | /compact | 压缩对话历史 |
会话清空 | /clear | 重新开始 |
模型切换 | /model | 按需选择模型 |
以下开源项目专门用于降低 Token 消耗:
项目 | 用途 | 效果 |
|---|---|---|
caveman | Claude Code Skill,让 Claude 用简洁方式回复 | 减少 65% token |
code-review-graph | 构建代码库知识图谱,让 Claude 只读取关键文件 | 减少 6.8x-49x token |
claude-token-efficient | 一个 CLAUDE.md 文件,让 Claude 回复更简洁 | 减少输出冗余 |
项目地址: - https://github.com/JuliusBrussee/caveman - https://github.com/tirth8205/code-review-graph - https://github.com/drona23/claude-token-efficient
caveman:通过改变 Claude 的回复风格来节省 token。安装后,Claude 会用更简洁的方式回答问题,避免冗长的解释。
code-review-graph:核心思路是"让 Claude 只读它需要的文件"。它构建一个代码库的知识图谱,记录文件间的依赖关系。当 Claude 需要理解代码时,只读取相关文件,而不是整个目录。
claude-token-efficient:最简单的方案——只需把它的 CLAUDE.md 内容加到你的项目里。Claude 就会自动用更简洁的方式回复,特别适合不需要详细解释的重构、调试场景。
每个 MCP 服务都有工具定义开销(1-5K token)。选择策略:
只启用必需的 MCP:
├── 文件系统访问 ✓ 必需
├── GitHub 集成 ✓ 常用
├── 数据库访问 ✓ 常用
├── 某个特定 API ❓ 按需启用
└── 实验性工具 ❓ 不用时禁用
配置示例(~/.claude/settings.json):
{
"mcpServers": {
"filesystem": {
"command": "mcp-filesystem",
"args": ["--root", "/workspace"]
},
"github": {
"command": "mcp-github"
}
}
}
禁用不需要的 MCP:
{
"mcpServers": {
"filesystem": { ... }
// 不列出不需要的 MCP
}
}
一个省钱的 CLAUDE.md 结构:
[项目简介,2-3 行]
## 技术栈
[列表,简洁]
## 代码规范
[核心规则,不超过 10 条]
## 常用命令
[只列出常用的,不超过 5 个]
## 注意事项
[重要的约束,简洁]
避免:
• 大量示例代码(放单独文件,按需读取)
• 详细的教程内容(放文档,不要放 CLAUDE.md)
• 频繁变动的临时信息(破坏缓存)
Anthropic Console 提供详细的用量数据:
• 按日期的 token 消耗趋势
• 按模型的消耗分布
• API 调用次数和成功率
• 缓存命中率
定期检查 Console,了解团队整体消耗。
在 Anthropic Console 设置:
• 月度预算上限
• 预警阈值(如 50%、80%)
• 超限通知方式
团队使用建议:
项目级 CLAUDE.md:
├── 标注项目名称
├── 使用统一的命名规范
└── 便于在账单中识别
会话命名:
claude --name "项目A-功能X开发"
方便后续追溯哪个项目消耗了多少。
统一规范减少返工:
## 代码风格
[团队统一的代码规范]
## Git 提交规范
[团队统一的提交信息格式]
## 审查清单
[PR 前必查项]
## 禁止事项
[绝对不能做的事]
每个项目在此基础上扩展项目特定的内容。
□ /cost 查看当日消耗
□ 是否有缓存命中率低的问题
□ 是否有重复读取同一文件
□ 是否在用正确的模型
□ CLAUDE.md 是否可以精简
□ 是否有不需要的 MCP 在运行
□ 是否有不需要的 Skills 自动加载
□ 本周账单是否异常
□ CLAUDE.md 保持精简(< 200 行)
□ 不常用的 Skills 设置延迟加载
□ 只启用必需的 MCP
□ 项目 CLAUDE.md 保持稳定(少修改)
□ 相似任务批量处理
□ 大任务用子 Agent 隔离
□ 长会话适时 /compact
□ 切换任务时 /clear
□ 按任务复杂度选择模型
第一层:监控
知道钱花在哪 → /cost、/context、Console
第二层:缓存
让固定内容被缓存 → CLAUDE.md 精简稳定、Skills 延迟加载
第三层:策略
按需选择 → 模型选择、工作流优化、子 Agent 隔离
1. 能缓存就缓存
CLAUDE.md 稳定、内容精简、不频繁修改
2. 能省就省
简单任务用 Sonnet、输出要精简、避免重复
3. 能隔离就隔离
大任务用子 Agent、批量处理减少启动开销
4. 能监控就监控
定期 /cost、检查缓存命中率、关注账单异常
立即执行:
1. 运行 /cost,建立成本意识
2. 检查 CLAUDE.md,删除冗余内容
3. 检查 Skills,设置延迟加载
4. 检查 MCP,禁用不需要的
持续习惯:
1. 按任务选模型
2. 批量处理相似任务
3. 长会话定期 /compact
4. 每周检查账单
• Claude Code 官方文档 — https://docs.anthropic.com/en/docs/claude-code
• Prompt Caching 文档 — https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching
• Claude 模型定价 — https://www.anthropic.com/pricing
• 上下文窗口管理 — 《Claude Code 上下文窗口:理解、监控、优化》