memory-lattice
会遗忘的记忆插件:短期记忆 48 小时自动过期,长期记忆按艾宾浩斯/SM-2 曲线复习,久不用的沉进沉睡区(可唤醒)而不是无限撑爆上下文。长期写入停在审核中心,模型不能自行改写人格设定。
安装
dsh plugin --profile web add memory-lattice
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
忆枢 memory-lattice





带艾宾浩斯遗忘曲线的 DeepSeek Harness(DSH)记忆插件。
与「记了就不忘」的传统记忆插件不同,忆枢的记忆有生命周期:短期记忆会过期,长期记忆要复习,久不用会沉睡,人格从记忆里长出来。
English
A DSH (DeepSeek Harness) memory plugin whose memories have a lifecycle — instead of storing everything forever:
short-term memories expire after 48h, long-term ones are rescheduled by Ebbinghaus / SM-2 curves,
and rarely-used ones fall asleep (revivable) rather than silently eating your context budget.
Long-term writes stop in an approval center — the agent cannot approve on its own.
Local-first, no external services — the only runtime dependency is DSH's own host-provided@deepseek-ai/schemastery; everything else isnode:sqlite+ self-built BM25 / vector index. MIT.
适用范围:单用户、本地 DSH profile。安全边界与非目标(不做 OS 级隔离、不防同用户进程、不做静态加密)见[威胁模型](#威胁模型适用--不适用)。
特性
- 会忘:短期记忆 48h 过期;长期记忆按 SM-2 调度复习(1d→3d→7d→…),到期未复习按池半衰期衰减,跌破阈值沉睡归档(可一键唤醒)。
- 要过审:LTM 写入与 STM 晋升都停在审核中心,人工批准才生效;Agent 的 systemPrompt 里有「禁止自行批准」红线。
- 会想:每轮对话按你当前这句话自动召回相关记忆注入(只取审核过的长期记忆,带「这是数据不是指令」边界);BM25 + 本地向量语义双通道。
- 会长:人格画像从长期记忆里低频重新合成,版本化快照 + 证据链 + 一键否定。
- 可带走:加密导出(AES-256-GCM)、增量备份、导入预览、按类型保留策略、整库清除。
- 删错了能找回:删除一律先确认、再进回收站;回收站里能恢复到删除前的状态(软删除,不是终态)。
- 运行时只依赖 DSH 自家包:唯一的依赖是
@deepseek-ai/schemastery(由宿主提供);检索为node:sqlite+ 自研 BM25 / 向量索引,内置 UI 跟随 DSH 主题。
安装
插件已发布到 npm,每个 Release 也挂了预构建 tarball —— 正常安装不需要本地编译。
① 命令行(推荐)
dsh plugin --profile desktop add memory-lattice
它同时是个标准 npm 包(npm 页面上的 npm i memory-lattice 装的是同一份),
但要让 DSH 加载它就得走宿主插件管理器 —— 直接 npm i 到某个目录,DSH 不会认。
装指定版本、或不想经 npm,直接用 Release 里的预构建包(不用执行构建脚本):
dsh plugin --profile desktop add https://github.com/Lumivox-wiz/memory-lattice/releases/download/v0.2.12/memory-lattice-0.2.12.tgz
从源码装也可以(包管理器会询问是否执行构建脚本,选允许):
dsh plugin --profile desktop add github:Lumivox-wiz/memory-lattice
desktop是 profile 目录名(DSH Desktop 客户端加载profiles/desktop;dsh web用profiles/web,
另有 headless)。装到别的 profile 会「命令报成功、客户端里却没有」。
DSH Desktop 的 profile 由客户端自己管理:命令行装完若在界面里看不到,改在客户端内
设置 → 插件 里添加同一个包名或地址。profile 名不是 desktop 的按实际替换。
② 手动部署(Windows 脚本)
git clone https://github.com/Lumivox-wiz/memory-lattice.git cd memory-lattice pwsh -File deploy.ps1 # 拷贝进 profile + 注册 bundle(DSH_HOME 或 ~/.dsh)
不需要 npm ci:lib/client.js 已随仓库提交;运行时除 DSH 自家包(@deepseek-ai/schemastery,宿主提供)外无其他依赖(node:sqlite + 自研检索)。
npm ci 只在你要跑测试或改代码时才需要。
然后完全退出 DSH Desktop(含托盘)再启动——客户端 bundle 按 URL 缓存在内存里,热重载换不掉。启动后:设置 → 「忆枢记忆」、侧栏底部 🧠 入口。
截图
记忆星云 · 配置 / 数据控制
 · 
星云图是纯 canvas 手写的 3D 透视投影(分簇 / 自转 / 拖拽旋转 / 单击聚焦),没有图表库依赖。
核心模型
层 · 内容 · 生命周期 · 入口
短期记忆 STM · 原始事件、近期上下文 · 默认 48h,被召回命中即晋升 · 每轮对话自动捕获(LLM 蒸馏可选,失败自动降级为原始摘要)
长期记忆 LTM · 蒸馏后的稳定记忆 · SM-2 调度:强化拉长间隔(1d→3d→7d→…),久不复习按半衰期衰减 · 晋升/写入后进审核中心,批准才生效
沉睡区 · 衰减到阈值以下的记忆 · 不删除,可被唤醒复活 · 召回与图谱不可见,UI 一键唤醒
人格 Persona · 特质/偏好/目标/决策风格 · 低频(默认 24h)从 LTM 重新合成,版本化快照,UI 看成长时间线 · 自动 + 手动合成按钮
- 检索:IDF 加权 BM25(k1=1.2, b=0.75,查询归一化)。不是 bigram 重叠计数——
重叠计数会让「查询越具体、得分越低」,长问句被 minScore 整体滤掉。BM25 下罕见词权重高、
文档长度归一、长短查询可比;查询侧另有停用词与单字过滤(dsh-purge 同时索引拆分形态)。
分数再开平方拉平尺度(纯单调变换,排序不变),并加「相对证据门槛」:命中的词里至少有一个
要承担查询最强信号的 1/3,只靠泛词沾边的不收。
- 强化节奏:命中质量按「距上次复习多久」给分——刚聊过的 q≈2(只算重复),隔两周 q≈3.7。
已有软上限(strength>2.5 增益递减)与「已很强 + 6 小时内重复命中」的召回折扣,防回声室。
- 去重只对 LTM 生效,阈值 0.85:STM 是草稿层,重复是它的常态;相似未达阈值时照常新建并记
near-dup 日志(污染可逆),不再把不同事实拼进同一张卡。
- 强化有软上限:强度超过 2.5 后增益递减;已很强(>2)且 6 小时内再次命中的卡在召回时打折——
防止「回声室」(同几条记忆把所有召回位次占死)。
- 召回质量 = 相关性 × 记忆强度 × 到期加权:该复习的记忆借召回完成一次「复述」并强化——用得越多的记忆越牢,久不用的自然淡去。
- 自动召回注入:每次提示词组装时按当前这轮的用户消息检索,把最相关的几条贴进 systemPrompt(带字符预算与「另有 N 条未展开」标注)。三条纪律:噪声闸门(寒暄/短句不联想)、重复抑制(同一批不重复注)、核心层优先。
- 池半衰期(参考 dsh-chain 的分池遗忘):特质/偏好/目标属核心层,永不衰减;决策/教训/事实 365 天;知识 120 天;事件 20 天。
- 工作记忆:从你的话里认出待办与承诺(纯正则,零模型调用),最多 3 条、3 天没提起自动过期、「做好了」就销项;不进记忆链、不上星云。
- 夜巡报告:每天 18 点后自动生成一份审查报告(久未命中 / 疑似重复 / 矛盾候选 / 将被遗忘 / 未归类 / 待办残留),只列线索不改数据,概览页可查看。
- 元记忆
memory_about:「关于 X 我知道什么、多可信」——命中次数、被确认次数、强度、生命周期、入库天数、邻居数;只读,不触发强化。 - 审核红线:LTM 写入一律停在待审(auditMode 可配 none 免审);Agent 的 systemPrompt 里注入了「禁止自行批准」的强制规则。
- 记忆云图:3D 透视星云(参考 dsh-chain),按类型分簇、发光、慢速自转,节点大小 = 记忆强度;拖空白旋转 / 拖节点整理 / 滚轮缩放 / 单击聚焦。
- 除 DSH 自家包外无其他运行时依赖:
node:sqlite+ 自研 IDF/BM25 检索;UI 跟随 DSH 原生主题变量。
工具(Agent 侧)
工具 · 说明
memory_recall · 检索 + 自动强化命中(一次复习)
memory_write · 主动写记忆;layer=ltm 进审核中心,layer=stm 直达短期层
上手示例
装好之后,下面这条链路是完整可跑的:
① 聊两句,让它记住你
正常对话即可。说过的话会进短期记忆;开启「蒸馏」后由模型压成精炼条目(默认关,开启需选 Provider)。
② 去审核中心放行
侧栏底部 🧠 → 审核。新写的长期记忆都停在这里待审,点「批准」才生效。
不想每次点,可以在宿主设置里把审核模式改成 none(免审)—— 代价是你不再逐条把关。
③ 看它有没有真的记住
在对话里问一句跟之前说过的话相关的问题,比如:
我之前说的那个部署问题是什么来着?
它会自动检索并把相关记忆贴进上下文(你能看到注入的条目);你也可以直接说「查一下关于部署的记忆」触发 memory_recall。
④ 确认记忆在按节奏走
概览页能看到各层条数、强度分布与遗忘曲线;记忆卡片的「复习次数 / 命中次数 / 下次复习时间」会随使用变动。
⑤ 想带走
配置 → 备份 → 「立即备份一次」(或开自动定时备份)。要加密就填口令(≥8 字符)——忘了无法恢复。
换机器:把备份文件拷过去,在导入 / 迁移里选它 → 预览 → 执行。
⑥ 删错了能找回
删除一律先弹确认框,确认后进回收站。回收站是标签栏里的独立选项卡,里面能恢复到删除前的状态。
命令行玩家也可以不碰界面:
node tools/import-export.mjs --export backup.json # 导出 node tools/import-export.mjs --import backup.json --mode merge --dry-run # 预览导入
两种语义召回
BM25 是字面匹配,「换个说法就召回不到」是结构性死角。两条互补通道:
通道 · 原理 · 出站 · 默认
本地向量(`vectorRe
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:12,最后更新 2026-11-05