RTK Benchmark体系解析:如何用benchmark.sh快速复现Token节省数据
【免费下载链接】rtkCLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies项目地址: https://gitcode.com/GitHub_Trending/rtk4/rtk
RTK是一个用 Rust 编写的 CLI 代理,能把 LLM 读取的命令输出压缩 60%~90%。而它的可信度,正来自一套可复现的 Benchmark 体系:一条benchmark.sh命令,就能在你自己的机器上重新算出这些"省了多少 token"的数据。本文带你走完全部流程。
一、为什么性能数据需要"可复现"
RTK 的核心卖点是:ls、git log、cargo test这类高频命令的原始输出,经过 RTK 过滤后再交给 AI Agent,输入 token 能砍掉一大半。
但"省多少"不是宣传口号,而是每次跑基准测试都能验证的指标。RTK 的 benchmark 体系做了两件关键事:
- ✅全离线、可重复:不依赖任何外部网络服务(curl/wget 测试用本地回环 HTTP 服务器);
- ✅双向验证:既验证"省了多少",也验证"没坏"(过滤后的输出不能比原始输出更长)。
二、Benchmark 体系的两层架构
RTK 的 benchmark 分为"本地轻量版"和"云端完整版"两层:
| 层级 | 入口 | 运行环境 | 耗时 | 用途 |
|---|---|---|---|---|
| 本地 | scripts/benchmark.sh | 你自己的机器 | 数分钟 | 快速复现 token 节省数据 |
| 完整 | scripts/benchmark/run.ts | Multipass 虚拟机 | 10~30 分钟 | 发布前的全量集成验证 |
本地版覆盖ls、tree、read、find、git、grep、json、log、curl、cargo等几十个命令对比;完整版则在一个装好 Rust/Go/Node/.NET 全家桶的 Ubuntu 虚拟机里跑约 200 条命令,由 scripts/benchmark/cloud-init.yaml 负责初始化环境。
三、一键运行:三步复现 benchmark.sh 的数据
第 1 步:拿到 rtk 二进制
脚本会优先使用本地 release 构建(./target/release/rtk),否则回退到 PATH 里已安装的rtk。所以只需二选一:
cargo build --release # 本地构建 # 或先 brew install rtk第 2 步:在项目根目录执行
./scripts/benchmark.sh第 3 步:等待汇总输出。过程中脚本会自动完成这些"隐形工作",你无需干预:
- 🧹 清理上一次的调试产物(
unix/、rtk/、diff/三个输出目录,CI 环境则跳过清理); - 🌐 用
python3拉起一个随机端口的本地 HTTP 服务器,给 curl/wget 测试提供固定的JSON 响应——早期用过外部 mock 服务,因输出随机导致结果"飘",现已被完全离线方案替代; - 📝 为每个测试生成三份原始输出存档(本地运行时),方便逐条核对。
四、读懂输出:每行数据在说什么
运行结束时你会看到一张汇总表,每项测试带一个状态图标:
| 图标 | 标签 | 含义 |
|---|---|---|
| ✅ | GOOD | 节省率 ≥ 60%,合格 |
| ⚠️ | WARN | 有节省但不足 60%,或无节省 |
| 🔴 | NEG | 负面:过滤后反而更长了 |
| ❌ | FAIL | 过滤后输出为空(功能坏了) |
末尾的汇总行形如:
✅ 42 good ⚠️ 5 warn 🔴 0 negative ❌ 0 fail Tokens: 52000 → 14000 (-73%)
几个关键规则:
- Token 估算公式是"字节数 ÷ 4"(见 benchmark.sh 中的
count_tokens)。RTK 不内置分词器,所以百分比是可靠的,绝对数值只是近似——这也和官方口径一致; - 退出码是可信度开关:只要出现 NEG 或 FAIL,脚本就以非零码退出并打印
BENCHMARK FAILED——也就是说"压缩不能变负"是硬性红线; - GOOD 占比目标 ≥ 60%,低于该值会收到 WARNING 提示。
📂 想深挖每个命令的原始输出?本地运行会在 scripts/benchmark/ 下生成unix/、rtk/、diff/三组 Markdown 存档,diff-前缀的文件还带 Unix vs RTK 的 token 对照表。
五、进阶:Multipass 虚拟机全量套件
本地版验证"省多少",虚拟机版验证"发布前是否万事俱备",两者互补:
- 环境准备:vm.ts 自动创建/复用名为
rtk-test的 Multipass VM(2 核 / 4G / 20G),cloud-init 装好全套工具链,首次需 10~15 分钟; - 12 个测试阶段(见 run.ts):传输源码并 release 构建(含二进制体积 ≤ 8MB 检查)→ cargo fmt/clippy/test 质量检查 → 各语言内置命令 → TOML 过滤器命令 → hook 重写引擎 → 退出码保真 →token 节省达标检查→ 管道兼容性 → 边界情况 → hyperfine 启动性能 → 并发;
- 常用参数:
--quick:跳过性能与并发阶段,快速反馈;--phase 3:只跑指定阶段;- rebuild.ts:复用已有 VM,只重传源码重编译;
- cleanup.ts:用完删除 VM 释放磁盘。
测试判定逻辑在 lib/test.ts:其中testSavings会同时执行原始命令与 RTK 命令,要求节省率达到每项设定的目标值(如git log≥ 60%、日志去重 ≥ 80%)才算 PASS;最终报告由 lib/report.ts 汇总,结论只有一句——READY FOR RELEASE或 NOT READY。
六、常见问题排查
| 现象 | 原因与处理 |
|---|---|
Error: rtk not found | 没有本地构建也没装 rtk,先cargo build --release或安装 |
tree、gh、docker等段落被跳过 | 对应工具未安装属正常,脚本显示⏭️ skipped后继续 |
BENCHMARK FAILED ... negative | 某条过滤器产出变长了,属于真实回归,应查看diff/NEG-*.md定位 |
| VM 创建卡住 | 看/var/log/cloud-init-output.log;或--quick先跑本地版 |
| 数字和官方 README 不完全一致 | 正常:token 是字节/4 估算,且测试项随你安装的工具有增减 |
七、总结:这份 benchmark 体系值得借鉴的三点
- 数据可证伪:把"节省 60-90%"变成任何用户一条命令就能复核的数字,负面结果直接让 CI 变红;
- 确定性优先:外部依赖全部本地化(fixture JSON、回环服务器、mock 工具),结果不再"看网络脸色";
- 轻量与重型分层:本地 shell 脚本负责日常反馈,Multipass VM 负责发布级验证,各取所需。
📚 想继续深入?建议按序阅读:scripts/benchmark.sh(主脚本)→ docs/usage/AUDIT_GUIDE.md(审计指南)→ docs/contributing/TECHNICAL.md(性能与架构细节)。
【免费下载链接】rtkCLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies项目地址: https://gitcode.com/GitHub_Trending/rtk4/rtk
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考