Codex Token 消耗太快?使用 RTK 压缩终端输出,减少无效 Token
最近在使用 Codex、Claude Code 这类 AI 编程工具时,发现一个比较明显的问题:
AI 在执行 Git、Docker、测试、日志查询等命令时,经常会产生大量终端输出,而这些输出最终也会进入模型上下文,占用大量 Token。
例如:
git status
git diff
pytest
docker logs xxx
kubectl get pods
这些命令产生的内容里,很多其实都是重复信息或者对 AI 没有太大价值的信息。
RTK(Rust Token Killer)就是专门解决这个问题的。
一、RTK 是什么?
RTK 全称:
Rust Token Killer
它是一个使用 Rust 开发的命令行工具,可以理解为:
在 AI 编程工具和 Shell 命令之间增加一个“过滤器”,把大量无意义的终端输出压缩以后,再交给大模型。
正常情况下:
Codex
↓
执行 git status
↓
Shell
↓
返回完整输出
↓
Codex
使用 RTK 后:
Codex
↓
执行命令
↓
RTK
↓
执行真正的 Shell 命令
↓
过滤、合并、去重
↓
将精简后的内容返回 Codex
所以 RTK 并不是去压缩我们的 Prompt,也不是去修改大模型,而是:
压缩 AI 执行命令后产生的终端输出。
RTK 官方采用的主要处理方式包括:
-
智能过滤无效信息
-
将相似内容进行分组
-
截断过长内容
-
合并重复日志
官方说明,在一些高输出 Shell 命令中,可以减少最高约 90% 的 Bash 输出。
需要注意,这里的 90% 指的是:
终端输出减少
并不代表:
API 费用直接降低 90%
因为一次 Codex 对话消耗的 Token 还包括 System Prompt、用户 Prompt、代码上下文、历史对话以及模型回复等内容。
二、举个简单例子
例如运行测试:
pytest
假设有 1000 个测试用例:
test_001 PASSED
test_002 PASSED
test_003 PASSED
test_004 PASSED
......
test_999 PASSED
test_1000 FAILED
如果这些内容全部交给 Codex,大量 Token 都浪费在了:
PASSED
PASSED
PASSED
PASSED
这些重复信息上。
使用 RTK:
rtk pytest
RTK 会尽可能把成功测试进行折叠,把真正有价值的失败信息保留下来。
最终 AI 更关心的是:
999 passed
1 failed
失败用例:
test_1000
错误原因:
AssertionError ...
这样既能让 AI 知道测试结果,又不需要读取几百甚至几千行重复内容。
三、RTK 适合哪些场景?
RTK 比较适合 AI Coding 场景,尤其是经常使用:
Codex
Claude Code
Cursor
Gemini CLI
GitHub Copilot
等工具进行自动开发时。
比较典型的高 Token 消耗命令包括:
git status
git diff
git log
grep
rg
find
npm test
pytest
cargo test
go test
docker ps
docker logs
kubectl get pods
kubectl logs
这些命令有一个共同特点:
输出内容可能非常多,但 AI 真正需要的信息其实并没有那么多。
四、Mac 安装 RTK
我这里使用的是 macOS。
1. Homebrew 安装
推荐直接使用 Homebrew:
brew install rtk
安装完成后检查版本:
rtk --version
然后执行:
rtk gain
如果能够正常显示 Token Savings 统计信息,说明安装成功。
五、另外一种安装方式
如果不想使用 Homebrew,也可以执行官方安装脚本:
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh
默认会安装到:
~/.local/bin
如果安装以后执行:
rtk --version
提示:
command not found
可以把目录加入 PATH。
Mac 默认一般使用 zsh:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
然后执行:
source ~/.zshrc
再次检查:
rtk --version
六、注意 RTK 重名问题
这里有一个需要特别注意的问题。
目前存在另外一个同样叫 rtk 的项目:
Rust Type Kit
它和本文介绍的:
Rust Token Killer
不是一个东西。
安装完成后最好执行:
rtk gain
如果能够显示 Token 节省统计信息,基本可以确认安装的是正确的 Rust Token Killer。
也可以查看安装位置:
which rtk
七、Mac 上给 Codex 配置 RTK
如果平时主要使用 OpenAI Codex,可以直接执行:
rtk init -g --codex
然后检查配置:
rtk init --show
完成后重新启动 Codex。
需要说明一下,RTK 对不同 AI 编程工具的集成方式并不完全相同。
例如 Claude Code 可以通过 PreToolUse Hook 自动拦截 Shell 命令。
而当前 Codex 的 RTK 集成主要通过:
AGENTS.md
+
RTK.md
告诉 Codex在适合的场景优先使用 RTK。
因此 Codex 配置命令是:
rtk init -g --codex
而不是普通 Claude Code 使用的:
rtk init -g
八、Mac + Codex 完整安装流程
如果只想快速使用,可以直接按照下面几步操作。
第一步:安装
brew install rtk
第二步:检查版本
rtk --version
第三步:确认安装的是 Rust Token Killer
rtk gain
第四步:配置 Codex
rtk init -g --codex
第五步:检查配置
rtk init --show
然后重新启动 Codex 即可。
九、不接入 Codex,也可以手动使用
RTK 本身就是一个 CLI 工具,所以也可以手动调用。
例如原来的:
git status
改成:
rtk git status
查看 Git 日志:
rtk git log -n 10
查看代码修改:
rtk git diff
搜索代码:
rtk grep "keyword" .
查找文件:
rtk find "*.py" .
读取文件:
rtk read app.py
查看 Docker:
rtk docker ps
查看容器日志:
rtk docker logs 容器名称
运行 Python 测试:
rtk pytest
简单来说就是:
原命令:
git status
↓
RTK:
rtk git status
RTK 负责执行真实命令,然后把输出精简后再返回。
十、怎么看 RTK 到底省了多少 Token?
RTK 自带统计功能。
直接执行:
rtk gain
可以看到 Token Savings 信息。
还可以按天查看:
rtk gain --daily
按周查看:
rtk gain --weekly
如果使用一段时间以后再执行 rtk gain,会比较直观地看到 RTK 一共处理了多少命令,以及减少了多少终端输出。
不过这里再次提醒:
RTK 的 Token 数量属于估算值。
官方目前并没有内置具体大模型的 tokenizer,而是根据输出大小估算 Token,因此这个数字更适合用于观察“压缩比例”,不要直接当成实际 API 账单金额。
十一、RTK 会不会把重要信息也过滤掉?
这是我刚开始了解 RTK 时比较关心的问题。
RTK 的目标并不是简单粗暴地删除内容,而是根据不同命令采用不同的处理策略。
例如:
git status
会重点保留文件状态。
git diff
会精简 Diff 中的冗余内容。
pytest
会重点保留失败测试。
docker ps
会重点保留容器的关键字段。
也就是说,RTK 是针对不同命令分别做优化,而不是统一把输出截取前 100 行。
不过任何“压缩”都意味着部分信息可能不会直接展示。
所以在定位非常复杂的问题时,如果感觉某些关键日志没有看到,最简单的方法就是:
临时直接执行原始命令,查看完整输出。
例如:
docker logs xxx
而不是:
rtk docker logs xxx
这样就可以进行完整排查。
十二、RTK 值不值得用?
如果只是偶尔使用 AI 聊天,其实没有必要安装 RTK。
但是如果经常使用:
Codex
Claude Code
Cursor
让 AI 自动:
查看项目
搜索代码
执行 Git
运行测试
编译项目
分析 Docker
查看日志
排查错误
RTK 还是比较有价值的。
因为 AI Coding Agent 一个比较容易被忽略的 Token 消耗来源,就是:
Shell 命令输出。
有时候我们只让 Codex 修改几个文件,但是它可能在后台连续执行:
git status
git diff
rg
find
pytest
npm test
docker logs
真正修改代码可能只用了很少的上下文,反而大量 Token 消耗在终端日志上。
RTK 的思路其实很简单:
不让 AI 少干活,而是让 AI 少看没有价值的信息。
对于长时间使用 Codex、Claude Code 进行项目开发的场景,这种方式既可以降低上下文占用,也可以减少无意义信息对模型判断的干扰。
总结
最后简单总结一下。
RTK(Rust Token Killer)并不是传统意义上的 Prompt 压缩工具。
它主要解决的是:
AI Coding Agent
↓
执行 Shell 命令
↓
产生大量终端输出
↓
占用模型上下文
RTK 在中间增加了一层智能过滤:
AI Coding Agent
↓
RTK
↓
Shell 命令
↓
原始输出
↓
过滤 / 分组 / 截断 / 去重
↓
精简输出
↓
返回给大模型
如果平时使用 Codex 比较多,在 Mac 上只需要:
brew install rtk
然后配置 Codex:
rtk init -g --codex
最后:
rtk gain
就可以逐步观察实际使用过程中减少了多少无效终端输出。
对于经常使用 AI 编程工具的人来说,RTK 算是一个比较轻量、值得尝试的 Token 优化工具。
浙公网安备 33010602011771号