dsh-memory:DSH 的跨会话长期记忆插件

前言

DeepSeek Harness (DSH) 本身没有记忆插件。当新会话开始时,模型对上一个会话里定下来的约定、踩过的坑、你的偏好一无所知。这个插件补上这一层,让 DSH 能够在会话之间共享背景事实。

设计上有一条硬约束:不为了“记住”再多花一次钱。它不调用任何 LLM 进行摘要、打分或裁决,所有读写操作基于本地文件系统和纯字符串匹配。

这是什么

这是一个由 linshenyuan 开发的 DSH 插件,分类属于“记忆”。

它将记忆存储为 Markdown 文件,不额外调用任何 LLM。插件负责去重、冲突检测、审计日志和设置面板,模型只需通过工具调用决定“写什么”和“什么时候写”。

核心功能

  1. 跨会话长期记忆
    记忆持久化存储在本地文件系统中,新会话可以读取旧会话的内容。

  2. 纯本地字符串匹配
    读取和写入均不涉及 LLM 调用。去重基于 sha256 哈希,关键词检索基于本地字符串匹配(NFKC 归一化)。

  3. 多维度检索
    支持按 scope(project/user/both)、topic(精确)和 keywords(全文关键词)读取记忆。

  4. 冲突检测与裁决
    同一 topic 下出现结论不同的新条目时,新条目会被标记 [待裁决] 并冻结,直到人工或通过设置面板裁决。

  5. 审计日志
    记录所有保存、去重、冲突、更新和拒绝操作,记录在 runs.jsonl 中,并支持启动时的流水自检。

  6. 设置面板管理
    提供浏览、用量、冲突和审计四个视图,支持在线修改记忆上限和裁决冲突。

工作方式

插件通过三层结构将记忆注入上下文:

  1. L1 · 规矩段(常驻系统提示)
    一段固定的系统提示,告诉模型记忆库的位置、何时该写、topic 如何命名。它被插入到系统提示词的索引 150 处(DEPLOYMENT_PERSONA_PREFIX 和 PLAN_POLICY 之间),作为背景事实而非策略。

  2. L2 · 按需读取
    记忆不再在会话开始时批量注入。模型在需要背景时调用 memory_read 工具。支持三种取法叠加:
    - scope:限定作用域。
    - topic:精确匹配某个主题。
    - keywords:全文关键词检索(支持空格、逗号、顿号、分号分隔),按总分降序返回。

  3. L3 · 条件提醒
    只有在累计修改了多个非记忆文件却未写入任何记忆时,才会注入一条提醒,提示模型“该记了但没记”。

安装与启用

插件通过 DSH 的插件机制进行安装和启用。
注:资料中未明确提供具体的 dsh plugin add 命令,通常需通过插件目录或配置文件管理。

启用后,插件会自动在 DSH 的工作区生成记忆文件(如 MEMORY.md)。

典型用法

  1. 写入记忆
    模型调用 memory_save 工具写入内容。
   // 示例:写入一条关于缩进风格的项目记忆
   {
     "topic": "indent-style",
     "content": "项目统一使用 2 空格缩进",
     "mode": "update"
   }

mode 支持 update(替换旧条目)和 append(补充信息)。

  1. 读取记忆
    模型调用 memory_read 工具按需获取。
   // 示例:读取项目作用域下 topic 为 "indent-style" 的记忆
   {
     "scope": "project",
     "topic": "indent-style"
   }
  1. 管理面板
    在 DSH 的设置面板中找到“记忆”导航项,可以查看记忆用量、分类分布、冲突列表和审计日志。

适用场景与注意

此插件适合需要长期维护项目上下文、偏好设置或技术约定的工作流。

注意事项:
- 插件运行在当前 DSH 进程内,使用进程内锁机制串行化读写操作,防止文件覆盖。
- 默认冲突冻结,需要人工介入裁决,避免模型被相互矛盾的信息干扰。
- 插件为 MIT 许可证,可自由使用和修改。

结尾

dsh-memory 解决了 DSH 缺乏持久化记忆的问题,通过本地文件系统实现了零成本的跨会话记忆能力。更多细节可参考:
- GitHub 仓库
- 技能目录页

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

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

小夜