dsh-simple-memory:把 Markdown 记忆目录接入 DSH

前言

在 DSH 里跑智能体时,项目约定、用户偏好和踩过的坑往往散落在对话里,下一轮又要重新解释一遍。有人用 Obsidian 或项目下的 .memory 目录自己维护 Markdown 记忆,但宿主不会自动知道「该读哪几篇、什么时候提醒模型补读」。下面介绍维护者 liu-zhengdong 的 dsh-simple-memory(分类:记忆):把你已有的 Markdown 记忆目录只读接入 DSH,每轮在运行时上下文里常驻一份索引,正文由模型按需 read,插件不写盘、不改你的文件。

这是什么

dsh-simple-memory 把你自己维护的 Markdown 记忆目录(Obsidian 库、.memory 项目记忆等)接到 DeepSeek Harness。行为契约从 pi-memory 移植而来(frontmatter 含义、按字节计的预算、整份来源排除、字面关键词提醒等保持不变),注入机制按 DSH 插件面重写。当前仓库版本 0.2.0,许可证 MIT;包声明与 DSH 0.2.0-rc.2 兼容。社区目录页:skillhub.cn/plugins/liu-zhengdong/dsh-simple-memory;源码:github.com/liu-zhengdong/dsh-simple-memory。

核心功能

索引注入

记忆的根层条目进入运行时上下文:每条给出名称与 frontmatter 的 description;仓库根路径只在「记忆仓库」段写一次,子文件夹只列名字。defaultopen: true 的条目带全文,其余只给摘要;更深层默认不进上下文。渲染文本与上一条快照相同时不重复注入;改记忆、换工作目录或升级插件才会重发。

仓库契约与写入提醒

每段来源开头附「记忆仓库」说明:绝对路径、什么结论值得写进来、写入方式与 frontmatter 各字段作用;目录为空也会给出,方便模型知道第一条写在哪。这段文字不占 YAML 配置,改文案需改 src/memory.ts。

每轮第一步会追加一条 user 快照,提醒模型把长期成立的结论主动写进记忆仓库,并列出各仓库绝对路径;同轮后续步不重复。可通过配置 proactive: false 关闭。

关键词提醒与按需阅读

frontmatter 里 keywords 的字面短语命中用户输入或模型文本时,在本步追加 user 快照并给出路径,由模型自行 read 全文;同一记忆在本轮只提醒一次。索引正文里的 [[路径]] 插件不解析、不校验,是否读取由模型判断。

只读与安全边界

插件不写记忆目录、不写配置文件;缓存仅在内存中。项目记忆与 AGENTS.md 共用同一信任边界,无需像 pi-memory 那样单独「信任项目」。

与 pi-memory 的差异(简要)

pi-memory dsh-simple-memory
索引注入 Pi 系统提示词尾部 DSH runtime-context 快照里的 simple-memory 段
关键词提醒 系统提示词尾部(下一轮) agent/pre-step 追加的 user 快照(本步生效)
配置 agent 目录 memory.json profile 的 cordis.patch.yml
命令 /memory set、/memory clear 会写配置 只读;配置改 YAML 或桌面端表单

安装与启用

插件以当前 DSH 进程权限运行;安装前建议阅读仓库源码与 MIT 许可证。本包未发布到 npm,add dsh-simple-memory 会失败,请用 GitHub 或本地路径。

# 从 GitHub
dsh plugin --profile <profile> add github:liu-zhengdong/dsh-simple-memory

# 本地 checkout(开发用)
dsh plugin --profile <profile> add /abs/path/to/dsh-simple-memory

包声明了 dsh.bundle.patch,添加后包名会追加进该 profile 的 dsh.profile.bundles。可验证配置是否挂上:

dsh --profile <profile> --dump-config | grep -B2 -A6 dsh-simple-memory

配置

配置写在 profile 的 cordis.patch.yml。patch 整块替换 config,不做深合并,覆盖时请写全字段:

字段 默认 说明
directory "" 全局记忆目录,绝对路径或 ~ 开头;留空表示不用全局来源
projectSources true 从工作目录向上到 git 根逐层发现 .memory
reminders true 按 keywords 命中用户输入或模型文本时提醒
proactive true 每轮提醒一次:把长期结论写进记忆仓库
maxContextBytes 262144 单次注入记忆文本上限(UTF-8 字节,1 KiB–16 MiB)

示例:

- id: simple-memory
  config:
    directory: ~/Obsidian/记忆
    projectSources: true
    reminders: true
    proactive: true
    maxContextBytes: 262144

改配置会触发插件热替换,一般不需要重启 DSH。桌面端可在 设置 → 插件 → 记忆、插件页 dsh-simple-memory 配置区,或插件列表右侧「配置」中编辑上述五个字段;directory 支持「选择目录…」。保存后写入同一 profile 的 cordis.patch.yml。

记忆文件格式

只有 .md 会被收录;以 . 开头的文件与符号链接跳过。每层来源只扫根目录直接子项,子文件夹作为入口列出。

---
description: 界面字体的选择,排版相关任务开工前先看(进索引)
defaultopen: true          # 可选:整篇正文进默认上下文(超过 8 KiB 会提示拆分)
keywords:                  # 可选:字面短语,命中就提醒
  - 字体
  - 字体栈
---

正文……

解析失败、frontmatter 超限、来源超预算会在 /memory 输出里说明,不会静默截断。超预算的整份来源会被排除。

命令

在有命令面的宿主中可用(headless 无命令面):

命令 作用
/memory 目录、来源数、注入 KiB、索引篇数、未注入来源与提醒
/memory preview 本轮注入文本(索引)与未注入来源
/memory help 用法

命令只读;改配置请用桌面端或 YAML。

适用场景与注意

适合:已有 Obsidian 或 .memory 习惯、希望 DSH 每轮自动带上记忆索引、又不想让插件改文件的开发者。

上限(节选):单次注入默认 256 KiB(可配);单篇 frontmatter 64 KiB;defaultopen 全文超过 8 KiB 仍注入但会提示拆分;关键词索引 16 MiB / 100,000 条。

已知限制:

  • 只读、无写回:不替你整理记忆,也不从对话自动提取。
  • keywords 为字面子串匹配(英文大小写不敏感,中文原样),非语义检索。
  • DSH 组装期会对 {{name}} 做变量插值,索引文本里的 {{ 会被改写以避免未注册变量导致整轮报错。
  • 索引注入文本会进入模型上下文,请注意记忆目录中是否含敏感路径或内容。

结尾

dsh-simple-memory 把 Markdown 记忆目录以只读方式接到 DSH:常驻索引、按需读正文、关键词与本轮写入提醒,配置落在 profile 的 cordis.patch.yml。DeepSeek Harness 生态强调「一切皆插件」;社区目录 skillhub.cn 与 DeepSeek / 幻方无官方从属关系。进一步细节与示例目录见 GitHub:github.com/liu-zhengdong/dsh-simple-memory。

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

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

Xiaoye