token-saving-methods
三种互补的 Token 优化方法论
一、 RTK
1.1 定位
RTK
1.2 核心机制
四种策略
- 智能过滤
去除注释: 空行、 样板代码、 ANSI 控制字符、 - 分组聚合
文件按目录分组: 错误按类型归并、 测试结果按模块折叠、 - 截断保底
保留头尾关键信息: 压缩中间冗余, - 去重计数
重复日志行折叠为 “同样信息重复 N 次”:
无 RTK: Claude ──git status──→ Shell ──→ 原始输出(~2000 tokens)──→ LLM
有 RTK: Claude ──git status──→ RTK ──→ 过滤输出(~200 tokens)──→ LLM
RTK 重写命令调用
1.3 使用
brew install rtk
rtk init --global # 为 Claude Code 安装 Hook,后续命令自动优化
rtk gain # 查看节省统计
安装 Hook 后gitgrepcargo 等命令输出自动压缩
rtk git log -n 10 # 压缩 Git 日志
rtk cargo test # 仅保留测试失败信息(节省约 90%)
rtk discover # 分析历史会话,发现可优化命令
典型节省cargo test / pytest 约 90%git diff 约 75%ls / tree 约 80%
1.4 适用边界
适用于命令输出驱动的场景
二、 CodeGraph
2.1 定位
将代码库静态结构预索引为知识图谱
2.2 核心机制
四个阶段
- AST 解析
Tree-sitter 将源码解析为 AST: 识别函数, 类、 方法调用、 继承、 导入等结构化信息、 支持 20+ 语言。 。 - 图结构存储
解析结果存入本地 SQLite: 两类实体——节点。 函数( 类、 接口、 变量、 枚举、 路由、 和边) 调用( 继承、 实现、 导入、 引用、 ) FTS5 全文索引支持即时符号搜索。 。 - 引用解析
跨文件引用通过名称匹配和导入链路分析解析: 同时识别框架级路由绑定。 Django URL → View( Express 路由 → Handler、 ) 。 - 增量同步
通过 OS 原生文件事件监听: FSEvents / inotify / ReadDirectoryChangesW( 自动增量更新) 约 2 秒防抖窗口, 。
传统检索:
Claude ──grep "UserService"──→ 返回 50 个文件
──Read file1.ts────→ 扫描
──Read file2.ts────→ 扫描
──... 10-20 次工具调用 ...
CodeGraph 检索:
Claude ──codegraph_context("UserService")──→ 符号定义 + 调用者 + 被调用者
──codegraph_explore("UserService.getUser")──→ 相关源码
──完成(2-3 次调用,零文件读取)
通过 MCP 协议暴露工具接口给 Agent
2.3 使用
npx @colbymchenry/codegraph
cd your-project && codegraph init -i
# 重启 Agent 后自动使用图谱检索
Claude Codecodegraph_contextcodegraph_explorecodegraph_trace 等工具
codegraph context "How does a request reach the database"
codegraph callers "UserService.getUser"
codegraph impact "src/auth.ts"
codegraph trace "AuthMiddleware" "Database.query"
7 个真实项目基准测试
2.4 适用边界
最适中型以上代码库的结构理解
三、 Caveman
3.1 定位
通过系统提示词工程
3.2 核心机制
四层机制
- 表述模板
去掉冠词和系动词: 短语替代完整句子, 符号, ( →、 =、 ≠ 替代文字连接) - 强度分级
: lite 仅去填充词( ) 、 full 默认( 省略冠词/系动词, ) 、 ultra 电报体( ) 、 wenyan 文言文( ) - 自动激活
SessionStart Hook 注入紧缩指令: UserPromptSubmit Hook 注入注意力锚点, 防止长会话中模式滑回, - 自动回退
安全警告: 不可逆操作确认、 多步骤关键流程、 用户困惑时、 自动恢复完整表述,
无 Caveman:
LLM: "The reason your React component is re-rendering is likely because..."(69 tokens)
有 Caveman:
LLM: "New object ref each render. Inline object prop = new ref = re-render."(19 tokens)
仅影响输出 Token
3.3 使用
curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.sh | bash
会话内控制
/caveman # 默认紧缩模式(full)
/caveman ultra # 极限紧缩
normal mode # 恢复正常表达
配套工具
/caveman-commit # ≤50 字符 Conventional Commit
/caveman-review # 一行式 PR 审查意见
/caveman-compress CLAUDE.md # 压缩记忆文件(节省约 46%)
/caveman-stats # 会话 Token 节省统计
10 个典型编程任务平均减少 65% 输出 Token
3.4 适用边界
最适高频
四、 分层部署
三种方法攻击面不同
| 方法论 | 作用阶段 | 优化目标 | 典型节省 |
|---|---|---|---|
| RTK | 输入侧 |
压缩 CLI 输出 | 60-90% |
| CodeGraph | 检索侧 |
减少检索工具调用 | 57% Token / 71% 调用 |
| Caveman | 输出侧 |
压缩 LLM 回复 | 65% 输出 Token |
完整优化管线
4.1 部署建议
- 个人开发者
RTK 或 Caveman 单用即有显著收益: RTK 更适合编译/文件操作驱动的场景。 Caveman 更适合对回复效率有要求的场景; 。 - 团队项目
CodeGraph 的持久化索引在团队中共享价值最大: 建议配合 RTK。 检索和输入两端同时优化, 。 - 全量部署
三者分层优化: 互不冲突, 输入噪音。 低效检索、 回复冗余各自处理、 。