dsh-memory:給所有 DSH 會話共用的本地記憶池

前言

DSH 的理念是「一切皆插件」,但多輪對話之間默認沒有共享記憶:換一個會話、換一個工作區,模型就忘了上一輪記下的偏好、項目約定和環境事實。於是常見做法是把重要信息反覆粘貼回 prompt,既耗 token,也容易抄錯或漏抄。octidote/dsh-memory 就是解決這件事的:一個放在本機、所有 DSH 對話共用的持久記憶池,相關話題被提及時自動召回。它不聯網、不調用嵌入模型,記憶的存儲與召回都在本地完成。

這是什麼

  • 插件名:dsh-memory
  • 維護者:Octidote
  • 目錄頁分類:記憶
  • 版本:0.17.0
  • 許可證:MIT
  • 運行環境:Node >= 20

一句話定位:一個本地優先的共享記憶池,代替每次手動把背景塞回 prompt。區別在於它只保存結構化壓縮後的摘要,命中時才注入少量相關內容,而不是把對話原文整段塞進上下文。README 的簡介是「Shared local memory pool for DeepSeek Harness conversations」。

核心能力

本機共享池與零 token 壓縮

所有會話、所有工作區共用 $DSH_HOME/storages/dsh-memory/memories.json。用戶真正輸入的 prompt 和助手最終回覆只在本地做結構化抽取式壓縮後入庫:單條 ≤420 字,回合合併後 ≤760 字,保留開頭結論、要點列表和結尾結論,不保存完整對話,也不調用模型。插件注入的 runtime context、技能目錄、時間快照、工具調用中間步驟不會被誤存。入庫前會自動遮蔽私鑰、API key、GitHub token、JWT、Bearer、密碼等敏感片段,並把代碼塊、長鏈接替換爲佔位符。

加密落盤與單寫者保護

記憶池用 AES-256-GCM 加密後寫入 memories.json 快照,日常新增/刪除/召回事件追加到 memories.json.journal.jsonl(每行一個獨立加密事件),每 200 條或 512 KB 自動壓實成新快照。密鑰保存在同目錄 key.bin(32 字節,僅當前用戶可讀),舊版明文數據在首次加載時自動遷移爲密文。同一數據目錄只允許一個寫入者:鎖文件記錄寫入者 PID 與實例標識,第二個進程自動進入只讀模式,仍可查看和召回,但不會覆蓋數據。模型調用 memory save/forget、面板反饋/分類/刪除/清空等顯式寫操作會等待落盤確認;寫入失敗時不返回成功,事件留在隊列按 5 秒起、最長 60 秒退避重試。啓動時每 6 小時保留一份加密快照,遷移、清空、恢復前強制備份,保留最近 16 份。

需要手動備份或遷移時,必須同時保留 memories.json、memories.json.journal.jsonl 和 key.bin;丟失密鑰後舊記憶無法恢復。

剋制的自動召回

默認「經典模式」:本地 BM25 風格關鍵詞匹配 + 同義詞概念擴展 + 本地特徵哈希向量餘弦 + 分類上下文加權。同義改寫(「暗色/深色」「會議/開會」)和輕微拼寫差異(kubernetis / kubernetes)也能命中。只有相關度足夠高才注入:最多 2 條、總長不超過 760 字符,只在該輪第一步出現一次,同一會話不會重複注入同一條記憶。

在面板「設置」→「召回」可切換到混合模式:用 RRF 融合 BM25、向量、標籤/分類三路排序,並加入置信度間隔、MMR 多樣性和意圖偏置。默認仍是經典模式,切換結果寫入 config.json,可隨時切回。README 給出的 70 條標註查詢結果:混合模式 Hit@1 91.7%、Hit@2 100%、MRR 0.958、誤召回率 10%;經典模式爲 86.7% / 98.3% / 0.929 / 10%。這些數字由 tools/eval-recall.mjs 復現。

回合記憶與可解釋召回

助手回覆在 15 分鐘內會與同一會話的上一條用戶消息合併成一條 episode,避免用戶和助手各存一條;摘要保留「要點」列表與「結論」結構。在「設置」→「召回」輸入查詢即可看到每條候選的 score / bm25 / vector / coverage / reasons,不調用模型、不注入對話。展開列表行可置頂 ★、屏蔽 ⊘ 或反饋,被屏蔽的記憶不再自動召回。

核心記憶、項目上下文與注入防護

被 ★ 標爲核心記憶的條目會在每個新會話的第一步自動帶入(最多 2 條),即使當前問題沒有關鍵詞命中。自動記錄的記憶會從會話工作目錄提取 project,召回時同一項目的記憶獲得輕微加權。拼接進模型提示的記憶文本會先移除僞系統標籤、{{變量}} 和「忽略之前指令/進入開發者模式」等注入模式,數據庫裏保存的原文不變,只淨化模型實際看到的那一份。

質量反饋與自動整理

列表裏每條記憶都可以點 👍 / 👎,反饋會調整重要度和召回排序;連續 3 次「沒用」且沒有「有用」反饋的記憶停止自動召回,再點一次 👍 即可恢復。新記憶入庫時會自動合併高度相似的近重複項(同類型、同分類、Jaccard ≥ 0.78)。每條記憶按標籤和本地關鍵詞給所有分類打分,保留主分類、置信度、候選次分類和打分明細,低置信度進入「未分類」,不強行分桶;展開列表行後分類膠囊變成下拉框,可手動改成任意分類(手動結果優先,置信度記爲 100%),不調用模型,也不額外消耗 token。上限 2500 條,超出時按重要度、時效、類型和反饋質量淘汰;pinned 記憶受保護。

面板與 3D 圖譜

側邊欄底部「記憶」按鈕打開面板,只有「列表 / 圖譜」兩個主視圖:搜索、分類篩選和記憶正文默認可見,反饋、置頂、屏蔽、改分類、刪除等操作收進展開行;召回模式、召回測試、數據安全、備份和清空統一收進右上角「設置」。圖譜是獨立的 3D 畫布:節點代表一條記憶或一個回合,邊的粗細與亮度由關係強度決定,節點體積隨召回次數、合併次數和置頂情況增大,佈局按分類星團組織,支持旋轉、平移、縮放、自動旋轉、分類篩選、搜索高亮和詳情。標籤會做屏幕空間碰撞檢測,擁擠時自動隱藏次要標籤。圖譜右上角「獨立窗口」可打開無側欄的完整視圖,窗口可自由拉伸。對話內容默認自動進入池子,不需要手動添加。

模型可主動維護

memory 工具支持 search / save / forget / feedback,適合保存穩定的偏好、環境事實和長期項目約定。直接對模型說「記住……」,模型會調用該工具保存。

安裝與啓用

插件採用克隆倉庫後運行安裝腳本的方式,不要用 link: 或目錄聯接安裝:DSH 的 ESM 攔截只對 profile 內的真實路徑生效,符號鏈接會導致啓動時報 ERR_MODULE_NOT_FOUND: @deepseek-ai/dsh-llm。

git clone https://github.com/Octidote/dsh-memory.git
cd dsh-memory
node scripts/install.mjs desktop

安裝腳本會把插件複製爲 <DSH_HOME>/profiles/desktop/node_modules/dsh-memory 真實目錄,並把 dsh-memory 追加到該 profile 的 dsh.profile.bundles;完成後重啓 DeepSeek Harness 即可。

典型用法

1、側邊欄底部點擊「記憶」打開面板。頂部下拉框按 偏好 / 項目 / 環境 / 事實 / 計劃 / 人物 / 對話 / 未分類 篩選,搜索框同時匹配正文、標籤和分類名。
2、「列表」查看、搜索、展開和刪除記憶。每行顯示分類、時間和摘要,點開可見分類糾正(+N 表示候選次分類)、標籤、召回次數、置頂 ★、屏蔽 ⊘、👍 / 👎 和刪除。列表分批加載,每批 120 條,最多 1000 條。
3、「圖譜」視圖:左鍵拖拽旋轉,右鍵拖拽平移,滾輪縮放,雙擊重置;點擊節點看詳情,點擊右側分類圖例篩選,搜索框高亮匹配節點。
4、右上角「⚙」進入設置。「記錄」可暫停/恢復自動記錄;「召回」可查看/切換經典與混合模式,輸入查詢看本地候選及分數;「數據安全」顯示單寫者/只讀狀態與備份數量,可立即備份、校驗、導出/導入或恢復;「維護」顯示質量統計和清空入口。這些操作都不調用模型,也不注入當前對話。
5、直接對模型說「記住……」,模型會調用 memory 工具保存;清空全部在「設置」→「維護」,清空和恢復前都會先寫入加密備份。

適用場景與注意

適合需要在多個 DSH 會話、多個工作區之間複用偏好、項目約定和環境事實的開發者,以及希望記憶內容可控、可解釋、可糾正、且不離開本機的數據的處理方式。

需要注意幾點:

1、插件以當前 dsh 進程權限運行,記憶文件的讀寫範圍取決於該進程的權限,安裝前應先檢查源碼與許可證(MIT)。
2、倉庫當前星標爲 0,屬於早期項目;功能與召回效果以 README 和本地評測爲準,不要只在生產環境依賴單一默認配置。
3、備份三件套(memories.json、memories.json.journal.jsonl、key.bin)必須一起保留,否則密文無法解開。
4、召回是啓發式的本地匹配,不調用模型;如需更精確的注入行爲,可在面板切換模式並觀察候選分數。
5、倉庫自帶 npm test(鎖 / 持久化確認 / JSONL 與壓實 / 加密 / 召回 / 圖譜)和 npm run eval(70 條標註查詢)可作爲安裝後的自檢手段。

結尾

dsh-memory 的價值在於把「每個會話各自記背景」換成「本機一個共享、加密、可解釋的記憶池」,命中時只注入少量相關內容,日常操作繞開了手動整理 prompt 的負擔。需要進一步瞭解可看目錄頁與倉庫:

  • 目錄頁:https://www.skillhub.cn/plugins/Octidote/dsh-memory
  • GitHub:https://github.com/Octidote/dsh-memory
羽毛球分组比赛记分
小程序二维码

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

小夜