2026年6月16日 1 分钟阅读

AI 编程 Agent Token 优化实战:用路由策略减少 70% Token 消耗

tinyash 0 条评论

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 编程时代最贵的原材料。不是不够用,是大部分被浪费了。

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。