上个月月初,我习惯性地查了一下 API 账单,一看数字差点没把早饭喷出来——光 Token 费用就干了大几百。
我寻思我也没干啥啊,不就是每天跟 Hermes 聊聊天、改改代码、跑跑测试吗?怎么 Token 就跑得跟流水一样?
后来仔细琢磨了一下,发现问题出在终端输出上。
我跟 Hermes 的交互模式大概是这样的:
我让它改个代码 → 它执行 mvn compile 看编译结果 → 编译输出刷刷刷几百行 → 这几百行全算 Token → 它看完之后再回我一句话 → 这句话也算 Token。
一来一回,一个编译命令就能烧掉两三千 Token。一天下来几十次终端操作,Token 就这么悄无声息地流走了。
更坑的是,很多时候 AI 根本不需要看完整的编译输出来判断"编译是否成功"。它只需要知道"BUILD SUCCESS"还是"BUILD FAILED"就够了。但工具不管这些,原封不动把几百行输出全塞给 AI。
这就像你去饭店点菜,服务员把整个厨房的菜单、食材清单、厨师排班表全给你端上来了,就为了让你说一句"我要一份鱼香肉丝"。浪费,太浪费了。
RTK 全称 Rust Token Killer,是一个用 Rust 写的开源工具,GitHub 地址是 https://github.com/rtk-ai/rtk。
它的核心功能就一个:在终端输出到达 AI 之前,先把输出压缩一遍。
怎么压缩呢?不是简单粗暴地砍掉一半字符,而是智能识别输出类型,用最精简的方式呈现同样的信息。
比如 ls -la 的输出,原本是:
-rw-r--r-- 1 weizhenwang staff 776 Jul 22 03:01 AbnormalService.java -rw-r--r-- 1 weizhenwang staff 878 Jul 22 03:01 AdsInfoService.java
RTK 压缩后变成:
644 AbnormalService.java 776B 644 AdsInfoService.java 878B
owner、group、日期这些信息在绝大多数场景下 AI 根本用不着,砍掉完全不影响理解。文件权限(644)保留是因为有时候排查问题确实需要看权限。
类似地,git diff 的输出会被压缩成只有变更行摘要;编译日志会被去掉时间戳和重复的 warning;docker ps 的输出会被精简到只剩关键字段。
我用了一个星期后统计了一下数据:
| 场景 | 压缩前 | 压缩后 | 节省比例 |
|---|---|---|---|
| ls -la 大目录 | ~500 tokens | ~80 tokens | 84% |
| git status | ~300 tokens | ~50 tokens | 83% |
| mvn compile 完整输出 | ~3500 tokens | ~400 tokens | 89% |
| docker ps -a | ~400 tokens | ~60 tokens | 85% |
| PostgreSQL 查询结果(20行) | ~2000 tokens | ~300 tokens | 85% |
| git diff | ~1500 tokens | ~200 tokens | 87% |
日均 Token 消耗直接从50万降到了10万左右。换算成人民币,每个月省下来的钱够吃好几顿火锅了。
RTK 的安装简单到离谱,就两条命令。
Mac用户:
shbrew install rtk
Linux用户可以去 GitHub Releases 下载对应的二进制。
shrtk init --agent hermes
这条命令会在 ~/.hermes/plugins/rtk-rewrite/ 下创建一个插件,以后所有终端命令都会先经过 RTK 再返回给 AI。
sh/reset
重启后随便执行一个长输出的命令,看输出格式就知道了。
正常 ps aux 的输出长这样:
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND weizhenwang 44053 34.9 2.7 1890953888 457824 ?? S 3:03AM 0:37.98 /Users/weizhenwang/...
RTK 压缩后的输出长这样:
weizhenwang 44053 34.9 2.7 ?? S 3:03AM /Users/weizhenwang/...
看到区别了吗?VSZ、RSS、TIME 这些不太常用的列被去掉了,但 PID、CPU、MEM、COMMAND 这些关键信息都保留了。
如果哪天你觉得某个命令的输出被压缩得太厉害,可以在命令前面加环境变量跳过 RTK:
shRTK_OFF=1 你的命令
RTK 压缩的是终端输出,codebase-memory-mcp 压缩的是代码查询。两个一起用,Token 消耗能降到原来的十分之一以下。
RTK 对不同类型的输出有不同的压缩策略:
极少数情况下 RTK 的压缩可能会导致输出格式异常。这时候可以:
RTK_OFF=1 临时跳过之前也有人用脚本压缩终端输出,但基本都是简单的行数截断或者关键词过滤。RTK 不一样:
ls、git、docker 还是 ps 的输出,针对不同类型用不同的压缩策略现在 AI 模型的 API 价格虽然一直在降,但对于重度用户来说,Token 费用依然是一笔不容忽视的开支。
我之前看到一个群友的做法很有意思——他把每个月 Token 省下来的钱单独记一笔账,年底一看,省出来的钱够买一台新 MacBook 了。
我虽然没有他那么夸张,但 RTK 省下来的钱确实让我每个月少了一笔"看起来不多但加起来挺吓人"的开支。
搞 AI 写代码的兄弟,这玩意儿建议人手一个。省下来的都是真金白银。
本文作者:JACK WEI
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!