综合 caveman:在代理读到日志和 JSON 前压缩,54 次实测输入 token 降 33.2%,HTML 那例涨 9.9%

2026-09-21 21:31:16

caveman:在代理读到日志和 JSON 前压缩,54 次实测输入 token 降 33.2%,HTML 那例涨 9.9%

why use many token when few token do trick —— caveman 是 JuliusBrussee 写的 Go 项目,2026 年 7 月 GitHub Trending 第一、Trendshift 7 月第一 Go 仓库,HN 第一(904 points / 366 comments),约 10 万 stars。它做两件事:让 AI 编码代理少说废话;在代理「读到」日志、测试输出、JSON、diff 之前先压一遍。

项目地址:

三层,按侵入程度排开

skill:只压缩代理说出来的话

skill 是一个规则文件(MIT,永久免费),覆盖 30+ agent:Claude Code、Codex、Gemini、Cursor、Windsurf、Cline、Copilot 等。它不碰输入,只管输出。

npx skills add JuliusBrussee/caveman -g

在代理里输入 /caveman 唤醒。强度档位:

/caveman lite|full|ultra|wenyan-lite|wenyan-full|wenyan-ultra

/caveman offnormal mode 关闭。

同一个 React 重渲染问题,两种回答:

  • 普通 69 tokens:The reason your React component is re-rendering is likely because you're creating a new object reference each render cycle... I'd recommend using useMemo.
  • caveman 19 tokens:New object ref each render. Inline object prop = new ref = re-render. Wrap in useMemo.

边界很清楚:代码、命令、文件路径、精确报错原文不会被「穴居化」,只有周围的散文被压缩;安全警告和「你确定吗」这类确认会恢复完整句子,之后再继续。

proxy:压缩代理读到的内容

本地代理,跑在代理与 AI 提供方之间,压缩对象是日志、测试输出、JSON、diff、搜索结果。CLI 为 MIT,runtime 为 BSL-1.1。

npm install -g @caveman-ai/cli && caveman setup --install

用法:caveman claude(也支持 codex / gemini / aider / kilo / qwen / opencode / hermes / openclaw / pi)。

  • caveman learn:本地读取历史,按 token 消耗排序,给一行修复建议;caveman learn implement 交给 Claude Code / Codex 逐 diff 应用,没降低 token 就回滚
  • caveman shrink -- pnpm test:压缩命令输出
  • caveman browse :给代理压缩后的网页视图
  • caveman trial -- claude:做真实 A/B
  • caveman stats:看历史
  • caveman convert --dry-run

middleware:在自己代码里包一层

支持 LangChain / Vercel AI SDK / OpenAI / Anthropic。工具结果送进模型前被压缩,原文保留在历史里,模型可取回。

npm install @caveman-ai/middleware @caveman-ai/sdk
pip install 'caveman-middleware[langchain]' caveman-sdk

完整安装脚本:curl .../v2.7.0/install.sh | bash,需要 Node.js 22.13+。卸载:npx -y github:JuliusBrussee/caveman -- --uninstall

实测数字

  • Adobe Research 论文 CAVEWOMAN(arXiv 2606.24083):8 模型、5 数据集、5 压缩级别,输出侧成本降 1.4–2.4×,最好情况到 3×。论文里另一个发现是,把「人类的提问」压成穴居语会让回答更长更差——所以 caveman 不重写提问,只压代理的嘴。
  • JetBrains 实验室(86 个真实编码任务、配对 A/B、Claude Code 2.1.200,仅 skill 无 proxy,2026-07):输出 token 少 8.5%,成本约少 10%,质量无可测变化(符号检验 p=0.82)。
  • 仓库评测快照:10 个开发问题,skill vs「Answer concisely.」对照,claude-opus-4-6 中位数输出 token 少 50%(只测长度,不测正确性)。

结论不夸张:聊天式问答压缩明显;代理式编码会话里大部分 token 是代码与工具调用,skill 碰不到它们,输出侧只有高个位数,质量持平。

proxy 基准:54 次固定运行

固定 54 次 Claude Code 运行,provider 上报输入 token,每例 3 次,答案按 oracle 校验:

场景输入 token变化
CSV 离群点排查165,823 → 74,484-55.1%
日志大海捞针148,807 → 74,068-50.2%
YAML 配置漂移132,124 → 71,027-46.2%
测试输出失败150,377 → 108,514-27.8%
部署 JSON 漂移147,975 → 108,939-26.4%
控制台 HTML 告警140,687 → 154,641+9.9%

最后一行是红的,官方没有把它藏起来。合计 885,793 → 591,673(-33.2%),18/18 答案校验通过。

其他数字:浏览器页面对比 Playwright ARIA 快照 121 vs 15,704 tokens(129.8×);/caveman-compress 压缩 memory 文件平均小 46%;skill 渲染成 PNG 图片给模型读,估 1,069 → 415 tokens(-61%)。

与同类工具对比

  • RTK:只管 shell 输出;JetBrains 测出中位成本 +7.6%
  • Headroom:同一套件下 6.7% 输入 token,15/18 正确
  • context-mode
  • pxpipe:有损,静默丢内容

同一套件、同一模型:Direct 18/18、885,793 tokens;Caveman wrap+skill 18/18、591,673(-33.2%);Headroom wrap 15/18。

一个前提

规则本身每次调用都会增加输入 token,是否划算取决于代理、缓存与计费方式。仓库里的 docs/HONEST-NUMBERS.md 做了详细拆解。

相关链接

  • 仓库:
  • CAVEWOMAN 论文:arXiv 2606.24083
  • 数字细节:仓库内 docs/HONEST-NUMBERS.md
复制全文 生成海报 Go AI编程 token 代理 开源工具

推荐文章

程序员茄子在线接单