要削减 AI 编程智能体的 Token 用量,关键在于减少输入其上下文的内容。具体做法包括:明确告诉它该读哪些文件,维护一份简短的项目说明文件,先让它给出计划再写代码,自己动手执行搜索,经常重启会话,以及关闭当前任务用不到的工具。
大多数人开始关注这个问题,往往是因为重构进行到一半时会话触及了用量上限,或者工作量没变,账单却翻了一倍。
这些习惯在 Claude Code、Codex、Cursor 及同类智能体中同样适用。下面每个小节都会解释该习惯为何有效,给出一个可以直接照搬的简短示例,并注明相关依据是实测数据还是基于推理的实践经验。
核心要点
- 智能体读取的每个文件、保留的每一轮历史对话,都会留在其上下文中。最省钱的 Token,是智能体根本没看到的那个。
- 一项针对 124 个使用 OpenAI Codex 完成的拉取请求(PR)的研究显示,添加 AGENTS.md 文件后,输出 Token 中位数下降了 16.58%,运行时间中位数下降了 28.64%。总 Token 中位数则几乎没有变化(约高出 1%)。
- Spotify Engineering 的一篇文章在一个 Java monorepo 中实测发现,用更便宜的模型生成的摘要代替原始文件交给 Claude,可使批量文件读取平均节省约 90%。该数据仅统计了 Claude 自身的上下文。
- Anthropic 的 Claude Code 文档指出,如果 API 或云服务商套餐的支出高于预期,原因通常是某个长会话一直没有清理,或者默认模型仍设置为 Opus。
为什么要削减 AI 编程智能体的 Token 用量?
Token 会让你付出两次代价:一次体现在账单或用量上限上,另一次体现在输出质量上。AI 编程智能体读取的每个文件、保留的每一轮历史对话都会留在上下文中,所以最省钱的 Token,就是智能体根本不需要看的那个。上下文更小、更相关,模型被无关内容干扰的机会也就更少。一个精简的会话通常比臃肿的会话更便宜,也更准确。
举个例子,如果一个调试会话以”把仓库翻一遍”开头,智能体可能在找到真正的 bug 之前就已经拉进了几十个无关文件。每一个文件你都要付费,而模型还得在推理时绕开所有这些干扰。
缩小智能体的可见范围
要减少 AI 编程智能体的探索性读取,应当直接告诉它读哪些文件,而不是把整个仓库丢给它。否则,智能体就得自己去找,而沿途打开的每个文件都会进入上下文。一旦你明确指定了文件,智能体的读取范围就会被限定在任务真正需要的内容上。
# Before
Why is the checkout total wrong? Look through the repo.
# After
The total in src/cart/total.ts is wrong when a discount code is applied.
Read src/cart/total.ts and src/cart/discounts.ts only. Do not open other files
without asking.
你还可以从源头上限制智能体能接触到的内容。如果它运行在专用机器上(例如用于智能体编程的远程主机方案),那么只克隆该任务需要的仓库即可。
维护一份项目说明文件
项目说明文件通常命名为 AGENTS.md 或 CLAUDE.md,它能让 AI 编程智能体不必在每个会话中重新摸索你的项目约定。大多数智能体都支持这类文件,具体读取哪个文件名,请查阅所用智能体的文档。Claude Code 读取的是 CLAUDE.md,其记忆功能文档说明,从 v2.1.277 起,当仓库中没有 CLAUDE.md 时,它也会直接读取 AGENTS.md。
这方面的证据相当具体。在一项针对 10 个仓库、124 个使用 OpenAI Codex 完成的拉取请求的研究中,带有 AGENTS.md 文件的运行,其运行时间中位数降低了 28.64%,输出 Token 数中位数降低了 16.58%。但同一结果表也显示,总 Token 中位数基本没有变化,甚至在使用该文件时还高出约 1%。换句话说,这个文件主要作用是让智能体少写一些、更快完成,而不会缩减它读取的全部内容。该研究也存在局限:只使用了一种智能体(运行 gpt-5.2-codex 的 Codex),只涵盖已合并的小型 PR(每个最多改动 100 行、5 个文件),并且没有全面评估输出结果是否正确。
这个文件要保持简短。Claude Code 会在每个会话开始时把 CLAUDE.md 载入上下文,因此文件里的每一行,你在每次对话中都要为之付费。Anthropic 建议控制在 200 行以内,并指出相比冗长或含糊的指令,Claude 能更可靠地遵循简短、具体的指令。
# AGENTS.md
## Project
Web API for order processing. Entry point: src/server.ts.
## Structure
- src/routes/: HTTP handlers, one file per resource
- src/services/: business logic; handlers never touch the DB directly
- tests/: mirrors src/; test files end in .test.ts
## Conventions
- Run `npm test` before proposing changes; run `npm run lint` on touched files
- Use the logger in src/lib/log.ts, never console.log
- Do not edit generated files in src/generated/
先要计划,再写代码
在 AI 编程智能体动手写代码之前先让它给出计划,你就能在它读取和改写文件之前发现方向上的错误。丢掉一份计划几乎没有成本;而一个错误的实现,在你察觉之前就已经在它触碰过的每个文件上消耗了 Token。此外,计划还会给你一份文件清单,你可以在任何工作开始之前对其进行删减。
Before writing any code: list the files you intend to read and change, and
the steps you will take, in under 10 bullets. Wait for my approval.
如果计划中包含无关文件,请在批准之前将其从清单中删除。
自己执行搜索,再把结果交给智能体
当你自己运行 grep 并粘贴匹配到的行时,智能体只需为这几行付费。而让智能体去找同样的内容,它可能要为沿途打开的每个文件买单。git grep 和 git diff 这类工具运行速度快,而且不消耗任何 Token,所以让它们去做搜索,只把结果交给模型。
# Find every call site yourself
git grep -n "applyDiscount(" -- '*.ts'
# See only what changed, not whole files
git diff --stat
git diff -- src/cart/total.ts
然后粘贴输出结果,例如:“以下是 applyDiscount 的 4 处调用点:[粘贴的代码行]。请修改它们,传入 currency 参数。”
Spotify 将这一习惯做成了自动化方案。该方案会把 Claude Code 的批量文件读取转交给一个更便宜的工作模型(worker model),只把摘要交给 Claude。一位 Spotify 工程师在一个 Java monorepo 上对其进行了测试,共涉及四个场景。在每个场景中,他都将 Claude 自行读取文件所需的 Token 与读取工作模型摘要所用的 Token 进行对比,结果批量读取平均节省约 90%。该数据仅适用于这一个代码库,只统计了 Claude 的上下文而未计入工作模型消耗的 Token,并且只涵盖批量读取场景。Spotify Engineering 的文章也列出了方案的局限:由于摘要中缺乏可靠的行号,编辑操作仍需直接读取文件;推理和调试工作仍由 Claude 完成;每次委派都会增加延迟。
保持会话简短,适时重新开始
在不同任务之间开启新会话,而不是让一个对话无限增长。长对话会把完整的历史记录带入每条新消息,因此继续一个陈旧的会话线程,就意味着持续为你早已不需要的上下文付费。Anthropic 的 Claude Code 成本指南指出,如果 API 或云服务商套餐的支出高于预期,常见原因是某个会话从未清理,或默认模型仍设置为 Opus。该指南将”在不相关的任务之间清理会话”列为效果最显著的习惯之一。
# End of session 1
Summarize in under 15 lines: what we changed, what we decided, what is left.
Write it to NOTES.md.
# Start of session 2 (new chat/session)
Read NOTES.md, then continue with the first remaining item.
摘要保留了你做出的决策,新会话则丢掉了得出这些决策的过程记录。
关闭任务用不到的工具和集成
你启用的每个集成,都会增加智能体需要加载和可调用的内容。如果任务用不到某个集成,就把它禁用。MCP 服务器通常是罪魁祸首。Claude Code 现在会推迟加载完整的 MCP 工具定义,直到 Claude 真正需要时才载入,因此闲置服务器的开销比以前小了,但它的工具名称和说明仍然会占据上下文。Anthropic 的 Claude Code 成本指南仍然建议你运行 /mcp,关闭未在使用的服务器。数据库服务器、浏览器自动化服务器,再加上你上个月接入的工单系统集成,都会给一个只涉及 CSS 的会话增加负担。
对于单文件重构,请打开智能体的设置,关闭数据库、浏览器和问题跟踪相关的服务器,等任务需要时再重新开启。如果你不确定每个服务器暴露了哪些内容,可以参阅 MCP 生态系统指南,其中解释了客户端与服务器如何协同工作。如果你在维护自己的服务器,分步构建 MCP 服务器一文展示了如何只暴露你所定义的工具。
总结
| 习惯 | 从上下文中移除的内容 | 依据 |
|---|---|---|
| 明确指定文件 | 探索性的文件读取 | 基于推理的实践经验 |
| 项目说明文件 | 重复摸索项目约定;无效输出 | arXiv 2601.20404 |
| 先计划后写代码 | 在错误方向上消耗的读写操作 | 基于推理的实践经验 |
| 自己执行搜索 | 为找几行代码而打开的整个文件 | Spotify Engineering,单个 Java monorepo |
| 保持会话简短 | 陈旧的对话历史 | Anthropic 的 Claude Code 成本指南 |
| 禁用闲置工具 | 任务从未调用的集成 | Anthropic 的 Claude Code 成本指南 |
结语
Token 成本随上下文规模增长,而像 Claude Code 这样的智能体每次请求都会重新发送整个对话,因此它读取后又反复重读的上下文会迅速累积。上述每个习惯都是通过让上下文保持精简、聚焦任务来发挥作用的。不妨挑选其中一个习惯,把你即将发送的提示词和文件粘贴到 LLM Token 计数器中,分别统计改变前后的 Token 数。没有实测数据,所谓的节省只是猜测。
常见问题
压缩(compact)智能体会话和清理(clear)智能体会话有什么区别?
压缩是用摘要替换较早的对话历史并让会话继续进行,而清理则是丢弃历史记录、从全新的上下文开始。在 Claude Code 中,模型必须读取整个对话才能生成摘要,因此压缩一个庞大的上下文本身就是一次开销不小的请求,而清理则不产生任何费用。如果在任务进行中先前的决策仍然重要,就使用压缩;在不相关的任务之间,则使用清理。
在 Claude Code 中,未使用的 MCP 服务器还会消耗 Token 吗?
会,但比以前少。默认情况下,Claude Code 使用工具搜索(tool search)机制:启动时,模型只能看到每个服务器的工具名称和说明,只有当任务需要调用某个工具时,才会获取其完整 schema。在以下情况中,Claude Code 会回退为预先加载全部内容:ANTHROPIC_BASE_URL 指向非第一方主机时;在托管于 Azure 的 Microsoft Foundry 部署上;以及在 Google Cloud Agent Platform 上使用早于 Claude 4.5 代的模型时。标记为 alwaysLoad 的服务器也会被完整加载。此外,任何服务器的工具输出仍然会进入上下文。
换用更便宜的模型能减少 Token 用量吗?
不能。更便宜的模型改变的是每个 Token 的价格,而不是 Token 的数量。智能体仍然会读取同样的文件,重复发送同样的历史记录。不过这两种手段可以叠加使用:Anthropic 的 Claude Code 成本指南将"根据任务选择合适的模型"和"在不相关的任务之间清理会话"列为降低支出效果最显著的习惯。
如何在 Claude Code 内部查看 Token 用量?
运行 /usage 可查看会话成本、套餐用量上限和活动统计;运行 /context 可查看当前上下文窗口中各部分内容的占用明细。在 Pro、Max、Team 和 Enterprise 套餐中,/usage 还会指出占你近期用量 10% 或以上的行为(例如长上下文),并给出削减建议。其中显示的金额始终是按标价计算的估算值。如果你使用的是订阅套餐,它并不代表你实际支付的费用。