前言¶
在 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。