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 off 或 normal 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/Bcaveman 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