dsh-memory-graph:Harness 下的纯文本长期联想记忆

前言

在 DeepSeek Harness(DSH)里做智能体或长期项目时,上下文窗口和「压缩上下文」只能保证当前对话塞得进窗口;被压掉的内容不会以可读形式留在会话外。若希望几个月前的决定、偏好和实体关系还能被找回,且数据落在自己可控的目录里,而不是依赖向量库或二进制存储,就需要一层与压缩策略并存的长期记忆。dsh-memory-graph(npm 包名 @ilaomianyang/dsh-memory-graph)由社区维护者 ilaomianyang 发布,分类为「记忆」;它不自动注入上下文、不做 embedding、不用二进制库,而是在 Harness 之外维护一份可 grep、可备份、可版本化的纯文本记忆库。

这是什么

一句话:给 DeepSeek Harness 的长期联想记忆——原始对话事件、带类型的记忆卡片、实体索引页,都放在你指定的本地 vault 里。

与「压缩上下文」的关系在 README 里写得很清楚:压缩是工作记忆策略,本插件是长期记忆;两者并存,不是替代。原始层只追加不改写;语义层用 markdown 卡片承载检索;冲突通过 superseded 链保留「怎么变成现在这样」,而不是删掉旧结论。

三层结构与卡片形态

记忆库默认在 ~/dsh-memory(可在 profile 里改 vaultDir),目录大致如下:

~/dsh-memory/
├── vault.json
├── projects.json
├── README.md
├── graph.html
├── episodes/2026-11-02.jsonl
├── cards/2026-11/
├── entities/
└── audit/

三层分工:

  1. episodes/:原始层,每轮追加一行 JSON,不蒸馏、不删除,作为对账依据。
  2. cards/:语义层,从原始层蒸馏出的带类型记忆卡片(markdown),是模型检索的主要对象。
  3. entities/:索引层,每个实体一页,带提及时间线,用于跨项目联想。

模型检索走 cards + entities;episodes 供蒸馏原料与事后核对。卡片 front matter 含 kind、status(active / superseded / retracted)、supersedes 等字段;被推翻的记忆不会物理删除,而是标记为 superseded 并指向新卡片。

在 Harness 里怎么用

装完并重启后,看记忆有三个入口(README 原文):

  • 会话页签里的 「记忆」:展示该会话记住了什么。
  • 记忆库根目录的 graph.html:整库关系图,可双击在浏览器打开。
  • 左侧栏 「记忆图谱」:同一张整库图嵌在应用内。

配置在 设置 → 记忆图谱,一页四组(采集 / 隐私 / 抽取器 / 检索),保存后即时生效,无需重载。总开关 enabled、库路径 vaultDir、默认项目 defaultProject、跨项目连接 crossProject 等键在启动时读取,需改 cordis.patch.yml 并重载插件;YAML 与设置页以 profile 为最终事实。

抽取器默认 extractor.enabled 为 false:只采集原始事件、不调用模型蒸馏;开启后可选 transport: harness(借用设置里选中的模型)或 http(自填 OpenAI 兼容端点)。自动蒸馏由 auto.* 控制,含追平 catchUp 与每日批次数上限 maxBatchesPerDay。

隐私组可对邮箱、路径做替换,并用 denyPatterns 追加正则;拦截记录落在 audit/,只记规则不记内容。

安装与启用

从 npm 安装(资料原文命令,勿自行拼接 dsh plugin add):

plugin_manager action=install_bundle target="@ilaomianyang/dsh-memory-graph"

pnpm 会一并安装依赖 @deepseek-ai/schemastery(设置页 schema 投影用;未装时插件仍可运行,但侧栏不会出现「记忆图谱」设置页)。国内 registry 可加:

plugin_manager action=install_bundle target="@ilaomianyang/dsh-memory-graph" registry="https://registry.npmmirror.com/"

装完后必须重启一次 Harness(关窗口重开):Web 侧插件清单在启动时扫描 loader 与 package.json 的 dsh.client,进程内缓存,不重启侧栏可能没有「记忆图谱」且无报错提示。

重启后打开 设置 → 记忆图谱(位于「模型」与「内置插件」之间)。卸载:

plugin_manager action=remove_bundle target="@ilaomianyang/dsh-memory-graph"

记忆库仍在 ~/dsh-memory,独立于插件。从 npm 安装的版本可在设置页「版本与更新」检查/立即更新;link: 本地目录安装会拒绝覆盖式更新。

当前 package.json 标注版本为 0.13.0;星标以目录页为准为 0,不构成功能说明。

典型配置示例

下列片段来自 README,展示 profile 中与页面项可并存的写法:

- id: memory-graph
  config:
    vaultDir: '~/dsh-memory'
    capture:
      enabled: true
      userChars: 1500
      assistantChars: 1500
    privacy:
      redactEmails: true
      redactPaths: true
      denyPatterns: ['我的内部域名\\.corp']
    extractor:
      enabled: true
      transport: 'harness'
      maxEpisodesPerRun: 40
    retrieval:
      limit: 8
      hops: 1
    auto:
      enabled: true
      catchUp: true
      maxBatchesPerDay: 6
    update:
      enabled: true
      autoInstall: false

采集侧默认每条用户/助手消息最多保留 1500 字;短于 capture.minChars(默认 12)的轮次不入库。检索默认 limit: 8、hops: 1。不想插件联网查 npm 版本时,将 update.enabled 设为 false。

适用场景与注意

适合:需要在 DSH 外持久保存决策、偏好与实体关系,且希望用纯文本 + 图谱浏览、而非 embedding 或自动塞回上下文的开发者。

注意:

  1. 插件以当前 DSH 进程权限读写 vaultDir;安装前应在 GitHub 阅读源码与 LICENSE,确认隐私规则是否符合你的环境。
  2. 开启抽取器会产生模型调用;自动蒸馏受 auto.maxBatchesPerDay 等约束,但仍需自己评估成本。
  3. DSH 生态是「一切皆插件」;社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系,本文事实以仓库 README 为准。

结尾

dsh-memory-graph 把长期记忆做成你拥有的 plain-text vault:事件只追加、卡片可检索、实体可联想,与上下文压缩互补。进一步了解可访问 GitHub 仓库 与 SkillHub 目录页。

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

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

小夜