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。

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

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

小夜