dsn-mnemo

中文文档
0.7.1发布于 2026/11/03Apache-2.0ES Module零依赖

Persistent memory runtime for DeepSeek Harness: L0 logs, L1 diaries, L2 working state, L3 anchors.

原始使用文档
文档目录10 节
  1. 它要解决什么
  2. 特性
  3. 三层记忆
  4. 使用示例
  5. 内置工具
  6. 配置项
  7. 安装
  8. 隐私
  9. 文档
  10. 许可

dsn-mnemo

鲸鱼娘的记忆运行时。让「想起」发生在正确的时机,以正确的形态。

dsn-mnemo 是一个 DeepSeek Harness(DSH)插件。它不负责人设,也不实现任何聊天协议——人设由 persona 插件或 preset 提供,QQ/Discord 等通道由各自的通道插件提供;它只做一件事:记录发生过什么、把值得留下的沉淀成记忆、在合适的时候把对的事浮现进当前对话。

它要解决什么

一次对话结束后,上下文就被丢弃了:模型不记得昨天聊过什么,也不会在特殊的日子主动提起什么——除非有人把记忆重新端到它面前。

dsn-mnemo 就是这个「端记忆」的基础设施:

  • 留下痕迹:聊天内容落盘(人类消息 + 助手可见回复),不必依赖窗口内的对话历史;
  • 主动沉淀:对话沉落之后,判断这段交流里有没有值得留给「下一个自己」的事;
  • 恰当地想起:有线索时按需深掘,有话题时按关联浮现,到日子时被锚点唤起——全部按需,不设固定预算。

特性

  • 三层记忆:L0 原文 → L1 日记 → L2 锚点,职责分离;
  • 日记由主模型书写:像人写日记一样,日常流水账也记、无条数上限;闲时或超长后在下一消息提示补写;
  • 按需、关联:从最近话题段构造查询,检索日记,过阈值才注入,同一条记忆 10 轮内不重复;
  • 主体化:私聊记忆归 user:<id>,群聊记忆归 group:<id>;跨主体默认隔离,群聊不串私聊内容;
  • 三级可见性:public / private / secret;群聊里 secret 硬过滤,private 只允许暗示;
  • 通道无关:只消费 DSH 的 session/event 与消息 source 里的身份字段,不绑定任何协议;
  • 缓存友好:稳定前缀字节稳定,动态记忆只走 context() 与工具返回;
  • 中文检索:预分词 + FTS5,并用字符级兜底覆盖分词错位的说法;
  • 零第三方运行时依赖:node:sqlite 单文件数据库,无原生模块、无外部向量库。

三层记忆

层级内容保留检索方式
L0 原文人类消息 + 助手可见回复(不含思考、工具调用与注入上下文)长期词面检索,按主体过滤
L1 日记第一人称、长度不限,带重要度/情绪/可见性长期BM25 + 重要度 + 近因
L2 锚点纪念日、约定、截止日期,可重复长期日期窗口匹配,注入主体上下文

记忆挂在 (subject_kind, subject_id) 上:本地桌面是 user:local,通道私聊是 user:<userId>,群聊是 group:<groupId>。通道只要把稳定身份(用户 id、群 id、是否在叫助手)放进消息 source 即可,去重、接话、限流都属于通道。

使用示例

1. 日常聊天——什么都不用做

装好之后正常对话即可。L0 原文自动落盘;闲时或超长后,下一条消息会提示补写日记。下次新开会话,相关的记忆会被自动带进上下文。

2. 模型主动深掘

用户:我们上次聊到哪了?

模型调用 recall({ query: "上次 聊到哪", scope: "log" }) → 取回之前的对话原文,再回答。

日记层用 scope: "diary":recall({ query: "发布 npm", scope: "diary" }) 会按 BM25 + 重要度 + 近因排序返回蒸馏后的记忆。

3. 记下一个约定

用户:下周三陪我去看海,别忘了。

模型调用 anchor_upsert({ event_name: "一起看海", target_date: "2026-11-11", window_days: 1 })。

到那天,锚点会出现在系统提示的稳定前缀里,由模型自然地提起;日期过了、既没提醒也没处理,才算「错过」。

4. 纠正一条记忆

用户:记错了,是周四不是周三。

模型调用 diary_update({ id: 12, content: "……", reason: "用户纠正日期" })——必须给理由,旧正文自动进 diary_revisions。

5. 清空某个人或某个群

mnemo_forget({ subject_kind: "user", subject_id: "<QQ号>" }),聊天记录、日记、锚点、画像一并清除。

内置工具

工具参数作用
recallquery、scope: diary | log、limit?深掘记忆:日记走 BM25+重要度+近因,日志走词面检索
diary_writecontent、importance?、emotion?、tags?、visibility?把值得记住的内容写进日记(主模型自行调用,无条数上限;群聊默认 public,可标 secret)
diary_updateid、content、reason纠正日记;必须给理由,旧正文进 diary_revisions
anchor_upsertevent_name、target_date、window_days?、tone_hint?、repeat?录入锚点(YYYY-MM-DD,可声明 daily/weekly/monthly/yearly)
mnemo_forgetsubject_kind: user | group、subject_id清空某个人/某个群的全部记忆
mnemo_ping—健康检查:返回版本与数据库路径

配置项

键默认值说明
dbPath~/.dsh/mnemo/mnemo.dbSQLite 单文件路径(支持 ~)
diaryIdleMinutes20距上次回复多久后,在下一条消息提示补写日记;范围 5–1440 分钟
diaryMaxTurns30距上次提示超过多少轮后,主动提示补写日记;范围 10–500
diaryMaxChars12000距上次提示超过多少字符后,主动提示补写日记
storeReasoningfalse是否把思考过程写进 raw;默认丢弃,且从不参与检索
anchorWindowDays2锚点前后各几天可触发(单条锚点可覆盖)
contextRecallLimit20前置浮现最多条数(关联排序,可为 0)
contextRecallTokens600前置浮现的 token 预算上限
recallDiaryLimit5recall 日记召回条数
recallLogLimit5recall 日志召回条数

安装

从插件市场:插件 → 发现 → 添加索引源 → 粘贴索引 URL → 搜索 dsn-mnemo → 安装,重启一次 DSH 即生效;数据库会在首次启动时自动创建。

从源码(开发期):

# 用 DSH 自带的 Node(24.x)
$node = "$env:USERPROFILE\.dsh\dsh-runtimes\dsh-primary-runtime\dependencies\node\bin\node.exe"
$pnpm = "$env:USERPROFILE\.dsh\dsh-runtimes\dsh-primary-runtime\dependencies\pnpm\bin\pnpm.mjs"

& $node $pnpm install
& $node $pnpm run build

然后把插件加进 profile 的 patch(%USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml,改前备份):

- insert:
    - id: dsn-mnemo
      name: "file:///C:/Users/<你>/Documents/GitHub/dsn-mnemo/lib/index.js"
      config:
        dbPath: "C:/Users/<你>/.dsh/mnemo/mnemo.db"

保存后 HMR 约 2 秒重新组合;首次接入或改插件代码后建议重启一次 DSH。

隐私

记忆是纯本地明文 SQLite:dbPath 可配置,默认在 ~/.dsh 下;不要把它放到 OneDrive 之类的同步目录。删除数据库文件即清空全部记忆,也可以用 mnemo_forget 按主体清理。群聊场景下 secret 永不进入群上下文,private 只允许暗示。

文档

  • DESIGN.md — 原始设计文档与「实现修正」。
  • PLAN.md — 开发计划与阶段进度(也含构建、测试与真机验证方法)。
  • docs/memory-model.md — 记忆系统规范:三层、两种主体、读写路径、锚点与关联检索。
  • docs/multi-user.md — 多用户环境的记忆模型(身份 / 私聊记忆 / 群记忆)。
  • docs/qq-integration.md — 通道接入分析(QQ 为例);通道本身不属于本仓库。

许可

Apache License 2.0

版本与发布记录

dsn-mnemo 共发布 9 个版本,首次发布于 2026/11/03;过去 12 个月发布了 9 个版本。

版本发布日期距今
0.7.1latest2026/11/03今天
0.7.02026/11/03今天
0.6.62026/11/03今天
0.6.52026/11/03今天
0.6.42026/11/03今天
0.6.32026/11/03今天

关于 dsn-mnemo 的常见问题

dsn-mnemo 是什么?

DeepSeek Harness的持久内存运行时:L0日志,L1日记,L2工作状态,L3锚。

如何安装 dsn-mnemo?

在项目目录运行 npm install dsn-mnemo,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@deepseek-ai/cordis(~4.0.5)、@deepseek-ai/dsh-agent(0.2.1-rc.5)、@deepseek-ai/dsh-tools(0.2.1-rc.5)、@deepseek-ai/dsh-session(0.2.1-rc.5)、@deepseek-ai/schemastery(~3.18.5)、@deepseek-ai/dsh-system-prompt(0.2.1-rc.5)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

dsn-mnemo 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/dsn-mnemo 是否存在。

dsn-mnemo 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

dsn-mnemo 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

dsn-mnemo 可以商用吗?

dsn-mnemo 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

dsn-mnemo 还在维护吗?

最新版本 0.7.1 发布于 2026/11/03(今天);至今共发布 9 个版本,其中过去 12 个月发布了 9 个;首次发布于 2026/11/03。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。