1. 先搞清楚 tokens 到底被谁吃掉了很多人用 Claude Code 写着写着发现额度掉得飞快第一反应是「模型太贵」其实大部分消耗跟你的提问质量没关系而是上下文在反复重发。Claude Code 每一轮对话都会把历史消息、系统提示、工具定义、项目文件一起打包发给模型你问的越久这个包越大。我实测过一个很典型的场景清空上下文后什么都不干先跑一次/context能看到基础开销大概在 19k tokens 左右其中system tools这一项就占了 15.5k。也就是说你还没开始干活光是把工具定义塞进去就已经花掉一大截。接着随便发一句hello再跑/context数字涨到 24k 上下真正属于「打招呼」的增量大约是 2.9k。这个数字说明两件事一是固定开销躲不掉工具定义和系统提示是 Claude Code 的底座二是可变开销才是你能控制的也就是历史对话、项目文件读取、重复的上下文。省钱的核心思路不是砍固定开销而是让可变开销别失控。这篇就围绕三个入口来讲settings.json的环境变量配置、CLAUDE.md的项目记忆、以及/compact的压缩时机。目标很明确——让每一轮请求带上去的 tokens 都是「有用的」而不是把整个项目历史反复搬运。适合谁看已经在用 Claude Code 做日常开发、发现额度消耗比预期快、想在不降低体验的前提下把 tokens 花在刀刃上的同学。如果你还没配好接入环境后面第二节会给一个可复制的骨架。2. 接入前置把 settings.json 和 API 环境搭好Claude Code 的配置分两层一层是接入层决定请求发到哪里、用哪个模型另一层是行为层决定它怎么读项目、怎么压缩上下文。两层都写在settings.json里。配置文件位置按系统区分Linux / macOS~/.claude/settings.jsonWindowsC:/Users/你的用户名/.claude/settings.json如果目录不存在手动建一个.claude文件夹再放settings.json即可。接入层需要一个可用的 API 端点和 Key我用的是 TaoToken 的接口它的地址和 Key 管理入口在控制台里能直接拿到配置时把ANTHROPIC_BASE_URL指向https://taotoken.net/apiANTHROPIC_AUTH_TOKEN填你自己的 Key。这里有个容易踩的坑ANTHROPIC_BASE_URL不要带多余的路径后缀直接写域名加/api就行带错了会出现 404 或者握手失败。Key 的获取和模型列表可以在控制台里核对确认你要用的模型名拼写正确模型名写错不会报「模型不存在」而是静默回退到默认模型你会以为配置生效了其实没有。行为层的关键变量有两个CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC设为1作用是关掉非必要的后台通信。类比一下就是浏览器的 cookies很多请求你根本没主动发起但它在后台悄悄跑关掉之后能省掉一部分隐性开销。MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES设为3意思是自动压缩连续失败 3 次就停止重试。这个变量是防止压缩逻辑卡死时无限重试反而把 tokens 烧光。设成 3 是个比较稳的值太小容易误停太大等于没限制。把这两层配好之后Claude Code 每次启动读的就是你这份配置而不是默认值。下一步再谈怎么让它在项目里少读无用文件。3. 可复制配置settings.json 骨架与 CLAUDE.md 写法先给一份可以直接改的settings.json骨架。注意 JSON 不支持注释下面用引用块单独说明每个字段实际文件里把注释删掉。{ autoUpdatesChannel: latest, env: { ANTHROPIC_AUTH_TOKEN: 你的API_KEY, ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_DEFAULT_HAIKU_MODEL: 你的轻量模型名, ANTHROPIC_DEFAULT_SONNET_MODEL: 你的主力模型名, ANTHROPIC_DEFAULT_OPUS_MODEL: 你的高配模型名, ANTHROPIC_MODEL: 你的默认模型名, CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: 1 }, MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES: 3, model: 你的默认模型名 }注意ANTHROPIC_DEFAULT_HAIKU_MODEL这类变量是给不同档位任务用的轻量任务走 Haiku 档、复杂推理走 Opus 档分档配置能避免所有请求都走高配模型。模型名以你控制台里实际可用的为准别照抄示例里的占位符。配好接入层之后真正决定「每轮读多少项目内容」的是CLAUDE.md。它的作用是给 Claude Code 一份项目说明书让它进项目时直接读这份摘要而不是每次重新扫描整个代码库。CLAUDE.md放在项目根目录写法上要克制别把整个 README 复制进去。它应该只包含三类信息项目结构的关键路径、常用命令、以及你希望它遵守的约定。给一个骨架# 项目说明 ## 技术栈 - 前端React Vite - 后端Node.js Express - 数据库PostgreSQL ## 关键目录 - src/componentsUI 组件 - src/api接口封装 - server/routes后端路由 ## 常用命令 - 启动开发npm run dev - 跑测试npm test - 构建npm run build ## 约定 - 组件用函数式写法不用 class - 接口请求统一走 src/api/request.js - 提交前必须跑 lint这份文件控制在 50 行以内比较理想。写太长等于每轮都多带一份文档反而增加固定开销。它的价值在于替代重复扫描而不是替代文档。还有一个容易被忽略的点不同项目维护各自的CLAUDE.md和.claude文件夹。项目 A 需要的 skills 和 MCP 配置没必要让项目 B 也加载。如果两个项目共用同一套配置那就把它提到全局的~/.claude里维护而不是在每个项目里重复一份。这就是「专项专立」的意思——按项目隔离公共部分上提。4. 验证请求用 /context 和 /compact 看效果配置写完不算完得验证它真的生效了。Claude Code 里有两个命令特别有用/context和/compact。先验证基础开销。打开 Claude Code先执行/clear清空上下文然后跑/context。你会看到一份分项列表类似这样System prompt: 2.4k System tools: 15.5k Messages: 1.2k Free space: 286 Total: 19.3k这个数字就是你的「地板价」什么都不干也要花这么多。接着发一句hello再跑/context看 Messages 那一项涨了多少。如果涨得很少几百 tokens说明你的配置没在后台乱拉东西如果一次涨好几千就要回头检查是不是有插件或者 MCP 在偷偷加载。再验证CLAUDE.md的效果。进项目后问一个跟项目结构相关的问题比如「这个项目的接口封装在哪个目录」观察它是不是直接答出来而不是先扫描一遍。如果它开始列目录、读一堆文件才回答说明CLAUDE.md没被读到检查文件名拼写和位置。/compact的验证更直接。做一段连续相关的开发比如先让它实现功能 A再基于 A 实现功能 B两轮之后跑/context看 Messages 有多大。然后执行/compact再跑一次/contextMessages 会明显缩小因为历史被提炼成了摘要。压缩前 Messages: 48.2k 执行 /compact 压缩后 Messages: 12.6k这个对比就是/compact的价值。它适合上下文强相关的连续任务比如同一个功能的多个子步骤。如果两轮任务根本不相干用/clear更干脆直接归零。判断用哪个的简单规则新任务和旧任务有没有依赖关系有依赖用/compact没依赖用/clear。别在无关任务之间硬扛着不清理那是最烧 tokens 的用法。5. 本篇常见错排查配置和命令都给了实际用起来还是会遇到一些具体报错。下面几个是我和身边人踩过的。报错一settings.json 改了没生效。最常见的原因是 JSON 格式错误比如多了一个逗号、少了引号。Claude Code 读配置失败时不一定报错可能直接回退默认值。排查方法用cat ~/.claude/settings.json | python -m json.tool校验格式能解析通过才说明语法没问题。另外确认你改的是当前用户目录下的配置不是项目里的。报错二请求返回 401 或握手失败。检查ANTHROPIC_AUTH_TOKEN有没有多余空格Key 是否过期。ANTHROPIC_BASE_URL确认是https://taotoken.net/api不要带尾部斜杠或者多余路径。如果还是失败去控制台确认 Key 的权限和额度状态。报错三模型名写错但没报错。前面提过模型名拼错会静默回退。验证方法是跑一次请求后看返回的模型标识或者直接在配置里用一个明显不存在的名字看它是不是还正常返回——如果正常返回说明它根本没在用你写的名字。报错四/compact 之后上下文还是很大。压缩不是万能的如果单轮消息本身就特别长比如你贴了一整个大文件进去压缩后的摘要也会偏大。这种情况应该先/clear然后重新提问时只贴必要的代码片段而不是整个文件。报错五CLAUDE.md 被忽略。确认文件名大小写完全一致必须是CLAUDE.md全大写。放在项目根目录不要放在子目录。如果项目有多个根比如 monorepo每个子项目根目录各放一份。报错六tokens 消耗突然暴涨。先跑/context看是哪一项涨了。如果是 System tools 涨了可能是装了新的插件或 MCP如果是 Messages 涨了说明历史太长该压缩或清理了。定位到具体项再处理别盲目清空。6. 把 tokens 花在刀刃上的长期做法省 tokens 不是靠某一个开关而是靠一套习惯。配置层用settings.json关掉非必要通信、分档配模型项目层用CLAUDE.md替代重复扫描、按项目隔离配置会话层用/clear和/compact控制上下文体积。三层配合才能让每一轮请求带上去的都是有效信息。如果你还在搭接入环境建议先把 API Key 和接入文档过一遍把settings.json的骨架跑通再谈优化。Key 管理和模型列表在控制台里能直接看到接入文档里有完整的变量说明。日常编码和 Agent 类任务如果跑得比较多可以看看 Coding Plan 这类长期方案比按次调用更划算。想先验证模型效果、确认配置对不对用模型对话快速试一轮最省事。真正稳定的体验来自「知道钱花在哪」。每次觉得消耗异常先跑/context定位再决定是清空、压缩还是改配置。这个习惯养成之后你会发现同样的额度能撑更久而且回答质量不会下降——因为省掉的都是无效上下文留下的都是真正有用的信息。