LLM token烧钱太狠?这个Rust工具帮你省80%
rtk是一款用Rust编写的CLI代理工具,通过智能过滤命令输出,可将LLM token消耗降低60-90%。支持12个主流AI编程工具,单二进制零依赖,处理开销<10ms。本文深度解析其Hook机制、四大瘦身策略及实战配置。

用Claude Code或者Cursor时,有没有算过一笔账:让AI看一眼项目结构,ls -la返回1000+ tokens;让它读个文件,cat又是2000+ tokens;跑个测试,300行输出里290行都是"test xxx ... ok"。一次会话轻轻松松10万+ tokens,按照现在的定价,这简直是在烧钱。
作为一个被Spring全家桶折磨多年的Java老兵,我对AI编程工具向来保持 skeptical 的态度。但最近发现了一个叫 rtk(Rust Token Killer)的项目,看完README我不得不承认:这玩意儿是真有干货。
核心思路:做个"中间商"
rtk的工作方式非常巧妙——它在命令输出到达LLM之前先做一轮"瘦身"。就像你点外卖时让商家"少放米饭",该吃的营养(关键信息)还在,但那些填肚子的碳水(冗余输出)被砍掉了。
它的架构可以用一张图说清楚:
Without rtk:
Claude --git status--> shell --> git
^ |
| ~2000 tokens |
+-----------------------+
With rtk:
Claude --git status--> RTK --> git
^ | |
| ~200 tokens | filter |
+---- filtered -----+---------+
关键在于Auto-Rewrite Hook机制。当Claude说要执行git status时,rtk会在中间截胡,变成rtk git status,处理完再把精简结果返回。整个过程对LLM完全透明,它根本不知道有个"中间商赚差价"。
技术架构:典型的Rust风格
作为一个Rust项目,rtk的架构设计非常"Rust风格":
- 单一二进制文件:没有依赖地狱,下载即用
- 零运行时依赖:想想Java项目的Maven依赖树...
- <10ms的处理开销:这个性能指标对于CLI工具来说相当优秀
这种设计恰恰是Rust的优势场景。CLI工具、系统级代理、高性能过滤——要是用Java实现,起码要多花10倍功夫,还得背上一个几十MB的JAR包。
四大"瘦身"策略
rtk不是简单粗暴地截断输出,而是用了四种更聪明的策略:
1. 智能过滤:去掉注释、多余空白、样板内容。比如git status里那些"Changes not staged for commit"的提示语会被压缩。
2. 分组聚合:按目录聚合文件、按类型聚合错误。100个修改的文件不会被列成100行,而是按目录归类。
3. 智能截断:保留相关上下文,砍掉冗余部分。测试输出只保留失败的用例,成功的用一行 summary 代替。
4. 去重压缩:重复的日志行用计数代替。就像整理衣柜,把同款衣服叠在一起,而不是全摊开。
这四种策略配合使用,能达到60-90%的token节省比例。
安装与配置
安装非常简单,支持多种方式:
bash
## Homebrew安装(推荐)
brew install rtk
## 一键安装脚本(Linux/macOS)
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh
## Rust用户从源码安装
cargo install --git https://github.com/rtk-ai/rtk
安装完成后,一行命令就能激活:
bash
## 为Claude Code安装钩子
rtk init -g
## 为其他AI工具安装
rtk init -g --gemini # Gemini CLI
rtk init -g --codex # Codex
rtk init --agent cursor # Cursor
rtk init --agent windsurf # Windsurf
## 重启AI工具后,命令自动被rtk处理
git status # 自动重写成 rtk git status
rtk支持12个主流AI编程工具,覆盖了我日常用的大部分场景。配置完成后,所有shell命令都会自动经过rtk处理,无需手动调用。
高级配置:TOML说了算
rtk的配置文件在~/.config/rtk/config.toml:
toml
## 配置文件(~/.config/rtk/config.toml)
[hooks]
exclude_commands = ["curl", "playwright"] # 这些命令不重写
[tee]
enabled = true # 失败时保存完整输出
mode = "failures" # 可选:failures/always/never
这个tee功能很贴心:当命令失败时,rtk会把完整输出保存到本地,LLM需要时可以读取,避免了重新执行命令。对于调试场景特别有用——第一次失败时保存完整日志,AI分析时可以随时查阅。
查看节省统计也很方便:
bash
## 查看节省统计
rtk gain
rtk gain --graph # ASCII图表展示
rtk gain --history # 查看历史命令
## 使用各种过滤命令
rtk ls . # 优化的目录树
rtk git status # 压缩的git状态
rtk test cargo test # 只显示失败的测试
rtk read file.rs -l aggressive # 仅显示签名,隐藏函数体
实测数据:到底有多香?
README里给了一组实测数据,我摘几个典型场景:
| 命令 | 原始tokens | rtk处理后 | 节省比例 |
|---|---|---|---|
git push |
200 | 10 | 95% |
cargo test |
25000 | 2500 | 90% |
git status |
3000 | 600 | 80% |
ls/tree |
2000 | 400 | 80% |
一个30分钟的Claude Code会话,能从11.8万tokens降到2.4万,省了80%。按照Claude的定价,一个月下来能省不少钱。对于重度AI编程助手用户来说,这是真金白银的节省。
踩坑指南
使用过程中有几个需要注意的地方:
1. Windows用户注意:原生Windows只支持CLAUDE.md注入模式,钩子功能需要WSL。建议直接用WSL,体验和Linux一样。
2. 内置工具不经过钩子:Claude Code的Read、Grep、Glob这些内置工具不会经过Bash钩子。要用cat、rg等shell命令,或者显式调用rtk read等命令。
3. 名字冲突:crates.io上有个同名的"Rust Type Kit"。如果rtk gain报错,说明你装错了。用cargo install --git重新安装。
作为Java开发者的思考
看完这个项目,我有几点感受值得分享。
rtk的Hook机制其实是一种中间件模式。我在想,我们Java生态里的各种Maven/Gradle插件,是不是也可以借鉴这种"透明代理"的思路?比如在CI/CD流水线里自动过滤冗长日志,省下的存储和带宽也是成本。
另外,rtk的隐私设计很到位。遥测数据需要用户显式同意,而且只收集匿名聚合数据。这点对国内很多"悄悄收集用户数据"的工具来说,是个很好的示范。
到底值不值得用?
我的建议是:如果你经常用AI编程助手,尤其是Claude Code,这玩意儿必装。
理由有三:
- 真金白银省钱:80%的token节省不是开玩笑的
- 零学习成本:装完就不用管了,全自动
- 开源可信赖:Rust写的,单文件,没什么可藏的
唯一的问题是:这个项目出来才多久就已经3万+星了,团队能不能跟上维护节奏?从README看有12个AI工具的集成还在持续更新,希望不会变成"昙花一现"的网红项目。
如果是我,我会在自己所有开发机上安装rtk,然后在团队内部推广,尤其是用AI辅助编程的同事。顺便研究一下它的过滤器实现,看看能不能借鉴到我们的日志系统里。
这个项目让我看到了Rust在开发者工具领域的潜力。也许有一天,我们Java开发者也能用上一个类似的"日志token减肥"工具——不过以Java的重量,怕是很难做到单文件吧(苦笑)。
总体评价:⭐⭐⭐⭐☆(4.5/5)
扣0.5分是因为Windows支持还不够完善,但考虑到团队规模和发展阶段,可以理解。强烈推荐!