dsh-memory-refine:长对话提炼为逐条确认的长期记忆

前言

在 DSH(DeepSeek Harness)里跑长会话时,事件日志会滚到几百条,而真正要长期保留的往往只有几份 memory/ 下的 Markdown。手工翻记录提炼,容易漏项,也容易把引擎注入的 <system-reminder> 或运行时快照当成用户原话。直接改记忆文件又没有版本校验和备份,人和模型同时改还容易互相覆盖。

下面介绍社区插件 dsh-memory-refine(维护者 mjtwt):把一场会话取成提炼素材,由模型整理候选条目,每条写入前都要你点头;侧边栏面板可查看、编辑、导入、删除受管记忆文件。插件以 MIT 许可发布,当前 GitHub 星标为 0,分类属于 DSH 生态目录中的「记忆」类。

这是什么

dsh-memory-refine 是 DSH 的「记忆提炼」插件:长期记忆以你亲手确认过的内容为准,而不是模型自行攒进文件。它注册五个仅操作白名单路径的工具,并提供「记忆提炼」侧边栏面板;写入统一走版本预检、整份备份、读回核验,且必须拿到用户确认才会落盘——拿不到问答服务时直接拒绝,不静默降级为自动同意。

它解决什么问题

README 里归纳的三类痛点与插件对策如下:

  1. 日志长、记忆短:通过 memory_gather 从会话事件流取料,生成 markdown 素材,供提炼候选。
  2. 注入内容混入「他说的话」:取料时丢弃 <system-reminder> 整块、Current runtime context. 之后的运行时快照、request/header 里的提示词清单,推理正文默认砍掉(可配置保留字数)。
  3. 改记忆没有安全网:memory_write 与面板保存都走同一套 confirmAndWrite:版本哈希预检、备份到 DSH_HOME/memory-refine-backups/、写后读回逐字比对。

核心功能

五个模型工具(仅白名单文件)

工具 作用
memory_list 列出受管文件(含 AGENTS.md、索引、常记、存档),带版本哈希与行数
memory_read 分页读取受管文件
memory_gather 把指定会话取成提炼素材,markdown 落盘,返回预览与统计
memory_write 写入受管文件,必须用户点头
memory_import 将外部内容导入某记忆文件(新章节或追加)

白名单范围:DSH_HOME/AGENTS.md 与 DSH_HOME/memory/**/*.md;.. 越界或盘外路径一律拒绝。

memory_gather 常用参数

参数 默认 说明
session_id 当前会话 要提炼哪一场
mode incremental incremental 只取水印之后的新轮次;full 取全程
max_reasoning 0 每段保留推理字符数,0 表示整段省略为一行占位
out_dir 会话工作区下 memory-refine-scratch/ 素材落点,不往 DSH 配置目录堆

增量边界靠素材首行水印 <!--memory-refine:watermark ... seq=...-->,下次从会话日志里上一次 memory_gather 的 tool/result 解析 seq,无需额外状态文件。

侧边栏面板

装好后侧边栏会出现「记忆提炼」图标。左栏为受管文件列表(存档可折叠);右栏可编辑正文并保存。顶栏提供刷新、清理本会话 memory-refine-scratch/ 下 material-*.md / tools-*.md、导入(支持贴正文或单行绝对路径 ≤4096 且文件存在)、删除(先备份再删)等操作。AGENTS.md 在面板里不可删除,只能改。

面板默认通过本机 POST /memory-refine/ui 与 Host 通信(与工具共用 handleUiRequest);路由不可用时会回退斜杠命令,并在顶部显示红色警告。

写记忆时的约定(README 建议)

  1. 一条记忆一个 <!--@refine--> 块,避免将来无法单独改删。
  2. 主语写清楚,减少模型误猜。
  3. 写完让模型复述「这条是什么意思、归谁」,比假设它已理解更稳。

安装与启用

前提:DSH 具备 profile 机制(Desktop 版或带 profile 的 CLI)。官方 README 未提供 dsh plugin add github:... 一类一键命令,而是本地目录 + profile 软链。

  1. 将插件目录放到任意位置(示例路径需换成你自己的):
   D:/plugins/dsh-memory-refine
  1. 在 profile 的 package.json 的 dependencies 中加入:
   {
     "dependencies": {
       "dsh-memory-refine": "link:D:/plugins/dsh-memory-refine"
     }
   }
  1. 同一文件的 dsh.profile.bundles 数组中加入 bundle 名:
   { "dsh": { "profile": { "bundles": ["dsh-memory-refine"] } } }
  1. 重启整个 DSH 进程。改插件代码后也必须整进程重启;在插件管理器里开关不会重新 import ESM 模块。

Windows 上 DSH_HOME 一般为 C:\Users\<用户名>\.dsh。新装环境可能没有 memory/ 目录,面板左栏为空属正常:可让模型通过 memory_write 建占位文件,或在 DSH_HOME/memory/ 下自建 .md 后点「刷新」。

典型用法

  1. 在长会话中与模型协作,让它调用 memory_gather(默认 incremental 可只取上次水印之后的新内容)生成素材。
  2. 根据 protocol.js 注入的提炼协议,模型整理候选记忆条目;每条经你确认后,由 memory_write 或面板保存写入。
  3. 用 memory_list / memory_read 核对版本与内容;需要合并旧笔记时用面板「导入…」或 memory_import。
  4. 素材用完可在面板「清理素材…」删除当前会话工作区下的 scratch 文件。

离线自测(不启动 DSH、不碰真实记忆):

node test/smoke.mjs

适用场景与注意

适合谁:需要把 DSH 长对话沉淀为可控长期记忆、且希望写入前逐条人工确认的开发者或个人用户。

权限与安全:插件以当前 DSH 进程权限运行,安装前请阅读源码与 MIT 许可证,确认 link: 路径指向你信任的目录。

已知限制(README):

  • 面板在「一个会话都没打开过」时无法确定 sessionId,需先打开会话。
  • 作者写明目前只在 Windows 上验证过。
  • 命令通道为兜底;正常使用面板 HTTP 路由时,对话视图里不会出现 memory-refine · {...} 命令记录。

卸载时从 profile 去掉依赖与 bundle 并重启 DSH;可选清理 memory-refine-backups/ 与各会话下的 memory-refine-scratch/,不会删除 AGENTS.md 与 memory/ 正文。

结尾

dsh-memory-refine 把「取料 → 提炼 → 逐条确认 → 安全写入」串成一条可复现链路,并用面板把受管记忆文件管在同一套白名单与备份规则里。若你在用 DSH 做长期记忆,可从目录页查看简介,在 GitHub 阅读完整 README 与 protocol.js 后再接入 profile。

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

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

小夜