dsh-memory-v2:面向 DSH 的本地长期记忆插件

前言

在 DeepSeek Harness(DSH)里做多轮对话或智能体开发时,上下文窗口会截断较早内容,重启后也难以延续「用户偏好」「已达成结论」之类信息。常见做法是每次把整段历史塞进 prompt,成本高,也难区分该记什么、该忘什么。社区插件 dsh-memory-v2 把结构化记忆、对话原文情景、溯源索引和巩固状态放在用户本机的 DSH 数据目录,由调用方通过工具接口读写,并支持可选语义召回与按会话分库。

这是什么

dsh-memory-v2 是 Yanlrx 维护的 DSH 本地长期记忆插件(当前 package 版本 0.3.1,MIT 许可证)。数据默认落在 ~/.dsh/storages/dsh-memory/,不会在插件内绑定账号、人名或聊天平台。仓库说明:本插件会在本地明文保存对话原文和提取后的记忆,使用前请阅读仓库中的 PRIVACY.md。

目录页:https://www.skillhub.cn/plugins/Yanlrx/dsh-memory-v2
源码:https://github.com/Yanlrx/dsh-memory-v2

核心能力

记忆模型与召回

插件维护四类记忆集合:语义、结论、画像、临时。无关查询默认不召回;若存在冲突记忆,仅在直接命中相关项时成对返回。memory_recall 默认最多返回 2 条,复杂问题最多 4 条。

可选语义召回依赖 @xenova/transformers,且需在插件目录 models/bge-small-zh/ 自备本地模型,代码不会自动从远程下载。

情景原文与溯源

情景按日保存对话原文。每个情景段使用唯一 segmentId,减轻 Markdown 标题或同分钟多轮带来的溯源歧义。memory_trace 可按字面从情景库溯源。

超长内容按 8000 字无损分块,支持跨日、进程重启后继续处理,并支持重复 ACK。

两阶段巩固

读取原文后不会立刻清理候选;调用方应在把需要长期保留的内容写入后,通过 memory_consolidate 回传 ackToken 完成巩固,也可显式放弃本次租约。插件校验令牌,但是否已完成所需写入由调用方负责。ACK 与放弃终态相关日志最多保留最近 1000 项。

候选工作集保留最新 50 条,同时按日追加完整审计日志。

可靠性与分库

实现跨进程写锁、陈旧锁恢复和多文件事务恢复。存储根目录会出现 .memory-v2.lock、.memory-v2-transaction.json、.memory-v2-tx/ 等文件;插件运行或故障恢复期间不要手动删除。

可选按会话分库:无分库配置时,具备有效会话 ID 的会话读写主库;缺少会话 ID 时失败关闭。可在 ~/.dsh/dsh-memory-v2-config.json 中用 会话归属 把会话 ID 映射到隔离分库;未映射会话的行为受 未映射会话写入待认领 等字段控制。分库目录名由规范化短标识与 SHA-256 摘要共同生成。配置损坏时首次加载会失败关闭;运行中配置暂时不可用时会保留最近一次有效配置,不会悄悄回落主库。

从 0.3.0 升级到 0.3.1 时,旧版分库目录命名规则不同,检测到旧分库会失败关闭且不自动改名,需先备份并人工核对归属后再迁移(README 有说明)。

安装与启用

需要 Node.js 20 或更高版本。安装步骤以仓库 README 为准:

1、安装依赖:

npm install --omit=optional

2、将本目录放入 DSH profile 的 node_modules/dsh-memory-v2,或使用 DSH 支持的本地插件安装方式。

3、把 cordis.patch.yml 加入对应 profile 的 bundle 配置。

4、重启 DSH。

DSH 生态习惯「一切皆插件」;SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系。插件以当前 DSH 进程权限运行,安装前请自行审阅源码与许可证。

插件配置

cordis.patch.yml 默认隐私优先:

语义召回: false
诊断日志: false
启用敏感调试路由: false
启用全局主库工具: false
  • 诊断日志:开启后也不记录消息正文、会话 ID 或 RPC 标识。
  • 启用敏感调试路由:开启后 /memory-v2/candidates 会返回候选记忆正文,仅适合受信本地环境。
  • 启用全局主库工具:只有明确的单用户部署才应开启;多用户分库应使用会话专属工具。

会话与分库示例(完整字段见仓库 config.example.json):

{
  "会话白名单": [],
  "排除会话": [],
  "会话归属": {
    "session-example-a": "alice",
    "session-example-b": "bob"
  },
  "排除归属": [],
  "未映射会话写入待认领": true
}

请勿将真实会话 ID 提交到版本库。

典型用法:暴露的工具

DSH 侧通过插件注册的工具与记忆交互,README 列出四类:

工具 作用
memory_write 写入、替代或标记冲突记忆
memory_recall 按查询召回记忆(条数上限见上文)
memory_trace 从情景库按字面溯源
memory_consolidate 两阶段读取、ACK 巩固与显式放弃租约

典型流程可以是:对话结束后由上层逻辑调用 memory_write 沉淀结论或画像;新会话开始时用 memory_recall 拉取相关条目;需要核对出处时用 memory_trace;处理完巩固流程后向 memory_consolidate 提交 ackToken 或放弃租约。

本地数据布局

默认存储位于 ~/.dsh/storages/dsh-memory/:

当前/     结构化 JSON
情景/     按日保存的对话原文
旧版/     压缩快照
镜像/     人类可读备份
日志/     索引、巩固租约、写入日志和候选审计

这些目录可能含敏感信息,不应进入 Git。开发或验收时可运行:

npm test
npm run privacy:check
npm run privacy:check:artifact

适用场景与注意

适合需要在单机、自管数据前提下为 DSH 智能体增加可审计长期记忆的场景;多用户或共享主机应优先配置会话分库,并谨慎开启全局主库工具与敏感调试路由。

若需要语义相似度召回,需额外安装可选依赖并在本地准备 BGE 中文小模型;默认关闭语义召回时仅依赖结构化召回与字面溯源逻辑。

维护者提供的安全与贡献说明见仓库 CONTRIBUTING.md、SECURITY.md。

结尾

dsh-memory-v2 把长期记忆的存储、召回、溯源和巩固拆成本地可配置流水线,并强调隐私默认与分库隔离。进一步了解可先打开 SkillHub 目录页,实现细节与升级说明以 GitHub 仓库 README 为准。

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

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

小夜