dsh-memory-tree:AST 索引的分層 SQLite 長期記憶

前言

在 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 與配置說明,可覈實的能力如下。

  1. 後臺捕獲:監聽 session/event,在後臺記錄 user/assistant 交換(可配置 capture.enabled)。
  2. AST 索引:解析爲可尋址節點(path、kind、title、content),寫入 embedding(默認 1024 維)及相似度邊(cos ≥ 0.72)。
  3. 自動召回:在 agent/pre-step 查詢,向量與 FTS 候選混合打分後,注入 bounded 的 <memory-recall>(recall.autoInject、recall.maxNodes 默認 6,recall.timeoutMs 默認 1500 ms)。
  4. 分層存儲:hot(memory.db,默認 <30 天)、warm(30–180 天)、cold(>180 天)輪轉;定時 6 h、啓動後及 mem_rotate 可觸發。
  5. 工具面:暴露 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,步驟如下。

  1. 準備 embedding 憑據(不要放進倉庫):
echo '{"apiKey":"sk-..."}' > "$DSH_HOME/memory-tree/credentials.json"
  1. 安裝到 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。

  1. 在 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 建議做最小驗證:

  1. 在同一項目裏對話至少兩輪。
  2. 開 新 session,再問第一輪裏說過的事;若召回正常,應看到 <memory-recall> 相關內容。
  3. 需要手動查庫或運維時,調用 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
羽毛球分组比赛记分
小程序二维码

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

小夜