前言¶
在 DeepSeek Harness(DSH)裏跑長對話或跨多個工作區時,模型默認不會記住你上一輪整理過的偏好、項目約定或臨時結論。常見做法是手動粘貼上下文、靠外部筆記,或在每個 Session 裏重複說明。DSH 生態裏插件可以擴展宿主能力;下面介紹維護者 snaiheihei 發佈的 dsh-snail-memory(npm 包名 dsh-snail-memory),它爲單用戶提供 global / workspace 兩級記憶,並通過 Web 面板查看條目、調整蒸餾與整合策略,且每個對話可手動選擇要加載的記憶層。
這是什麼¶
dsh-snail-memory 是 Cordis 插件:單用戶、全局與工作區分層的記憶存儲;啓用後把記憶索引常駐上下文、詳情按需加載;在 Web UI 裏瀏覽與控制條目。源碼與說明見 GitHub,社區目錄頁見 SkillHub。協議 MIT;兼容 dsh >=0.2.1-rc.3 <0.3.0-0,Node >=22.19.0(以 README 與 package 聲明爲準)。
核心功能¶
兩級記憶與顯式開關¶
- global:跨工作區;workspace:綁定單個工作區。兩層相互獨立,各自有 revision。
- 記憶不會自動進入上下文。每個 Session 在輸入框左側記憶按鈕裏手動啓用某一層;可用
refresh生成新快照,disable關閉。
注入與會話安全¶
- 快照通過
agent.inject()作爲一條user消息追加(source.kind = "snail-memory"),插件不改寫、不替換、不刪除既有會話消息。 - 每次注入帶穩定
injectionId,區分desired → queued → committed;只有會話裏真正落盤的user/message纔算 committed,重啓後按會話日誌對賬,避免重複注入。
生命週期與模型工具¶
- 統計完成的用戶輪次,按空閒時間蒸餾記憶;分別調度 workspace 與 global 的 consolidation,並按分類做 retention 清理。
- 工具:
snail_memory_read(按 id 讀取,大對象先返回分片清單)、snail_memory_feedback(對已 committed 快照裏的記憶打 helpful / unhelpful / incorrect)。 - 斜槓命令:
/memory status、/memory remember workspace <text>、/memory correct workspace <id> <text>、/memory forget workspace <id>。
Web UI 與單寫者¶
- 側欄 Memory 面板(全局 / 工作區 / 設置),可查看條目、引用、最近一次已提交快照與 token 估算(用於上下文預算,非 provider 精確 usage)。
- 同一數據根下可多 Host 啓動,但僅一個持有寫鎖,其餘只讀;鎖有心跳與 stale 回收,寫操作帶 fencing 校驗。
安裝與啓用¶
任選一種安裝方式,然後重啓 Host 並刷新頁面。安裝前建議查看源碼與 MIT 許可證;插件以當前 dsh 進程權限運行,記憶數據落在本地 $DSH_HOME。
# 1) 從 npm 安裝
dsh plugin --profile web add dsh-snail-memory
# 2) 從 tarball 安裝
dsh plugin --profile web add .\dsh-snail-memory-0.1.0.tgz
# 3) 從解壓後的目錄安裝
dsh plugin --profile web add .\dsh-snail-memory
# 4) 從 Git 安裝(需要該 tag/commit 帶上構建產物)
dsh plugin --profile web add github:snaiheihei/dsh-snail-memory#v0.1.0
裝完確認組合層生效:
dsh --profile web --dump-config # 應出現 "# == dsh-snail-memory"
卸載:
dsh plugin --profile web remove dsh-snail-memory
典型用法¶
- 打開 Session,點擊輸入框左側記憶按鈕,選擇 global 或 workspace 啓用。
- 啓用後當前記憶索引作爲快照注入;對話中可隨時
refresh更新快照。 - 側欄 Memory 瀏覽條目、查看詳情、刪除、promote 到 global,並調整全局設置。
- 需要寫入時用
/memory remember workspace <text>,或由模型在對話中寫入;讀取與反饋由snail_memory_read、snail_memory_feedback完成。
配置¶
在 profile 的 cordis.patch.yml 中,按行 id snail-memory 覆蓋。patch 會整體替換該行的 config,需把要保留的鍵一併寫全:
- id: snail-memory
config:
provider: deepseek
model: deepseek-chat
reviewEveryUserTurns: 15
idleDelayMinutes: 60
consolidationCooldownHours: 20
globalConsolidationCooldownDays: 7
retentionSweepHours: 24
| 鍵 | 默認值 | 說明 |
|---|---|---|
dshHome |
宿主解析值 | 數據根;默認跟隨 DSH_HOME |
provider / model |
未設置 | 輔助模型路由;留空時從當前 agent 列表選可用模型 |
reviewEveryUserTurns |
15 |
每累計多少完成的用戶輪次觸發記憶蒸餾 |
idleDelayMinutes |
60 |
會話空閒多久後觸發蒸餾 |
consolidationCooldownHours |
20 |
workspace consolidation 冷卻 |
globalConsolidationCooldownDays |
7 |
global consolidation 冷卻 |
retentionSweepHours |
24 |
retention 清理間隔 |
默認數據目錄:$DSH_HOME/snail_memory/(config.dshHome 可改)。權威狀態在 state.v2.json;審計日誌 audit.v1.jsonl 只記 operation / revision / 時間,不記提示詞與記憶正文。
適用場景與注意¶
適合:希望在 DSH Web 里長期沉澱偏好與項目知識、又希望按 Session 控制「哪一層記憶進上下文」的單用戶開發者。
注意:
- 記憶僅本地存儲,不採集遙測;蒸餾/合併走宿主
ctx.llm,憑據由你自己的 provider 配置決定。 - RPC 掛在宿主
webServer同源路由/snail-memory/rpc/*。勿將 dsh Web 綁定到不受信任網絡(--host默認本機)。 - 社區目錄 SkillHub 與 DeepSeek / 幻方無官方從屬關係;安裝插件前請自行審閱倉庫代碼。
結尾¶
dsh-snail-memory 把 global / workspace 分層記憶、顯式注入、Web 管理與蒸餾整合收進一個 DSH 插件;需要細節時直接對照 README 與倉庫。