RTK:用 Rust 重构你的 CLI 工具,让 CodeBuddy 的 token 消耗降低 90%
用 Rust CLI 代理减少 AI 编程助手上下文中的无效终端输出。
RTK:用 Rust 重构你的 CLI 工具,让 CodeBuddy的 token 消耗降低 90%
背景:token 消耗之痛
最近在使用 AI 编程助手时,发现 token 消耗量异常惊人。一个小时的编程会话,竟然能消耗十几万甚至二十万 token。仔细分析后发现,很多常见的命令行工具输出占据了大量的上下文:
git status输出冗长的文件列表和状态grep在大项目中搜索结果成百上千行jq处理大型 JSON 时输出过多细节- 测试框架的输出包含大量成功的测试用例
- 构建日志中充斥着重复的警告和注释
这些输出对于 AI 理解问题并非全部必要,但却占用了宝贵的 token 配额。直到有一天,我发现了 rtk 这个工具。
RTK 是什么?
rtk 是一个用 Rust 编写的高性能 CLI 代理工具。它的核心功能是在命令行输出到达 LLM 上下文之前,对其进行智能过滤和压缩。根据官方数据,它能将 token 消耗降低 60% 到 90%。
这是一个典型的“用正确工具解决正确问题”的案例。rtk 并不是要替代现有的 CLI 工具,而是在它们和 AI 之间加一层“翻译器”,让输出更符合 AI 的阅读习惯。
工作原理
rtk 的核心设计非常巧妙——它作为一层代理,拦截 CLI 命令的原始输出,经过智能处理后再发送给 AI。以下是对比:
Without rtk:
Claude --git status--> shell --> git ^ | | ~2,000 tokens (raw) | +----------------------------+With rtk:
Claude --git status--> RTK --> git ^ | | | ~200 tokens | filter | +------- (filtered) ---+----------+可以看到,rtk 插入在 AI 和 shell 之间,对每个命令的输出进行过滤处理后再传递给 AI。对于 git status 这类命令,token 消耗从约 2000 tokens 骤降到约 200 tokens,效果显著。
实际使用的例子
这里找一个对比比较强烈的例子
git log -n 10
commit e5bb4e106bd8bdf24420c6731786150ab1a4026f (HEAD -> main)Author: lukemxjia <lukemxjia@qqqq.com>Date: Thu Mar 19 16:53:08 2026 +0800
fix system role not found
commit 0db3a2d76a1026cde08436decec6e9993e04a4eaAuthor: lukemxjia <lukemxjia@qqqq.com>Date: Thu Mar 19 16:47:47 2026 +0800
fix sqlc logical fk
commit 038b40d19163b17c9c910caa5a5d675adbcf7581 (origin/main, origin/HEAD)Author: lukemxjia <lukemxjia@qqqq.com>Date: Thu Mar 19 15:56:46 2026 +0800
feat(db): 更新 sqlc 生成的数据库代码
commit ff26e6c0132004c4dc5bd207353889e5f41a7d28Author: lukemxjia <lukemxjia@qqqq.com>Date: Thu Mar 19 15:36:15 2026 +0800
refactor(organization): 使用组织名称作为主键,移除 org_id
commit 01588263ecd553cfc70740d50db13f1f516280e0Author: lukemxjia <lukemxjia@qqqq.com>Date: Thu Mar 19 00:51:20 2026 +0800
feat(logical_fk): 添加 model_name 和 ref_model_name 字段
commit 9c5cf45bf0318ae29957e678abd5ccfcdd2900a5Author: lukemxjia <lukemxjia@qqqq.com>Date: Wed Mar 18 00:53:13 2026 +0800rtk git log -n 10
e5bb4e1 fix system role not found (7 hours ago) <lukemxjia>0db3a2d fix sqlc logical fk (7 hours ago) <lukemxjia>038b40d feat(db): 更新 sqlc 生成的数据库代码 (8 hours ago) <lukemxjia>ff26e6c refactor(organization): 使用组织名称作为主键,移除 org_id (8 hours ago) <lukemxjia>0158826 feat(logical_fk): 添加 model_name 和 ref_model_name 字段 (23 hours ago) <lukemxjia>9c5cf45 docs: 添加 jq 工具文档并优化字段加载 (2 days ago) <lukemxjia>c94c74e docs: 更新工具文档从 Task 迁移到 just (6 days ago) <lukemxjia>ccae202 feat(schema): 添加主键字段冲突检测 (6 days ago) <lukemxjia>d0acda6 feat: 为 Field 添加 isDeprecated 字段 (6 days ago) <lukemxjia>c9bbec3 refactor(db): 统一数据库管理命令 (6 days ago) <lukemxjia>具体原理
就是利用hooks的机制。
只要你的工具支持hook,在调用前就会拦截命令。使用rtk就可以帮你节省token
"hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": "/root/.codebuddy/hooks/rtk-rewrite.sh" } ] } ] },参考 https://www.codebuddy.cn/docs/cli/hooks-guide#%E8%87%AA%E5%AE%9A%E4%B9%89%E9%80%9A%E7%9F%A5-hook 自行配置
最后使用 rtk gain 就可以查看自己节省了哪些token。即使程序员,也要勤俭持家过日子。