最近一项深入分析揭示,AI代码助手Claude Code的会话文件竟然有高达93%的内容是“噪音”,而非核心信息。一位开发者通过开发一个会话精炼工具,成功将70MB的会话文件压缩至仅7MB,显著提升了效率和存储利用率。
在着手开发这个精炼工具之前,开发者提出了三个关键问题:一个70MB的会话文件里到底有什么?哪些内容可以安全地丢弃?以及如何证明关键信息没有丢失?
解剖70MB会话文件
通过对一个真实的70MB JSONL会话文件进行字节级别的分类,分析结果令人惊讶:
- JSON信封(sessionId, cwd, version, gitBranch等):约54%
- 工具结果(Read, Bash, Edit, Write, Agent):约25%
- Base64编码图像(屏幕截图、UI捕获):约12%
- 思考块(内部推理):约4%
- 实际对话文本:约3%
- 进度行、文件历史快照:约2%
最让人意想不到的是占比高达54%的“JSON信封”。在数千行的70MB文件中,每一行JSONL都重复包含相同的会话ID、用户类型、当前工作目录、版本和Git分支等字段,且值完全一致。这意味着有38MB的内容是完全相同的JSON键值对的反复出现。
而用户与Claude之间实际的对话文本,也就是真正承载了交互信息的部分,仅占整个文件的3%。其余大部分内容要么是冗余的元数据,要么是已经完成其使命的工具输出。
为何工具结果可以安全移除?
并非所有工具结果的价值都是相同的。不同类型的工具输出,其可重新获取性(re-obtainability)也不同:
| 工具 | 是否可剥离? | 原因 |
|---|---|---|
| Read | 是 | 文件仍在磁盘上。Claude可在50毫秒内再次读取。保留未更改的28MB文件内容纯属浪费。 |
| Bash | 大部分是 | 构建输出、测试运行、git日志结果等,捕获后即刻过时。仅保留开头5行和结尾5行:命令本身及成功或失败状态。 |
| Edit | 部分是 | 文件路径和更改内容很重要。但无需保留完整文件内容。可保留旧字符串和新字符串的预览(各200字符),以记住意图。 |
| Write | 部分是 | 与Edit类似。保留文件路径及头部/尾部预览。 |
| Agent | 保留更多 | 子代理的调研报告和分析包含合成知识,应保留多达2000字符。 |
| Screenshots | 是 | 数小时前捕获的Base64图像,显示的是旧UI状态。会话文件过大时,Claude甚至无法显示它们。 |
这一观点也得到了研究支持。JetBrains NeurIPS 2025的一项研究测试了两种处理编码代理工具输出的方法:观察掩蔽(用占位符替换结果)与LLM摘要。结果显示,两种方法的任务表现完全相同。这意味着模型一旦处理并响应了原始输出,就不再需要它了,因为响应本身就是知识。
正如一位研究人员所言:“当Claude读取847行代码并回应‘这使用了带有httpOnly cookies中刷新令牌的JWT’时,这句话就是知识。那847行是为了生成这句话而被消耗的。”