Agent 省 Token 全指南:六大优化技术与 Claude Code、Codex、Copilot 的真实做法
Agent 省 Token 全指南:六大优化技术与 Claude Code、Codex、Copilot 的真实做法
Token 不是被「用掉」的,是被「设计掉」的。
一个中型 coding agent 会话,上下文里躺着系统提示词、几十个工具定义、CLAUDE.md、几轮文件读取的输出、工具报错、用户对话——随便一跑就是十几万 token,其中真正和当前任务相关的可能不到两成。2026 年各家 agent 的迭代重点已经从「模型多强」转向「每个 token 花得值不值」。这篇文章把开源社区和四大 agent CLI 的优化做法拆成六大类,数字全部来自官方文档和仓库源码,可直接对着抄。
本文提纲
- 六大类优化技术总览
- 第一类:上下文预算——决定什么能进门
- 第二类:精准检索——别把整个文件塞给模型
- 第三类:压缩与驱逐——满了以后丢什么
- 第四类:缓存——同样的前缀别再付一次钱
- 第五类:模型分级——便宜模型干杂活
- 第六类:输出纪律——省下的另一半
- 汇总速查表
graph LR
A[Token 优化六类] --> B[A 上下文预算]
A --> C[B 精准检索]
A --> D[C 压缩与驱逐]
A --> E[D 缓存]
A --> F[E 模型分级]
A --> G[F 输出纪律]
B --> H[进门之前省]
C --> H
D --> I[会话之中省]
E --> J[付账之时省]
F --> J
G --> I一、上下文预算:决定什么能进门
最便宜的 token 是永远不进上下文的 token。
MCP 工具搜索(Claude Code)。接了几个 MCP server 之后,工具定义本身就能吃掉几万 token。Claude Code 的解法是 tool search 默认开启:会话启动时只加载工具名和 server 说明,工具的完整定义延迟到模型通过 ToolSearch 调用时才加载。ENABLE_TOOL_SEARCH=auto 的阈值是——当工具定义超过上下文窗口的 10% 才启用延迟(工具描述截断到 2,048 字符)。另外 MAX_MCP_OUTPUT_TOKENS 给工具输出封顶:1 万 token 警告,2.5 万强制截断。
CLAUDE.md 渐进式披露(Claude Code)。官方目标「每个文件 200 行以内」;子目录级 CLAUDE.md 和 .claude/rules/ 带 paths: 声明的规则按需加载——只有碰到匹配路径的文件才进上下文。自动记忆的 MEMORY.md 只加载前 200 行 / 25KB,主题文件按需展开。
每工具输出限额(Codex CLI)。openai/codex(127.5k star)在配置里给每个 MCP 工具单独设 output_token_limit,超限截断——不让某个工具的一次输出毁掉整个会话的预算。
Aider 仓库地图(Aider-AI/aider,49.3k star)。老牌做法:用图算法在文件依赖边上给符号排序,生成一份只含关键类/函数签名的 repo-map,--map-tokens 默认只有 1k token——用 1k token 换「整个仓库长什么样」的先验,让模型自己决定打开哪个文件。
二、精准检索:别把整个文件塞给模型
上下文里最贵的东西是「整个文件的原文」。三类做法在争夺这个位置:
- LSP 符号检索(serena 路线):找定义/找引用精确到符号,token 开销远低于读整个文件。
- AST 结构检索(ast-grep 路线):按语法节点匹配,零误报,适合批量改写前的定位。
- 代码知识图谱(graphify 一类):先建图再查图,README 宣称大幅省 token——但引用前记得验证(详见本站代码搜索调研)。
还有一个常被忽视的点:检索失败也烧 token。grep 打错关键词返回一千行噪音,这千行全在上下文里。Gemini CLI 的压缩服务专门把「检索类工具」(read_file、grep、glob)的输出豁免于折叠——刚读到的内容保持完整,防止压缩把检索成果毁掉。
三、压缩与驱逐:满了以后丢什么
四个 CLI 都有自动压缩,细节差异很有信息量:
| Agent | 触发时机 | 保留策略 | 特色 |
|---|---|---|---|
| Claude Code | 上下文逼近上限(1M 窗口在 ~967K 触发) | /compact 可带重点指示;/rewind 支持从某处开始重摘要 |
/usage 显示缓存命中率并归因 miss 原因(如「工具定义变了」) |
| Codex CLI | 自动压缩内置(可关的开关已移除) | /compact、/recap 即时摘要 |
per-MCP-tool output_token_limit 源头截断 |
| Gemini CLI | 上下文达模型上限 50% 触发(源码 DEFAULT_COMPRESSION_TOKEN_THRESHOLD = 0.5) |
保留最近 3 轮工具响应完整,其余工具输出折叠到 2,048 字节 | 检索类工具豁免折叠 |
| LangChain 框架层 | SummarizationMiddleware 自定义(如 4,000 token 触发) |
保留最近 20 条消息 | trim / delete / summarize 三件套官方姿势 |
两个流行误传在此纠正:Gemini CLI 不是「60% 触发」,源码写的是 50%;Claude Code 的「microcompaction」一词在 CHANGELOG(全文 887KB)和现行文档里都搜不到,官方说法是「clearing old tool results from context」——机制存在,名字是社区传的。
边界条件值得记住:Anthropic 官方博客披露,context editing(自动清理过期工具调用与结果)在 100 轮搜索测试里减少 84% token 消耗、单用准确率 +29%、配合 memory 工具 +39%。压缩不是免费的——「压缩大上下文本身就是一个大请求」,所以触发阈值调得太低反而费钱。
另一条路线是模型侧压缩:microsoft/LLMLingua(6.7k star)用小模型(GPT-2/phi-2 级别)做提示词压缩,宣称最高 20x 压缩率、LongLLMLingua 用 1/4 token 提升 RAG 21.4%。适合愿意加一道离线压缩工序的管线,不适合直接嵌交互式 agent。
四、缓存:同样的前缀别再付一次钱
这是回报最确定的一类——不改变行为,只改账单:
- Anthropic:缓存读 0.1x 输入价(省 90%),写入 1.25x,5 分钟 TTL(可加钱延到 1 小时)。Claude Code 自动开启,订阅用户缓存寿命 1 小时。
- OpenAI:≥1,024 token 自动缓存,按 128 token 增量计;折扣按模型 50%–90%(gpt-4o 50%、gpt-4.1 75%、gpt-5 系 90%),首 token 延迟最高降 80%。
- LiteLLM 网关(60k star):
cache: true开响应缓存(Redis/语义缓存多种后端),加 per-keymax_budget/tpm_limit——团队级的「谁来买单」治理层。
工程含义:缓存对提示词结构敏感。前缀稳定(系统提示词、工具定义不动)才能吃到 90% 折扣;所以 Claude Code 会在 /usage 里告诉你 miss 的原因是不是「工具定义变了」。动态内容(日期、随机 ID)务必放到提示词尾部。Anthropic 的缓存写是 1.25x——高频复用的前缀才值得写缓存,一次性请求写缓存反而多花 25%。
五、模型分级:便宜模型干杂活
- Claude Code subagent 路由:子代理各自独立上下文窗口,只把摘要带回来;
model: haiku直接把探索性任务交给便宜模型。官方数字:agent teams 大约消耗标准会话 7 倍 token——多 agent 不是免费午餐,路由不当就是 7 倍账单。 - Copilot AI credits:计费改革为 1 credit = $0.01,Pro $10/月 = 1,500 credits;Auto 模型选择自动省 10%;传统 premium 倍率从最低 0.33x(GPT-4o mini、GPT-5 mini、Haiku 4.5 等)到 27x(Opus 4.7)甚至 57x(GPT-5.5)——同一句 prompt,选错模型差 170 倍。
- 思考 token 单独计价:thinking 按 output 价收,Claude Code 用
MAX_THINKING_TOKENS=8000封顶。深度思考是贵的地方,别让它想太多废话。
六、输出纪律:省下的另一半
输入侧省得再多,输出侧失控照样爆账单(输出单价通常是输入的 4–8 倍):
- 工具描述写得短——工具定义每次请求都在上下文里,属于「被缓存 but 反复计费」的敏感区。
- 子代理的 description 控制在预算内(Claude Code 提示子代理描述总计 1.5 万 token 警戒)。
- 思考预算封顶、
/effort分档,让「想多久」与任务难度匹配。 - 结构化输出 + 明确停止条件,避免模型为了礼貌多写 300 字。
汇总速查表
| 类别 | 手段 | 关键数字 | 出处 |
|---|---|---|---|
| A 上下文预算 | MCP tool search | 定义 >10% 窗口才延迟加载;描述截断 2,048 字符 | Claude Code docs |
| A 上下文预算 | CLAUDE.md 渐进披露 | <200 行/文件;MEMORY.md 前 200 行/25KB | Claude Code docs |
| A 上下文预算 | 工具输出限额 | 1 万警告 / 2.5 万截断;Codex per-tool limit | 两家 docs/源码 |
| B 精准检索 | Aider repo-map | 默认 1k token 画全仓库地图 | aider.chat |
| C 压缩驱逐 | 自动压缩 | Claude ~967K(1M 窗口);Gemini 50% 触发、保留 3 轮、折叠至 2KB | 各家 docs/源码 |
| C 压缩驱逐 | Context editing | 100 轮测试 −84% token、+29% 准确率 | Anthropic blog |
| C 压缩驱逐 | LLMLingua | 最高 20x 压缩;RAG +21.4% 用 1/4 token | GitHub README |
| D 缓存 | Anthropic | 读 0.1x(−90%)、写 1.25x、5min TTL | claude.com/pricing |
| D 缓存 | OpenAI | ≥1,024 token 自动;50–90% 按模型;TTFT −80% | OpenAI Cookbook |
| E 模型分级 | Copilot credits | Auto 模型 −10%;倍率 0.33x–57x | GitHub docs |
| E 模型分级 | 子代理路由 | Haiku 干杂活;agent teams ≈ 7x token | Claude Code docs |
| F 输出纪律 | 思考封顶 | MAX_THINKING_TOKENS=8000 | Claude Code docs |
给自建 agent 的落地顺序
- 先接缓存(改提示词结构即可,零行为变化):稳定前缀 + 动态内容后置,账单立省 50–90%。
- 再上输出限额:每个工具
output_token_limit+ 全局 MCP cap,防止单次失控。 - 然后做渐进披露:system prompt 瘦身、工具延迟加载、规则按需进上下文。
- 压缩阈值最后调:跑起来之后看真实会话长度分布再定触发点(Gemini 选 50%、Claude 选 95%+,中间是工作负载差异,不是谁对谁错)。
- 模型分级收尾:把探索、总结类子任务路由到便宜模型,护栏用 thinking 封顶。
一句话总结:进门之前少装、会话之中勤丢、付账之时打折、便宜模型扛杂活、输出带上缰绳——五件事做完,同样的 agent 工作流,账单差出一个数量级。
作者: itech001 来源: 公众号:AI人工智能时代(the-ai-era) 网站: https://www.theaiera.top/ 关注每日最新AI新闻和技术博客,主页有更多的文章的AI 技术参考:https://www.theaiera.top
本文首发于 AI人工智能时代,转载请注明出处。