gni-compression 已在 npm 上 — 我在构建领域自适应 LLM 压缩器的一个月中学到的东西
Source: Dev.to
两个函数
const { compress, decompress } = require('gni-compression')
const compressed = await compress(Buffer.from(longContext))
没有热身。没有会话状态。领域知识已经烘焙进预训练字典(gcdict.bin),随包一起提供——在真实的 LLM 对话语料上训练。
数据
| 语料库 | GN 比率 | 节省 (brotli‑6) |
|---|---|---|
| Ubuntu IRC | 8.4× | 1.2× |
Ubuntu IRC 是意外之选。消息平均 67 字节——对 Brotli 来说太短,提升有限(1.2×)。GN 能达到 8.4× 是因为 IRC 词汇极其一致。短而重复的消息是领域字典最能发挥作用的地方。
为什么会出现这些数字
当我扫描最小短语长度时发现词汇分布并不平滑——它呈现两个簇并有间隙:
- minLen 4→5:令牌数量下降 68 %(短填充令牌)
这意味着压缩会优先去除填充。这大概解释了在将压缩后的上下文重新喂给模型时,我们会看到一个小而稳定的下游质量提升——信噪比得到改善。
我为何构建它
我在构建 NN Dash,一个持久化的 AI 代理框架,能够在 Claude、GPT 和本地 Ollama 之间路由。目标是让长期的 AI 关系基本免费。GN 使得数千条消息的上下文会话成为可能,而不会因 token 费用而崩溃。
使用方法
npm install gni-compression
const { compress, decompress } = require('gni-compression')
来源: (MIT)
欢迎对数字、方法论或使用案例提供反馈。