dsh-user-memory:用户编写的分级长期记忆注入 DSH 系统提示词

前言

在 DeepSeek Harness(DSH)里做长期协作,常见做法是反复粘贴偏好、规则或项目背景,或依赖对话外的笔记。这类做法要么占上下文、要么模型侧无法稳定遵守。社区插件 dsh-user-memory(维护者 XinzeQing,GitHub XinzeQing/dsh-user-memory)把用户本人编写的分级记忆注入系统提示词固定段落,并提供中文图形面板查看与修改;AI 不会自行写入记忆,写入只发生在用户保存或用户明确让 AI 改文件之后。

这是什么

dsh-user-memory 是 DSH 的宿主型插件:profile 加载后每一轮对话都会参与。它在 Harness 身份之后、人格设定之前(order = -500)注入一段系统提示词,内容由 <DSH_HOME>/memory/ 下若干 Markdown 文件组成;可选的第二段(order = -490)承载临时记忆,预算与长期记忆分开。插件零依赖,仅使用 Node 内置模块。当前 package 版本为 0.7.2,许可证 MIT。

核心功能

两层记忆与文件布局

长期记忆回答「用户是谁、AI 该怎么干」,对应目录结构如下(<DSH_HOME> 默认为 %USERPROFILE%\.dsh):

<DSH_HOME>\memory\
├── rules-must.md      必须遵守(硬性)   ← 注入
├── agent.md           行为设定           ← 注入
├── profile.md         用户画像           ← 注入
├── rules-should.md    可选遵守(酌情)    ← 注入
└── log.md             变更日志            ← 不注入

注入顺序为:必须遵守 → 行为设定 → 用户画像 → 可选遵守。<!-- --> 注释永不注入;仅标题无正文则整节不注入。默认总字符预算 maxChars 为 6000;记忆不变时系统提示词逐字节不变,有利于 prompt cache。

临时记忆(默认关闭,tempMemory: false)存放在 <DSH_HOME>\temp-memory.json,用于跨对话的交接(handoff)、阶段目标(stage)、等待项(waiting)。只有用户明确要求写入时 AI 才调用 temp_memory;归档后调用 temp_memory_done 即停止注入。默认 tempMaxChars 为 1200,与长期记忆预算互不挤占。

运行时只读与待确认闸门

除用户操作外,插件运行时只读:无自动采集、自动总结、后台回写或网络访问。

AI 若需提议长期记忆变更,只能调用 memory_suggest(不写记忆文件,仅在 <DSH_HOME>\memory-suggest.json 记 pending)。用户在面板「待确认」分页点「采纳」后,下一轮对话 AI 才会收到 <MEMORY_SUGGESTION_ACCEPTED> 通知,再整理措辞写入文件并调用 memory_suggest_done 记账。点「忽略」则丢弃。采纳前可填「补充说明」(最多 1000 字符),与 AI 原文冲突时以补充为准。

工具 作用 是否写记忆文件
memory_suggest 提议一条(限上述五个文件名,正文上限 4000 字符) 否
memory_suggest_done 处理完成后记账 否
temp_memory({kind,title,body}) 写临时记忆条目 只写 temp-memory.json
temp_memory_done({id,note}) 归档临时记忆 同上

图形面板

重启 DSH 后,左侧栏出现「长期记忆」入口。分页包括:必须遵守 / 行为设定 / 用户画像 / 可选遵守 / 变更日志;启用 tempMemory: true 时另有临时记忆;待确认固定在最后。改完点「保存这一节」立即生效,无需重启。顶部有「自动采集记忆」开关,对应 autoCapture(见下文配置);开关写入 <DSH_HOME>\.autocapture,优先级高于 profile 里的 config.autoCapture。

安装与启用

资料中的安装方式为:在 profile 的 package.json 里用 link: 指向插件目录(不拷贝),装好后依赖位于 <DSH_HOME>/profiles/<profile>/node_modules/dsh-user-memory。每个 profile 需单独安装一次。

// <DSH_HOME>/profiles/<profile>/package.json
"dsh-user-memory": "link:<插件目录>"

在 profile 的 bundle patch(cordis.patch.yml)中插入插件并配置:

- insert:
    - id: user-memory
      name: 'dsh-user-memory'
      config:
        enabled: true     # false = 停用注入,不卸载
        dir: ''           # 空 = <DSH_HOME>/memory
        maxChars: 6000    # 注入总预算(含前言与截断提示)
        autoCapture: false  # true = 打开「记忆采集提醒」
        tempMemory: false   # true = 再挂一段「临时记忆」
        tempMaxChars: 1200  # 只给临时记忆段的预算

改 patch 后需重启 DSH 才对 composition 生效;只改记忆文件内容则不需要重启。

注意:profile 里对 config: 的写法是整块替换,不是逐键合并。覆盖时须一次写全 enabled / dir / maxChars / autoCapture / tempMemory / tempMaxChars,否则未写的键会退回内置默认。

典型用法

  1. 直接编辑:在面板或记事本中改 memory/ 下文件,保存后下一轮对话即带上新内容。
  2. 口述让 AI 记住:用户说「记住…」时,AI 应先展示 diff,用户确认后再落盘。
  3. 批量整理:用户说「整理记忆」时,AI 汇总后同样先审再写。
  4. 临时记忆:仅在用户说出「写临时记忆 / 记到临时记忆 / 交付记忆 / 换会话执行 / 下次对话接着做」等意图时,AI 才调用 temp_memory;完成后 temp_memory_done 归档。
  5. 可选建议流:将 autoCapture 设为 true(或面板打开开关)后,注入段末尾会追加固定「记忆采集提醒」,提醒 AI 在合适时用 memory_suggest 提议,仍须用户采纳才写入。

适用场景与注意

适合:希望偏好、硬性规则、用户画像与 Agent 行为设定稳定出现在每轮系统提示词、且写入权完全留在用户侧的 DSH 使用者;需要跨会话交接文档或阶段性待办且不想长期污染主记忆时,可开启 tempMemory。

务必知晓:

  • 插件在当前 DSH 进程权限下运行;安装前应自行查看 GitHub 源码 与 MIT 许可证,确认可接受后再链入 profile。
  • 「必须遵守」仅通过提示词位置与措辞约束模型,不是技术层面的强制保证;规则宜具体、可判定、尽量短。
  • 修改插件 index.js 或 client.js 后须重启 App;改记忆文件不需要。
  • 卸载 bundle 不会删除 <DSH_HOME>\memory\;数据与代码分离。
  • 社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本文事实以仓库 README 与 package 为准。

结尾

dsh-user-memory 把长期记忆做成用户可编辑、可预算、可缓存的系统提示词段落,并用待确认区隔开 AI 提议与实际写入;临时记忆可选地承担跨对话工作集。需要进一步了解实现与自测命令,见 GitHub 仓库 README。

  • 目录页:https://www.skillhub.cn/plugins/XinzeQing/dsh-user-memory
  • GitHub:https://github.com/XinzeQing/dsh-user-memory
羽毛球分组比赛记分
小程序二维码

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

小夜