---
title: "Caveman 3.0 与 Claude Code：本地输入压缩"
canonical: https://wavect.io/zh/blog/caveman-3-claude-code-input-compression/
language: zh
description: "Caveman 3.0 如何在本地压缩 Claude Code 工具输出、保留精确恢复、采用 Apache-2.0，以及 33.2% 输入 token 基准究竟说明什么。"
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

13 分钟 阅读 · 2026年10月2日 最近审核 2026年10月2日

[**下一篇**](/zh/blog/context-language-models-vs-compaction/)

# Caveman 3.0 与 Claude Code：本地输入压缩、原文恢复与基准

要点速览

Caveman 3.0 已不只是让智能体少说废话的技能。本地代理可以在编码智能体把日志、JSON、YAML、测试输出等工具结果发给模型之前先压缩，同时保留可精确恢复的原文。项目公布的 Claude Code 基准在 18 组配对运行中报告 provider 计量输入 token 减少 33.2%，且 18/18 精确答案检查通过。但其中一个 HTML 工作负载反而多用了 9.9% 输入，原始基准运行产物也尚未公开。3.0 还把整个公开仓库改为 Apache-2.0，并将 TypeScript 与 Python 中间件稳定到 1.0.0。本文重点说明应该如何试点、测什么，以及本地运行仍有哪些隐私和数据保留边界。

**核查日期：2026 年 10 月 2 日。**产品基线为 Caveman 3.0.0、runtime `bin-v2.0.0`、SDK 1.2.0 和 middleware 1.0.0。本文是源码与基准方法核查，不是 Wavect 自己的生产基准。 [Caveman 3.0.0 release](https://github.com/JuliusBrussee/caveman/releases/tag/v3.0.0)

**Caveman 3.0 真正值得关注的地方，已经不只是那个让它走红的“穴居人说话方式”。**最初的思路很简单：让 coding agent 少说废话。现在的架构开始处理长任务里更容易膨胀的一侧，也就是模型反复读取的上下文。一个本地代理可以在下一次模型请求之前压缩大型工具结果，同时保留精确原文，供智能体在需要时恢复。 [Caveman 3.0 README](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/README.md)

这和我们的通用 [编码智能体 token 优化指南](/zh/blog/smarter-token-usage-with-your-ai-coding-agent/) 不同，后者讨论缓存、模型路由与上下文缩减的完整成本栈；也比 [工具输出压缩指南](/zh/blog/codag-cost-control/) 更窄。本文专门回答 **Caveman 3.0 如何压缩 Claude Code 输入、Recovery 是否可靠、本地部署边界是什么，以及公开证据到底支持哪些结论**。

## Caveman 3.0 到底变了什么？

Caveman 3.0.0 于 2026 年 9 月 30 日发布。这个版本把许可、runtime、middleware 与本地分析工具整合成了更清晰的部署故事。 [Release notes](#source-release) 。

| 领域 | Caveman 3.0 | 为什么重要 |
| --- | --- | --- |
| 许可证 | 从 3.0.0 起，整个公开仓库采用 Apache-2.0。 | Engine、Proxy、CLI、SDK 与 Middleware 可以在同一宽松许可证下 fork、嵌入和自托管。 |
| Middleware | TypeScript 与 Python 包稳定到 1.0.0，并要求 SDK 1.2.0。 | 团队可以把相同的压缩层直接放进自己的 Agent 应用，而不仅是包住终端智能体。 |
| `caveman learn` | 增加后台刷新、memory 检查、趋势与需同意的修复流程。 | 先找出重复上下文从哪里来，再决定是否值得压缩。 |
| Runtime | `bin-v2.0.0` 改进 middleware 生命周期、retention 与部署原语。 | Recovery 原文可以按 scope 管理并随 session 删除，而不是无限堆在旁路存储里。 |

许可证变化需要说准确。3.0.0 之前，仓库一部分是 MIT，而和 Engine 绑定的 runtime 代码使用 BSL-1.1。从 3.0.0 开始，公开仓库统一为 Apache-2.0，不再包含该代码之前的 hosted-service 限制或 Change Date。旧版本仍保留它们发布时的许可条款。Caveman Cloud 是独立的商业托管产品，不属于该仓库许可证范围。 [Caveman licensing notes](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/LICENSING.md)

## 长 Agent Session 里，反复“读”往往比最后“写”更贵

Coding agent 的成本不只来自最终回复。长 session 会持续携带系统说明、此前消息与工具结果。一次测试命令输出 80 KB，如果框架把它一直保留在 history 中，它可能在后续多个请求里反复被送进模型。JSON、YAML、diff 和搜索结果也是同样的问题。

Caveman 实际上解决两个不同问题：

- **Response skill** 让智能体用更短的语言回复，主要减少输出 token。
- **Proxy 与 middleware** 在推理前转换可压缩上下文，主要减少输入 token。

第二个更有工程价值。模型为了定位一个致命异常，并不一定需要日志里的每一条 INFO 行；但直接截断也很危险，因为被删除的那一行可能正是答案。因此 Caveman 的核心不是“丢掉”，而是**压缩后仍可精确恢复**。 [项目架构](#source-readme) 。

## 本地 Caveman Proxy 如何工作

```
Claude Code / Codex / 其他 Agent
        |
        | 请求 + 工具结果
        v
本地 Caveman Proxy
        |-- 判断可压缩内容
        |-- 用更短表示替换噪声块
        |-- 本地保存精确原文
        |-- 提供 recovery handles
        v
Agent 原本选择的模型 Provider
```

代理仍然把推理请求发给智能体原本使用的模型 Provider。因此，本地运行 Caveman **并不会把 Claude、GPT 或其他云模型变成本地模型**。你获得的是对转换与 Recovery 层的控制。如果上游模型仍是云 API，Provider 仍会收到转换后的模型请求。Caveman 的安全文档明确区分了这些数据流。 [Security and privacy model](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/SECURITY.md)

对于自建 Agent，middleware 1.0 在不替换框架的情况下应用同样机制。Adapter 复制 outbound request，在副本里压缩符合条件的 tool result，并保留应用自己的原始 conversation history。只有能够注册真实 recovery tool 的集成路径才执行压缩。如果无法绑定 recovery，文档规定应原样透传，而不是悄悄变成有损压缩。 [TypeScript middleware 1.0](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/packages/middleware/typescript/README.md) [Python middleware 1.0](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/packages/middleware/python/README.md)

## 33.2% Claude Code 基准究竟证明了什么？

仓库里最有价值的公开证据，不是“某一段内容能缩小 98% 或 99%”，而是一个配对的 Agent 级基准。它统计完整 session 行为结束后，由 Provider 报告的输入 token。 [CaveBench wrap benchmark](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/docs/WRAP-BENCHMARK.md)

| Workload | Direct input | Caveman input | 报告变化 | 答案检查 |
| --- | --- | --- | --- | --- |
| Log needle | 148,807 | 74,068 | -50.2% | 3/3 |
| Deployment JSON | 147,975 | 108,939 | -26.4% | 3/3 |
| Fraud CSV | 165,823 | 74,484 | -55.1% | 3/3 |
| Test output | 150,377 | 108,514 | -27.8% | 3/3 |
| Configuration YAML | 132,124 | 71,027 | -46.2% | 3/3 |
| Dashboard HTML | 140,687 | 154,641 | **+9.9%** | 3/3 |

18 组 Direct 与 Caveman 配对运行合计为**直接运行 885,793 输入 token，Caveman 591,673**，即减少 33.2%。18/18 精确答案检查全部通过。项目报告的 case-clustered 95% 区间为 14.6% 到 48.5%。HTML 这一负例没有被删掉：因为没有有效压缩变换，却仍承担了 Caveman overhead，所以反而多用了 9.9% 输入。 [基准报告与方法](#source-benchmark) 。

这个负例非常重要。单个 payload 压缩得很漂亮，不代表整个 session 一定更便宜。如果内容本来就很短、格式不支持，或成本主要来自其他上下文，额外一层甚至可能增加 token。

**公开证据也有边界。**仓库给出了结果表、方法与 provenance hashes，但明确说明没有公开 raw harness 和 run artifacts。因此更准确的说法是“固定版本的项目报告”，而不是任何人从公开 checkout 就能完整复现的 benchmark。 [Reproduction availability](#source-benchmark) 。

发布材料还展示了日志、CSV、YAML 与测试输出的更激进单块压缩例子。它们适合当 smoke test，但不应该直接转换成账单预测。用于采购或架构决策时，Agent 级的 provider-input 基准更有参考价值。

## 为什么工具输出缩小 98%，账单不会自动下降 98%

一个 tool result 只是完整请求的一部分。System prompt、项目说明、历史消息、其他工具结果以及缓存行为仍然存在。压缩视图不够时，Agent 还可能调用 recovery。因此试点至少应分别记录：

- 每个完整任务的 provider-reported input tokens，
- cache read 与 cache write tokens，
- output tokens，
- recovery 次数与取回字节数，
- retry 和额外 LLM calls，
- 最终可接受任务质量。

真正应该优化的不是最夸张的压缩率，而是**每个通过验收任务的总成本**。

## `caveman learn`：先找出 token 到底花在哪里

`caveman learn` 会读取本地 session history 与 setup files，查找持续消耗 token 的结构性来源。文档列出的对象包括每次都加载的说明、从未使用的 skill、重复文本、context depth 与 memory 问题。分析在本地运行，输出数字明确标记为 `inferred`，不是 Provider 已验证账单。 [caveman learn 文档](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/docs/technical/learn.md)

这很重要，因为最便宜的上下文往往是根本不该加载的上下文。几百行的 `CLAUDE.md`、永远不用的 skill description，或者每个 session 都重复粘贴的流程，可能比一次超长测试输出更值得先处理。

```
caveman learn --plain --since 7d --sources claude,codex
caveman learn --all
caveman learn implement
```

3.0 还加入 autopilot，可在 session 结束后后台重新扫描，最多每六小时一次。Release notes 表示，实际修改仍需用户同意，会重新计量，如果不能让消息更短就撤销。可用 `caveman learn autopilot off` 关闭。 [3.0 release notes](#source-release) 。

## 本地运行不等于不需要数据治理

### 1. 模型 Provider 仍会收到模型请求

如果 Claude Code 仍连接 Anthropic，压缩后的请求仍发给 Anthropic；应用用 OpenAI，就仍发给 OpenAI。想实现完整本地推理，还需要本地或自托管模型端点。

### 2. Recovery 原文是敏感的本地数据

Runtime 会保存精确工具原文供恢复。从 `bin-v2.0.0` 起，middleware 原文属于各自 scope，retention 可以覆盖原文，删除 session 也可以删除其原文。配置 encryption key 时支持静态加密；没有 key 时主要依赖文件系统权限。Security 文档也明确指出，更早 runtime 的生命周期管理更弱，因此对 retention 有要求时应固定 runtime 版本。 [Runtime storage lifecycle](#source-security) 。

### 3. CLI telemetry 默认开启

单独安装 skill 本身不会发送数据，但 3.0 CLI 与 Agent hooks 使用 opt-out telemetry。Release 与安全文档说明事件会包含随机 install ID、token aggregates 与发送方 IP，同时不包含 prompt、代码、文件路径、tool arguments 或 tool results。项目把它称为 pseudonymous 而不是 anonymous。CI 默认不发送。 [Telemetry details](#source-security) 。

```
caveman telemetry status
caveman telemetry off
# 或
export DO_NOT_TRACK=1
```

企业试点应该在第一次接近生产环境的运行之前决定这些设置。

## 如何做一个可信的 Caveman 3.0 Claude Code 试点

### 第 1 步：固定版本

```
npm install -g @caveman-ai/cli@2.0.0
caveman setup
caveman telemetry off   # 如果符合你的政策
```

3.0 release 将 CLI 2.0.0 对应到 runtime `bin-v2.0.0`。Retention、middleware contract 与 adapter 都可能变化，因此版本固定很重要。 [版本矩阵](#source-release) 。

### 第 2 步：先测自己的 token sinks

```
caveman learn --plain --since 7d
```

如果最大浪费其实来自每次都加载的说明文件，那就先修这个问题，不要把 Proxy 压缩当成万能答案。

### 第 3 步：选择有精确验收标准的任务

例如：从大日志找出一条 FATAL、定位 JSON 配置漂移、识别失败测试、提取指定 CSV outlier。每项任务都应有脚本可验证的 oracle，而不是只看回答“像不像对的”。

### 第 4 步：成对运行 Direct 与 Compressed

固定模型、Agent 版本、fixtures、tool permissions 与代码库初始状态。记录 Provider 输入、cache reads/writes、输出、延迟、retry 与 recovery calls，并轮换运行顺序减少缓存偏差。

### 第 5 步：按“每个通过验收任务的经济性”决定 rollout

| 指标 | 应满足的条件 |
| --- | --- |
| 任务正确性 | Holdout 任务没有有意义的质量下降。 |
| Provider input | 可压缩 workload 的 median 与 aggregate 输入都下降。 |
| 负例 | 不支持或已很小的 payload 仍保留在报告中。 |
| Recovery | 短表示不足时可精确取回原文。 |
| Retries | 不会增加到抵消 token savings 或人工时间。 |
| Storage policy | Retention、删除、加密与 telemetry 符合数据分类要求。 |

## 在自己的 Agent 中使用 Caveman Middleware 1.0

关键问题是你的框架路径能否绑定 recovery。TypeScript 文档把 Vercel AI SDK、OpenAI、Anthropic、LangChain 的部分路径列为 certified，其他一些 adapter 为 experimental。Python 把 LangChain、OpenAI、Anthropic 与 LiteLLM 列为 certified family。默认情况下，不支持的版本或 runtime 故障会 fail-open，也就是原始请求继续执行并记录原因。 [TypeScript contract](#source-ts) [Python contract](#source-py) 。

一个稳妥 rollout 应使用三种模式：

- `record` ：验证集成但不修改模型输入。
- `compress` ：Treatment arm。
- `off` ：明确的 rollback path。

官方 quickstart 默认可以在不发 Provider 请求的情况下测试真实本地 runtime、压缩与精确分页恢复，再把付费模型调用作为单独可选步骤。这个顺序非常适合基础设施试点。

## Apache-2.0 是否意味着“真正拥有自己的 AI”？

至少在这一层，控制权明显增强。团队可以检查、fork、修改和嵌入 Caveman 3.0 的公开 runtime，不再受此前 BSL hosted-service 条款限制。对不希望每个 Agent request 都经过闭源优化层的内部平台来说，这很有意义。 [许可证范围](#source-license) 。

但 AI ownership 是分层的。你可以拥有压缩代理，却仍租用模型；可以自托管模型，却仍依赖 proprietary developer tools。更实用的问题是：**推理、上下文、memory、tooling 与 observability 中，哪些部分可以由我们自己检查、替换和运营？**

## 什么时候值得测试 Caveman？

| 适合测试 | 先解决其他问题 |
| --- | --- |
| Agent 反复读取大型日志、测试输出、JSON 或 YAML。 | 大多数请求已经很短。 |
| 任务结果可以精确验证。 | 无法判断压缩后是否仍然正确。 |
| 需要本地精确 Recovery，而不是不可逆截断。 | 政策不允许本地保留工具原文。 |
| 希望使用可 fork、可嵌入的 Apache-2.0 层。 | 主要成本其实来自模型选择、缓存或调用次数。 |
| 使用受支持的 middleware 路径。 | 框架版本超出测试范围且无法自行验证。 |

如果要看更完整的成本控制顺序，请先读我们的 [Agent token 使用指南](/zh/blog/smarter-token-usage-with-your-ai-coding-agent/) ；要比较工具输出压缩类别，请看 [Tool Output Compression 指南](/zh/blog/codag-cost-control/) ；如果想研究“由模型自己编辑上下文”，请看 [Context Language Models vs Compaction](/zh/blog/context-language-models-vs-compaction/) 。

## 常见问题

### Caveman 3.0 是完全开源的吗？

从 3.0.0 起，公开仓库采用 Apache-2.0，包括 Engine、Proxy、CLI、SDK 与 Middleware。旧 release 保留原许可。Caveman Cloud 是独立商业软件。 [许可证详情](#source-license) 。

### Caveman 能减少 Claude Code 输入 token 吗？

在公开的六类 workload 基准中，Caveman 聚合 Provider input 减少 33.2%，并通过 18/18 精确答案检查。它是特定基准结果，不是普遍保证，且 raw run artifacts 未公开。 [Benchmark](#source-benchmark) 。

### Caveman 会把代码发到 Caveman 服务器吗？

本地 Proxy 与 framework middleware 不需要 Caveman account，也不向 Caveman server 发送 prompt 或 tool result 内容。模型 Provider 仍会收到推理请求。CLI 有独立 opt-out telemetry，包含使用元数据和 IP，但文档说明不包含 prompt、代码或文件路径。 [Security model](#source-security) 。

### Agent 能取回被压缩掉的内容吗？

可以。受支持的压缩路径保存精确原文并绑定 recovery。无法绑定 recovery 的路径应透传原文。 [Recovery contract](#source-ts) 。

### `caveman learn` 是本地的吗？

Learn 读取本地 history 与文件，文档说明分析本身不会把这些内容发出去。它和可关闭的 CLI telemetry 是两件事。 [Learn](#source-learn) [Telemetry](#source-security) 。

### 它和 Prompt Caching 一样吗？

不一样。Prompt caching 复用 Provider 对重复前缀的计算；Caveman 在请求发送之前改变可压缩上下文。两者可能互补，也可能相互影响，因此应一起测量。

### Caveman Middleware 支持 LiteLLM 吗？

Python middleware 1.0 文档把 LiteLLM 列为 certified adapter family，支持特定 async 与 proxy 路径，并要求明确绑定 recovery。 [Python middleware matrix](#source-py) 。

## 来源与核查说明

- [Caveman 3.0.0 release notes](https://github.com/JuliusBrussee/caveman/releases/tag/v3.0.0) ，版本、Apache-2.0、Learn autopilot 与 middleware 1.0。
- [LICENSING.md](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/LICENSING.md) ，仓库与 Cloud 许可边界。
- [CaveBench benchmark](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/docs/WRAP-BENCHMARK.md) ，Provider input、答案检查、置信区间、HTML 负例与复现边界。
- [SECURITY.md](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/SECURITY.md) ，数据流、本地 recovery storage 与 telemetry。
- [caveman learn 文档](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/docs/technical/learn.md) 。
- [TypeScript middleware 1.0](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/packages/middleware/typescript/README.md) 。
- [Python middleware 1.0](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/packages/middleware/python/README.md) 。
- [Caveman 3.0 README](https://github.com/JuliusBrussee/caveman/blob/v3.0.0/README.md) 。

## 最终思考

Caveman 3.0 已经从一个让智能体少说废话的玩笑，变成更严肃的上下文效率层。Apache-2.0 重许可、可恢复的本地压缩与稳定 middleware，使它值得在反复读取大型工具输出的 coding-agent 场景中测试。正确做法不是相信一张 98% 压缩截图，而是做配对任务、记录 Provider usage、保留负例、验证精确 Recovery，并拒绝任何以任务质量下降换来的 token 节省。

## 你可能也喜欢..

[**Smarter Token Usage with Your AI Coding Agent** 更广泛的成本控制指南，涵盖缓存、路由与上下文缩减。](/zh/blog/smarter-token-usage-with-your-ai-coding-agent/) [**Context Language Models vs Compaction** 另一种方法：让模型自己编辑实时上下文，而不是依赖代理压缩器。](/zh/blog/context-language-models-vs-compaction/)

模型与基础设施

## 继续浏览此集群

模型选择、推理经济性、本地部署、压缩与服务架构。

[从核心文章开始**在欧盟自托管 LLM：开放权重模型何时才真正划算**](/zh/blog/self-hosting-llms-eu-cost/)

- [Cloudflare Clef 与 Jev：价格、基准测试与迁移](/zh/blog/cloudflare-clef-vs-jev/)
- [Context Language Models 与上下文压缩：应该如何试点？](/zh/blog/context-language-models-vs-compaction/)
- [LiteLLM Lens：用 SQL 与 API 分析智能体 Trace](/zh/blog/litellm-lens-agent-trace-analysis/)
- [SmythOS Studio 自托管指南：Docker、成本与部署边界](/zh/blog/smythos-studio-self-hosting/)
- [DeerFlow 2.0：Docker 部署、沙箱与记忆机制](/zh/blog/deerflow-2-docker-setup-sandbox-memory/)

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

13 分钟 阅读 · 2026年10月2日 最近审核 2026年10月2日

[**下一篇**](/zh/blog/context-language-models-vs-compaction/)

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/zh/blog/caveman-3-claude-code-input-compression/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-10-04",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-10-04",
      "url": "https://wavect.io/zh/blog/caveman-3-claude-code-input-compression/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "abstract": "Caveman 3.0 已不只是让智能体少说废话的技能。本地代理可以在编码智能体把日志、JSON、YAML、测试输出等工具结果发给模型之前先压缩，同时保留可精确恢复的原文。项目公布的 Claude Code 基准在 18 组配对运行中报告 provider 计量输入 token 减少 33.2%，且 18/18 精确答案检查通过。但其中一个 HTML 工作负载反而多用了 9.9% 输入，原始基准运行产物也尚未公开。3.0 还把整个公开仓库改为 Apache-2.0，并将 TypeScript 与 Python 中间件稳定到 1.0.0。本文重点说明应该如何试点、测什么，以及本地运行仍有哪些隐私和数据保留边界。",
  "articleBody": " 博客概览/AI 与智能体/模型与基础设施 Caveman 3.0 与 Claude Code：本地输入压缩、原文恢复与基准 要点速览 Caveman 3.0 已不只是让智能体少说废话的技能。本地代理可以在编码智能体把日志、JSON、YAML、测试输出等工具结果发给模型之前先压缩，同时保留可精确恢复的原文。项目公布的 Claude Code 基准在 18 组配对运行中报告 provider 计量输入 token 减少 33.2%，且 18/18 精确答案检查通过。但其中一个 HTML 工作负载反而多用了 9.9% 输入，原始基准运行产物也尚未公开。3.0 还把整个公开仓库改为 Apache-2.0，并将 TypeScript 与 Python 中间件稳定到 1.0.0。本文重点说明应该如何试点、测什么，以及本地运行仍有哪些隐私和数据保留边界。 核查日期：2026 年 10 月 2 日。产品基线为 Caveman 3.0.0、runtime bin-v2.0.0、SDK 1.2.0 和 middleware 1.0.0。本文是源码与基准方法核查，不是 Wavect 自己的生产基准。Caveman 3.0.0 release Caveman 3.0 真正值得关注的地方，已经不只是那个让它走红的“穴居人说话方式”。最初的思路很简单：让 coding agent 少说废话。现在的架构开始处理长任务里更容易膨胀的一侧，也就是模型反复读取的上下文。一个本地代理可以在下一次模型请求之前压缩大型工具结果，同时保留精确原文，供智能体在需要时恢复。Caveman 3.0 README 这和我们的通用编码智能体 token 优化指南不同，后者讨论缓存、模型路由与上下文缩减的完整成本栈；也比工具输出压缩指南更窄。本文专门回答 Caveman 3.0 如何压缩 Claude Code 输入、Recovery 是否可靠、本地部署边界是什么，以及公开证据到底支持哪些结论。 Caveman 3.0 到底变了什么？ Caveman 3.0.0 于 2026 年 9 月 30 日发布。这个版本把许可、runtime、middleware 与本地分析工具整合成了更清晰的部署故事。Release notes。 对工程团队最重要的 Caveman 3.0 变化 领域Caveman 3.0为什么重要 许可证从 3.0.0 起，整个公开仓库采用 Apache-2.0。Engine、Proxy、CLI、SDK 与 Middleware 可以在同一宽松许可证下 fork、嵌入和自托管。 MiddlewareTypeScript 与 Python 包稳定到 1.0.0，并要求 SDK 1.2.0。团队可以把相同的压缩层直接放进自己的 Agent 应用，而不仅是包住终端智能体。 caveman learn增加后台刷新、memory 检查、趋势与需同意的修复流程。先找出重复上下文从哪里来，再决定是否值得压缩。 Runtimebin-v2.0.0 改进 middleware 生命周期、retention 与部署原语。Recovery 原文可以按 scope 管理并随 session 删除，而不是无限堆在旁路存储里。 许可证变化需要说准确。3.0.0 之前，仓库一部分是 MIT，而和 Engine 绑定的 runtime 代码使用 BSL-1.1。从 3.0.0 开始，公开仓库统一为 Apache-2.0，不再包含该代码之前的 hosted-service 限制或 Change Date。旧版本仍保留它们发布时的许可条款。Caveman Cloud 是独立的商业托管产品，不属于该仓库许可证范围。Caveman licensing notes 长 Agent Session 里，反复“读”往往比最后“写”更贵 Coding agent 的成本不只来自最终回复。长 session 会持续携带系统说明、此前消息与工具结果。一次测试命令输出 80 KB，如果框架把它一直保留在 history 中，它可能在后续多个请求里反复被送进模型。JSON、YAML、diff 和搜索结果也是同样的问题。 Caveman 实际上解决两个不同问题： Response skill 让智能体用更短的语言回复，主要减少输出 token。 Proxy 与 middleware 在推理前转换可压缩上下文，主要减少输入 token。 第二个更有工程价值。模型为了定位一个致命异常，并不一定需要日志里的每一条 INFO 行；但直接截断也很危险，因为被删除的那一行可能正是答案。因此 Caveman 的核心不是“丢掉”，而是压缩后仍可精确恢复。项目架构。 本地 Caveman Proxy 如何工作 Claude Code / Codex / 其他 Agent | | 请求 + 工具结果 v 本地 Caveman Proxy |-- 判断可压缩内容 |-- 用更短表示替换噪声块 |-- 本地保存精确原文 |-- 提供 recovery handles v Agent 原本选择的模型 Provider 代理仍然把推理请求发给智能体原本使用的模型 Provider。因此，本地运行 Caveman 并不会把 Claude、GPT 或其他云模型变成本地模型。你获得的是对转换与 Recovery 层的控制。如果上游模型仍是云 API，Provider 仍会收到转换后的模型请求。Caveman 的安全文档明确区分了这些数据流。Security and privacy model 对于自建 Agent，middleware 1.0 在不替换框架的情况下应用同样机制。Adapter 复制 outbound request，在副本里压缩符合条件的 tool result，并保留应用自己的原始 conversation history。只有能够注册真实 recovery tool 的集成路径才执行压缩。如果无法绑定 recovery，文档规定应原样透传，而不是悄悄变成有损压缩。TypeScript middleware 1.0 Python middleware 1.0 33.2% Claude Code 基准究竟证明了什么？ 仓库里最有价值的公开证据，不是“某一段内容能缩小 98% 或 99%”，而是一个配对的 Agent 级基准。它统计完整 session 行为结束后，由 Provider 报告的输入 token。CaveBench wrap benchmark Caveman 发布的 Claude Code 基准，每种 workload 运行三次 WorkloadDirect inputCaveman input报告变化答案检查 Log needle148,80774,068-50.2%3/3 Deployment JSON147,975108,939-26.4%3/3 Fraud CSV165,82374,484-55.1%3/3 Test output150,377108,514-27.8%3/3 Configuration YAML132,12471,027-46.2%3/3 Dashboard HTML140,687154,641+9.9%3/3 18 组 Direct 与 Caveman 配对运行合计为直接运行 885,793 输入 token，Caveman 591,673，即减少 33.2%。18/18 精确答案检查全部通过。项目报告的 case-clustered 95% 区间为 14.6% 到 48.5%。HTML 这一负例没有被删掉：因为没有有效压缩变换，却仍承担了 Caveman overhead，所以反而多用了 9.9% 输入。基准报告与方法。 这个负例非常重要。单个 payload 压缩得很漂亮，不代表整个 session 一定更便宜。如果内容本来就很短、格式不支持，或成本主要来自其他上下文，额外一层甚至可能增加 token。 公开证据也有边界。仓库给出了结果表、方法与 provenance hashes，但明确说明没有公开 raw harness 和 run artifacts。因此更准确的说法是“固定版本的项目报告”，而不是任何人从公开 checkout 就能完整复现的 benchmark。Reproduction availability。 发布材料还展示了日志、CSV、YAML 与测试输出的更激进单块压缩例子。它们适合当 smoke test，但不应该直接转换成账单预测。用于采购或架构决策时，Agent 级的 provider-input 基准更有参考价值。 为什么工具输出缩小 98%，账单不会自动下降 98% 一个 tool result 只是完整请求的一部分。System prompt、项目说明、历史消息、其他工具结果以及缓存行为仍然存在。压缩视图不够时，Agent 还可能调用 recovery。因此试点至少应分别记录： 每个完整任务的 provider-reported input tokens， cache read 与 cache write tokens， output tokens， recovery 次数与取回字节数， retry 和额外 LLM calls， 最终可接受任务质量。 真正应该优化的不是最夸张的压缩率，而是每个通过验收任务的总成本。 caveman learn：先找出 token 到底花在哪里 caveman learn 会读取本地 session history 与 setup files，查找持续消耗 token 的结构性来源。文档列出的对象包括每次都加载的说明、从未使用的 skill、重复文本、context depth 与 memory 问题。分析在本地运行，输出数字明确标记为 inferred，不是 Provider 已验证账单。caveman learn 文档 这很重要，因为最便宜的上下文往往是根本不该加载的上下文。几百行的 CLAUDE.md、永远不用的 skill description，或者每个 session 都重复粘贴的流程，可能比一次超长测试输出更值得先处理。 caveman learn --plain --since 7d --sources claude,codex caveman learn --all caveman learn implement 3.0 还加入 autopilot，可在 session 结束后后台重新扫描，最多每六小时一次。Release notes 表示，实际修改仍需用户同意，会重新计量，如果不能让消息更短就撤销。可用 caveman learn autopilot off 关闭。3.0 release notes。 本地运行不等于不需要数据治理 1. 模型 Provider 仍会收到模型请求 如果 Claude Code 仍连接 Anthropic，压缩后的请求仍发给 Anthropic；应用用 OpenAI，就仍发给 OpenAI。想实现完整本地推理，还需要本地或自托管模型端点。 2. Recovery 原文是敏感的本地数据 Runtime 会保存精确工具原文供恢复。从 bin-v2.0.0 起，middleware 原文属于各自 scope，retention 可以覆盖原文，删除 session 也可以删除其原文。配置 encryption key 时支持静态加密；没有 key 时主要依赖文件系统权限。Security 文档也明确指出，更早 runtime 的生命周期管理更弱，因此对 retention 有要求时应固定 runtime 版本。Runtime storage lifecycle。 3. CLI telemetry 默认开启 单独安装 skill 本身不会发送数据，但 3.0 CLI 与 Agent hooks 使用 opt-out telemetry。Release 与安全文档说明事件会包含随",
  "articleSection": "AI Agents",
  "author": {
    "@id": "https://wavect.io/team/kevin-riedl/#person",
    "@type": "Person",
    "name": "Kevin Riedl",
    "sameAs": [
      "https://www.wikidata.org/wiki/Q139796365",
      "https://www.linkedin.com/in/wsdt",
      "https://github.com/wsdt"
    ],
    "url": "https://wavect.io/team/kevin-riedl/"
  },
  "citation": [
    {
      "@type": "WebPage",
      "name": "Caveman 3.0.0 release",
      "url": "https://github.com/JuliusBrussee/caveman/releases/tag/v3.0.0"
    },
    {
      "@type": "WebPage",
      "name": "Caveman 3.0 README",
      "url": "https://github.com/JuliusBrussee/caveman/blob/v3.0.0/README.md"
    },
    {
      "@type": "WebPage",
      "name": "Caveman licensing notes",
      "url": "https://github.com/JuliusBrussee/caveman/blob/v3.0.0/LICENSING.md"
    },
    {
      "@type": "WebPage",
      "name": "Security and privacy model",
      "url": "https://github.com/JuliusBrussee/caveman/blob/v3.0.0/SECURITY.md"
    },
    {
      "@type": "WebPage",
      "name": "TypeScript middleware 1.0",
      "url": "https://github.com/JuliusBrussee/caveman/blob/v3.0.0/packages/middleware/typescript/README.md"
    },
    {
      "@type": "WebPage",
      "name": "Python middleware 1.0",
      "url": "https://github.com/JuliusBrussee/caveman/blob/v3.0.0/packages/middleware/python/README.md"
    },
    {
      "@type": "WebPage",
      "name": "CaveBench wrap benchmark",
      "url": "https://github.com/JuliusBrussee/caveman/blob/v3.0.0/docs/WRAP-BENCHMARK.md"
    },
    {
      "@type": "WebPage",
      "name": "caveman learn 文档",
      "url": "https://github.com/JuliusBrussee/caveman/blob/v3.0.0/docs/technical/learn.md"
    }
  ],
  "dateModified": "2026-10-02",
  "datePublished": "2026-10-02",
  "description": "Caveman 3.0 已不只是让智能体少说废话的技能。本地代理可以在编码智能体把日志、JSON、YAML、测试输出等工具结果发给模型之前先压缩，同时保留可精确恢复的原文。项目公布的 Claude Code 基准在 18 组配对运行中报告 provider 计量输入 token 减少 33.2%，且 18/18 精确答案检查通过。但其中一个 HTML 工作负载反而多用了 9.9% 输入，原始基准运行产物也尚未公开。3.0 还把整个公开仓库改为 Apache-2.0，并将 TypeScript 与 Python 中间件稳定到 1.0.0。本文重点说明应该如何试点、测什么，以及本地运行仍有哪些隐私和数据保留边界。",
  "headline": "Caveman 3.0 与 Claude Code：本地输入压缩、原文恢复与基准",
  "image": "https://wavect.io/img/blog/headers/header_caveman-3-claude-code-input-compression.svg",
  "inLanguage": "zh",
  "keywords": "AI Coding Agents, Context Compression, Claude Code",
  "mainEntityOfPage": {
    "@id": "https://wavect.io/zh/blog/caveman-3-claude-code-input-compression/",
    "@type": "WebPage"
  },
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/zh/blog/caveman-3-claude-code-input-compression/",
  "wordCount": 949
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/",
      "name": "首页",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/overview/",
      "name": "博客概览",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/topics/ai-agents/",
      "name": "AI 与智能体",
      "position": 3
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/clusters/models-infrastructure/",
      "name": "模型与基础设施",
      "position": 4
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/caveman-3-claude-code-input-compression/",
      "name": "Caveman 3.0 与 Claude Code：本地输入压缩",
      "position": 5
    }
  ]
}
```
