用 dsh-mneme 给 DeepSeek Harness 装上可读可改的跨会话记忆

前言

DeepSeek Harness(DSH)默认按会话工作:关掉这一轮,下一轮通常不会自动带上你的偏好、项目约定和上次做过的决定。官方仓库把核心理念写成「一切皆插件」(Everything is a Plugin),长期记忆并不内置在核心里,而是交给记忆类插件去补。

社区目录 DeepSeek Harness 插件库 把这类插件单独归在「记忆」分类。需要说明的是:这个目录是独立站点,和 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。目录里的 dsh-mneme 走的是另一条路——记忆不只进数据库,还会写成你能打开、能改的 Markdown。本文按目录详情页、GitHub 仓库 README / package.json,以及 DeepSeek Harness 官方仓库交叉核对后整理。

这是什么

dsh-mneme 是面向 DeepSeek Harness 的跨会话记忆插件,由 modusensus 维护,许可证为 MIT,主要语言是 JavaScript。npm 包名是 @modusensus/dsh-mneme。仓库内插件目录 dsh-mneme/package.json 当前版本为 0.4.0。2026-08-17 查询 GitHub API 时仓库为 22 星;社区目录页仍显示 8 星,更像收录时的快照。

名称来自希腊记忆女神 Mnemosyne(Μνήμη)。目录页的定位是:SQLite 与可编辑 Markdown 双写、autoDream 梦境巩固、本地离线语义检索。仓库 README 把目标收成三句话:

  • 可读:SQLite 主库 + 人类可编辑的 Markdown 镜像,双向同步
  • 可结构:实体 / 属性 / 时间轴三表,把文本片段抽成结构化知识(v0.3.0,默认关闭抽取)
  • 可演化:autoDream 后台巩固,另有可选的 Sleep Mode 深度维护(v0.4.0,默认关闭)

它要解决的问题很具体:Agent 下次开会还记得你的偏好;你能打开文件核对「它到底记住了什么」;检索尽量在本地完成,而不是把记忆交出去。

核心功能

SQLite 主库 + Markdown 镜像

插件把记忆放在本机目录 ~/.dsh/memory/

  • 主存储是 SQLite:~/.dsh/memory/memory.db,用 Node 内置的 node:sqlite,不额外拉原生模块
  • Markdown 镜像按类型拆文件:preferences.mdprojects.mddecisions.mdhistory.mdsummary.md
  • 记忆类型是 4+1:preference(偏好)、project(项目)、decision(决策)、history(历史),外加 summary(总览)

人工改 Markdown 优先于机器回写。仓库用 last-rendered digest 做基线,再做三方合并,避免你正在改文件时被自动渲染覆盖。机器写入后会重渲染镜像。v0.3.6 之后镜像同步用 generation / applied_generation 记「还没渲染完的债」:崩溃发生在提交之后、渲染之前,重启也能接着收敛,而不是静默跳过。

七个模型工具

安装后,Agent 拿到这 7 个工具(来自插件 README):

工具 作用
memory_save 记一条记忆,按标题去重合并
memory_search 全文搜索(中文子串友好,可开向量语义搜索)
memory_list 按类型分页列出;include_archived=true 可看已归档
memory_update 改已有记忆
memory_delete 删除
memory_forget 抑制注入(降权,不删,可恢复)
memory_archive 归档或恢复;归档后不出现在列表 / 搜索 / 注入 / 整理里

新会话开局会自动注入记忆摘要:优先 summary,再补少量高重要性条目。会话在 turn/end 时用 LLM 提炼本次的偏好、决策和教训并入库;插件会过滤自己注入过的上下文,避免把旧摘要再蒸馏一遍。

Web 界面里可以打开官方设置面板 →「记忆库设置」→「记忆」标签,按类型浏览、做全文搜索。同一设置页还可以写用户画像行为规则,每轮注入系统提示,优先级高于记忆库;也可以注册斜杠命令(/名称),命令存在 SQLite 里,启动时注册到 DSH 命令表。

autoDream:后台巩固

记忆条数超过 10,或总字符超过 5000 时,autoDream 会异步触发(不阻塞写入)。LLM 输出一张决策清单,服务端校验后再逐条应用:

  • keep:保留
  • merge:合并主题相近的条目,留下信息更完整的那条
  • archive:归档过时或冗余条目,可恢复,不物理删除
  • conflict:处理矛盾信息;也可打开 conflictFreezeEnabled,改成冻结、等你确认,而不是自动裁决(默认关闭)
  • update:直接修正过时或错误的单条记忆(有 24 小时保护期、每次最多 2 条等约束)

非法输出(未知 id、非法 action、跨类型合并、importance 越界)会整单拒绝,避免把记忆库写坏。每次运行写入 dream_runs 审计表,带输入快照 digest、决策清单和 receipt,可以离线回放。

v0.4.0 另加了 Sleep ModesleepModeEnabled 默认 false):空闲达到 sleepIdleMinutes 后做四阶段维护——冲突消解、按访问时间归档降级、用 LLM 提炼 type=pattern 规律、给孤立实体补关系。用户一活动就中止当前周期,并与 autoDream 走同一条串行队列,避免两套整理叠在一起。

离线语义搜索与记忆基因

v0.2 起提供可选的语义检索,默认 embedProvider 仍是 openai(兼容早期行为)。改成 local 后走 ONNX 离线模型 Xenova/bge-small-zh-v1.5;也可以用 Ollama。失败会逐级降级,最后退回关键词搜索。Rerank 默认关闭(rerankEnabled: false),打开后才加载 Xenova/bge-reranker-base

搜索可以走混合召回(向量 + 关键词)。在设置页打开向量搜索后,记忆面板会出现「语义」切换;密钥只存在本机 memory.dbuser_settings 表。

v0.3.0 的「记忆基因」把文本抽成三张表:entitiesentity_attrs(带 valid_until 时间轴,改属性不覆盖历史)、entity_relationsentityExtractionEnabled 默认 false,关掉时行为与 v0.2.x 一致。打开后可用前缀搜索,例如:

  • entity:React:按实体召回
  • attr:programming_language=Rust:按属性值过滤
  • attr:deadline:按属性名过滤

安装与启用

目录详情页给出的安装命令是:

dsh plugin add github:modusensus/dsh-mneme

需要可复现安装时,按目录页说明固定 commit。2026-08-17 仓库 main 最新提交为 49b54dfa06b38f475f2984b6cb4b423dcfa821a1,可以写成:

dsh plugin add github:modusensus/dsh-mneme#49b54dfa06b38f475f2984b6cb4b423dcfa821a1

GitHub 插件 README 推荐的是 npm 包 + web profile(声明了 dsh.bundle,安装后自动激活)。package.jsonrequiresRestarttrue,装完需要重启:

dsh plugin --profile web add @modusensus/dsh-mneme
dsh web

从源码安装:

git clone https://github.com/modusensus/dsh-mneme.git
cd dsh-mneme
dsh plugin --profile web add .
dsh web

前置条件来自插件 README:已安装 DeepSeek Harness,并且 Node 24+(需要 node:sqlite)。

目录页和 GitHub 都提醒:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查源代码仓库和许可证。

典型用法

让 Agent 自己记,下次会话再读

装好并重启后,不必先手写配置。默认 autoInjectautoSummarize 都是 true:你在对话里说出稳定偏好或项目约定,Agent 可以调用 memory_save;会话结束会再提炼一轮入库。下一轮开局会先看到摘要,而不是从零开始。

需要自己查或改时,用 memory_search / memory_list / memory_update。不想让某条再注入、但还不想删,用 memory_forget;确定过时了再用 memory_archive

直接改 Markdown

记忆文件在 ~/.dsh/memory/。打开对应的 .md,改完保存即可。插件按「人工编辑优先」合并回 SQLite。这是它和「只进黑盒向量库」的记忆插件最明显的差别:目录页把它概括成「记忆主权归还于你」。

改阈值(可选)

默认即可用。要改整理阈值或注入条数,在 ~/.dsh/profiles/web/cordis.patch.yml 按插件 id 覆盖。下面这段来自插件 README:

- id: dsh-mneme
  name: '@modusensus/dsh-mneme'
  config:
    memoryDir: ~/.dsh/memory
    autoInject: true
    autoSummarize: true
    maxInjectedItems: 5
    importanceThreshold: 3
    autoDream: true
    dreamThresholdCount: 10
    dreamThresholdChars: 5000
    dreamDelayMs: 2000

完全离线语义检索时,把 embedProvider 设为 local。实体抽取、Sleep Mode、Rerank 都是显式开关,默认偏保守,不会在你没打开时改掉现有行为。

适用场景与注意事项

适合这些情况:

  • 同一套 DSH Agent 要跨很多天用,需要记住偏好、项目背景和已做决定
  • 你希望记忆落在本机文件里,能打开 Markdown 审查、修正,而不是只存在不可读的向量库
  • 检索尽量离线(本地 ONNX / Ollama),或至少密钥只放在本机 SQLite
  • 需要后台去重、合并、归档,而不是无限堆积原始片段

使用前注意下面几条,都来自目录页或仓库文档:

  1. 权限与供应链。 插件以当前 dsh 进程权限运行,安装时可能执行代码。先看 GitHub 源码和 MIT 许可证,再决定是否安装;生产环境用固定 commit。
  2. 运行时要求。 需要 Node 24+;README 安装路径针对 web profile,装完要 dsh web 重启。
  3. 新能力默认关闭。 实体抽取、Sleep Mode、Rerank 都是 opt-in。autoDream 默认开启,记忆变多后会调 LLM 做整理,会消耗模型和时间。
  4. 本机 API 默认不鉴权。 文档写明 DSH 默认只监听 127.0.0.1,插件 API 默认开放以便 Web 面板即用。若把服务暴露到局域网,应配置 apiToken,写操作和密钥接口走 Authorization: Bearer
  5. 记忆内容在你的磁盘上。 路径是 ~/.dsh/memory/。向量 API Key 也在同一 SQLite 里。备份、权限和是否纳入同步盘,需要按敏感数据来处理。
  6. 同类插件很多。 目录「记忆」分类里还有 graph-memory、mnemon、dsh-memory-evolve 等。社区博文把 dsh-mneme 标成「可检查、可编辑的记忆」这一路,并不是官方唯一推荐。按你是否要手改 Markdown 来选即可。

小结

dsh-mneme 给 DeepSeek Harness 补的是一层本地、可打开的长期记忆:SQLite 负责机器读写,Markdown 负责人审和手改,autoDream 在后台做巩固。语义检索和实体抽取是可开关的增强,不是装上就会改掉默认行为。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-mneme/

GitHub:https://github.com/modusensus/dsh-mneme

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

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

小夜