Skip to content

第 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 构成:

text
System prompt        ~1,500 tokens   (固定开销)
CLAUDE.md           0–5,000          (取决于文件大小)
对话历史             随轮次线性增长
工具结果             差异最大——一次大文件读取可能吃掉 10k+
模型输出             通常几百到几千

大头是工具结果。让 Claude 读一个 200KB 的日志文件,光这一步就可能消耗数万 token。这就是为什么"给地图而不是给手册"如此重要。

查看当前会话消耗:

text
> /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 output

17.3 模型选择策略

Claude Code 支持在会话内或配置中切换模型:

bash
# 会话内切换
/model claude-haiku-4-5     # 最便宜,适合简单编辑与问答
/model claude-sonnet-4      # 平衡之选,默认主力
/model claude-opus-4        # 最强推理,复杂架构任务

# 配置默认模型
export ANTHROPIC_MODEL="claude-sonnet-4"

价格差异可达一个数量级。实战中的混合策略:

bash
# 日常代码补全和简单问答 → haiku
claude --model claude-haiku-4-5 "解释这个函数的作用"

# 复杂重构或架构分析 → opus
claude --model claude-opus-4 "分析这个模块的架构问题并给出重构方案"

17.4 三大降本手段

手段一:压缩上下文

长会话中历史消息不断膨胀。/compact 命令把历史摘要化,token 占用立减 60% 以上:

text
> /compact
Context compacted. 48,230 → 12,104 tokens.

也可以在任务之间直接 /clear 清空重来——最彻底但会丢失所有上下文。

手段二:限制思考预算

扩展思考(extended thinking)质量高但也烧 token。通过环境变量封顶:

bash
export MAX_THINKING_TOKENS=4096   # 默认可能远高于此值

手段三:SDK 场景下限制轮次

用 SDK 编排自动化时,max_turns 是防止失控的保险丝:

typescript
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 成本监控实践

对团队而言,逐人追踪用量很重要:

bash
#!/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 攻坚;
  • /compactMAX_THINKING_TOKENS 是两个最实用的即时降本开关;
  • SDK 自动化必须配 maxTurns 上限防止失控。

🧪 随堂测验

点击你认为正确的选项。答错时会展示正确答案与原因解析。

1. Claude Code 单次会话中 token 消耗的最大来源通常是?

2. /compact 命令的作用是什么?

3. 以下哪种场景最应该选择 Opus 而非 Haiku?

4. 关于 prompt caching 对成本的影响,说法正确的是?

🛠️ 动手实践

  1. 在你的项目中运行 /cost 记录当前消耗,然后执行 /compact 再对比,记录压缩率。
  2. 分别用 haiku 和 opus 完成同一个"给函数加注释"的任务,对比输出质量和 token 消耗。
  3. 写一个脚本扫描 ~/.claude/projects/ 下所有 JSONL 文件,统计本周总花费并在超过阈值时发出警告。

下一章:高级技巧与最佳实践