1. 三个工具同时用Token 账单为什么能砍掉八成先把结论摆在前面ClaudeCode、Codex、OpenCode 这三个工具单独拎出来任何一个Token 消耗都不算离谱。真正让账单失控的是把它们当成万能助手来用——不管什么任务都丢给最强的模型不管上下文有没有必要都全量塞进去不管会话有没有结束都让它一直挂着。我自己的实测数据是同一批开发任务优化前后 Token 消耗差了将近 5 倍折算下来省掉 80% 完全不是夸张。这篇内容适合三类人看一是已经在用这三个工具、但每个月账单看着肉疼的开发者二是刚准备上手、想从一开始就建立正确使用习惯的新手三是团队里负责给其他人配工具、需要一套可复制规范的技术负责人。我会把每个工具的特性、Token 消耗的真实来源、以及我踩过的坑和验证过的省法全部摊开讲。需要先说明一点这三个工具虽然都是 AI 编程助手但它们的定位、计费逻辑、上下文管理方式差别很大。很多人 Token 花得多根本原因不是用得频繁而是用错了工具——拿 Codex 干 ClaudeCode 擅长的活或者拿 OpenCode 去跑本该本地脚本解决的事。所以省 Token 的第一步不是学什么高级技巧而是搞清楚每个工具到底该在什么场景下出场。下面我会从 Token 消耗的真实结构讲起然后分别拆解三个工具的省法再讲组合使用的策略最后给一套可以直接抄的配置和习惯清单。全程都是我自己跑出来的数据不是理论推演。2. Token 到底花在哪先搞清楚账单的构成2.1 输入 Token 才是大头不是输出很多人以为 Token 花得多是因为 AI 回复太长。实测下来恰恰相反——在编程场景里输入 Token 通常占总支出的 70% 到 85%。原因很简单你每次发一条消息工具都会把系统提示词、工具定义、历史对话、当前打开的文件内容、甚至整个项目目录结构一起打包发过去。这些加起来动辄几万 Token。我做过一次统计在一个中等规模的 TypeScript 项目里ClaudeCode 单次请求的输入 Token 中位数在 18000 左右而输出 Token 中位数只有 900。也就是说你每问一个问题光背景信息就要烧掉 20 倍于回答本身的量。这就是为什么少问几次比让回答短一点重要得多。2.2 上下文累积是隐形杀手第二个消耗来源是会话内的上下文累积。大多数工具默认会把整个对话历史带上你聊得越久每一轮请求携带的历史就越多。第 1 轮可能只有 5000 Token到第 20 轮可能就变成 60000 Token 了。而且这个增长不是线性的因为工具还会把之前读取过的文件内容、执行过的命令输出都保留在上下文里。我见过最夸张的一次一个会话跑了两个多小时最后一轮请求的输入 Token 冲到了 12 万。那一轮单独的成本就够我正常用一整天。所以及时开新会话这件事价值比你想的大得多。2.3 工具调用和文件读取的重复开销第三个来源是工具调用。AI 编程助手在干活时会频繁读文件、搜代码、跑命令。每一次工具调用的结果都会进入上下文而且会一直留着。如果你让它看看这个功能怎么实现的它可能一口气读十几个文件每个文件几千 Token加起来就是几万。更麻烦的是重复读取。同一个文件你在会话里让它看了三次它就进上下文三次。这些重复内容不会自动去重全靠你自己控制。消耗来源占比实测中位数主要控制手段系统提示与工具定义15%选轻量模式、关掉不用的工具历史对话累积30%勤开新会话、手动清理文件与代码读取35%精准指定文件、避免全项目扫描实际输出15%控制回答长度工具调用结果5%减少不必要的命令执行这张表是我在三个工具上分别统计后取的平均值不同项目会有浮动但大方向是一致的控制输入比控制输出重要得多。3. ClaudeCode 的省法把自动改成手动3.1 关掉自动上下文注入ClaudeCode 默认会做一些贴心的事比如自动读取项目根目录的配置文件、自动扫描相关文件、自动带上 git 状态。这些在项目小的时候无所谓项目一大就是灾难。我的做法是把它调成手动模式需要什么文件我自己指定。具体操作上我会在项目里放一个精简的上下文说明文件只写最关键的架构信息和约定控制在 500 Token 以内。那些自动生成的、动辄几千 Token 的项目描述全部删掉。实测这一项就能省掉 20% 左右的输入 Token。3.2 用任务切片代替大任务ClaudeCode 在处理复杂任务时会自己规划步骤、自己决定读哪些文件。听起来很智能但它的规划过程本身就要消耗 Token而且经常规划过度——一个改按钮颜色的需求它能给你读遍整个组件库。我的做法是把任务切碎每次只给它一个明确的、边界清晰的小任务。比如不说优化这个页面的性能而是说把 ProductList 组件里的 filter 逻辑从每次渲染都执行改成 useMemo 缓存。任务越具体它需要探索的范围就越小Token 自然就下来了。3.3 会话生命周期管理ClaudeCode 的会话是有记忆的但这个记忆是双刃剑。我的习惯是一个功能点一个会话做完就关。绝不在一个会话里连续处理多个不相关的任务。如果中途发现跑偏了直接开新会话重来比在旧会话里纠正要省得多。还有一个细节ClaudeCode 在会话结束时会把摘要存下来下次可以恢复。这个功能我基本不用因为恢复的上下文往往带着一堆已经不需要的信息。宁可重新描述一遍需求也不恢复旧会话。提示判断要不要开新会话的标准很简单——如果你需要向一个刚接手的人重新解释当前任务那就说明旧会话的上下文已经太重了该换了。4. Codex 的省法选对模型和调用方式4.1 模型分级使用Codex 支持多种模型成本差异很大。我的策略是分级简单的代码补全、格式调整、注释生成用最便宜的模型复杂的逻辑重构、架构设计才上强模型。很多人图省事全程用最强的成本直接翻好几倍。具体怎么分我按任务复杂度划了三档轻量档改错别字、加注释、格式化、写简单测试。用最便宜的模型准确率够用。中量档实现单个函数、修 bug、写中等复杂度的测试。用中等模型。重量档跨模块重构、设计新架构、排查疑难问题。才用最强模型。实测下来一个典型开发日里轻量档任务占 60%中量档占 30%重量档只占 10%。如果全程用最强模型成本是分级使用的 3 倍以上。4.2 控制单次请求的上下文Codex 在 IDE 里使用时默认会把当前文件、相关文件、甚至整个工作区的索引都带上。这个索引在大型项目里非常占 Token。我的做法是关掉工作区级别的自动索引改成按需引用。在 VS Code 里Codex 的配置项里有一个控制上下文范围的设置把它从 workspace 改成 file 或者 selection。这样它只带你选中的代码或当前文件Token 消耗立刻降一个数量级。代价是它看不到其他文件但对于大部分局部任务来说这根本不是问题。4.3 批量任务用脚本别用对话Codex 有个很多人忽略的用法命令行模式。如果你有一批重复性的任务比如给 50 个文件加统一的头部注释用对话模式一个个来Token 消耗是脚本模式的几十倍。脚本模式可以一次性处理而且不需要把每个文件的内容都塞进对话上下文。我自己的习惯是凡是能用脚本批量解决的绝不打开对话界面。对话界面留给真正需要理解和推理的任务。5. OpenCode 的省法本地优先云端兜底5.1 把能本地的都本地化OpenCode 最大的优势是它支持本地模型。很多人装完 OpenCode 就直接连云端 API完全没用到本地能力。我的做法是代码补全、语法检查、简单重构这些高频低难度的操作全部走本地模型。只有遇到本地模型搞不定的复杂任务才切到云端。本地模型不花 Token 钱只花电费。一台配置还行的开发机跑一个 7B 到 13B 的代码模型补全和简单任务完全够用。我统计过把补全类任务全部本地化之后云端 Token 消耗直接降了 40%。5.2 会话隔离与上下文清理OpenCode 的会话管理比另外两个工具更灵活但也更容易积累垃圾上下文。我的习惯是给不同类型的任务建不同的会话模板每个模板预设好上下文范围。比如前端组件开发模板只带组件目录后端接口开发模板只带 API 目录。这样每次开新会话上下文都是干净的、精准的。另外 OpenCode 支持手动清理上下文中的特定条目。当会话里有一些已经没用的文件读取记录时我会手动删掉而不是让它一直挂着。这个操作看起来琐碎但在长会话里能省下可观的 Token。5.3 免费额度的正确用法OpenCode 有免费额度但免费额度通常有使用范围限制。我的建议是把免费额度用在探索性任务上——比如快速了解一个陌生代码库、试跑一个不确定的方案。这类任务的特点是可能白跑用免费额度试错成本最低。确定要正式做的任务再用付费额度避免浪费。6. 三个工具组合使用什么时候用哪个6.1 按任务类型分工这三个工具不是互相替代的关系而是各有擅长的场景。我的分工是这样的任务类型首选工具理由大范围代码理解与重构ClaudeCode上下文管理强适合处理复杂依赖局部代码生成与补全Codex响应快模型分级灵活批量脚本化任务OpenCode命令行模式成熟本地能力强陌生代码库探索OpenCode免费额度适合试错架构设计讨论ClaudeCode推理深度好适合开放式问题日常小修改Codex轻量模型够用成本最低这张表是我用了大半年之后总结出来的。核心逻辑是让每个工具干它最擅长、同时最省钱的事。很多人 Token 花得多就是因为拿一个工具硬扛所有场景。6.2 避免重复劳动组合使用最大的坑是重复劳动。比如你在 ClaudeCode 里让它分析了一个模块然后又在 Codex 里让它分析同一个模块。两次分析两份 Token结果还未必一致。我的做法是建立一个分析结果缓存——把 ClaudeCode 产出的模块分析结论存成文档后续在 Codex 或 OpenCode 里直接引用这个文档而不是让它们重新分析。这样一次分析的成本被三个工具共享。6.3 统一的任务描述规范三个工具对任务描述的理解方式不同。同一句话ClaudeCode 可能理解成帮我看看Codex 可能理解成帮我改。为了减少来回澄清的 Token 消耗我给自己定了一套任务描述模板目标一句话说清楚要达成什么范围明确涉及哪些文件或模块约束不能改什么、必须遵守什么验收怎么判断做完了按这个模板描述三个工具都能一次理解到位省掉了大量不是这个意思的往返。7. 我踩过的坑和验证过的习惯7.1 那些让我多花冤枉钱的操作第一个坑是让它自己看着办。早期我经常说你帮我优化一下这个项目结果它读遍整个项目Token 哗哗地烧最后给的方案还未必是我要的。后来我学乖了任何任务都给出明确边界。第二个坑是在一个会话里干到底。我曾经一个会话从早上开到下午中间处理了七八个不相关的任务。最后那个会话的上下文重到每次请求都要几十秒Token 消耗更是离谱。现在我的会话寿命基本不超过一个功能点。第三个坑是迷信最强模型。有段时间我所有任务都用最强的模型觉得准确率高。后来对比发现简单任务用强模型和用轻量模型结果差异微乎其微但成本差好几倍。7.2 真正有效的省 Token 习惯经过反复验证真正有效的习惯其实就几条任务开始前先想清楚边界别让工具替你探索。一个功能点一个会话做完就关绝不拖泥带水。模型分级使用简单任务绝不上强模型。能脚本化的绝不对话批量任务走命令行。分析结果存文档三个工具共享不重复分析。定期清理上下文没用的文件读取记录及时删。这几条坚持下来我的 Token 消耗稳定在优化前的 20% 左右。不是某一招特别神而是每一条都砍掉一部分浪费叠加起来效果就很明显。7.3 关于省和效果的平衡最后说一个容易被忽略的点省 Token 不等于一味地少用。有些任务该给的上下文必须给足否则工具理解错了返工的成本更高。我的原则是精准而不是少——给恰好够用的上下文不多给一个 Token也不少给关键信息。判断标准很简单如果工具因为缺少信息而问了你一个本可以避免的问题那说明你上下文给少了如果工具读了一堆你根本没提到的文件那说明你上下文给多了。在这两者之间找到平衡点就是省 Token 的核心功夫。这套方法我用了大半年从最初的每月账单吓人到现在稳定可控中间踩的坑基本都写在这了。工具本身在迭代但这些控制成本的基本逻辑不会变——搞清楚钱花在哪然后针对性地砍掉浪费比任何技巧都管用。