第 17 章 · 成本控制与用量管理
本章目标:理解 Claude Code 的计费模型与 token 消耗规律,学会用模型选择、上下文管理与硬限制三招控制成本。
17.1 计费模型:订阅 vs API
Claude Code 有两种付费方式,成本结构完全不同:
| 维度 | Pro/Max 订阅 | API 按量计费 |
|---|---|---|
| 费用形态 | 月固定费($20 / $100 / $200) | 按 input/output token 计价 |
| 用量限制 | 有速率上限(按计划档位) | 无硬限,用多少付多少 |
| 适合人群 | 个人日常开发 | 团队/自动化/重负载 |
| 突发高峰 | 可能触发等待 | 只要余额够就一直跑 |
怎么选
个人开发者先用 Pro 试水;当单月 API 账单超过订阅费时切换到订阅更划算。团队部署通常选 API + 企业托管设置统一管理密钥。
17.2 Token 消耗从哪里来
一次典型会话的 token 构成:
System prompt ~1,500 tokens (固定开销)
CLAUDE.md 0–5,000 (取决于文件大小)
对话历史 随轮次线性增长
工具结果 差异最大——一次大文件读取可能吃掉 10k+
模型输出 通常几百到几千大头是工具结果。让 Claude 读一个 200KB 的日志文件,光这一步就可能消耗数万 token。这就是为什么"给地图而不是给手册"如此重要。
查看当前会话消耗:
> /cost
Total cost: $0.42
Total duration (API): 3m 12.4s
Total duration (wall): 8m 45.0s
Total code changes: 142 lines added, 38 lines removed
Usage by model:
claude-sonnet-4: 18.4k input, 4.2k output17.3 模型选择策略
Claude Code 支持在会话内或配置中切换模型:
# 会话内切换
/model claude-haiku-4-5 # 最便宜,适合简单编辑与问答
/model claude-sonnet-4 # 平衡之选,默认主力
/model claude-opus-4 # 最强推理,复杂架构任务
# 配置默认模型
export ANTHROPIC_MODEL="claude-sonnet-4"价格差异可达一个数量级。实战中的混合策略:
# 日常代码补全和简单问答 → haiku
claude --model claude-haiku-4-5 "解释这个函数的作用"
# 复杂重构或架构分析 → opus
claude --model claude-opus-4 "分析这个模块的架构问题并给出重构方案"17.4 三大降本手段
手段一:压缩上下文
长会话中历史消息不断膨胀。/compact 命令把历史摘要化,token 占用立减 60% 以上:
> /compact
Context compacted. 48,230 → 12,104 tokens.也可以在任务之间直接 /clear 清空重来——最彻底但会丢失所有上下文。
手段二:限制思考预算
扩展思考(extended thinking)质量高但也烧 token。通过环境变量封顶:
export MAX_THINKING_TOKENS=4096 # 默认可能远高于此值手段三:SDK 场景下限制轮次
用 SDK 编排自动化时,max_turns 是防止失控的保险丝:
import { query } from "@anthropic-ai/claude-code";
const result = await query({
prompt: "修复 tests/auth.test.ts 中的失败用例",
options: {
maxTurns: 10, // 最多 10 轮工具调用
model: "claude-sonnet-4",
allowedTools: ["Read", "Edit", "Bash(npm test*)"],
},
});没有 max_turns 时 agent 可能陷入循环重试,一夜烧掉几十美元。
17.5 成本监控实践
对团队而言,逐人追踪用量很重要:
#!/usr/bin/env bash
# cost-report.sh — 汇总各项目的 Claude Code 成本
echo "项目 | 会话数 | 总花费"
echo "---|---|---"
for dir in ~/.claude/projects/*/; do
project=$(basename "$dir")
total=$(grep -o '"costUSD":[0-9.]*' "$dir"*.jsonl 2>/dev/null \
| cut -d: -f2 | awk '{s+=$1} END {printf "%.2f", s}')
sessions=$(ls "$dir"*.jsonl 2>/dev/null | wc -l | tr -d ' ')
echo "$project | $sessions | \$$total"
done提示缓存的作用
Anthropic 对重复前缀有 prompt caching 折扣(约 90% off)。保持 CLAUDE.md 和系统提示稳定不变,能显著降低多轮会话的实际成本——频繁修改这些文件反而会让缓存失效。
本章小结
- 订阅制适合个人(固定月费),API 制适合团队与自动化;
- Token 大头来自工具返回的大文件内容,"读目录页而非全书"是最有效的省法;
- 模型分层使用:haiku 做杂活、sonnet 做主力、opus 攻坚;
/compact与MAX_THINKING_TOKENS是两个最实用的即时降本开关;- SDK 自动化必须配
maxTurns上限防止失控。
🧪 随堂测验
点击你认为正确的选项。答错时会展示正确答案与原因解析。
1. Claude Code 单次会话中 token 消耗的最大来源通常是?
2. /compact 命令的作用是什么?
3. 以下哪种场景最应该选择 Opus 而非 Haiku?
4. 关于 prompt caching 对成本的影响,说法正确的是?
🛠️ 动手实践
- 在你的项目中运行
/cost记录当前消耗,然后执行/compact再对比,记录压缩率。 - 分别用 haiku 和 opus 完成同一个"给函数加注释"的任务,对比输出质量和 token 消耗。
- 写一个脚本扫描
~/.claude/projects/下所有 JSONL 文件,统计本周总花费并在超过阈值时发出警告。