Claude Code按Token计费,但绝大多数开发者从未系统优化过Token消耗。本文基于Anthropic官方成本管理文档和社区800+小时实测数据,提供一套七步Token优化实战方案——从CLAUDE.md瘦身、Hook自动守卫、模型选择策略到MCP服务器精简,每一步都附带具体的配置代码和量化效果。读完本文,你可以将单会话Token消耗降低50%以上,Max Plan日额度使用时间延长2-3倍。
适用人群:已使用Claude Code的Pro/Max/Team/API用户,尤其是感受到配额消耗过快、成本超预期的开发者。
在动手优化之前,必须理解Claude Code的Token计费模型。这不是"少写几句提示词"就能解决的问题。
graph TD
A[每轮API调用] --> B[CLAUDE.md<br/>固定基线]
A --> C[工具输出累积<br/>文件读取/MCP响应/Bash]
A --> D[对话历史<br/>所有历史消息重播]
B --> E[第1轮: 500 tokens]
B --> F[第30轮: 15,000 tokens<br/>同一个CLAUDE.md被读取30次]
C --> G[读取一个1000行文件<br/>= ~4,000 tokens]
C --> H[之后每轮都要重新处理]
D --> I[第5轮消息: 只处理5条历史]
D --> J[第50轮消息: 重新读取49条历史]
style E fill:#4CAF50
style F fill:#f44336
style G fill:#FF9800
style I fill:#4CAF50
style J fill:#f44336
关键认知:Claude在每一轮对话中都要重新读取完整上下文。第50条消息的成本远高于第5条——不是因为你问了更难的问题,而是因为Claude要重新处理前49条消息。
根据社区800小时实测数据:
| 消耗来源 | 占比 | 优化潜力 |
|---|---|---|
| CLAUDE.md / 指令文件 | 15–30% | 200行→35行 = 最高降50% |
| 文件读取 | 25–30% | Hook守卫可降10-25% |
| 代码生成(输出) | 20–25% | 模型选择 + effort level |
| MCP工具Schema | 12–20% | 禁用不用的服务器 |
| 对话历史/压缩 | 10–25% | /clear和/compact管理 |
核心发现:CLAUDE.md在每一轮对话中都会被完整加载。一个100行的CLAUDE.md在30轮会话中仅指令部分就消耗约75,000 tokens。
优化之前先测量。Claude Code内置了成本追踪工具。
在Claude Code会话中输入:
/usage
你会看到类似输出:
Total cost: $0.55
Total duration (API): 6m 19.7s
Total duration (wall): 6h 33m 10.2s
Total code changes: 0 lines added, 0 lines removed
在Pro/Max/Team/Enterprise计划下,/usage还会显示:
- 各Skill、Subagent、Plugin、MCP Server的Token占比
- 过去24小时/7天的使用趋势(按d或w切换)
在.claude/settings.json中启用Token用量状态栏:
{
"statusLine": {
"enabled": true,
"showTokenCount": true
}
}
这样你在每次交互时都能在终端底部看到实时Token消耗。
/usage-credits
这个命令可以设置月度使用额度上限。当你接近上限时,Claude Code会提示你调整,而不会直接中断工作。
CLAUDE.md是Token优化的第一优先级。它每轮都会被加载,是最容易量化收益的优化点。
模式一:允许清单代替禁止清单
# 差:列出10条禁止规则(高Token消耗)
- 不要修改 /config/ 下的文件
- 不要修改 /migrations/ 下的文件
- 不要修改 /.github/ 下的文件
- 不要删除任何文件
- 不要使用 rm -rf
- 不要 force-push
- 不要直接提交到 main
- 提交前必须运行测试
- 使用 TypeScript strict mode
...
# 好:只声明允许范围(低Token消耗)
- 仅允许修改 /src/ 和 /tests/ 下的文件
- 提交前运行测试
- TypeScript strict mode
模式二:一条规则一个示例
三个示例不会比一个精确示例提供更多帮助。去掉冗余示例。
# 差:多个示例
- 函数命名使用camelCase,例如:getUserById, calculateTotal, validateInput
# 好:一个精确示例
- 函数命名使用camelCase,例如:getUserById
模式三:表格代替列表
对于结构化数据(架构、规范),表格比列表更省Token:
# 差:列表格式(~120 tokens)
## 架构
- API层使用Express + Zod,位于 /src/api/
- 数据库层使用Prisma + PostgreSQL,位于 /prisma/
- 认证使用JWT + bcrypt,位于 /src/auth/
- 前端使用React + Next.js,位于 /web/
# 好:表格格式(~60 tokens)
## 架构
| 层 | 技术栈 | 路径 |
|----|--------|------|
| API | Express + Zod | /src/api/ |
| DB | Prisma + PG | /prisma/ |
| Auth | JWT + bcrypt | /src/auth/ |
| Web | React + Next | /web/ |
模式四:规则委托给Hook
需要严格执行的规则不应该写在CLAUDE.md里(每轮都消耗Token),而应该放在Hook中(本地执行,零Token成本):
// .claude/settings.json
{
"hooks": {
"preToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "bash -c 'echo \"$TOOL_INPUT\" | grep -q \"config/\" && echo BLOCK: 不允许修改config目录 || echo ALLOW'"
}
]
}
]
}
}
模式五:引用代替内联
将详细文档放在独立文件中,CLAUDE.md只保留路径引用:
# 差:内联200行的API规范
## API规范
GET /users - 返回所有用户...
POST /users - 创建新用户...
...(200行)
# 好:引用外部文件
## 参考文档
- API路由: 参见 src/api/README.md
- 数据库Schema: 参见 docs/schema.md
- 代码风格: 参见 docs/style-guide.md
Claude只在需要时才去读取这些文件,而不是每轮都加载。
# ===== 优化前:210行 CLAUDE.md =====
## 项目规则
- 不要修改 /config/ 下的文件
- 不要修改 /migrations/ 下的文件
- 不要修改 /.github/ 下的文件
- 不要修改 /docker/ 下的文件
- 不要删除任何文件而不询问
- 不要使用 rm -rf
- 不要 force-push
- 不要直接提交到 main 分支
- 提交前必须运行测试
- 使用 TypeScript strict mode
- 所有新函数必须添加单元测试
- 所有 API 端点必须有输入验证
- 使用 Zod 进行 schema 验证
- 错误处理使用自定义 AppError 类
- 日志使用 winston,格式参考 /src/utils/logger.ts
- API响应格式统一为 { success, data, error }
...(再180行)
# ===== 优化后:35行 CLAUDE.md =====
# my-app
## 规则
- 仅允许修改 /src/ 和 /tests/(Hook强制)
- 提交前运行测试(Hook强制)
- TypeScript strict mode
## 架构
| 层 | 技术栈 | 路径 |
|----|--------|------|
| API | Express + Zod | /src/api/ |
| DB | Prisma + PG | /prisma/ |
| Auth | JWT + bcrypt | /src/auth/ |
## 约定
- 文件: kebab-case
- 函数: camelCase
- 每个文件一个export
## 参考文档
- API规范: src/api/README.md
- Schema设计: docs/schema.md
- 代码风格: docs/style-guide.md
量化效果: - 优化前:~5,000 tokens/轮 × 30轮 = 150,000 tokens - 优化后:~800 tokens/轮 × 30轮 = 24,000 tokens - 节省:126,000 tokens(84%降幅)
.claudeignore的工作方式与.gitignore完全相同。被忽略的文件不会出现在Claude的视野中,不会被意外读取。
在项目根目录创建.claudeignore:
# 依赖和构建产物
node_modules/
.next/
dist/
build/
target/
vendor/
# 日志和锁文件
*.log
*.lock
package-lock.json
yarn.lock
# 测试覆盖率
coverage/
.nyc_output/
# 环境和密钥
.env*
!.env.example
# Python缓存
__pycache__/
*.pyc
*.pyo
# 大型数据文件
*.csv
*.sql
*.dump
# IDE配置
.vscode/
.idea/
不要过度忽略:如果你把Claude实际需要读取的文件也忽略了,它就无法获得必要上下文,反而会做出更差的决策,导致需要更多轮对话来修正——Token消耗不降反升。
原则:Claude不需要看到的东西才忽略。需要的东西必须保留。
Hook是本地Shell脚本,在Claude Code的工具调用前后执行。它们不消耗任何Token,但可以防止大量Token浪费。
| Hook名称 | 功能 | 节省幅度 |
|---|---|---|
| read-budget-guard | 限制单会话文件读取次数,防止重复读取 | 10–25% |
| token-budget-guard | 设置会话Token预算,70%警告,90%阻断 | 防止失控会话 |
| pre-compact-checkpoint | 压缩前自动创建Git检查点 | 避免幻觉导致的重做 |
| context-monitor | 75%上下文用量警告,90%告警 | 5–15% |
| subagent-spawn-limiter | 限制并发子Agent数量 | 20–40% |
| large-read-guard | 阻止读取超大文件,强制使用offset/limit | 10–30% |
在.claude/settings.json中添加:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Read",
"hooks": [
{
"type": "command",
"command": "bash /home/user/.claude/hooks/read-counter.sh"
}
]
}
]
}
}
创建~/.claude/hooks/read-counter.sh:
#!/bin/bash
# 简单的文件读取计数器
COUNTER_FILE="/tmp/claude-read-count"
COUNT=$(cat "$COUNTER_FILE" 2>/dev/null || echo "0")
COUNT=$((COUNT + 1))
echo "$COUNT" > "$COUNTER_FILE"
MAX_READS=50
if [ "$COUNT" -gt "$MAX_READS" ]; then
echo "⚠️ 本会话已读取 $COUNT 个文件(上限 $MAX_READS)"
echo "建议: 使用 /compact 或 /clear 清理上下文"
fi
chmod +x ~/.claude/hooks/read-counter.sh
防止Claude一次性读取超大文件(应该使用offset/limit分块读取):
{
"hooks": {
"PreToolUse": [
{
"matcher": "Read",
"hooks": [
{
"type": "command",
"command": "bash -c 'FILE=$(echo $TOOL_INPUT | jq -r .file_path 2>/dev/null); [ -f \"$FILE\" ] && LINES=$(wc -l < \"$FILE\") && [ $LINES -gt 500 ] && echo BLOCK: 文件$FILE有${LINES}行,请使用offset/limit分块读取 || echo ALLOW'"
}
]
}
]
}
}
不同模型的价格差异巨大。合理选择模型可以降低60-80%成本。
| 任务类型 | 推荐模型 | 理由 |
|---|---|---|
| 日常编码、Bug修复 | Sonnet 4.6 | Opus成本的1/5,80%任务效果相同 |
| 复杂架构决策 | Opus 4.6/4.7 | 更强推理能力,但5倍成本 |
| 子Agent搜索/读取 | Haiku 4.5 | 简单检索不需要Opus级推理 |
| 代码审查 | Sonnet 4.6 | 模式匹配是Sonnet的强项 |
| 重构大型代码库 | Opus 4.6/4.7 | 需要全局理解能力 |
/model sonnet
无需重启会话即可切换。对于简单任务切到Sonnet,复杂任务再切回Opus。
当使用Task工具启动子Agent时,可以指定模型:
请使用Haiku模型搜索所有包含"deprecated"的函数
在Agent SDK中:
# Subagent使用Haiku处理简单搜索任务
task_result = agent.run(
"搜索所有TODO注释并生成列表",
model="claude-haiku-4-5-20251001"
)
Extended Thinking(扩展思考)会消耗大量输出Token。对于不需要深度推理的任务,可以调整:
{
"thinking": {
"enabled": false
}
}
或者通过/config在会话中调整思考预算。
flowchart TD
A[开始新任务] --> B{与之前任务相关?}
B -->|无关| C[/clear<br/>清空全部上下文]
B -->|相关但太长| D[/compact<br/>压缩历史保留要点]
B -->|相关且长度OK| E[继续对话]
C --> F[建议先用/rename命名当前会话]
F --> G[/clear清除]
D --> H[/compact 保留代码变更和测试结果]
G --> I[开始新工作]
H --> I
E --> J{会话已超过2-3小时?}
J -->|是| K[开启新会话<br/>压缩质量已下降]
J -->|否| L[继续工作]
关键规则:
- 切换任务时必用/clear:从调试数据库切到做UI,旧上下文完全是浪费
- 长时间会话用/compact:带自定义指令如 /compact 只保留代码变更和测试结果
- 每2-3小时开新会话:超过2-3小时后,压缩质量会显著下降
- 先/rename再/clear:方便日后用/resume找回旧会话
不要让Claude读取整个文件——指定行范围:
# 差:读取整个1000行文件
请读取 src/utils/processor.ts
# 好:只读取相关部分
请读取 src/utils/processor.ts 的第50-120行
在代码中直接指定offset和limit:
请读取 src/api/routes.ts,offset=100, limit=50
每个连接的MCP服务器都会在每轮请求中添加其工具Schema。检查当前连接:
/mcp
禁用不常用的MCP服务器。一周内没使用过的服务器就该断开连接,需要时再重连——这是一个10秒操作,但有复利式的节省。
这是最简单也最常被违反的规则:
新话题 = 新会话。没有例外。
携带旧话题的上下文进入新话题是隐形浪费。旧上下文对新任务毫无帮助,只增加每条消息的成本。
根据Anthropic官方推荐,不同规模团队的TPM(每分钟Token数)和RPM(每分钟请求数)配置:
| 团队规模 | 每用户TPM | 每用户RPM |
|---|---|---|
| 1-5人 | 200k-300k | 5-7 |
| 5-20人 | 100k-150k | 2.5-3.5 |
| 20-50人 | 50k-75k | 1.25-1.75 |
| 50-100人 | 25k-35k | 0.62-0.87 |
| 100-500人 | 15k-20k | 0.37-0.47 |
| 500+人 | 10k-15k | 0.25-0.35 |
这些是组织层面的限制,不是个人限制。空闲用户的配额可以被活跃用户临时借用。
将优化后的CLAUDE.md提交到代码仓库,让所有团队成员自动受益:
# 项目级CLAUDE.md(随代码仓库分发)
./CLAUDE.md
# 用户级全局配置(个人偏好)
~/.claude/CLAUDE.md
首次使用Claude Console账号认证Claude Code时,系统会自动创建一个名为"Claude Code"的工作区。管理员可以在Console中查看成本和使用报告。
对于使用Bedrock、Vertex、Foundry的团队,推荐使用LiteLLM等开源工具按Key追踪费用。
Agent Team(多Agent团队)会产生多个并行上下文窗口,Token消耗随活跃Agent数量线性增长。控制策略:
一个中型TypeScript/Express后端项目,约15,000行代码,使用Prisma ORM、PostgreSQL、Redis。优化前开发者每天使用Claude Code约4小时,日均成本约$15。
CLAUDE.md: 215行
MCP服务器: 8个(实际常用3个)
平均会话时长: 3.5小时
日均会话数: 2-3个
日均Token消耗: ~800,000 tokens
日均成本: ~$15
Step 1 - /usage记录基线:日均$15,峰值$25
Step 2 - CLAUDE.md从215行压缩到32行(使用五大瘦身模式)
Step 3 - 创建.claudeignore忽略node_modules、dist、coverage等
Step 4 - 配置read-budget-guard和large-read-guard两个Hook
Step 5 - 日常编码切换到Sonnet,仅在架构讨论时用Opus
Step 6 - 养成一话题一会话习惯,2小时自动开新会话
Step 7 - MCP服务器从8个减到3个
CLAUDE.md: 32行(↓85%)
MCP服务器: 3个(↓62%)
平均会话时长: 1.5小时(↓57%)
日均会话数: 4-5个(更频繁但更高效)
日均Token消耗: ~320,000 tokens(↓60%)
日均成本: ~$6(↓60%)
| 指标 | 优化前 | 优化后 | 变化 |
|---|---|---|---|
| 日均成本 | $15 | $6 | -60% |
| 周成本 | $75 | $30 | -60% |
| 月成本(估) | $300 | $120 | -60% |
| Max Plan额度消耗 | 1天用完 | 可用2.5天 | +150% |
flowchart TB
subgraph 一次性设置
A[Step 1: /usage记录基线] --> B[Step 2: CLAUDE.md瘦身]
B --> C[Step 3: 配置.claudeignore]
C --> D[Step 4: 安装Hook守卫]
D --> E[Step 5: 精简MCP服务器]
end
subgraph 日常习惯
F[新话题→新会话<br/>/clear或新开]
G[2-3小时→新会话]
H[简单任务→Sonnet<br/>复杂任务→Opus]
I[精准文件读取<br/>指定行范围]
J[定期/usage检查]
end
subgraph 团队治理
K[共享优化后CLAUDE.md]
L[工作区配额管理]
M[Agent Team成本控制]
end
D --> F
E --> F
F --> G --> H --> I --> J
B --> K --> L --> M
A: 通常是三个原因叠加:臃肿的CLAUDE.md(200+行)、多个MCP服务器同时运行、子Agent循环生成。优先执行Step 2(CLAUDE.md瘦身)——这是单项最高杠杆的修复。
A: 社区反馈一致。通过本文的优化技术,可以将可用天数延长到20-25天。关键在于降低每会话的Token消耗。
A: 不会。Hook本地执行耗时10-50ms,而它节省的Token量级是数千到数万每会话。收益远大于开销。
A: 这是预期的。Opus 4.7的新Tokenizer对相同文本使用更多Token,加上思考Token增加和输出长度增长,成本可能增加2-4倍。缓解措施:
- 降低token-budget-guard阈值到之前的70%
- 日常任务用/model sonnet
- 启用pre-compact-checkpoint防止幻觉重做
- 频繁用/usage监控
A: 这是正常的。压缩会总结历史但不可避免丢失细节。缓解方法:
- 压缩前用/rename保存会话
- 使用自定义压缩指令:/compact 保留所有代码变更和测试结果
- 关键决策记录到项目文档中而非仅存于对话
| 优化手段 | 执行频率 | 预期节省 | 实施难度 |
|---|---|---|---|
| CLAUDE.md瘦身 | 一次性 | 30-50% | 低 |
| .claudeignore | 一次性 | 5-15% | 低 |
| Hook守卫 | 一次性 | 10-25% | 中 |
| 模型选择 | 每次 | 60-80%(相对Opus) | 低 |
| 会话管理 | 每次使用 | 15-30% | 低(习惯改变) |
| MCP精简 | 定期 | 5-15% | 低 |
| 团队治理 | 一次性 | 取决于规模 | 中 |
| 维度 | 评估 |
|---|---|
| 适合训练营类型 | Claude Code中级训练营、成本优化专题工作坊、企业AI工具推广培训 |
| 前置知识要求 | 已使用Claude Code至少1周,了解基本操作 |
| 建议教学时长 | 2小时(1小时讲解 + 1小时动手实操) |
| 实操环节 | 学员对自己的项目执行七步优化,现场测量前后对比 |
| 最大班级规模 | 20人(需要每位学员有独立项目和Claude Code环境) |
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
