dsh-memory:DSH 本地记忆与压缩流水线

前言

在 DeepSeek Harness(DSH)里做长期任务时,模型默认只看见当前会话上下文。把偏好、踩坑记录、工具说明拆成零散笔记,要么每次手动粘贴,要么让模型自己 grep 全文——前者费手,后者容易漏读索引、误改正文。社区插件 dsh-memory(维护者 mounta1n-18,分类:记忆)把「跨对话记忆」落成本机 Markdown 加一张索引表,再配管理界面和仿轨迹的记忆日志;日常只在系统提示词里占一行分类大纲,压缩时才按需调用模型。

这是什么

dsh-memory 是 DSH 的零依赖、无构建插件(Host 半 index.js + Client 半 client.js)。数据在 ~/.dsh/memory/,不上传、不埋点;除压缩流水线外,不会把记忆正文批量发给模型。npm 包名为 @local/dsh-memory,当前版本 1.1.1,许可证 MIT。

核心功能

一行大纲进系统提示词

插件向系统提示词注入 memory:outline(order 9890):按 【教训】/【资料】/【说明书】/【项目记忆】/【其它】 分组,教训永远排第一。索引来自 MEMORY.md;停用条目不出现。关键词口径是「以后什么场景该想起它」,不是摘要。存在启用的教训时,大纲末尾会追加一句:动手前先过一遍【教训】,命中场景就先 memory_read 再开工。

另有 memory:tidy-status(order 9900):平时无输出,有待审批改稿或上次整理失败时才一行告警。

四个记忆工具

模型可用:

  • memory_read:按名称 / 关键词 / 描述命中,只返回正文
  • memory_write / memory_update / memory_delete:对锁定条目一律拒绝

首关键词必须是 资料、教训、说明书、其它 之一;项目记忆只能经设置页或 /remember 人工通道创建。宿主对记忆正文路径做闸门:grep / glob 不能直接扫正文,须走 memory_read。

教训三段式

写教训时强制结构:① 场景;② 错误链条;③ 绕开与修复。关键词应写「犯错前正在做的任务」,不宜只写 HTTP 状态码之类事后症状。

设置页「记忆管理」

Client 注入设置区:搜索(去抖 250 ms)、分类折叠、新建/删除、启用与锁定、待审批改稿的双栏 diff、沙漏触发压缩、回忆率与「待删除」候选(窗口内未回忆且复核日超 14 天等规则,由插件现算,不写进索引表)。

记忆日志页

会话顶部增加「记忆」页签(conversation.view,与对话、轨迹并列):按会话列出 memory_* 调用与 /remember 归纳,操作分色、右侧详情含完整正文;带 callId 时可跳回轨迹里对应工具调用。DSH 轨迹行类型是固定枚举,第三方不能插新行类型,故做成独立视图。

回忆统计与压缩流水线

  • 一轮 = 用户按一次回车(user/message 且 source.kind === 'user');工具调用、子代理等不计数。
  • 压缩触发:全局用户轮每满 100 轮,或设置页点沙漏。按窗口内回忆次数与复核间隔决定轻调整 / 中删减 / 仅标待删除;锁定与已有待审改稿不送模型。压缩使用 deepseek-flash,显式 thinking: { type: 'disabled' },response_format: json_object。

/remember 命令

客户端注册斜杠命令(大脑图标):向 POST /dsh-memory/remember 提交 sessionId,优先借 DSH 的 llm 服务,在上下文末尾加隐藏指令并附带 memory_write 工具声明,把当前对话归纳成一条记忆;状态显示在输入框右侧控件行。

数据面(本机目录)

路径:~/.dsh/memory/

路径 作用
MEMORY.md 7 列索引表(文件、关键词、启用、类型、何时读、复核、受保护),唯一索引
*.md 单条记忆,YAML 头 + 正文
.tidy/status.json 上次整理/压缩相关记录(不含待审批份数的事实源)
.tidy/proposed/*.md 待审批改稿(仅正文)
.tidy/turns.json / recall.json 用户轮计数与回忆流水
.tidy/compress.json 压缩流水线状态
.tidy/calls.json 记忆工具调用流水(供「记忆」页签,最多 400 条)

改 Host 后需重启 DSH;改 Client 刷新页面即可。

安装与启用

官方唯一支持路径是 DSH 的 plugin_manager,安装目标为本仓库在磁盘上的绝对路径(不是 git clone 后凭名称拼接的快捷命令):

plugin_manager { "action": "install_bundle", "target": "<本仓库的绝对路径>" }

卸载:

plugin_manager { "action": "remove_bundle", "target": "@local/dsh-memory" }

维护者提供的自检(不碰真实记忆库):在插件目录执行 node tools/selfcheck.mjs,改 Host 逻辑后建议先跑再重启。

典型用法

  1. 安装并重启 DSH,打开设置 →「记忆管理」,按分类新建或导入记忆;教训类按三段式填写,关键词写场景触发词。
  2. 新会话里模型系统提示词已含大纲;需要细节时让模型调用 memory_read(名称或关键词),勿让其直接 read/grep 记忆正文文件。
  3. 长任务结束后在对话里执行 /remember,或等每 100 轮自动压缩判定;有待审 diff 时在设置页批准或拒绝。
  4. 在会话「记忆」页签查看本轮及历史 memory_* 与归纳记录,必要时「在轨迹中定位」核对工具调用。

适用场景与注意

适合:需要在本机沉淀分类记忆、控制提示词 token、用回忆率驱动整理,且愿意配合 DSH 插件生态的开发者。

注意:

  • 插件以当前 DSH 进程权限运行,安装前应阅读 GitHub 源码 与 MIT 许可证,确认可接受数据落盘位置与压缩时向所配模型发送的正文。
  • 依赖宿主私有槽位(settings.section、conversation.view、commandUi.register 等),DSH 大版本升级后需复核。
  • 设置页导航图标借用了外壳 section id archived-sessions 以匹配归档图标样式。
  • README 标明星标为社区仓库状态;目录页与 GitHub 以维护者文档为准。

结尾

dsh-memory 把跨会话记忆收敛成「索引一行 + 工具读写 + 人工审阅 + 可选压缩」,并在 UI 里补齐管理与可追溯日志。进一步了解可访问社区目录页与仓库:

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

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

小夜