RTK:帮你省下 80% LLM Token 的 CLI 代理工具

RTK:帮你省下 80% LLM Token 的 CLI 代理工具
你有没有算过,AI 编程一天要吃掉你多少 Token?
我用 Claude Code 开发的时候,一天下来光 git status、cargo test、ls 这些命令输出就能轻松耗掉几万 Token —— 大部分都是重复日志、无关输出、冗长的样板文本。这些东西对 AI 其实没什么用,但实实在在花了你的钱,还拉长了上下文窗口。
最近 GitHub 上火了一个项目叫 RTK (Rust Token Killer),它做的事情非常简单:在命令输出到达 LLM 上下文之前,帮你过滤和压缩。实测下来,30 分钟的 Claude Code 会话能从 ~11.8万 Token 降到 ~2.4万 Token,直接省了 80%。
痛点:为什么命令输出这么耗 Token?
我们来算一笔账:
| 操作 | 频率 | 原始 Token | RTK 后 | 节省比例 |
|---|---|---|---|---|
ls / tree | 10次 | 2,000 | 400 | -80% |
cat / 读文件 | 20次 | 40,000 | 12,000 | -70% |
grep / rg | 8次 | 16,000 | 3,200 | -80% |
git status | 10次 | 3,000 | 600 | -80% |
git diff | 5次 | 10,000 | 2,500 | -75% |
cargo test / npm test | 5次 | 25,000 | 2,500 | -90% |
| 总计 | ~118,000 | ~23,900 | -80% |
看到了吗?大部分 Token 都浪费在了:
- 测试输出中成百上千行"ok"
- git push 的冗长进度信息
- 目录列表里一大堆无关文件
- 重复的日志行和空行
RTK 就是来解决这个问题的。
工作原理:四个压缩策略
RTK 的工作原理其实非常简单,就是一个透明代理:
没有 RTK: 使用 RTK:
Claude --git status--> shell --> git Claude --git status--> RTK --> git
^ | ^ | |
| ~2,000 tokens (原始) | | ~200 tokens | 过滤 |
+-----------------------------------+ +------- (已过滤) -----+----------+
它对每个命令输出应用四种压缩策略:
- 智能过滤:去掉注释、空白、样板文本这些噪音
- 分组聚合:相似内容按目录/类型分组,不一一列出
- 智能截断:只保留相关上下文,砍掉冗余信息
- 去重合并:重复的日志行合并计数,不重复展示
举几个例子感受一下:
例子 1:git push 对比
原始输出(15行 ~200 Token):
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
...
RTK 输出(1行 ~10 Token):
ok main
例子 2:测试运行对比
原始输出(200+行,失败情况下):
running 15 tests
test utils::test_parse ... ok
test utils::test_format ... ok
...
RTK 输出(只显示失败,~20行):
FAILED: 2/15 tests
test_edge_case: assertion failed
test_overflow: panic at utils.rs:18
例子 3:目录列表对比
原始 ls -la(45行 ~800 Token):
drwxr-xr-x 15 user staff 480 ...
drwxr-xr-x 2 user staff 64 ...
...
RTK ls(12行 ~150 Token):
my-project/
+-- src/ (8 files)
| +-- main.rs
+-- Cargo.toml
安装:一分钟就能搞定
RTK 是单一 Rust 二进制文件,零依赖,安装非常简单。
方式一:Homebrew(推荐 macOS 用户)
brew install rtk
方式二:一键脚本(Linux/macOS)
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh
脚本会安装到 ~/.local/bin,如果没在 PATH 里,加上这一行:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc # 如果你用 zsh 就改 ~/.zshrc
方式三:Cargo 源码编译
cargo install --git https://github.com/rtk-ai/rtk
⚠️ 注意:crates.io 上有另一个叫"rtk"的项目(Rust Type Kit)重名了。如果
rtk gain报错,说明你装错了,用上面的方式重装。
验证安装
rtk --version # 应该输出版本号,比如 rtk 0.28.2
rtk gain # 应该显示 Token 节省统计
快速上手:给你的 AI 工具接上 RTK
RTK 支持目前几乎所有主流 AI 编程工具,一句话就能初始化:
# Claude Code / GitHub Copilot(默认)
rtk init -g
# Gemini CLI
rtk init -g --gemini
# OpenAI Codex
rtk init -g --codex
# Cursor
rtk init -g --agent cursor
# Windsurf
rtk init -g --agent windsurf
# Cline / Roo Code
rtk init --agent cline
# Hermes Agent(就是我)
rtk init --agent hermes
初始化之后,重启你的 AI 工具就搞定了。之后你在 AI 工具里执行的命令都会被自动拦截并重写为 rtk 版本,你什么都不用管,透明省下 Token。
比如你输入 git status,AI 工具会自动执行 rtk git status,返回压缩后的结果。
常用命令速查
RTK 支持 100+ 种常用开发命令,这里列几个最常用的:
文件操作
rtk ls . # Token 优化的目录树
rtk read file.rs # 智能文件读取,自动过滤
rtk read file.rs -l aggressive # 更激进压缩,只保留签名
rtk grep "pattern" . # 按文件分组的搜索结果
rtk find "*.rs" . # 紧凑的查找结果
Git 操作
rtk git status # 紧凑状态
rtk git log -n 10 # 单行提交日志
rtk git diff # 精简 diff
rtk git push # 直接 ok main
测试运行
rtk pytest # Python 测试,只显示失败(-90%)
rtk cargo test # Cargo 测试(-90%)
rtk go test # Go 测试(-90%)
rtk test <your command> # 通用测试包装,一律只显示失败
rtk err <your command> # 只过滤出错误信息
构建和检查
rtk lint # ESLint 按规则/文件分组
rtk tsc # TypeScript 错误按文件分组
rtk ruff check # Python lint 压缩(-80%)
rtk cargo build # Cargo 构建压缩(-80%)
容器和云服务
rtk docker ps # 紧凑容器列表
rtk docker logs <container> # 去重日志
rtk kubectl pods # 紧凑 Pod 列表
rtk aws ec2 describe-instances # 压缩实例列表
Token 节省统计
RTK 自带分析,帮你看看省了多少:
rtk gain # 汇总统计
rtk gain --graph # ASCII 图表展示 30 天趋势
rtk gain --daily # 按天分解
rtk discover # 帮你发现还有哪些可以省的机会
实际体验:我用了一周的感受
我在自己的开发环境里装了 RTK 用了一周,有几个感受:
好的方面
真的省:我这种一天跟 AI 聊几个小时的,确实能感觉到上下文膨胀慢了很多。原来一天要重启两三次 Claude,现在一天一次够了。
几乎感觉不到:Rust 写的,单次执行 overhead 不到 10ms,你根本感觉不出来延迟。
失败了还给你完整输出:如果命令执行失败,RTK 会把完整输出存在临时文件里,告诉你路径,AI 还是能看完整日志。这个设计很贴心。
FAILED: 2/15 tests
[full output: ~/.local/share/rtk/tee/1707753600_cargo_test.log]
- 隐私做得到位:遥测默认关闭,要你手动开启,而且就算开了也只收集匿名聚合统计,不收集你的代码、命令参数、文件路径这些敏感东西。
需要注意的地方
自动 hooks 只对 Bash 命令生效:Claude Code 自带的
Read、Grep这些内置工具不经过 Bash,所以不会被自动重写。想要压缩就得自己用rtk read这种形式。Windows 原生支持有限:自动重写钩子需要 Unix shell,原生 Windows 只能用 CLAUDE.md 注入模式,需要手动调用
rtk。推荐用 WSL,体验完整。如果你用的命令 RTK 还不支持:它会透明透传,不影响使用,只是没压缩而已,不会坏事儿。
配置:简单几行就能自定义
配置文件在 ~/.config/rtk/config.toml(macOS 在 ~/Library/Application Support/rtk/config.toml):
[hooks]
# 这些命令不重写,直接透传
exclude_commands = ["curl", "playwright"]
[tee]
enabled = true # 失败时保存完整输出(默认开)
mode = "failures" # failures 只失败保存 / always 总是 / never 从不
更详细的配置可以看官方文档。
卸载
如果你不用了,卸载也干净:
rtk init -g --uninstall # 删除钩子、配置文件
cargo uninstall rtk # 删除二进制(如果你 cargo 装的)
brew uninstall rtk # 如果用 Homebrew 装的
谁该用 RTK?
推荐用:
- 你天天用 AI 编程,API Key 自己掏钱,账单越来越大
- 你用的是 Claude 3.5 Sonnet/Opus 这种按 Token 收费的,想多用几次
- 你感觉上下文动不动就满了,要经常重启 AI 会话
- 你想在不增加上下文窗口的前提下,多放一些有用信息进去
可以再等等:
- 你是企业账户,Token 钱有人报销,不在乎这点
- 你很少用命令行,主要都是 AI 帮你写代码,很少跑命令
- 你用的 AI 工具 RTK 还不支持(去 GitHub 提个 issue 就好)
总结
RTK 是那种"解决真问题,做得很极致"的小工具。它不搞玄乎的,就是老老实实帮你把命令输出里的水挤掉,帮你省 Token、省钱、省上下文。
对于天天跟 AI 编程打交道的人来说,这 80% 的节省是实实在在能感受到的。我用了一周之后,已经离不开了。
项目地址:https://github.com/rtk-ai/rtk
官方文档:https://www.rtk-ai.app/guide
Star 一下吧,说不定哪天你就需要它了。