前言¶
在 DeepSeek Harness(DSH)裏做長期協作,常見做法是反覆粘貼偏好、規則或項目背景,或依賴對話外的筆記。這類做法要麼占上下文、要麼模型側無法穩定遵守。社區插件 dsh-user-memory(維護者 XinzeQing,GitHub XinzeQing/dsh-user-memory)把用戶本人編寫的分級記憶注入系統提示詞固定段落,並提供中文圖形面板查看與修改;AI 不會自行寫入記憶,寫入只發生在用戶保存或用戶明確讓 AI 改文件之後。
這是什麼¶
dsh-user-memory 是 DSH 的宿主型插件:profile 加載後每一輪對話都會參與。它在 Harness 身份之後、人格設定之前(order = -500)注入一段系統提示詞,內容由 <DSH_HOME>/memory/ 下若干 Markdown 文件組成;可選的第二段(order = -490)承載臨時記憶,預算與長期記憶分開。插件零依賴,僅使用 Node 內置模塊。當前 package 版本爲 0.7.2,許可證 MIT。
核心功能¶
兩層記憶與文件佈局¶
長期記憶回答「用戶是誰、AI 該怎麼幹」,對應目錄結構如下(<DSH_HOME> 默認爲 %USERPROFILE%\.dsh):
<DSH_HOME>\memory\
├── rules-must.md 必須遵守(硬性) ← 注入
├── agent.md 行爲設定 ← 注入
├── profile.md 用戶畫像 ← 注入
├── rules-should.md 可選遵守(酌情) ← 注入
└── log.md 變更日誌 ← 不注入
注入順序爲:必須遵守 → 行爲設定 → 用戶畫像 → 可選遵守。<!-- --> 註釋永不注入;僅標題無正文則整節不注入。默認總字符預算 maxChars 爲 6000;記憶不變時系統提示詞逐字節不變,有利於 prompt cache。
臨時記憶(默認關閉,tempMemory: false)存放在 <DSH_HOME>\temp-memory.json,用於跨對話的交接(handoff)、階段目標(stage)、等待項(waiting)。只有用戶明確要求寫入時 AI 才調用 temp_memory;歸檔後調用 temp_memory_done 即停止注入。默認 tempMaxChars 爲 1200,與長期記憶預算互不擠佔。
運行時只讀與待確認閘門¶
除用戶操作外,插件運行時只讀:無自動採集、自動總結、後臺回寫或網絡訪問。
AI 若需提議長期記憶變更,只能調用 memory_suggest(不寫記憶文件,僅在 <DSH_HOME>\memory-suggest.json 記 pending)。用戶在面板「待確認」分頁點「採納」後,下一輪對話 AI 纔會收到 <MEMORY_SUGGESTION_ACCEPTED> 通知,再整理措辭寫入文件並調用 memory_suggest_done 記賬。點「忽略」則丟棄。採納前可填「補充說明」(最多 1000 字符),與 AI 原文衝突時以補充爲準。
| 工具 | 作用 | 是否寫記憶文件 |
|---|---|---|
memory_suggest |
提議一條(限上述五個文件名,正文上限 4000 字符) | 否 |
memory_suggest_done |
處理完成後記賬 | 否 |
temp_memory({kind,title,body}) |
寫臨時記憶條目 | 只寫 temp-memory.json |
temp_memory_done({id,note}) |
歸檔臨時記憶 | 同上 |
圖形面板¶
重啓 DSH 後,左側欄出現「長期記憶」入口。分頁包括:必須遵守 / 行爲設定 / 用戶畫像 / 可選遵守 / 變更日誌;啓用 tempMemory: true 時另有臨時記憶;待確認固定在最後。改完點「保存這一節」立即生效,無需重啓。頂部有「自動採集記憶」開關,對應 autoCapture(見下文配置);開關寫入 <DSH_HOME>\.autocapture,優先級高於 profile 裏的 config.autoCapture。
安裝與啓用¶
資料中的安裝方式爲:在 profile 的 package.json 裏用 link: 指向插件目錄(不拷貝),裝好後依賴位於 <DSH_HOME>/profiles/<profile>/node_modules/dsh-user-memory。每個 profile 需單獨安裝一次。
// <DSH_HOME>/profiles/<profile>/package.json
"dsh-user-memory": "link:<插件目錄>"
在 profile 的 bundle patch(cordis.patch.yml)中插入插件並配置:
- insert:
- id: user-memory
name: 'dsh-user-memory'
config:
enabled: true # false = 停用注入,不卸載
dir: '' # 空 = <DSH_HOME>/memory
maxChars: 6000 # 注入總預算(含前言與截斷提示)
autoCapture: false # true = 打開「記憶採集提醒」
tempMemory: false # true = 再掛一段「臨時記憶」
tempMaxChars: 1200 # 只給臨時記憶段的預算
改 patch 後需重啓 DSH 纔對 composition 生效;只改記憶文件內容則不需要重啓。
注意:profile 裏對 config: 的寫法是整塊替換,不是逐鍵合併。覆蓋時須一次寫全 enabled / dir / maxChars / autoCapture / tempMemory / tempMaxChars,否則未寫的鍵會退回內置默認。
典型用法¶
- 直接編輯:在面板或記事本中改
memory/下文件,保存後下一輪對話即帶上新內容。 - 口述讓 AI 記住:用戶說「記住…」時,AI 應先展示 diff,用戶確認後再落盤。
- 批量整理:用戶說「整理記憶」時,AI 彙總後同樣先審再寫。
- 臨時記憶:僅在用戶說出「寫臨時記憶 / 記到臨時記憶 / 交付記憶 / 換會話執行 / 下次對話接着做」等意圖時,AI 才調用
temp_memory;完成後temp_memory_done歸檔。 - 可選建議流:將
autoCapture設爲 true(或面板打開開關)後,注入段末尾會追加固定「記憶採集提醒」,提醒 AI 在合適時用memory_suggest提議,仍須用戶採納才寫入。
適用場景與注意¶
適合:希望偏好、硬性規則、用戶畫像與 Agent 行爲設定穩定出現在每輪系統提示詞、且寫入權完全留在用戶側的 DSH 使用者;需要跨會話交接文檔或階段性待辦且不想長期污染主記憶時,可開啓 tempMemory。
務必知曉:
- 插件在當前 DSH 進程權限下運行;安裝前應自行查看 GitHub 源碼 與 MIT 許可證,確認可接受後再鏈入 profile。
- 「必須遵守」僅通過提示詞位置與措辭約束模型,不是技術層面的強制保證;規則宜具體、可判定、儘量短。
- 修改插件
index.js或client.js後須重啓 App;改記憶文件不需要。 - 卸載 bundle 不會刪除
<DSH_HOME>\memory\;數據與代碼分離。 - 社區目錄 SkillHub 插件頁 與 DeepSeek / 幻方無官方從屬關係;DSH 生態理念是「一切皆插件」,本文事實以倉庫 README 與 package 爲準。
結尾¶
dsh-user-memory 把長期記憶做成用戶可編輯、可預算、可緩存的系統提示詞段落,並用待確認區隔開 AI 提議與實際寫入;臨時記憶可選地承擔跨對話工作集。需要進一步瞭解實現與自測命令,見 GitHub 倉庫 README。
- 目錄頁:https://www.skillhub.cn/plugins/XinzeQing/dsh-user-memory
- GitHub:https://github.com/XinzeQing/dsh-user-memory