写代码的AI助手每处理一次请求,都在为你看过的内容重复买单。三回合前读过的文件、滚动跳过的构建日志、工具返回的500行JSON——模型其实只需要其中四个字段。这些内容跟着每一次请求反复传输,每一次都被计费。
我开发了Compresso,一个本地AI压缩层,用Headroom、Rtk等不同技术削减token消耗。核心思路很简单:把同样的信息用更少的token表达,而不是让模型把上下文"总结"成更短的内容——那是误解。
压缩不是摘要
这里的压缩,指的是保留原文中重要的部分、对重复内容重新编码、指向已经存在的信息。是加密密度,不是丢弃。具体怎么做,得一项项拆开看。
先路由,再压缩
第一步其实不是压缩,是识别。一个本地ML分类器会先看每个内容块是什么:JSON数据、构建日志、源代码、diff、还是普通文本。这一步在你的机器上跑,只要几毫秒。
为什么需要先分类?因为不存在通用的压缩器。对构建日志安全的操作——把400行"Compiling..."折叠成一行——放到源代码上就是破坏。所以每种内容类型会被路由到针对其结构设计的压缩器,分类器不确定的内容则原样放行。
这也是为什么诚实的基准测试表里会有零。grep结果本身已经很密集,模型真正需要看的源代码——路由器的处理是什么都不做。什么都不做,本身就是一种功能。
重复结构:JSON问题
工具输出最爱返回近乎相同的对象数组。一百条日志事件、五百条搜索结果,每条都带着同样的键,值也大多相同。
结构感知压缩器会对数组做统计分析:哪些字段在变化,哪些是常量,值在哪里发生改变。然后保留头部、尾部、变化点,丢掉中间逐字重复的部分。保留的每一项都是未改动的原始内容,同样的schema、同样的字节,没有混入任何生成文本。
处理前是500条几乎相同的JSON记录,处理后只留下前几条、后几条,以及那一条错误——因为信息就在那里。在真实的500条数据上实测:9,526个token压缩到1,614个,耗时2毫秒。
日志:保留信号,折叠噪音
构建和测试输出是AI代理读到的内容里最可压缩的,也是天真压缩最危险的对象。规则是:错误、警告、堆栈跟踪完整保留,包括链式异常——有趣的信息往往藏在最深处。
热门跟贴