TuringCorp-net/mosaic_compress ↗★ 2
mosaic-compress
Stateless dialogue compression that mimics human memory — forgetting-curve bounded context for LLM conversations. DeepSeek Harness (DSH) plugin backend included.
安装
此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗
说明文档
阅读完整 README ↗MosaicCompress
基于自然遗忘曲线的无状态对话压缩。
LLM 对话线性增长,MosaicCompress 让它们永远有界——自动、无感,用户甚至 不需要知道"会话"是什么。
工作原理
消息数组(R 轮,从旧到新):
第 1 轮 ────→ 第 (R-50) 轮 │ Heavy 区 → 全部 → 2 条摘要消息
第 (R-49) 轮 → 第 (R-30) 轮 │ Light 区 → 逐条脱水,数量不变
第 (R-29) 轮 ──→ 第 R 轮 │ Raw 区 → 原样保留
稳态消息数恒定——2 + heavyStart × 每轮消息数(纯双消息对话为 102 条),
第 60 轮还是第 15,000 轮都一样。压缩率趋近 100%。
设计哲学:鲜活的记忆,不是交接简报
行业通用做法是阈值触发的一次性全量总结:窗口满了就把全部历史压成一份简报, 交给"看过笔记的新人"——最近的细节也在最该鲜活的地方被转述丢失,且损失不可见。
MosaicCompress 模拟的是生物遗忘曲线:人不会记得 300 轮对话的第 3 轮, 只会留下教训、规则与关系。算法在同一份消息数组里复现这条曲线:
最近 30 轮 → 逐字保留(鲜活——正在做的事)
第 30-50 轮 → 逐条蒸馏(保留结构,细节脱水)
第 50 轮以前 → 一条摘要对:身份、环境、权限、规则
没有切换时刻、没有重置、没有长度上限。损失是可见的:分区结构告诉模型 它不再知道什么,需要时可以从 shadowed 存储取回细节。
| 阈值总结(行业通用) | MosaicCompress | |
|---|---|---|
| 比喻 | 失忆 + 读日记 | 连续的鲜活记忆 |
| 连续性 | 每次压缩都重置 | 永不重置 |
| 损失 | 无差别、不可见 | 渐进、可见 |
| 近期轮次 | 在最该鲜活的时刻被转述 | 永远逐字 |
| 目的 | 可移植的交接简报 | 无界的人机对话 |
两种哲学互补:交接简报服务于冷启动与长中断;MosaicCompress 服务于 留在对话里。配合宿主持久存储(如 MEMORY.md),人与 AI 可以在同一条 遗忘曲线下无限对话。设计文档 §8/§10 给出了位置即年龄 模型的形式化基础,§9 是"同一事件、三种记忆载体"的实证案例。
快速开始
npm install mosaic-compress
import { mosaicCompress, DEFAULT_CONFIG, type MosaicConfig } from 'mosaic-compress';
const config: MosaicConfig = {
...DEFAULT_CONFIG,
callLLM: async (systemPrompt, userInput) => {
const res = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: [
{ role: 'system', content: systemPrompt },
{ role: 'user', content: userInput },
],
});
return res.choices[0].message.content ?? '';
},
};
// 每轮调用一次——阈值以下零成本,压缩里程碑时 1-2 秒延迟
const compressed = await mosaicCompress(messages, config);