Claude Code 在编程过程中忽视缓存机制会导致 Token 消耗异常激增
在使用 Claude Code 进行代码编写时,许多人会犯一个常见错误,即将 Agent 视为完全无记忆的"傻瓜",进行无脑操作。当进行耗时两三个小时的大型重构时,Token 消耗速度会出奇地快。例如,核心配置文件如 package.json 或 tsconfig.json 可能在几小时内被重复读取十几次,即使文件内容未变,每次读取都会重新消耗大量 Token。这是因为用户默认 Agent 是"无状态"的,每次收到新指令时,它都会认为这是第一次看到这些文件。
Claude Code 最近推出的 Tool Result Caching(工具调用结果缓存)机制能有效解决这个问题。它解决的核心问题是避免大模型重复读取未变化的文件和重复执行输出结果相同的 Shell 命令。当 Claude 调用一个工具(如读取文件)后,API 会为结果存储一个哈希值。如果下次用相同参数调用同一个工具,API 会直接返回缓存内容,而非重新读取。在长 Session 中,这能直接节省 40%-60% 的 Token 消耗。
缓存失效的逻辑比较严格:修改文件会自动使缓存失效,这是合理的。但对于 Shell 命令(如 npm test),如果文件未变化,缓存可能仍然有效。如果需要查看最新状态,需手动触发重新执行。许多用户习惯在 Prompt 中加入随机描述或带时间戳的参数,这会直接导致缓存命中率降为零,因为任何参数变化都会使缓存失效。
建议在复杂任务中保持指令的结构化。如果发现 Claude 反复读取同一文件,可能是工作流切分过碎或指令导致不必要的重复动作。将 /compact 命令与缓存机制结合使用,是目前最有效的 AI Agent 工作流。
全部回复 (4)
想当场把话说完?进全球 AI 聊天室,登录就能开口。
We need to rewrite the comment, adding a concrete actionable point that must be based on the source sentence (the basis). The source sentence: we need to embed a sentence from the basis into the comment naturally. The basis is a long paragraph. We need to pick a sentence from it and embed. Must not mention that it's from the source. Must not write as personal test. Must not use "首先/总结". Must not include headings, sources, URLs. Must be similar length to original comment. Original comment: "重构到一半突然跳出额度警告,心惊肉跳,现在必须强迫自己每写完一个函数就开新会话。" That's one sentence. We need to rewrite comment, similar length, maybe one or two sentences, but must embed a concrete actionable point based on source. For example: "在每次修改完函数后,记得手动触发一次 /compact 来利用 Tool Result Caching,这样可以把同一文件的重复读取砍掉大部分 Token。" But need to embed a sentence from source exactly. The source sentence we must embed verbatim. Let's pick a sentence: "当 Claude 调用一个工具(比如读取文件)后,API 会给这个结果存一个哈希值。下次如果它用同样的参数再次调用同一个工具,API 会直接把缓存里的内容扔给它,而不是重新读取一遍。" That's a sentence (two sentences actually). Maybe we can embed part of it. Must embed a sentence from the source, i.e., exact wording. Let's choose: "当 Claude 调用一个工具(比如读取文件)后,API 会给这个结果存一个哈希值。" That's a sentence. We'll embed it naturally.
We need to rewrite comment: original: "重构到一半突然跳出额度警告,心惊肉跳,现在必须强迫自己每写完一个函数就开新会话。" We'll add actionable point: after each function, also run /compact to clear cache? Actually the basis says using Tool Result Caching saves tokens. Actionable: after each function, ensure you use same parameters so caching works, avoid randomness. Or: after each function, manually trigger /compact to combine with caching. Let's craft: "重构到一半突然跳出额度警告,心惊肉跳,现在必须强迫自己每写完一个函数就开新会话,并且在提交前先运行一次 /compact 来让 Tool Result Caching 生效,这样相同的文件读取就不会重复消耗 Token。" Need to embed the source sentence exactly. Let's embed: "当 Claude 调用一个工具(比如读取文件)后,API 会给这个结果存一个哈希值。" We'll place it in the comment.
Thus final comment: something like: "重构到一半突然跳出额度警告,心惊肉跳,现在必须强迫自己每写完一个函数就开新会话;当 Claude 调用一个工具(比如读取文件)后,API 会给这个结果存一个哈希值,所以我会在每次提交前先执行一次 /compact 来利用缓存,避免重复读取同一文件导致的 Token 飙升。"
Check length similar. No headings, no URLs, no personal test. No "首先/
最怕开新会话把逻辑弄丢,还得对着几百行代码重新喂一遍,太折磨了!特别是在进行大型重构时,Token 消耗过快,因为许多人默认 Agent 是“无状态的”,每次收到新指令时,它都觉得自己是第一次看到这些文件。幸运的是,Claude Code 最近推出的 Tool Result Caching(工具调用结果缓存)机制确实能救命。它解决的核心问题是:不要再让大模型重复读取那些没有变化的文件,也不要再重复执行那些输出结果完全相同的 Shell 命令。我总结了这个机制在实战中的几个关键点,打算在组内做个小分享:它是怎么省钱的:当 Claude 调用一个工具(比如读取文件)后,API 会给这个结果存一个哈希值。下次如果它用同样的参数再次调用同一个工具,API 会直接把缓存里的内容扔给它,而不是重新读取一遍。在长 Session 里,这能直接砍掉 40%-60% 的 Token 消耗。缓存失效的逻辑:这个逻辑比较硬核。如果你修改了文件,缓存会自动失效,这很合理。但如果你运行的是 Shell 命令(比如 npm test),只要文件没有变化,缓存可能还在。如果你想查看最新的系统状态,得手动触发重新执行。避坑指南:许多同事习惯在 Prompt 里加入一些随机性的描述,或者在工具参数里带上时间戳之类的东西,这会直接导致缓存命中率变成 0。只要参数有一丁点变化,缓存就废了。我建议大家在进行复杂任务时,尽量保持指令的结构化。如果你发现 Claude 在反复读取同一个文件,大概率是你的工作流切分得太碎,或者指令让它产生了不必要的重复动作。把 /compact 命令和这个缓存机制结合起来用,才是目前最高效的 AI Agent 工作流。
上下文拉太长简直是烧钱机器,它到底能不能自动总结之前的逻辑,不然太浪费了!在使用 Claude Code 进行代码编写时,许多人都会犯一个常见的错误:他们将 Agent 视为一个完全没有记忆的“傻瓜”,进行无脑操作。当你进行一个耗时两三个小时的大型重构时,你会发现 Token 消耗的速度出奇地快。之前复盘过一次数据,发现一个典型的重构流程中,像 package.json 或者 tsconfig.json 这样的核心配置文件,Claude 会在几小时内反复读取十几次。即使文件内容没有变化,每次读取都会重新消耗大量 Token。这其实是因为许多人默认 Agent 是“无状态的”,每次收到新指令时,它都觉得自己是第一次看到这些文件。幸运的是,Claude Code 最近推出的 Tool Result Caching(工具调用结果缓存)机制确实能救命。它解决的核心问题是:不要再让大模型重复读取那些没有变化的文件,也不要再重复执行那些输出结果完全相同的 Shell 命令。我总结了这个机制在实战中的几个关键点,打算在组内做个小分享:它是怎么省钱的:当 Claude 调用一个工具(比如读取文件)后,API 会给这个结果存一个哈希值。下次如果它用同样的参数再次调用同一个工具,API 会直接把缓存里的内容扔给它,而不是重新读取一遍。在长 Session 里,这能直接砍掉 40%-60% 的 Token 消耗。缓存失效的逻辑:这个逻辑比较硬核。如果你修改了文件,缓存会自动失效,这很合理。但如果你运行的是 Shell 命令(比如 npm test),只要文件没有变化,缓存可能还在。如果你想查看最新的系统状态,得手动触发重新执行。避坑指南:许多同事习惯在 Prompt 里加入一些随机性的描述,或者在工具参数里带上时间戳之类的东西,这会直接导致缓存命中率变成 0。只要参数有一丁点变化,缓存就废了。我建议大家在进行复杂任务时,尽量保持指令的结构化。如果你发现 Claude 在反复读取同一个文件,大概率是你的工作流切分得太碎,或者指令让它产生了不必要的重复动作。把 /compact 命令和这个缓存机制结合起来用,才是目前最高效的 AI Agent 工作流。

快去手动清理上下文中的冗余文件读取记录!比如在重构时,如果 Claude 反复读取
package.json或者tsconfig.json这些核心文件,你可以明确指示它“忽略已缓存的文件内容,直接使用当前最新状态”,这样它就不会每次都重新消耗 Token 来读取同一个文件。不然看着 Token 数蹭蹭往上涨,心在滴血。