前言¶
在 DSH 里跑长期陪伴型智能体时,常见问题是上下文一压缩,角色就像「断片」:前几天聊过的承诺、偏好和事实不再出现在系统提示里。把整段历史塞进窗口又很快触顶。社区插件 dsh-memory 面向这类场景:单独管记忆,和 dsh-world 共用同一个 worlds/<worldId> 目录(日记、自述、人设仍由 dsh-world 维护),但对话归档、归纳、遗忘曲线与压缩策略由本插件自己实现。
下面按定位、能力、安装配置和工具用法说明,事实均来自项目 README 与 package.json(当前版本 0.2.0,MIT 许可证)。
这是什么¶
dsh-memory 是 DSH 生态下的「记忆」类插件:为陪伴角色提供近两天快速回忆、艾宾浩斯遗忘曲线复盘、分类检索、遗忘感知分层压缩,以及可选的本地人生镜像目录。它依赖 DSH 0.2.1-rc.2 / rc.3,并需要先安装 dsh-world(分层压缩复用 dsh-world 的 surface 压缩底座)。Node 引擎要求 >=22.16.0。
核心功能¶
近两天原文进提示词¶
最近两天的对话按日期、时间、说话人整理成一段,写入系统提示词。每次新会话开始、每次上下文被压缩之后都会重新注入,压缩后角色不会立刻「失忆」。预算由配置项 recentDays(默认 2)、maxRecentChars、messageChars 等控制。
七天后的遗忘曲线复盘¶
每天夜里(默认 dailyAt: '23:30')把当日对话归纳成摘要和若干「记忆原子」。超过 reviewAfterDays(默认 7)天、且按公式算出的保留概率 R = e^(-t/S) 低于 retentionThreshold(默认 0.35)的记忆,才交给模型逐条决定:留下(强度变大)、合并或放下(退到「被遗忘的」,原文不删)。7 天内不会动;7 天后也不是到期即删。
记忆强度 S 随重要度、memory_recall 复习、memory_pin 钉住(S = 365)等规则变化,详见 README「遗忘曲线怎么算」一节。
档案与 SQLite¶
每条原文按天写入 <DSH_HOME>/worlds/<worldId>/memory/memory.sqlite,并导出 markdown。上下文窗口只是索引;角色可通过 memory_recall 按关键词或日期翻回任意一天。
分类与「说到就想起」¶
记忆带分类(关系/偏好/承诺/事实/事件/情绪/生活/工作)、实体与检索词。memory_recall 支持 category、entity 检索。当用户话里出现已知实体或检索词时,插件可自动注入相关旧记忆(默认 ≤900 字,mentionRecall),同一条 3 轮内不重复注入。
遗忘感知压缩与夜间折叠¶
插件通过 dsh-memory/compaction 替换默认的 @deepseek-ai/dsh-compaction-basic:默认在上下文用到 80%(thresholdRatio: 0.8)时触发;摘要分 【最近】、【重要】、【背景】 三层,寒暄与已解决过程从上下文去掉,原文仍在档案与 SQLite。压缩时跳过插件注入的记忆块。
若开启 fold(默认 true),在 foldAt(默认 23:45,晚于归纳)对超过 foldMinTokens(默认 6000)的会话整体压成一条分层摘要,次日从低水位开始。
与 dsh-world 联动及 D 盘镜像¶
读同一 worldId,把 dsh-world 的日记带进提示词,并把日记/我是谁/人设复制到镜像目录;不修改 dsh-world 的任何文件。mirror: true 时默认同步到 D:/DSH/大肥鱼的一生(可通过 mirrorDir 改路径),包含近两天、长期记忆、遗忘曲线、每日摘要、档案及 她的一生/ 副本。
安装与启用¶
前提:DSH 0.2.1-rc.2 / rc.3,已安装 dsh-world。仓库自带编译好的 lib/,无需本地构建。
在 PowerShell 中执行:
dsh plugin --profile desktop add github:chenkezhen480/dsh-memory
或在 设置 → 插件 → 安装 中填写 github:chenkezhen480/dsh-memory,安装后重启 DSH。
在 profile 的 cordis.patch.yml 里按插件 id 覆盖配置(节选如下,完整字段见 README):
# 记忆线
- id: dsh-memory
name: dsh-memory
config:
worldId: default
companionName: 大肥鱼
partnerName: 伙伴
timeZone: Asia/Shanghai
recentDays: 2
reviewAfterDays: 7
retentionThreshold: 0.35
dailyAt: '23:30'
autoReview: true
fold: true
foldAt: '23:45'
foldMinTokens: 6000
mentionRecall: true
mentionRecallChars: 900
mirror: true
mirrorDir: D:/DSH/大肥鱼的一生
# 遗忘感知压缩后端(替换默认的 compaction-basic)
- id: compaction-basic
name: dsh-memory/compaction
config:
thresholdRatio: 0.8
maxTokens: 8192
修改配置后需重启生效。
典型用法¶
陪伴角色在会话中可调用以下工具(名称来自 README):
| 工具 | 作用 |
|---|---|
memory_recall |
按关键词/日期想起原文,并复习一次(会增强 S) |
memory_remember |
写入长期记忆 |
memory_forget |
放下一条(原文仍保留在库中) |
memory_pin |
钉住一条记忆 |
memory_status |
查看记忆现状 |
memory_review |
立即触发一次复盘(autoReview: false 时尤其有用) |
memory_mirror |
立即同步镜像目录 |
人类侧可直接打开镜像或 worlds/<worldId>/memory 下的文件备份;备份整个 memory 目录即可(SQLite WAL 模式)。
适用场景与注意¶
适合:已在 DSH 中使用 dsh-world、希望陪伴角色在长对话与多次压缩后仍保持连续记忆,并愿意接受夜间归纳/复盘带来的少量模型 token 消耗。
务必注意:
- 插件以当前 DSH 进程的权限读写本地目录与 SQLite;安装前请自行查看源码与 MIT 许可证。
- 归纳与复盘会调模型;
catchUpDays限制一次最多补几天。 - 原文只会「不再浮上来」,不会被物理删除;
memory_forget同理。 - 社区目录页与 GitHub 仓库由维护者发布;DSH 生态强调「一切皆插件」,SkillHub 等目录站点与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-memory 把「窗口里的对话」和「长期档案」分开:近两天常挂提示词,更久的记忆走曲线复盘与分类检索,压缩与夜间折叠控制上下文水位,可选镜像让人直接翻阅文件。需要细节时以 README 为准。