Mosaic Memory Compress

前言

长对话场景下,上下文窗口会线性增长,最终导致模型溢出。传统的阈值摘要(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);

适用场景与注意

  • 适用场景:需要处理无限长对话的场景,或者希望避免传统摘要方案中“记忆中断”问题的开发者。
  • 重要注意:
    1. 无会话状态:该插件完全无状态,不负责保存上下文。持久化存储是宿主的责任(例如将压缩后的数组存入文件或数据库)。
    2. 许可证检查:使用前请检查源码与许可证(MIT)。
    3. DSH 权限:插件以当前 DSH 进程权限运行,请确保对源码有审查能力。

总结

Mosaic Memory Compress 通过“无状态 + 阈值控制 + 模型无关”的设计,解决了长对话上下文溢出的痛点。它提供了 DSH 适配器,让对话在保持“活体记忆”的同时,永远有界。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜