前言¶
長對話場景下,上下文窗口會線性增長,最終導致模型溢出。傳統的閾值摘要(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 適配器,讓對話在保持“活體記憶”的同時,永遠有界。