前言¶
在 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,否则未写的键会退回内置默认。
典型用法¶
- 直接编辑:在面板或记事本中改
memory/下文件,保存后下一轮对话即带上新内容。 - 口述让 AI 记住:用户说「记住…」时,AI 应先展示 diff,用户确认后再落盘。
- 批量整理:用户说「整理记忆」时,AI 汇总后同样先审再写。
- 临时记忆:仅在用户说出「写临时记忆 / 记到临时记忆 / 交付记忆 / 换会话执行 / 下次对话接着做」等意图时,AI 才调用
temp_memory;完成后temp_memory_done归档。 - 可选建议流:将
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