AI 编程 Agent Token 优化实战:用路由策略减少 70% Token 消耗
AI 编程 Agent(Claude Code、Codex CLI、OpenCode)最贵的成本不是 API 调用费,而是漫无目的地读取整份文件。
这不是观念问题,而是有实测数据的。在一个 30 个文件的 Python 项目中,Agent 把 ~88% 的 Token 花在了过度读取上——为了回答一个窄问题,把整个文件塞进上下文。当全文件读取被替换为语义检索后,Token 消耗直接下降 66%。
这不是工具的问题,是策略的问题。你给 Agent 配置的工具箱决定了它的 Token 浪费程度。
问题的四个层次
Token 消耗不是铁板一块。把每笔花销拆开看,其实是四个独立的层次:
| 层次 | 是什么 | 占比 | 解决方案 |
|---|---|---|---|
| 代码读取(输入) | 读文件理解结构、符号、调用关系 | ~88%(最大头) | 语义检索 |
| 命令输出(输入) | 跑测试、构建、git、grep 的 stdout | ~10% | 输出压缩 |
| 回答生成(输出) | Agent 自己的长篇回复 | ~2% | 精简风格 |
| 零碎操作 | 查一行代码、看一个文件 | <1% | 直接读取 |
关键洞察:别用一个工具处理所有层次。 每个层次有自己的最佳工具,混着用会互相抵消收益。
五种武器,各司其职
Token-saviour 的思路很简单:给五个工具各划一块领地,Agent 根据当前任务选对的那一个。
1. Serena(LSP 语义检索)→ 替代「读文件」
Serena 通过 LSP 协议理解代码结构,提供精确的符号级查询:
get_symbols_overview(path)— 获取文件的顶层符号列表(加depth: 1看方法)find_symbol(name, path)— 定位符号定义,含函数体find_referencing_symbols(name, path)— 查找所有调用点
实测数据:用 Serena 读一个类的全部方法只需 55 token vs 直接读文件的 458 token(节省 71%);解释整个项目架构只需 243 token vs 3250 token(节省 85%)。
2. Graphify(代码图谱)→ 替代「grep + 读文件」
Graphify 用 tree-sitter 构建代码的关系图谱,专攻导航和影响分析:
graphify update--no-cluster # 一次性构建图谱 graphify query "who calls notify?" # BFS 搜索调用者 graphify path "create_task" "Database" # 符号间最短路径 graphify affected "ClassName" # 反向遍历:修改影响范围
实测数据:追踪一个 4 层的调用链只需 65 token vs 直接读文件的 1633 token(节省 89%)。
Serena vs Graphify 怎么选?如果工作流以导航为主(”谁调了这个”、”影响哪些模块”),选 Graphify;如果以理解和编辑为主(跨文件阅读 + 语义重构),选 Serena。两者各装一种就够,别装两个。
3. RTK(CLI 输出压缩机)→ 替代「跑命令看屏」
Agent 经常跑测试、build、git log,然后把几 KB 的输出全吞进上下文。RTK 是一个 Rust 写的 CLI 代理,压缩这些冗长输出:
rtk test pytest # 只保留失败用例和摘要 rtk grep "pattern"# 紧凑 grep(分组、截断) rtk diff # 压缩 diff 输出 rtk ls / rtk tree # 紧凑文件列表
实测数据:测试输出的 token 数减少 65%,目录结构减少 38%。压缩量随输出冗长度线性增长——所以失败测试 dump 和 build log 收益最高。
4. Caveman(精简模式)→ 替代「写长篇回复」
Caveman 不是工具,是一个风格开关。当 Agent 准备写一大段解释性文字时,切换到 /caveman 模式(分 lite/full/ultra 三级):
- 保留代码块、命令、API 名称、错误信息——这些不可以压缩
- 压缩过渡句、客套话、修饰词——这些稀释了信息密度
注意反向效果:对于本身已经简洁的回复(如列表、错误指正),Caveman 反而可能增加 token(加 markdown 头)。只对确定的长篇回答使用。
5. 直接读(兜底)→ 别过度工程化
一行代码、一个标志位、一条配置——这些零碎操作直接 Read/Grep/Bash 就好。工具的安装和调用开销在小任务上可能比省下的还多。
最佳组合:一加一加一
四个层次彼此独立,所以组合使用是叠加收益:
推荐栈:(Serena 或 Graphify) + RTK + Caveman
实测组合收益:70% Token 减少。
不能做的事:
- ❌ 不要同时装 Serena 和 Graphify——两个集成,一个收益
- ❌ 不要用 RTK 修复代码理解成本——它在那层的收益是 ~0%
- ❌ 不要在代码读取多的场景依赖 Caveman——它只压缩你的输出,而输出只占 ~2%
在 Claude Code 中实战配置
以 Claude Code 为例,将 Token-saviour 的 SKILL.md 文件复制到 skills 目录即可:
mkdir -p ~/.claude/skills/ curl -sSL https://raw.githubusercontent.com/vagkaratzas/skills/main/token-saviour/SKILL.md \ -o ~/.claude/skills/token-saviour.md
Claude Code 在下次启动时自动加载这个 SKILL.md。之后每次要读文件理解代码时,它会先判断当前场景属于哪个层次,然后调用对应的工具。
同样的配置也适用于 Codex CLI(~/.codex/skills/)和 Cursor(~/.cursor/skills/)。
核心原则
Token-saviour 最重要的不是五个工具本身,而是一条认知规则:
先问”这个任务在哪个层次花钱”,再选工具。
读一个文件查一个方法?→ 用 Serena/Graphify,别 Read 整文件。
刚跑完测试要看结果?→ 用 RTK,别让 Agent 吞全部 stdout。
Agent 正准备写三千字解释?→ 切 Caveman,省的是你自己账单上的钱。
Token 是 AI 编程时代最贵的原材料。不是不够用,是大部分被浪费了。