dsh-memory:给 DSH 陪伴角色一条不会断的记忆线

前言

在 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 为准。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜