费用优化指南

掌握 Claude Code 的费用控制技巧,用更少的 token 完成更多工作

费用优化指南

使用 Claude Code 写代码很爽,但如果不注意用法,账单也可能让你「惊喜」。这篇指南帮你理解费用是怎么产生的,以及如何在不牺牲效率的前提下合理控制成本。

理解 Token 计费

在优化费用之前,你需要先理解费用的底层逻辑——Token。

什么是 Token

Token 是 AI 模型处理文本的最小单位。你可以把它理解为模型的「字」:

  • 英文:1 个 token 约等于 4 个字符,或 0.75 个单词
  • 中文:1 个汉字约等于 1-2 个 token(平均约 1.5 个 token)
  • 代码:变量名、关键字、符号各占不同数量的 token

简单估算参考:

内容 大约字数/行数 大约 Token 数
一段简短的中文需求描述 100 字 ~150 tokens
一个 200 行的 TypeScript 文件 ~5000 字符 ~1500 tokens
一次包含上下文的典型对话输入 5,000-20,000 tokens
Claude Code 的系统提示词 ~8,000 tokens

输入 vs 输出 Token

每次与 Claude 交互,费用由两部分组成:

总费用 = 输入 tokens × 输入单价 + 输出 tokens × 输出单价

关键点:输出 token 的价格通常是输入 token 的 5 倍。以 Sonnet 4.6 为例:

类型 价格(美元/百万 tokens) 1000 tokens 费用
输入 $3.00 $0.003
输出 $15.00 $0.015
缓存读取 $0.30 $0.0003

这意味着:让 Claude 生成长篇大论比你提供大量上下文更贵。

一次典型对话消耗多少 Token

以 Sonnet 4.6 为例,几种常见场景的费用估算:

场景 输入 tokens 输出 tokens 估计费用
简单问答(解释一段代码) 3,000 500 $0.017
修改一个函数 8,000 1,500 $0.047
创建一个新组件(含文件读取) 15,000 3,000 $0.090
复杂功能开发(多轮对话) 50,000 15,000 $0.375
大型重构(10+ 文件) 200,000 50,000 $1.350

以上数字仅作参考,实际费用取决于你的代码量、对话轮次和上下文大小。

模型选择策略

选对模型是最直接的省钱方式。不同模型之间的价格差异非常大。

三种模型的定位

模型 输入价格 输出价格 定位
Haiku 4.5 $1.00 $5.00 轻量快速,日常简单任务
Sonnet 4.6 $3.00 $15.00 最佳平衡,主力模型
Opus 4.6 $5.00 $25.00 最强大脑,复杂任务

费用对比:完成同一个中等复杂任务(输入 10K、输出 3K tokens):

  • Haiku:$0.025
  • Sonnet:$0.075
  • Opus:$0.125

Sonnet 是 Haiku 的 3 倍,Opus 是 Haiku 的 5 倍。

模型选择原则

日常首选 Sonnet(80% 的任务用它就够了)

仅在以下场景切换 Opus:

  - 复杂架构设计和技术决策
  - 大规模代码重构
  - 涉及多个系统的跨模块修改
  - 需要深度推理的疑难 bug

仅在以下场景切换 Haiku:

  - 简单的格式转换
  - 生成重复性代码(如 CRUD 接口)
  - 快速问答(一句话能回答的问题)
  - 代码注释和文档生成

/model 命令随时切换:

/model sonnet    # 切换到 Sonnet
/model opus      # 切换到 Opus
/model haiku     # 切换到 Haiku

上下文管理省钱技巧

上下文管理是费用优化的核心。每一轮对话,Claude 都会重新发送之前的所有对话历史,这意味着对话越长,每一轮的输入 token 就越多。

/compact 压缩历史

当对话进行了 10 轮以上,或者你感觉响应变慢了,使用 /compact 压缩:

/compact

/compact 会让 Claude 将之前的对话总结成一段精简的摘要,替代完整的历史记录。这样下一轮对话的输入 token 会大幅减少。

使用时机:

  • 对话超过 10 轮
  • 完成了一个子任务,准备开始下一个
  • 感觉 Claude 的回复质量在下降(上下文过载的信号)

/clear 彻底清空

换一个完全不同的话题时,果断用 /clear

/clear

使用时机:

  • 从功能 A 的开发切换到功能 B
  • 调试完毕,开始写新代码
  • 对话已经偏离了方向,想重新开始

不用 /clear 的代价:假设之前的对话历史有 50K tokens,换个话题后每一轮对话你都在白白为这 50K tokens 买单。以 Sonnet 计算,每轮额外花费 $0.15。对话 10 轮就浪费了 $1.5。

精准 @ 引用

让 Claude 自己搜索文件 vs 你直接引用文件,cost 差异很大:

# 贵!Claude 可能会搜索数十个文件来找到相关代码
"帮我修改用户注册逻辑中的邮箱验证部分"

# 便宜!直接告诉 Claude 在哪里
"修改 @src/services/auth-service.ts 中 validateEmail 方法的正则表达式"

当你知道要改哪个文件时,永远用 @ 直接引用。让 Claude 自己搜索不仅更贵,结果也不一定准确。

.claudeignore 排除大文件

确保以下类型的文件在 .claudeignore 中:

# 这些文件如果被 Claude 读取,会消耗大量 token
node_modules/          # 动辄上万个文件
dist/                  # 构建产物
*.min.js               # 压缩后的 JS
*.sql                  # 数据库 dump
*.csv                  # 数据文件
package-lock.json      # 锁文件(内容巨大)
pnpm-lock.yaml         # 锁文件
yarn.lock              # 锁文件

真实案例:一位用户发现费用异常高,排查后发现 Claude 在搜索代码时读取了一个 50MB 的 SQL dump 文件,一次就消耗了约 15M tokens(约 $45 输入费用)。

缓存机制利用

Prompt Caching 是 Claude API 的一个非常重要的省钱特性。

什么是 Prompt Caching

当你连续多轮对话时,每一轮都会重新发送之前的所有内容。如果没有缓存,每次都按完整输入价格计费。有了缓存后:

  • 首次发送:按正常输入价格(缓存写入价格略高)
  • 后续发送:相同内容命中缓存,按缓存读取价格(只有 1/10)

以 Sonnet 4.6 为例:

类型 价格/百万 tokens 相比正常输入
正常输入 $3.00 100%
缓存写入 $3.75 125%
缓存读取 $0.30 10%

也就是说,缓存命中时只需 1/10 的价格

如何利用好缓存

缓存是自动生效的,但你可以通过使用习惯来提高缓存命中率:

保持对话连贯

# 好习惯:在同一个对话中持续开发同一个功能
> "创建 UserService 基础结构"
> "添加 getUserById 方法"        # 前面的内容命中缓存
> "添加 updateUser 方法"         # 前面的内容命中缓存
> "添加单元测试"                 # 前面的内容命中缓存

# 坏习惯:每说一句话就 /clear
> "创建 UserService 基础结构"
> /clear
> "给 UserService 添加 getUserById 方法"    # 无法利用缓存
> /clear
> "给 UserService 添加 updateUser 方法"     # 无法利用缓存

不要频繁修改 CLAUDE.md

CLAUDE.md 的内容在每轮对话中都会发送。如果内容稳定,它会长期命中缓存。频繁修改会导致缓存失效。

合理的 /compact 时机

/compact 会替换历史记录,导致缓存失效。所以不要太频繁地使用它——当对话真的太长时才用。

缓存效果有多大

假设一次 10 轮对话,每轮输入约 20K tokens(包含历史):

无缓存 有缓存(90% 命中率)
总输入 tokens 200K 200K
按正常价格计费 200K 20K
按缓存价格计费 0 180K
总输入费用(Sonnet) $0.60 $0.114
节省 $0.486(81%)

缓存可以帮你节省约 80% 的输入费用。

监控与预算

养成监控费用的习惯,避免不知不觉花超。

/cost 查看当前会话

随时在 Claude Code 中输入:

/cost

会显示当前会话已消耗的 token 数量和估算费用。建议每完成一个任务后看一眼。

QCode.cc Dashboard 查看历史

登录 QCode.cc 控制台,在「使用统计」页面可以看到:

  • 模型调用明细:每次调用的模型、token 数量、费用
  • 按天/按月汇总:费用趋势图
  • 套餐消耗进度:当前套餐额度使用百分比

建议养成每天看一眼 Dashboard 的习惯,及时发现异常消耗。

费用控制建议

使用量级 建议模型策略 月预算参考
轻度使用(每天 1-2 小时) 以 Sonnet 为主 $30-80
中度使用(每天 3-5 小时) Sonnet + 偶尔 Opus $80-200
重度使用(全天开发) Sonnet 主力 + Opus 架构决策 $200-500

常见费用陷阱

以下是最容易浪费 token 的几种情况,对照检查一下你有没有中招:

陷阱 1:大文件直接粘贴

# 错误做法:把文件内容粘贴到对话中
> "下面是我的代码,帮我检查一下:
[粘贴了 500 行代码]"

# 正确做法:用 @ 引用
> "检查 @src/services/order-service.ts 中的 createOrder 方法"

区别:粘贴 500 行代码约 1500 tokens 输入,而且每一轮对话都会重复发送这些内容。用 @ 引用同样的文件,Claude 只在需要时读取,而且读取的内容会被缓存。

陷阱 2:不断重试相同的失败命令

# 错误做法:反复让 Claude 执行同一个失败的命令
> "运行 npm run build"
# 失败了
> "再试一次"
# 还是失败
> "再来一次"

# 正确做法:分析失败原因,换个方式
> "运行 npm run build"
# 失败了
> "看看错误日志,分析失败原因,修复问题后再构建"

每次重试都会发送完整的对话历史(包括之前所有失败的输出),token 消耗会快速累积。

陷阱 3:忘记 /clear 导致上下文膨胀

这是最隐蔽的费用陷阱:

# 上午:修了一个 bug(对话积累了 30K tokens 的历史)
# 下午:开始写新功能,但没有 /clear
# 每一轮新对话都白白携带了上午的 30K tokens 历史

# 修复:养成换任务时 /clear 的习惯
/clear
> "现在开始开发新功能..."

陷阱 4:用 Opus 做简单任务

# 浪费:用 Opus 生成一个简单的 interface
/model opus
> "帮我定义一个 User 接口,包含 id、name、email 字段"

# 节省:简单任务用 Haiku 就够了
/model haiku
> "帮我定义一个 User 接口,包含 id、name、email 字段"

这个任务两个模型输出几乎一样,但 Opus 的费用是 Haiku 的 5 倍。

陷阱 5:让 Claude 搜索整个项目

# 贵:Claude 可能读取几十个文件
> "找到项目中处理支付的代码"

# 便宜:告诉它大概位置
> "在 @src/services/ 目录下找到处理支付的服务"

# 最便宜:直接指定文件
> "查看 @src/services/payment-service.ts"

费用优化检查清单

每次使用 Claude Code 时,对照这个清单:

  • [ ] 是否选择了合适的模型(大部分任务用 Sonnet)
  • [ ] 是否使用 @ 引用而非粘贴文件内容
  • [ ] 换话题时是否执行了 /clear
  • [ ] 对话超过 10 轮是否考虑 /compact
  • [ ] 是否配置了 .claudeignore 排除大文件
  • [ ] 需求描述是否足够清晰(避免因理解偏差导致返工)
  • [ ] 是否检查了 /cost 了解当前消耗

养成这些习惯后,你会发现费用可以降低 30-50%,同时开发效率丝毫不受影响。

🚀
开始使用 QCode — AI 编程助手
Claude Code 官方中继,稳定快速,开箱即用
查看套餐定价 → 注册账号