JuliusBrussee/caveman
项目简介
caveman 是一个让 AI 编码 Agent「说话像原始人」的开源技能与本地代理,通过压缩输出措辞和输入上下文,官方声称可削减约 65% 的 token 消耗。
它由两部分组成:一份免费、永久开源的规则文件(Skill),用一条命令注入 30+ 款编码 Agent,让模型的自然语言回答从「求职信体」变成极简短句;以及一个跑在本机的 Proxy,横在 Agent 与模型服务商之间,把日志、测试输出、JSON、diff、搜索结果等「被读取」的内容先压缩再送进上下文。二者可叠加使用,且不改变模型的诊断与修复能力——代码、命令、路径、报错原文一律原样保留。
技术亮点
- 双向压缩,而非只压一边:多数方案只优化 Prompt 或只做检索裁剪,caveman 同时攻击「写出去」和「读进来」两端。Skill 压缩 Agent 的输出 prose,Proxy 压缩 Agent 的输入上下文,两个杠杆各自独立计费生效。
- 精准豁免机制:只有自然语言散文会被「caveman 化」,代码块、命令行、文件路径、精确报错信息永不压缩;遇到安全警告与「你确定吗?」这类确认语句,会自动恢复完整句式,之后继续 caveman 模式。
- 可回溯的无损假象:Proxy 对每一条被压缩的内容保留备份,Agent 任何时候都能把原文取回,避免因过度压缩丢掉关键细节,把「有损压缩」变成「按需展开」。
- 零门槛接入:一条命令安装,无需账号、无需 API Key;兼容 Claude Code、Codex、Gemini、Cursor、Windsurf、Cline、Copilot 等 30+ Agent,并对其中 10 个提供原生 wrap profile。
- 有第三方实证:Adobe Research 的 CAVEWOMAN 论文测得该类输出可降本 1.4–2.4 倍、最高 3 倍;JetBrains 在 86 个真实编码任务上测试后评价「质量上没有可测量的损失」。
架构解析
整体可分为三层。最上层是 Skill 层:一份规则文件通过安装器写入各 Agent 的系统提示或 skill 目录,属于纯 Prompt Engineering,不引入任何运行时依赖。中间是 Proxy 层:作为本地反向代理拦截 Agent 发往模型服务商的 HTTP 请求,把上下文中的长文本载荷(日志、diff、JSON)交给压缩器处理,同时写入备份存储以供回取。底层是 适配与分发层:CLI(npm 上的 @caveman-ai/cli)负责检测 Agent、安装规则、启动代理,wrap profile 则针对不同 Agent 的请求格式做适配,使同一套压缩策略可以用在异构工具链上。许可上 CLI 为 MIT、运行时为 BSL-1.1。
适用场景
- 长会话编码 Agent:上下文越滚越长时,历史日志与工具输出会持续吃掉预算,Proxy 能在每次调用前把可压缩部分削薄。
- 日志密集的排障:堆栈、测试报告、构建输出动辄数千行,压缩后仍保留精确报错与路径,Agent 定位问题不受影响。
- CI/CD 与批处理自动化:在无人值守的流水线里跑 Agent,token 成本随调用量线性放大,削减比例直接体现为账单下降。
- 多 Agent 编排与子任务分发:Agent 之间的中间结果传递频繁,压缩层能显著降低整体流水线的上下文开销。
- 团队级 AI 成本治理:作为统一网关部署,为不同项目、不同模型提供一致的压缩策略与可观测的省量统计。
生态对比
与 LLMLingua 等 Prompt 压缩方案相比,caveman 不做 token 级剪枝,而是通过行为约束改变模型表达方式,因此不会把关键句剪成语义碎片;与 LiteLLM 这类 LLM 网关相比,后者解决路由、计费与可观测性,但不做内容级压缩,二者定位互补而非替代;与 GPTCache 等语义缓存相比,缓存只在命中时省钱,首次请求仍然全价,而 caveman 对每一次调用都生效。相比 Agent 原生的上下文摘要(如 compaction),caveman 粒度更细、并且保留了原文回取通道。
延伸阅读
- 官方快速上手文档
- GitHub 仓库:JuliusBrussee/caveman
- 安装指南 INSTALL.md
- skills.sh 技能页
- npm 包 @caveman-ai/cli
- CAVEWOMAN 论文(arXiv)
- JetBrains 实测博客
- Hacker News 讨论帖
- Product Hunt 页面