前言¶
在 DeepSeek Harness(DSH)裏跑智能體,常見情況是:一輪任務結束,上下文被壓縮或清空;換一個新 session 做同一項目,上次聊過的細節、你自己記下的要點,往往不會再出現在模型眼前。把筆記塞進 system prompt 或單獨做向量檢索,可以部分緩解,但 chunk 往往是匿名的,很難按「某條思路、某段結構」尋址,也缺少可審計的召回理由。
下面介紹社區插件 dsh-memory-tree(維護者 qinghuaju),它把對話與可結構化內容落成磁盤上的資產:SQLite 分層存儲、AST 節點路徑、embedding 與軟相似邊,並在每輪前注入有上限的 <memory-recall> 塊。無需外部託管服務,目錄可複製、備份或刪除。
這是什麼¶
dsh-memory-tree 是 DSH 的「記憶」類插件,一句話定位來自項目描述:AST soft-decision-tree long-term memory for DeepSeek Harness (DSH): SQLite + embeddings, project-scoped, cross-session recall.
與「只堆向量 chunk」的做法相比,項目 README 強調:節點有唯一 AST 路徑、樹上一跳激活、六項命名打分項與審計行、hot/warm/cold 輪轉以限制活躍庫體積,並在 SQLite 旁提供可人工查看的 Markdown 鏡像。許可證 MIT,npm 包版本 0.4.2(以 package.json 爲準);GitHub 倉庫當前約 2 stars。目錄頁:skillhub.cn/plugins/qinghuaju/dsh-memory-tree;源碼:github.com/qinghuaju/dsh-memory-tree。
核心功能¶
經 README 與配置說明,可覈實的能力如下。
- 後臺捕獲:監聽
session/event,在後臺記錄 user/assistant 交換(可配置capture.enabled)。 - AST 索引:解析爲可尋址節點(path、kind、title、content),寫入 embedding(默認 1024 維)及相似度邊(cos ≥ 0.72)。
- 自動召回:在
agent/pre-step查詢,向量與 FTS 候選混合打分後,注入 bounded 的<memory-recall>(recall.autoInject、recall.maxNodes默認 6,recall.timeoutMs默認 1500 ms)。 - 分層存儲:hot(
memory.db,默認 <30 天)、warm(30–180 天)、cold(>180 天)輪轉;定時 6 h、啓動後及mem_rotate可觸發。 - 工具面:暴露
mem_recall、mem_store、mem_stats、mem_dream、mem_rotate;mem_stats含compat:行,反映 normal / degraded / off。
兼容方面:README 寫明在 DSH 0.2.1-rc.3( bundled Node 24)及 Node 22/24 上測試;CLI 需 Node ≥22.5;engines.dsh 爲 ^0.2.1-alpha.2。無 native 構建,embedding 可選用 pollinations、dashscope、openai、ollama、custom,或離線 deterministic fake embedder / Ollama。
安裝與啓用¶
插件以當前 DSH 進程權限讀寫 $DSH_HOME 下配置與數據庫;安裝前請自行審閱源碼與 MIT 許可證。官方 Quick start 不依賴 git clone,步驟如下。
- 準備 embedding 憑據(不要放進倉庫):
echo '{"apiKey":"sk-..."}' > "$DSH_HOME/memory-tree/credentials.json"
- 安裝到 DSH 實際加載的 profile(桌面端多爲
~/.dsh/profiles/desktop,dsh web多爲~/.dsh/profiles/web),然後重啓 DSH:
node scripts/install.mjs --profile "$DSH_HOME/profiles/desktop" --copy-to
說明:需在已取得插件源碼或發佈包的環境中執行 scripts/install.mjs;安裝器冪等,會備份 cordis.patch.yml,且不修改你的 key。無 --profile 時會自動探測並在 desktop/web 並存時警告。多機、npm/tarball、離線模式見倉庫 docs/DEPLOY.md。
- 在 DSH 內驗證:讓智能體調用
mem_stats。
DSH 0.2.1-rc.3 默認關閉插件市場且無 index URL;若走市場發現流程,需自行生成 market/index.json 並在 Settings → Plugins → Discover 配置 URL,詳見 docs/MARKET.md(README 中的 market-index.mjs / check-market.mjs 爲發佈與校驗用,非普通用戶一鍵安裝命令)。
可選配置片段(插入 profile 的 cordis patch,鍵名以文檔爲準):
- insert:
- id: dsh-memory-tree
name: 'dsh-memory-tree'
config:
embedding:
preset: pollinations # pollinations | dashscope | openai | ollama | custom
dimensions: 1024
capture:
enabled: true
recall:
autoInject: true
maxNodes: 6
timeoutMs: 1500
storage:
tiered: true
hotDays: 30
warmDays: 180
完整默認值見 docs/PHASE1.md。設 storage.tiered: false 可退回單文件行爲。
典型用法¶
經過上面的安裝與重啓,可按 README 建議做最小驗證:
- 在同一項目裏對話至少兩輪。
- 開 新 session,再問第一輪裏說過的事;若召回正常,應看到
<memory-recall>相關內容。 - 需要手動查庫或運維時,調用
mem_stats看節點與兼容狀態;需要整理分層庫時調用mem_rotate。
打分與管線細節(捕獲 → AST → embedding → 查詢 → 注入)見 README 流程圖與 docs/PRINCIPLES.md;倉庫提供 node scripts/bench.mjs 等離線基準腳本,數值隨機器與 embedder 變化,此處不重複羅列。
適用場景與注意¶
適合誰:在同一 DSH 項目里長期迭代、希望跨 session 找回結構化對話與筆記、且願意本地持有一份 SQLite + 可選 embedding 調用的開發者。
注意:
- 插件與 DSH 同源插件生態一致:社區目錄(如 SkillHub)獨立於 DeepSeek / 幻方,並非官方應用商店。
- Embedding 預設除離線方案外通常需要 API key;憑據僅應放在
$DSH_HOME/memory-tree/credentials.json。 - DSH 側 hook 變更會導致能力分級降級(例如 auto-recall 關閉而 capture / 工具仍可用),以
mem_stats的compat:爲準。 - README 自述在 host 拒絕注入消息等情況下會關閉當輪 auto-recall 並寫日誌,行爲以當前版本源碼爲準。
結尾¶
dsh-memory-tree 把長期記憶做成可檢查、可輪轉、可跨 session 召回的 AST + SQLite 方案,並綁定 DSH 生命週期鉤子與一組 mem_* 工具。若要進一步瞭解設計取捨與部署變體,請讀倉庫 README(含 中文 README.zh.md)與 docs/。
- 目錄頁:https://www.skillhub.cn/plugins/qinghuaju/dsh-memory-tree
- GitHub:https://github.com/qinghuaju/dsh-memory-tree