LLM token烧钱太狠?这个Rust工具帮你省80%

20 次阅读 0 点赞 0 评论 8 分钟原创开源项目

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

#Rust #AI工具 #CLI #Token优化 #开发者工具 #LLM #代理
LLM token烧钱太狠?这个Rust工具帮你省80%

用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的ReadGrepGlob这些内置工具不会经过Bash钩子。要用catrg等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支持还不够完善,但考虑到团队规模和发展阶段,可以理解。强烈推荐!

最后更新:2026-04-23T10:02:16

评论 (0)

发表评论

blog.comments.form.loading
0/500
加载评论中...