前言¶
长对话场景下,上下文窗口会线性增长,最终导致模型溢出。传统的阈值摘要(Threshold Summarization)方案通常会在压缩时刻造成“记忆中断”,或者将最新指令误判为冗余内容。
Mosaic Memory Compress 提供了一种无状态的对话压缩方案。它模仿人类的记忆遗忘曲线,在保持对话连续性的同时,将消息数量控制在固定范围。插件内置了 DeepSeek Harness (DSH) 适配器,可以直接在 DSH 流程中使用。
它是什么¶
这是一个通用的、可插拔的无状态对话压缩算法,支持任何 LLM 智能体框架。它随带一个即用型的 DeepSeek Harness (DSH) 适配器模块。通过该插件,LLM 对话可以永久保持有界,无需复杂的会话管理,也无需担心上下文溢出。
核心功能¶
- Stateless & repeatable (无状态与可复现):不依赖会话状态。每次调用都能返回确定性的结果,结果可以直接作为下一轮的输入。
- Zero-cost below threshold (阈值以下零成本):当未达到压缩阈值时,函数会立即返回,不消耗额外资源。
- Anti-jitter (抗抖动):压缩操作仅发生在配置的窗口边界触发,避免高频触发导致的性能抖动。
- LLM-agnostic (模型无关):支持任意 LLM 提供商。通过自定义
callLLM函数,即可接入 OpenAI、Anthropic 或本地模型。 - DeepSeek Harness (DSH) adapter (DSH 适配器):提供专用的模块以实现与 DeepSeek Harness 的无缝集成。
- Tool-call safe (工具调用安全):在包含工具调用的消息中,不会破坏轮次计数逻辑。
- Graceful degradation (优雅降级):即使 LLM 调用失败,也不会阻塞对话流程。
安装与启用¶
通过 npm 安装核心包:
npm install mosaic-memory-compress
该插件在打包时使用 cordis.patch.yml 进行处理。
典型用法¶
导入函数并配置压缩参数。MosaicMemoryConfig 包含了控制压缩节奏的阈值参数和一个用于处理重载压缩的 LLM 回调函数。
import { mosaicMemoryCompress, type MosaicMemoryConfig } from 'mosaic-memory-compress';
const config: MosaicMemoryConfig = {
lightStart: 10, // 保持最近 10 轮原始消息
lightWindow: 30, // 每 30 轮进行一次轻量级压缩
heavyStart: 40, // 超过此轮数进入重载区
heavyWindow: 30, // 重载压缩的节奏
callLLM: async (systemPrompt, userInput) => {
// 在这里接入你的 LLM 提供商(如 OpenAI、DeepSeek 等)
// const res = await openai.chat.completions.create({...});
// return res.choices[0].message.content ?? '';
return ''; // 占位
},
};
// 在对话的每一轮调用此函数
const compressed = await mosaicMemoryCompress(messages, config);
适用场景与注意¶
- 适用场景:需要处理无限长对话的场景,或者希望避免传统摘要方案中“记忆中断”问题的开发者。
- 重要注意:
- 无会话状态:该插件完全无状态,不负责保存上下文。持久化存储是宿主的责任(例如将压缩后的数组存入文件或数据库)。
- 许可证检查:使用前请检查源码与许可证(MIT)。
- DSH 权限:插件以当前 DSH 进程权限运行,请确保对源码有审查能力。
总结¶
Mosaic Memory Compress 通过“无状态 + 阈值控制 + 模型无关”的设计,解决了长对话上下文溢出的痛点。它提供了 DSH 适配器,让对话在保持“活体记忆”的同时,永远有界。