
引言
过去这半年,我写代码的方式彻底变了。
我以前主要用 Go 和 Java 写后端、用 Vue3 写前端。遇到新需求,打开 IDE,脑子里先过一遍架构、接口、边界条件,然后一行一行敲出来——以前有个代码补全就不错了。调 bug 更是体力活:打日志、猜测、再打日志,有时候一下午就耗在一个空指针上。
后来我开始用各种 AI 编程助手,试过 Trae、Cursor、Claude Code、Codex 等等。这些工具的感觉就像——你跟 AI 说“帮我在这个 Go 服务里加一个健康检查接口”,它会自己去读代码结构、看现有的路由注册方式、写 handler、加测试,甚至帮你跑一遍 go test 看看有没有破坏什么。
第一次完整跑通的时候,感觉确实挺爽的。
但爽了不到两个月,问题就来了。
烧钱不是闹着玩的
对开发人员来说,基本都是重度使用。普通套餐根本不够用,有时候一个项目才进行一小半,就提示超额了。感觉就像又雇了一个人帮我做开发,实时结算工资,而且不便宜。
尤其是那些耗时任务,特别是测试相关的任务,经常消耗大量时间和 Token,但通讯内容里很多都是没用的垃圾信息。
举个例子:AI 执行一次 go test -v,项目有两百个测试用例,输出就是两三千行。这三千行会原封不动地塞进上下文窗口。AI 记住的不是“测试全部通过”这个结论,而是每一个 === RUN、每一个 --- PASS、每一个文件名、每一个耗时。
接着你让它 git status,Git 输出那一长串“On branch main, your branch is up to date...”,外加一堆“use git add to stage”的帮助信息——又是几百个 token。
再让它 grep 找某个函数调用,它返回二十个匹配,每个匹配带着前后三行代码——又是几千个 token。
这些 token 加在一起,上下文窗口很快就满了。模型被迫忘记一开始聊的需求、架构决策、你告诉它的那些项目约定。然后它就开始胡言乱语,或者直接说“I've lost context”,让你重新开一个会话。
换模型、换更贵的订阅,都没用。问题不是模型不够强,而是喂给模型的信息里,绝大部分是垃圾。
我一直想要的东西
以前我就想过:能不能有一个透明的中间层,在 AI 看到命令输出之前,先把那些废话过滤掉?不是压缩,是理解语义之后重新组织——只告诉 AI“测试全部通过”,而不是把两千行 PASS 刷给它;只告诉 AI“当前分支干净”,而不是把那几句 help text 反复塞进去。
最近在 GitHub 上翻到一个项目,名字很直白:RTK,描述是“高性能 CLI 代理,将 LLM token 消耗降低 60-90%”。
哈哈,不用自己开发了。而且已经有 61.9k 的 star,说明这个项目已经得到了大量使用者的验证。
RTK 是做什么的
RTK(Rust Token Killer)是一个用 Rust 写的命令行代理。它在命令输出到达 LLM 上下文之前进行过滤和压缩。单一 Rust 二进制文件,零依赖,额外开销不到 10 毫秒。

装好之后,你给 AI 工具配一个 hook,之后所有命令都会被透明地重写成 rtk <原命令>。你在终端里敲 go test,实际上发给 Claude Code 的是 rtk go test。RTK 拿到原始输出之后,现场做四件事:
第一,过滤。 去掉注释行、空白行、ANSI 颜色码、进度条、时间戳,还有那些给人类看的帮助信息。git status 输出后面跟着的那一串“use git add...”,直接不要。
第二,分组。ls 的输出原本是一行一个文件,RTK 会按目录结构整理成一棵树。go test -v 的输出,假设一百个测试全部通过,原始是一百段 === RUN 到 --- PASS 的重复文本,RTK 把它压缩成一行“100 passed”。
第三,智能截断。 如果一个命令的输出太长,只保留最前面的关键部分,后面砍掉,并明确告诉 AI 输出被截断了。这样 AI 知道信息不完整,需要时可以要求更详细的输出。
第四,去重。grep 如果返回五十次完全相同的错误行,RTK 不会让 AI 读五十遍,而是合并成一行,后面标个“×50”。
这四个策略组合下来,效果相当夸张。
下面是项目官方给出的一个测试反馈(30 分钟 Claude Code 会话):
| 总计 | ~118,000 | ~23,900 | -80% |
安装和配置,三分钟搞定
RTK 的安装对 Go/Java 开发者来说毫无门槛。
Mac 用户:
brew install rtkLinux 或不想用 brew 的 Mac:
curl -fsSL https://rtk-ai.app/install.sh | bashWindows 用户: 去 Release 页面下载 exe,解压后放到 PATH 里(建议用 WSL)。
装完验证:
rtk --version # 输出版本号rtk gain # 没报错就是装对了注意:crates.io 上有一个同名项目(Rust Type Kit),用 cargo install rtk 会装错。必须用 cargo install --git https://github.com/rtk-ai/rtk配置你用的 AI 工具: 以 Claude Code 为例
rtk init -gCursor 用户:
rtk init -g --agent cursor其他工具(Gemini CLI、Codex、Windsurf、Cline、Copilot)参考官方文档。
配完之后,一切照旧。你敲 go test,AI 实际执行的是 rtk go test,拿到的输出是过滤后的精华。
查看节省统计:
rtk gain # 总览rtk gain --graph # ASCII 趋势图rtk gain --daily # 每日明细一个让人放心的设计:tee 机制
当命令执行失败时(比如 go test 出现 panic),RTK 不会简单丢出压缩信息。它会把完整原始输出保存到本地临时文件,并在压缩结果里附上文件路径。
AI 如果觉得压缩信息不够,可以主动去读那个完整文件。不需要重跑命令,也不会因压缩而丢失关键信息。这个设计说明作者自己也是重度用户——他知道什么时候该省,什么时候不能省。
支持哪些命令
官方列了 100+ 条常用命令。随便举几个我常用的:
Go 生态:go test、go build、go mod、go fmt、golangci-lint
Java 生态:mvn test、mvn compile、gradle test、javac
前端/Vue3:npm test、vitest、eslint、biome、vite build
Git:status、diff、log、add、commit、push、pull
通用:ls、cat、find、grep、rg、make、docker ps、docker logs
不认识的命令直接放行(passthrough),完全不用担心破坏已有流程。
关于省钱的真实情况
很多人以为 RTK 只能省 API 按量付费的账单。对于 Claude Code 这类主流工具,它们是订阅制——你付月费(Pro 100),跟 token 消耗没有直接关系。
那订阅制用户装 RTK 图什么?
图上下文质量。
同一笔月费,不用 RTK,上下文窗口可能在 20 分钟内就被垃圾信息填满,AI 开始失忆,你得提前结束会话重开。用了 RTK,同样的窗口能装下更多有效信息,会话寿命延长一倍甚至更多。这意味着每个月的有效工作时间变长了,单位月费的产出更高。
如果你是用 API 按量付费(比如调用 Claude/GPT 跑自动化任务),RTK 就直接帮你省钱。我自己写脚本调用 API 跑批量任务时,装上 RTK 成本确实降了不少。
总之,不管订阅还是按量,装 RTK 都没有坏处。
同类工具简评
我也看了其他几个工具,简单说一下:
Headroom:Netflix 工程师开发,对整个上下文(文件、工具返回值、会话历史等)做语义压缩,号称砍掉 60-95% 的 token,精度保留 97%。但是配置复杂,效果不稳定。
Graphify:用 tree-sitter 抽取代码知识图谱(函数调用、类型定义、依赖关系),AI 直接查图而不是 grep/read。在混合代码和文档的仓库里实测节省 71 倍 token。但图谱构建本身也消耗 token,对静态语言友好,动态语言稍弱。
tokf:配置驱动的过滤器,灵活度极高,但需要自己写规则,学习成本高。
RTK 的定位是开箱即用。你不需要懂 Rust,不需要写配置,装完就生效。压缩率不是最极致的,但足够用,维护成本为零。
一点遗憾和期待
目前 RTK 只服务于开发者场景,因为它依赖命令行。如果你在 Cursor 里纯聊天、不跑命令,RTK 帮不上忙。
但我认为 RTK 背后的“信息降噪”理念完全可以扩展到非开发领域。比如金融分析师让 AI 读财报(几百页 10-K 文件,大量重复的合规声明)、法律文书审查、医疗记录摘要、客户反馈分析——凡是让 AI 读长篇文本的场景,都有这类需求。希望未来能看到类似工具出现。
其他
以前觉得 AI 编程最大的痛点是模型不够聪明。现在发现:模型明明够聪明,但你把时间都浪费在喂它吃垃圾上了。
RTK 不解决所有问题,但它解决了一个很重要、很具体、而且很多人还没意识到的问题。
项目地址: github.com/rtk-ai/rtk官网: rtk-ai.app
这种好东西值得被更多人知道。
夜雨聆风