中文EN

memory-lattice

memory已测通过npmMIT

会遗忘的记忆插件:短期记忆 48 小时自动过期,长期记忆按艾宾浩斯/SM-2 曲线复习,久不用的沉进沉睡区(可唤醒)而不是无限撑爆上下文。长期写入停在审核中心,模型不能自行改写人格设定。

下载量 / Downloads
1,566
依赖体积 / node_modules
2.35 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add memory-lattice

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

忆枢 memory-lattice

![ci](./.github/workflows/ci.yml)

![version](./CHANGELOG.md)

![node](./package.json)

![license](./LICENSE)

![dshbase 实测可装](https://dshbase.com/zh/plugins/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 is node: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 缓存在内存里,热重载换不掉。启动后:设置 → 「忆枢记忆」、侧栏底部 🧠 入口。

截图

记忆星云 · 配置 / 数据控制

![星云](./docs/screenshots/nebula.png) · ![配置](./docs/screenshots/config.png)

星云图是纯 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

链接

GitHub · Homepage · npm

同类插件