很多人刚开始用 Claude Code 的时候,都会把它当成一个“会写代码的聊天机器人”:比如我说个需求,它改几行代码,最后再总结一下,看起来也没什么复杂的对吧。
但用久了之后,问题就来了:为什么 Claude Code 的费用越来越高?同样是修一个 bug,为什么越到后面越贵?明明用了缓存,账单怎么还是不太好看?
其实答案往往不是“你多问了几句话”这么简单。Claude Code 的工作方式,本来就不是普通的一问一答。它会读文件、搜代码、看日志、跑测试、反复修改,还会把前面产生的大量上下文带进后面的模型请求里。换句话说,Claude Code 之所以贵,本质上是 Agentic Coding 这种工作流不断放大上下文成本的结果。
这篇文章不列固定价格表,也不讨论某个套餐一定划不划算。具体价格、额度、限制,还是要以 Anthropic 官方最新说明为准。这里主要想拆开讲清楚几个更稳定、也更值得理解的部分:长会话、工具调用、缓存写入,以及上下文管理。
先说结论:贵的不是那一句话,而是后面越来越重的上下文Claude Code 的成本通常不是单一因素造成的,而是几类东西叠在一起。
首先,长会话会让历史上下文反复参与计算。会话越长,里面留下的历史对话、代码片段、修改计划、工具结果就越多。到后面你只说一句“继续”,模型实际处理的内容可能已经很重了。
其次,工具调用会把代码、日志、diff、搜索结果带进上下文。你看到的只是“帮我修一下测试”,但 Claude Code 背后可能已经读了好几个文件,跑了一遍测试,还分析了几百行错误日志。
再就是,缓存写入并不是免费的,缓存命中也不是魔法。Prompt Cache 确实能降低重复上下文的成本,但首次写入缓存本身也要花钱。如果上下文老是在变,缓存命中率不高,那省下来的部分就会大打折扣。
另外,模型选择和输出习惯也会放大费用。简单任务也一直用最强模型、让它输出完整文件、要求详细解释每一步,这些都会增加 token 消耗。
所以,Claude Code 费用上涨通常不是某一个点的问题,而是:长会话、工具调用、缓存写入、输出膨胀、模型选择一起作用的结果。
Claude Code 做一次任务,背后到底在忙什么?普通聊天比较好理解:用户发一句话,模型回一段文本,成本基本就围绕这一来一回展开。
但 Claude Code 不一样。它是面向代码库工作的智能体,要完成一个开发任务,往往会经历很多轮动作。
比如你让它“修复一个登录接口 bug”,它背后可能会做类似这样的事:
用户提出需求→ 读取项目说明和 CLAUDE.md→ 搜索 login、auth、session 等关键词→ 打开多个相关文件→ 分析调用链→ 制定修改计划→ 编辑代码→ 运行测试→ 读取失败日志→ 再次定位问题→ 修改代码→ 查看 git diff→ 输出总结
你在界面上看到的可能只是一段对话,但实际过程里可能已经发生了多次模型请求、多次文件读取、多轮工具调用。只要这些内容进入了模型上下文,就可能变成 token 成本的一部分。
这也是很多人在做 Claude Code 成本分析时容易忽略的地方:费用不只来自你自己输入的 prompt,也来自 Claude Code 为了完成任务主动拉进来的代码、日志和工具结果。
成本可以怎么理解:输入、输出、缓存写入、缓存读取分别是什么?为了更直观地理解 Claude Code 为什么会贵,可以先用一个简化公式来看:
总成本 ≈ 输入 token 成本 + 输出 token 成本 + cache write 成本 + cache read 成本 + 工具调用带来的上下文放大成本
这不是官方计费公式,只是一个帮助理解成本来源的分析框架。
输入 token:不是只有你打出来的字才算输入输入 token 不只是你键盘敲进去的那一句话,还可能包括很多你没直接看到的内容,比如:
系统提示和工具说明;
历史对话;
CLAUDE.md 里的项目规则;
被读取的代码文件;
搜索结果;
Git diff;
测试日志和报错堆栈;
MCP 工具返回的数据;
上一次修改后的总结和计划。
所以,当你说“继续修”的时候,这句话本身当然很短。但模型实际收到的上下文,可能已经包括了大量历史内容。
输出 token:解释越细、代码越长,输出越贵输出 token 就是模型生成出来的所有内容,例如:
修改计划;
分析过程;
代码片段;
完整文件;
测试说明;
最终总结。
如果你总是要求它“详细解释每一步”,或者让它“输出完整修改后的文件”,输出成本自然会明显上去。
如果任务对成本比较敏感,可以让它只输出:
文件路径 + 修改点 + diff 摘要
这样通常比每次都贴完整代码更省,也更方便 review。
缓存写入:第一次把大上下文放进缓存,可能并不便宜Prompt Cache 的价值在于复用稳定上下文,比如项目规则、架构说明、常用约定等。它确实有用,但不是免费午餐。
当一段比较大的上下文第一次被写入缓存时,会产生 cache write 成本。后面如果能命中缓存,通常会比重复输入便宜;但如果这段上下文只用了一次,或者内容频繁变化导致命中率很差,那缓存带来的收益就不明显。
一般来说,适合缓存的是这些内容:
稳定的项目规则;
长期不变的架构说明;
常用代码规范;
会反复使用的上下文。
不太适合频繁写进缓存的内容,则包括:
临时测试日志;
一次性的大 diff;
构建失败的完整输出;
探索阶段读到的大量文件片段。
缓存读取:命中后能省钱,但不是完全免费cache read 的意义,是复用已经缓存的内容,从而降低重复上下文的成本。但“命中缓存”并不等于“完全不计成本”。它更适合那种高复用、结构稳定的长上下文。
如果你经常大改 CLAUDE.md,频繁调整项目规则,或者每次任务开头都塞进去一大段不同说明,就很可能降低缓存命中率。最后的结果就是:你以为自己用了缓存,实际上却在不断写入新的上下文。
为什么长会话会让 Claude Code 越用越贵?长会话可以说是 Claude Code 费用上涨最常见的原因之一。
不少用户会以为,后续每一轮只是在为“新提的问题”付费。但实际模型调用里,历史上下文往往会持续参与。会话越长,里面累积的东西就越多:
之前读过的文件;
已经制定过的修改计划;
跑出来的测试结果;
错误日志;
后来证明没用的探索方向;
和当前任务无关的讨论;
上一个任务留下来的上下文。
可以简单理解成这样:
第 1 轮:用户需求 + 项目说明,可能只有几千 tokens第 10 轮:历史对话 + 文件片段 + 工具结果,已经明显膨胀第 30 轮:你只说一句“再试试”,背后却带着一大包历史上下文
这就是为什么你会感觉“越用越贵”。不是因为后面的问题一定更难,而是每一次后续请求都可能背着越来越重的历史包袱。
什么时候适合用 /compact?/compact 可以理解成:把当前长上下文压缩成一份更短的摘要,用一次整理,换取后面更轻的请求。
它比较适合这些场景:
一个阶段已经做完;
后面还需要沿用当前结论;
会话明显变慢、变重;
上下文里细节很多,但真正需要保留的是总结。
不过,/compact 也不是免费清空。它本身同样需要模型处理当前上下文。比较合理的用法,不是隔几轮就乱用一次,而是在阶段切换时使用。
什么时候更应该用 /clear?/clear 更适合完全切换任务的时候,比如:
要做一个和前面无关的新需求;
前面的探索方向已经错了;
当前上下文里充满了无用日志;
不希望旧任务影响新任务判断。
如果你在同一个 session 里先修 bug,再写文档,然后又重构前端组件,成本会上升,上下文也会变得越来越混乱。更好的习惯是:一个 session 尽量只做一个任务。
工具调用为什么会变成隐藏的成本黑洞?Claude Code 好用,很大程度上是因为它能调用工具;但它变贵,也常常是因为这些工具调用。
工具本身未必是主要成本,真正的问题在于:工具返回的内容一旦进入模型上下文,就会变成 token。
文件读取:大文件、生成物、依赖目录最容易出问题下面这些文件或目录风险很高:
node_modules;
dist;
build;
.next;
coverage;
lock 文件;
minified 文件;
大型日志文件;
自动生成代码。
如果 Claude Code 读到了这些内容,就可能把大量没什么用的 token 带进上下文。比较好的做法是配置 .claudeignore,把构建产物、依赖目录、覆盖率报告、无关日志都排除掉。
.claudeignore 可以理解成 Claude Code 的上下文过滤规则,也就是告诉它:哪些文件不要看,哪些内容不要带进上下文。
搜索和 grep:结果太多,也会污染上下文让 Claude Code “全项目搜一下”听起来很方便,但如果结果太多,搜索输出本身就会变成成本。
更稳妥的方式是:
限定目录;
指定关键词;
先让它列出候选文件;
再选择性读取关键文件。
比如,不要直接说:
帮我全项目找一下为什么登录失败
可以换成:
请先在 src/auth 和 src/api 目录中搜索 login/session 相关逻辑,只列出最可能相关的 5 个文件,不要读取无关目录。
这样上下文会干净很多,模型也更容易聚焦。
测试和构建日志:失败日志有时比代码还烧 tokenCI 日志、构建输出、测试失败堆栈,很多时候比代码本身还长。把几千行日志完整贴进去,通常没有必要。
更建议只保留这些部分:
第一个失败用例;
错误栈顶部 30 到 50 行;
相关文件路径;
关键错误信息;
去掉重复堆栈和无关 warning。
背后的逻辑很简单:测试日志一旦进入上下文,输入 token 就会上升。所以更好的动作是:先截断,再分析。
MCP 和 Subagent:能力更强,但不是免费开分身MCP 工具、Subagent、多智能体探索,确实能增强 Claude Code 的能力,但也会让成本变得更复杂。
常见的成本来源包括:
MCP 返回大量 JSON;
Subagent 拥有自己的独立上下文;
多个 Agent 重复读取同一批文件;
并行探索产生重复分析和重复输出。
Subagent 适合用来隔离复杂任务,但它不是“免费分身”。如果只是一个小改动,通常没必要启动太多并行探索。
为什么缓存有时省钱,有时反而让账单更难看?缓存最容易被误解成“开了就一定省钱”。其实不是这样。缓存有没有价值,主要看两个点:
第一,写入成本是多少;第二,后面到底复用了多少次。
如果你把一份稳定的项目规则缓存起来,并且在很多任务中反复使用,那它通常是有价值的。
但如果你把一次性的日志、大 diff、临时分析材料写进缓存,后面又基本不用,那就可能出现“写是写进去了,但根本没回本”的情况。
想提高缓存命中率,可以从这些习惯开始:
保持 CLAUDE.md 稳定,不要频繁大改;
把长期规则和临时任务说明分开;
不要把日志、diff、一次性分析塞进长期上下文;
同类任务尽量保持相对固定的开头结构;
大任务分阶段沉淀摘要,而不是一直追加原始材料。
CLAUDE.md 的作用,是告诉 Claude Code 项目规范、开发约定、测试命令、架构注意事项。它应该精简、稳定、可复用,而不是写成一份不断膨胀的项目百科。
哪些习惯最容易把 Claude Code 用贵?下面这些习惯,都是 Claude Code 费用上涨的高频原因:
一上来就让它“先看完整个项目”;
一个 session 从早聊到晚;
在同一个会话里做多个无关任务;
不配置 .claudeignore;
把 node_modules、dist、coverage 暴露给 Claude;
让它输出完整文件,而不是 patch 或 diff;
每次都用最强模型;
把完整 CI 日志直接丢进去;
频繁修改 CLAUDE.md 和项目规则;
多个 Subagent 同时探索同一个问题。
这些问题表面上各不相同,但本质都一样:它们不是“多问了一句话”,而是让上下文变得更大、更乱,也更难复用。
怎么判断你的钱主要花在哪里?如果你想分析自己的 Claude Code 成本,可以先看现象,再找原因。
现象主要嫌疑优先处理方式一开始便宜,聊久了变贵长会话上下文膨胀使用 /compact,或者拆分 session读项目特别贵文件上下文过大配置 .claudeignore,明确指定路径修测试特别贵日志太长、多轮失败截断日志,先聚焦第一个错误每次启动都贵稳定上下文反复写入精简 CLAUDE.md,提高缓存命中输出特别多完整文件和解释过长要求只输出 diff 或修改点用量很快触顶模型或任务分配不合理简单任务用轻模型,复杂任务再用强模型对于订阅用户和 API 用户来说,“贵”的感受也不太一样。
API 用户通常能更直接看到 token 账单、模型费用,以及缓存读写费用。Pro / Max 这类订阅用户,则可能更明显感受到额度消耗变快,或者在重置窗口前更容易触顶。
两者背后都受到模型调用和上下文消耗影响,只是表现形式不同。
所以,不太建议直接套用“订阅一定比 API 便宜多少倍”这种固定结论。最终划不划算,还是要看使用频率、任务类型、模型选择,以及官方政策变化。
降成本不是少用,而是换一种工作流真正有效的成本控制,不是让你少问问题,而是让每次请求只带必要上下文。
第一优先级:减少无效上下文先处理最明显的浪费:
配置 .claudeignore;
排除依赖目录和构建产物;
不读取无关大文件;
搜索时限定目录和关键词;
日志只保留关键错误。
这些动作看起来简单,但效果通常很明显。
第二优先级:缩短会话,并在阶段节点压缩比较推荐的习惯是:
一个任务一个 session;
阶段完成后使用 /compact;
无关任务直接 /clear;
不在同一个会话里混着做多个方向。
这样做不仅省 token,也能减少上下文污染,让 Claude Code 的判断更稳定。
第三优先级:让可缓存内容保持稳定重点优化 CLAUDE.md:
只保留长期有效的规则;
删除冗余背景描述;
把临时任务说明放在 prompt 里;
避免频繁大改项目级上下文。
CLAUDE.md 越稳定,缓存命中的可能性就越高。反过来,如果它老是在变,缓存收益就很难体现出来。
第四优先级:按任务选择模型不要默认全程使用最强模型。一般来说:
简单改名、格式化、小修小补,用较轻模型就够了;
架构分析、复杂重构、高风险 bug,再考虑更强模型;
规划阶段可以给更多上下文,执行阶段则要控制范围。
这其实和现实开发也类似:不是每个问题都需要资深架构师从头到尾盯着。
第五优先级:控制输出格式可以直接对 Claude Code 说清楚:
请只输出:1. 修改文件路径;2. 核心修改点;3. 必要的 diff;4. 不要重复贴完整文件。
输出越克制,成本越容易控制,review 也更高效。很多时候,你并不需要它把整个文件重新贴一遍。
Claude Code 到底贵不贵?关键要看任务价值Claude Code 值不值得用,不应该只看单次账单,还要看它替代了多少开发时间,减少了多少排查成本。
比较适合重度使用 Claude Code 的场景包括:
理解复杂老项目;
多文件重构;
排查难复现 bug;
需要自动探索代码库;
高价值业务需求;
安全、性能、架构相关分析。
不太适合重度依赖的场景则包括:
简单语法问答;
小脚本生成;
低价值样板代码;
纯格式化修改;
对代码质量要求不高的任务;
预算极低且可以接受较弱模型的场景。
如果你使用的是第三方 Claude API 兼容接入服务,比如 ClaudeAPI 这类平台,也要注意一点:它们不是 Anthropic 官方。它们可能提供兼容接入、多线路选择、中文支持、企业充值、开票或基础技术协助等服务,但具体能力、价格和使用限制,还是要以平台最新说明为准,也不应该把第三方方案直接当成官方服务的无条件替代品。
最后来总结一下:Claude Code 费用上涨,本质是上下文管理问题Claude Code 越用越贵,通常不是某一个按钮造成的,而是长会话、工具调用、缓存写入、模型选择和输出习惯叠加后的结果。
它真正消耗的也不是“你问了几句话”,而是每一次请求背后到底带了多少上下文:代码文件、历史对话、日志、diff、工具结果、缓存写入,以及模型输出。
如果只记一个最短行动清单,可以记住这五点:
一个 session 只做一个任务;
配好 .claudeignore,排除无关文件;
长任务阶段性使用 /compact,无关任务用 /clear;
日志、diff、搜索结果先截断,再交给模型;
保持 CLAUDE.md 精简稳定,提高缓存命中率。
低成本不是最终目标,高 ROI 才是。该给上下文的时候不要省,不该带进去的噪音一定要删。真正成熟的 Claude Code 使用方式,不是少用,而是让每一次模型调用都更干净、更聚焦,也更值得。