用 Claude Code 一段时间后,很多人会发现账单涨得比预期快:明明只是改了几个文件,用量记录里却是几百万 Token。原因不神秘——Claude Code 是代理式工具,每一轮调用都会带上系统提示、CLAUDE.md、工具定义和整段会话历史,会话越长、上下文越杂,每一轮就越贵。好消息是,绝大多数浪费都可以用 Claude Code 自带的功能消掉,不需要牺牲效果。这篇整理 10 个真正有效的省 Token 方法,全部基于 Claude Code 已有的命令和配置,最后讲怎么用用量明细验证效果。
先搞清楚 Token 花在哪
Claude Code 每发一次请求,输入里大致包括:
- 系统提示与工具定义(包括已连接的 MCP 服务器暴露的工具)
- CLAUDE.md 等记忆文件
- 本次会话的完整历史:你的消息、模型回复、读过的文件内容、命令输出
- 本轮的新消息
输出则包括模型的回复、代码修改,以及开启扩展思考时的思考内容。关键结论是:输入里最大、增长最快的一块是会话历史。一个会话读了 20 个文件、跑了 10 次测试,这些内容在后续每一轮都会被重新带上(提示缓存能降低重复部分的成本,但不会让它消失)。所以省 Token 的核心思路只有两条:让每轮带的上下文更小,让每个任务用合适价位的模型。
在 Claude Code 里输入 /context 可以直接看到当前上下文的构成和占用比例,动手优化前先看一眼,往往一眼就能发现大头。
技巧 1:把 CLAUDE.md 写短写准
CLAUDE.md 会在每次会话开始时自动加载,意味着它的每一行都会出现在这个会话的每一次请求里。写得好,它能省下大量「现场摸索」的 Token;写得臃肿,它就是一笔固定税。
写法建议:
- 只放模型无法从代码里快速推断、又每次都要用的信息:构建与测试命令、目录约定、代码风格的硬性规则、禁止事项
- 用短句和列表,不要放大段背景介绍、历史决策过程
- 不要把整份 API 文档、长配置文件贴进去;需要时用 @路径 引用具体文件,或者让模型按需去读
- 子目录可以放自己的 CLAUDE.md,只在处理该目录时才会被读入,比全塞在根目录更省
一个精简的例子:
# 项目约定
- 包管理用 pnpm;测试:pnpm test -- <文件>;类型检查:pnpm typecheck
- 前端在 web/,后端在 server/,共享类型在 shared/
- 修改后只跑相关测试,不要全量跑
- 不要修改 migrations/ 下已有文件新项目可以先用 /init 生成初稿,再手动删掉一半。之后用 /memory 随时编辑。
技巧 2:不相关的任务之间用 /clear
/clear 会清空当前会话历史,从零开始。修完一个 bug、要去做另一个无关功能时,第一件事就是 /clear。很多人习惯一个会话从早用到晚,结果下午写新功能时,每一轮都还拖着上午排查 bug 时读过的几十个文件。
判断标准很简单:下一个任务需不需要用到前面对话里的信息?不需要就 /clear。
技巧 3:长任务中途用 /compact 主动压缩
如果任务还没做完、但上下文已经很长,用 /compact 把历史压缩成摘要,保留结论、丢掉过程。/compact 后面可以跟说明,告诉它重点保留什么:
/compact 只保留:已修改的文件列表、接口变更、还没解决的两个测试失败Claude Code 在上下文接近上限时也会自动压缩,但自动压缩发生得较晚,而且不知道你关心什么。在一个阶段完成时主动 /compact,比等它自动触发更省也更可控。
技巧 4:按任务切换 Sonnet 和 Opus
不同模型价格差距明显,Opus 档的单价明显高于 Sonnet 档(具体以模型广场为准)。实际编码中,大部分工作——读代码、写常规功能、改测试、修简单报错——Sonnet 完全胜任;Opus 更适合架构设计、疑难 bug、跨模块大重构这类需要深度推理的任务。
| 任务类型 | 推荐模型 | 理由 |
|---|---|---|
| 日常编码、写测试、小修复 | claude-sonnet-5 | 性价比最高,速度快 |
| 架构设计、复杂重构规划 | claude-opus-4-8 | 推理更深,一次做对省返工 |
| 疑难 bug 定位 | 先 Sonnet,卡住再切 Opus | 多数问题 Sonnet 能解决 |
| 批量格式化、简单文本处理 | 更便宜的轻量模型 | 不需要强推理 |
在会话里用 /model 随时切换。Claude Code 还提供 opusplan 别名:规划阶段用 Opus,执行阶段自动切回 Sonnet,适合「想清楚再动手」的任务。通过 Zivv 使用时,可以用 ANTHROPIC_DEFAULT_SONNET_MODEL、ANTHROPIC_DEFAULT_OPUS_MODEL 等环境变量指定别名对应的具体模型 id,id 以 模型广场 为准。更多分层思路见 多模型路由策略。
技巧 5:先规划再执行
Token 最大的浪费不是上下文长,而是返工:模型理解错需求,改了一大片,你再让它全部撤回重来。Claude Code 的 Plan 模式(Shift+Tab 切换)只读代码、给出方案,不动文件。复杂任务先在 Plan 模式下确认方案,再让它执行,能避免大部分方向性错误。
同理,发现模型跑偏时按 Esc 立即打断,不要等它写完一大段再纠正——它多写的每一行都是输出 Token,而输出单价通常是输入的数倍。
技巧 6:把需求说具体,直接指明文件
「帮我看看登录为什么有问题」会让模型从全局搜索开始,读一堆可能相关的文件。「src/auth/session.ts 第 80 行附近的 token 刷新逻辑在过期时没有重试,帮我修」只需要读一个文件。用 @ 直接引用文件路径,能把探索成本降到最低。
给出报错时也一样:贴关键的那几行错误栈,而不是把几千行日志全部粘进去。
技巧 7:屏蔽不需要读的大目录
构建产物、依赖目录、大体积数据文件被读进上下文是隐形的大开销。可以在项目的 .claude/settings.json 里用权限规则禁止读取:
{
"permissions": {
"deny": [
"Read(./dist/**)",
"Read(./node_modules/**)",
"Read(./data/**/*.csv)"
]
}
}这份配置可以提交进仓库,整个团队一起受益。同样,让模型跑命令时注意输出量:把「跑全部测试」改成「只跑相关测试文件」,把冗长的日志命令加上过滤或 tail,命令输出也会进入上下文。
技巧 8:用子代理隔离探索型任务
子代理(subagent)有自己独立的上下文窗口,做完工作只把结论返回主会话。适合把「在整个仓库里找所有调用某个函数的地方」「读完这十个文件总结数据流」这类会读大量内容的探索任务交出去,主会话的上下文就不会被这些中间内容撑大。
可以用 /agents 创建自定义子代理,或者在 .claude/agents/ 目录下写 Markdown 定义文件,并在 frontmatter 里用 model 字段为子代理指定更便宜的模型:
---
name: code-searcher
description: 在代码库中查找调用点和定义,只返回文件路径与简要说明
tools: Read, Grep, Glob
model: sonnet
---
只做查找和总结,不修改任何文件。结果用列表返回,每条一行。需要说明的是:子代理省的是主会话的上下文,它自己读文件同样消耗 Token,总量不一定更少。真正的收益在于主会话保持精简,后续每一轮都便宜,而且子代理可以用比主会话更便宜的模型。
技巧 9:精简 MCP 和扩展思考
每个连接的 MCP 服务器都会把工具定义带进上下文,装了一堆不常用的 MCP,就等于每轮请求都多付一段。用 /mcp 查看和管理当前连接的服务器,不用的禁用掉,或者只在需要的项目里配置。
扩展思考同理:思考内容按输出计费。复杂问题值得让模型多想,但简单任务没必要开启深度思考。可以通过 MAX_THINKING_TOKENS 环境变量限制思考预算,把深度思考留给真正的难题。
技巧 10:看用量明细,用数据验证
省没省下来,要看数据,而不是凭感觉。两个层面:
- 会话内:/cost 显示当前会话的 Token 用量和按官方价估算的费用,/context 显示上下文占用。通过中转使用时,/cost 的金额只是估算,实际扣费以控制台为准
- 账户层面:Zivv 控制台的用量明细按请求记录模型、输入输出 Token 和扣费,可以按 Key、按模型查看
一个实用做法:给不同项目或不同用途建不同的 Key,比如「日常开发」和「批量脚本」分开,账单里哪块是大头一目了然。团队则可以在 团队模式 里按成员、Key、模型拆分用量,再给每人设置日预算,防止某个失控的长会话吃掉整月额度。计算方法可以参考 Token 成本计算指南。
省 Token 速查表
| 场景 | 动作 |
|---|---|
| 换到无关任务 | /clear |
| 长任务阶段性完成 | /compact 加保留重点 |
| 不确定上下文多大 | /context |
| 常规编码 | /model 切到 Sonnet |
| 复杂任务 | Plan 模式先出方案,或用 opusplan |
| 模型跑偏 | Esc 立即打断 |
| 大量探索性阅读 | 交给子代理 |
| 构建产物被读入 | settings.json 里 deny Read |
| 不用的 MCP | /mcp 里禁用 |
常见问题 FAQ
Q:Claude Code 为什么这么费 Token? A:因为它每轮请求都会带上系统提示、CLAUDE.md、工具定义和完整会话历史,读过的文件和命令输出也都在历史里。会话越长,单轮成本越高,这是代理式工具的工作方式决定的。
Q:/compact 和 /clear 有什么区别,该用哪个? A:/clear 清空全部历史,适合切换到无关任务;/compact 把历史压缩成摘要后继续,适合同一任务做到一半上下文过长时。任务相关用 /compact,任务无关用 /clear。
Q:CLAUDE.md 写多长合适? A:没有硬性标准,原则是只写每次都需要、代码里又看不出来的信息,通常几十行以内就够。它会进入每一轮请求,越长固定成本越高。
Q:子代理能省 Token 吗? A:能省主会话的上下文,但子代理自己读文件同样计费,总量不一定减少。收益来自主会话保持精简,以及可以给子代理配置更便宜的模型。
Q:Claude Code 里 /cost 显示的金额准吗? A:/cost 是按官方价格估算的参考值。通过 Zivv 使用时,实际扣费按分组倍率乘以官方价、按实际 Token 计算,以控制台用量明细为准,计费规则见 计费文档。
Q:重度使用 Claude Code 怎样最省钱? A:先用本文方法减少无效 Token,再选合适的计费方式。长时间连续编码的用户可以考虑 Claude MAX 分组,与官方订阅的对比见 Claude MAX 订阅与 API 对比。
写在最后
省 Token 不靠少用,而靠少浪费:任务之间 /clear,阶段之间 /compact,常规工作用 Sonnet,复杂任务先规划,探索交给子代理,最后用用量明细验证效果。把这几个习惯固定下来,同样的工作量,账单通常能明显下降。还没接入的话,可以参考 macOS / Linux 安装教程,注册 Zivv 后几分钟就能用上。