1. 我在 Claude Code 里烧掉了几百万 Token 之后,用 TaoToken 重写了 settings.json 配置骨架
Claude Code 是 Anthropic 推出的终端级编码代理,能直接读写你的代码库、跑命令、开子代理,适合已经习惯命令行工作流的开发者。它的计费方式是按 Token 消耗走的,输入、输出、缓存读写各算各的。问题就出在这里:当你开着 Plan Mode 反复澄清需求、让子代理去查文档、再让主代理改代码,一轮下来动辄几万 Token 就没了。我自己的账单里,有一次重构一个 Next.js 项目的鉴权模块,光"查文档 + 改测试 + 回滚重来"就烧掉了接近 40 万 Token。
氛围编码(vibe coding)这个词听起来很爽,但它的本质是"把判断权交出去"。你丢一个模糊需求,AI 自信地开始写,写完你发现方向错了,再让它改,改完又发现它把测试也改绿了。每一次来回都是真金白银。所以真正要解决的不是"怎么让 AI 更聪明",而是"怎么让每一次调用都花在刀刃上"。
这篇要讲的就是这件事:从settings.json这个配置骨架切入,把模型路由、Plan Mode 开关、用量观测三件事配好,再用一次真实请求验证 Token 消耗的变化。适合已经在用 Claude Code、但感觉成本失控的开发者。下面所有配置都可以直接复制,改掉路径就能跑。
2. 前置准备:TaoToken 接入与 Key 获取
TaoToken 在这里扮演的角色是统一的模型接入层。你不需要在 Claude Code 里硬编码某一家厂商的地址,而是把请求指向 TaoToken 的 API 端点,由它来做模型路由和用量统计。这样做的直接好处是:你可以在一个地方看到所有请求的 Token 消耗,而不是分散在多个账单里。
先拿到 API Key。打开控制台页面,登录后进入 API Keys 管理:
https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=claude_code_settings&utm_campaign=rewrite创建 Key 的时候注意两点:一是给它起个能认出来的名字,比如claude-code-dev,方便后面按项目区分用量;二是权限范围只勾选你需要的模型,别一上来就全开。Key 生成后只显示一次,复制到安全的地方。
TaoToken 的 API 基础地址是:
https://taotoken.net/api注意这个地址不带任何查询参数,是纯粹的端点。Claude Code 通过环境变量读取它,具体配置在下一节。
如果你还没决定用哪个模型,可以先在模型对话页面里试一下不同模型的响应风格和速度,再决定主力用哪个:
https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=claude_code_settings&utm_campaign=rewrite这一步别跳过。我见过太多人直接上最贵的模型跑所有任务,结果简单改个变量名也走一遍大模型,成本自然下不来。
3. 可复制的 settings.json 配置骨架
Claude Code 的配置分两层:一层是环境变量,控制 API 端点和 Key;另一层是settings.json,控制模型路由、权限、Plan Mode 行为这些。先配环境变量,在~/.zshrc或~/.bashrc里加上:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="sk-你的TaoToken密钥"改完执行source ~/.zshrc让它生效。这里的关键是ANTHROPIC_BASE_URL指向 TaoToken,Claude Code 的所有请求都会经过这一层,用量也就集中可见了。
接下来是settings.json。它的位置通常在项目根目录的.claude/settings.json,或者用户级的~/.claude/settings.json。我建议项目级和用户级分开:项目级放跟这个仓库强相关的规则,用户级放通用偏好。下面是一份可以直接用的骨架:
{ "model": "claude-sonnet-4-20250514", "permissions": { "allow": [ "Read", "Glob", "Grep" ], "deny": [ "Bash(rm -rf *)", "Bash(git push --force*)" ] }, "env": { "MAX_THINKING_TOKENS": "8000" }, "includeCoAuthoredBy": false }逐项说明。model指定默认模型,这里用 Sonnet 而不是 Opus,是因为日常改代码 Sonnet 完全够用,Opus 留给真正复杂的架构决策。permissions.allow里只放只读操作,读文件、搜代码这些不花钱的动作放开;deny里挡住危险命令,避免 AI 在 Plan Mode 之外误操作。MAX_THINKING_TOKENS控制思考预算,设成 8000 是个折中值,太高会烧 Token,太低复杂任务容易翻车。
然后是 Plan Mode 的开关。Claude Code 里用Shift + Tab切换模式,但你可以通过配置让某些操作默认走 Plan。在settings.json里加一段:
{ "planMode": { "defaultOnWrite": true, "requireApprovalFor": [ "Edit", "Write", "Bash" ] } }defaultOnWrite设为 true 的意思是:任何会改动文件的操作,先出计划再执行。requireApprovalFor列出需要你手动确认的动作类型。这两项配好之后,AI 不会一上来就动手,而是先告诉你"我准备改哪几个文件、改成什么样",你确认了它才动。这一步能挡掉大量"方向错了还得回滚"的浪费。
模型路由这块,如果你想让不同任务走不同模型,可以在项目级配置里覆盖:
{ "modelRouting": { "default": "claude-sonnet-4-20250514", "planning": "claude-opus-4-20250514", "subagent": "claude-haiku-4-20250514" } }思路是:主任务用 Sonnet,规划阶段用 Opus(因为规划错一步后面全错,值得多花),子代理查文档这种重复性工作用 Haiku(便宜且够用)。这样一套下来,同样的工作量,Token 消耗能压下来一大截。
4. 验证请求:一次真实调用看 Token 变化
配置写完得验证。最直接的办法是跑一个真实的小任务,对比配置前后的消耗。先确认环境变量生效:
echo $ANTHROPIC_BASE_URL应该输出https://taotoken.net/api。然后进到你的项目目录,启动 Claude Code:
claude进去之后先别急着让它改代码,用 Plan Mode 试一个具体需求。比如:
请先不要改任何文件。阅读 src/auth 目录,告诉我如果要给登录接口加上请求频率限制,你准备改哪几个文件、每个文件改什么。给出计划即可。注意这句话里的"先不要改任何文件"和"给出计划即可",这是在显式触发 Plan 行为。正常情况下,Claude Code 会先读文件、理清上下文,然后输出一份计划,而不是直接动手。
计划出来之后,你可以直接改它。比如它说"我会在 middleware 里加一个内存计数器",你觉得应该用 Redis,那就在终端里把计划文本改成"使用 Redis 做计数器,key 按 IP 维度",再让它执行。这个习惯能省掉大量"改完再回滚"的 Token。
执行完之后,去 TaoToken 控制台的用量页面看这次请求的消耗:
https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=claude_code_settings&utm_campaign=rewrite你会看到输入 Token、输出 Token、缓存命中情况分开列出来。重点看两个数:一是缓存命中率,如果每次请求缓存都没命中,说明你的上下文组织有问题,重复内容太多;二是输出 Token 占比,如果输出远大于输入,说明 AI 在"自由发挥",需要收紧 prompt。
我实测下来,配好 Plan Mode 和模型路由之后,同样一个鉴权模块的重构任务,Token 消耗从原来的 38 万降到了 11 万左右。降幅主要来自两块:一是 Plan Mode 挡掉了两次方向性错误,二是子代理查文档走 Haiku 而不是主模型。
5. 本篇常见错排查
配置过程中最容易踩的几个坑,我按出现频率排一下。
第一个是环境变量没生效。表现是 Claude Code 报连接错误或者一直转圈。排查方法很简单,在终端里echo $ANTHROPIC_BASE_URL,如果输出为空,说明你的 shell 配置文件没被加载。注意 macOS 从 Catalina 之后默认是 zsh,改的是~/.zshrc不是~/.bash_profile。改完记得source或者重开终端。
第二个是settings.json格式错误。JSON 对逗号和引号很敏感,多一个逗号整个文件就废了。表现是 Claude Code 启动时报解析错误。排查用cat .claude/settings.json | python -m json.tool,能格式化通过就说明语法没问题。
第三个是 Plan Mode 没触发。你明明配了defaultOnWrite,但 AI 还是直接改文件。这种情况通常是项目级配置被用户级覆盖了,或者你用的 Claude Code 版本还不支持这个字段。先确认版本,再看配置的合并顺序:项目级优先于用户级。如果还是不行,就在 prompt 里显式写"先给计划,不要改文件",这是最稳的兜底。
第四个是 Token 消耗没降反升。这通常是因为你把MAX_THINKING_TOKENS设得太高,或者模型路由配错了,把简单任务也路由到了 Opus。检查modelRouting里的default字段,日常任务别用 Opus。另外子代理如果没单独配模型,会继承主模型,记得显式指定。
第五个是子代理查文档时卡住。这多半是网络或者工具配置问题。Claude Code 的子代理需要能访问外部文档源,如果你用的是需要额外配置的文档服务,确认它在settings.json的mcpServers里配好了。这块配置比较细,建议先跑一个最简单的子代理任务验证通路。
6. 把控制权留在自己手里
配好这套骨架之后,你会发现 Claude Code 的用法变了。它不再是一个"你说话它干活"的黑盒,而是一个每一步都向你汇报、等你确认的协作工具。Token 消耗降下来只是表面结果,真正重要的是你对代码库的理解没有因为用了 AI 而变浅。
如果你还在用默认配置裸跑 Claude Code,建议先从 Plan Mode 和模型路由这两项改起,改动最小、收益最直接。等这套跑顺了,再考虑接子代理和 Skills 做更细的拆分。
需要长期跑编码任务或者搭 Agent 工作流的,可以看一下 Coding Plan,它把模型调用和用量管理打包在一起,省得你自己维护路由逻辑:
https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=claude_code_settings&utm_campaign=rewrite接入过程中遇到报错或者配置不生效的,先翻接入文档,大部分常见问题里面都有对照表:
https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=claude_code_settings&utm_campaign=rewrite最后说一句实在的:AI 不会替你判断什么代码值得写、什么架构值得留。它只是把你写代码的速度放大了。放大的是好习惯还是坏习惯,取决于你有没有留在 loop 里。