创见博客
rtk-ai/rtk 实现原理
七崽爱吃小饼干2026/07/07阅读 1专栏 工程效率

rtk-ai/rtk 实现原理

**核心结论:**rtk 不是模型级压缩器,而是面向 AI Coding Agent 的 **CLI 命令代理 + 输出过滤器 + Hook 改写系统**。它把常见命令自动改写为 `rtk xxx`,代理执行真实命令,再用规则化解析、分组、截断、去重等方式把输出压缩后返回给 LLM。

一、整体链路

典型流程是:Agent 准备执行 git status,hook 先把命令改写成 rtk git status;rtk 再运行真正的 git status,捕获输出并返回更短的摘要。

二、核心机制

机制实现方式效果
命令改写通过 Claude Code、Cursor、Gemini CLI、OpenCode 等 Agent 的 hook/plugin,把常见 shell 命令改写为 rtk xxx用户和 Agent 不需要手动改命令
代理执行Rust 内部使用 std::process::Command 调用真实工具,如 git、cargo、pytest、tsc保持原工具语义和 exit code
专用过滤器对 git、JS/TS、Rust、Python、Go、Docker、AWS 等命令实现规则化解析比通用摘要更稳定、更快
降级 passthrough不认识的命令或解析失败时原样执行,或者走 TOML DSL 过滤器避免破坏用户工作流
失败恢复命令失败时把完整原始输出保存到本地 tee 文件压缩输出不够时可回读完整日志
节省统计用 ceil(chars / 4) 估算 token,并写入本地 SQLitertk gain 可展示节省情况

三、过滤策略

  • **Smart Filtering:**移除注释、空行、样板文本、进度条、ANSI 控制字符。
  • **Grouping:**把同类错误按文件、规则、错误码、目录聚合。
  • **Truncation:**保留关键上下文,截断长 diff、长日志、长 JSON。
  • **Deduplication:**重复日志折叠成一行并附带出现次数。
  • **Failure Focus:**测试命令只展示失败用例和关键错误,隐藏通过项。
  • **Structure Only:**JSON 等结构化数据只展示 key、层级和类型,剥离大 value。

四、典型命令示例

原始命令改写后压缩重点
git statusrtk git status使用 porcelain 格式,只保留分支、变更、冲突状态
git diffrtk git diff先输出 stat,再按文件展示紧凑 diff
cargo testrtk cargo test隐藏通过项,保留失败测试和错误信息
pytestrtk pytest状态机解析测试生命周期,聚焦失败
tscrtk tsc按文件和错误码聚合 TypeScript 错误
docker logsrtk docker logs日志去重、截断、保留异常行

五、源码结构

text
src/main.rs              CLI 入口、clap 解析、命令路由
src/cmds/                各类命令专用过滤器
src/cmds/git/            git status / diff / log / add / commit / push
src/cmds/js/             eslint / tsc / vitest / playwright / pnpm
src/cmds/rust/           cargo / test runner
src/cmds/python/         pytest / ruff / pip / mypy
src/core/filter.rs       源码过滤逻辑
src/core/tracking.rs     token 节省统计
src/core/toml_filter.rs  TOML 声明式过滤器
src/hooks/               hook 安装、校验、改写逻辑
src/discover/registry.rs 命令识别和 rewrite 规则

六、实现特点与局限

### 优点 - 速度快:单 Rust binary,目标开销约 5-15ms。 - 可解释:规则化过滤,不依赖模型推理。 - 低风险:保留 exit code,不认识的命令会 passthrough。 - 面向 Agent:通过 hook 自动接入 AI Coding 工具。 ### 局限 - 依赖规则质量,未知命令压缩效果有限。 - 不是语义级摘要,无法真正理解业务上下文。 - 过度过滤可能遗漏边缘信息,所以需要 tee 文件兜底。 - Claude Code 的 Read、Grep、Glob 等内置工具不会经过 Bash hook。

七、本质定位

rtk 的本质是 shell command proxy + rule-based parser + output compressor + agent hook integration。它通过减少 CLI 噪声来降低 LLM 上下文消耗,而不是直接压缩模型 token 或改造 LLM。

评论
0/100