使用技巧

如何不浪费Token

# Token 如何被浪费:cache 过期、context 膨胀

这是所有用户必读的一篇。看完你能省下 30-70% 的 token 消耗。

# 问题现象

偶尔你可能经历过这个场景:

“我就发了一句 hello,怎么就扣了 5 万 token?”

这不是 bug,是 Claude Code/ChatGPT 的正常工作方式。但可以通过正确使用避免浪费。

# 根因 1:Context 累积

与大模型的对话不是"各自独立的请求"—— 每次发消息,整个历史对话都会被重新发给 API。

第 1 轮:你发 "hello"(10 token) → Claude/GPT 看 10 token → 回复
第 2 轮:你发 "write a function"(15 token) → Claude/GPT 看 [hello + 回复 + write a function] = 200 token
第 3 轮:你发 "add error handling"(10 token) → Claude/GPT 看 [完整前 2 轮 + 新消息] = 500 token
...
第 50 轮:你发 "hello"(10 token) → Claude/GPT 看 [前 49 轮完整历史] = 100000 token

一句 hello 消耗 100K+ token 是完全可能的 —— 消耗的不是 hello 本身,是累积的历史。

# 根因 2:Prompt Cache 失效

Claude/ChatGPT 有一个缓存机制:相同 prefix 的请求可以复用缓存,价格便宜 90%(输入 token 按缓存价计费)。

但缓存有几个失效条件:

  • TTL = 5 分钟/1小时 —— 超过 5 分钟/1小时(Claude内部有2种缓存时间)没新对话,缓存蒸发失效
  • 系统 prompt 变化 —— 客户端更新 / 切换模型 / 加 Memory,缓存失效
  • 工具列表变化 —— 启用新 skill、加 MCP server,缓存失效

最常见的浪费:

你中午开了一个 session 写代码到 12 点,吃完饭 1 点半回来继续发消息。 缓存过期了。Claude/ChatGPT 会全量重新算 100K token 的 context —— 按普通价计费(而不是 cache 价)。 或者使用过程中,之前有很多对话了,突然去切换了模型,例如从opus/sonnet,切换到fable,缓存也失效了 或者使用过程中增加了一个MCP或者plugin,然后在同一个会话继续工作,之前的缓存也失效了

# 解决方案

# 方案 1:频繁用 /clear 清空 context(最便宜)

  • /clear 彻底清空 context,从"白纸"开始
  • 适合:换了个不相关的话题(比如从写代码切到写文档)
  • 代价:丢失当前对话历史
  • 好处:下一轮 Claude/ChatGPT 只看新消息,不看历史,token 消耗回到起点

# 方案 2:用 /compact 压缩 context

  • /compact 让 Claude/ChatGPT 总结前面对话的重点,把历史压缩成一小段摘要
  • 适合:当前任务还在进行中,需要保留关键信息但不想带完整历史
  • 代价:一次性花少量 token 做压缩,换未来每轮都省
  • 好处:保留任务上下文但大幅减 token

# 方案 3:新任务开新 session(最推荐)

关键原则:一个 session 只做一件事。

  • 当你完成一个任务(比如修好了 bug 1),关掉这个 session
  • 开新 session 做 bug 2 / 新功能 / 写文档
  • 这样每个 session 的 context 不会无限累积

反面例子:

❌ 一个 session 从早用到晚,做了 10 个不相关的任务 → context 500K,每次发消息都贵

正面例子:

✅ 每任务开新 session,平均 context 50K,每次便宜 10 倍

# 方案 4:过期缓存的 session,宁愿重开

如果你离开超过 30 分钟、1 小时或更长:

  • 这个 session 的 cache 肯定过期了
  • 继续发消息 = 全量重新算 100K token
  • 关掉 session 重开 → 让 Claude 读一遍你的工作 context(通过 /init 或其他方式重新引入上下文)
  • 总 token 可能少一半

# 方案 5:安装了新的Plugin/MCP, 重新开新session而不是继续之前会话

安装了新的插件,消息头结构变化,导致缓存cache失效,再继续之前的冗长的消息,所有对话重新计费。宁愿重新开始一个对话继续工作

# 方案 6:不要中途切换模型,最开始就确定好模型

同上,中途切换模型,消息头结构也变化了,cache失效,再发信息,所有对话重新按新的input收费,而不是cache价格收费

# 诊断:怎么判断自己是不是浪费了

Claude Code 右下角(或 UI 里)有 token 使用统计:

  • 正常情况:发 1 条消息 input token 约等于这条消息的字数 × 2-3
  • 异常情况:发 1 条消息 input token 上万 → 正在浪费缓存

如果一句话就看到 800K+ input token,停下 —— 要么 /clear,要么 /compact,要么关掉开新 session。