乐于分享
好东西不私藏

用 AI 编程工具 Token 总不够?RTK v0.43.0 给过滤加了道安全锁

用 AI 编程工具 Token 总不够?RTK v0.43.0 给过滤加了道安全锁

rtk · Rust Token Killer · v0.43.0 · never-worse 输出保护 · OpenShift · Pulumi —— 发布仅五个月、收获 66K+ stars 的 CLI 过滤代理, 在最新版本为所有过滤路径加上了「绝不比原始输出更差」的安全底线。

项目定位:CLI 输出与 LLM 上下文之间的代理层

rtk-ai/rtk(Rust Token Killer)是一个高性能 CLI 代理工具, 用 Rust 编写,编译为单二进制文件,零运行时依赖。 它运行在 LLM 编程工具(Claude Code、Cursor、Gemini CLI、Copilot 等) 与宿主 Shell 之间,拦截每一次命令执行,对 stdout/stderr 做智能过滤后再送给 LLM 上下文。

根据项目方公开的统计,在 30 分钟 Claude Code 会话中, RTK 可将总 token 消耗从约 118,000 降为约 23,900 —— 降幅约 80%。 对 git status、ls、cat 等高频命令,过滤率可达 70–92%; 对 cargo test、pytest 这类测试输出,节省率高达 90%。 项目自 2026 年 1 月发布以来,已获得 66,775 个 Star、4,125 个 Fork, 社区活跃度极高。

用户顾虑:过滤比不过滤更「贵」怎么办

「过滤一定会损失信息」—— 这是任何使用输出拦截方案的用户 都会有的本能担忧。但在 AI 编程场景下,损失信息还不是最糟的情况, 更糟的是:拦截器自作聪明地「整理」输出,结果把原本清晰的原始输出 弄得更啰嗦、占用了更多 token。

RTK 的过滤系统由三大组件构成:按命令类型编写的过滤函数 (cmds/ 目录,按语言和工具生态组织)、TOML 配置文件 (filters/ 目录,90+ 个预定义规则)、以及输出跟踪系统 (core/tracking.rs,预估 token 数并记录节省情况)。 但在 v0.43.0 之前,对「过滤后居然比原始输出还大」的兜底, 仅零星散落在部分命令模块中,没有一个统一的安全网。 当你在生产环境中跑一轮 CI 流水线,或在使用 rtk read 读取大文件时偶发格式膨胀却未察觉,额外的 token 开销就会悄悄累积。

v0.43.0 新增能力与新玩法

这一版最值得关注的变更集中在两条线上:统一安全网与生态扩展。

统一安全网:never-worse 输出保护

core/guard.rs 导出的 never_worse() 函数被系统性地应用到 多个关键路径:core 的过滤函数出口、pipe 模块的过滤结果、 read 模块的输出检查、docker/kubectl 等容器命令的过滤输出、 git 模块的 status 失败路径。 只要 estimate_tokens(filtered) > estimate_tokens(raw), RTK 就会无条件退回原始输出。这个保护机制不仅覆盖了新场景, 还修复了旧版中的隐性漏洞 —— 比如 git status 在失败路径上 原本会丢失退出码,这一版也一并补上了。

生态扩展:OpenShift 与 Pulumi

v0.43.0 新增了两大类命令的过滤支持:

OpenShift (oc):共享 container.rs 中已有的 k8s 过滤基础设施, 支持 oc get podsoc get servicesoc logs 等核心操作, 输出格式与 kubectl 层保持一致。

Pulumi:新增 pulumi previewpulumi uppulumi destroypulumi refreshpulumi stack 五个子命令的过滤处理, 剥离掉进度条、URL、持续时间等噪音,只保留关键变更摘要和资源状态。

日常使用无需任何额外配置 —— RTK 的 hook 系统会自动识别命令前缀 并将其重写为 rtk pulumi previewrtk oc get pods。 如果习惯手动调用,也可以直接执行:

rtk oc get pods
rtk pulumi up
rtk git push

所有命令的输出都会先经过统一过滤 + never_worse 检查。

简析:永不退步的合约是如何实现的

never_worse() 的设计思路非常直接:不依赖复杂的质量评估模型, 只比较 token 数量的估算值。估算函数 estimate_tokens 使用 input.len() / 4 的近似算法(一个 token 约 4 个字节), 这在 CLI 输出的场景下已经足够可靠 —— 过滤的核心目标是减少 token, 因此 token 数就是最重要的质量指标。

fn never_worse(raw, filtered) -> output {
    if estimate_tokens(filtered) > estimate_tokens(raw) {
        raw        // 退回原始输出
    } else {
        filtered   // 返回过滤结果
    }
}

这个函数被定义在 core/guard.rs 中,作为公共基础设施被 container.rsreadpipecore/filter.rs 以及 git 模块引用。每个模块在过滤完输出后, 最后一步都是调用 never_worse() 做一次保底检查。 换句话说,v0.43.0 把原来「分散信任各个过滤函数」的架构, 升级成了「每个过滤路径必须通过 guard 才能输出」的合约式设计。

配合这一版对 git 退出码传播、grep 引擎回退、 dotnet 测试失败去重、vitest 报告器保留等二十多项 bug 修复, RTK 正在从「能省 token」向「在任何边界条件下都能安全地省 token」演进。 对于已经将 AI 编程工具纳入日常开发流程的团队来说, 这个方向比单纯的新命令支持更有长期价值。