dsh-memory-plugin:工作區級記憶與規則,索引注入 + 按需檢索

前言

在 DSH 裏做長會話或跨天協作時,模型往往只能依賴當前上下文。把用戶偏好、項目約束寫進系統提示可以緩解,但條目一多就會擠佔 token,舊內容還容易被靜默截斷。把記憶綁死在某個倉庫裏,換工作區又要重來。

下面介紹社區插件 dsh-memory-plugin(維護者 AieXile,分類:記憶)。它以 profile bundle 形式隨 DSH 啓動加載,重啓後仍在;記憶與規則落在各工作區的 .dsh-memory/memory-store.json,與具體項目代碼解耦,任何工作區都能用同一套能力。

這是什麼

dsh-memory-plugin 是一個獨立的 DSH 記憶 / 規則持久插件。它由 AnimeTrack 項目裏的動態 Cordis 插件演化而來,v1.4.0 起獨立命名;存儲路徑同批遷移,舊數據自動兼容。

插件做三件事:每輪向系統提示注入記憶索引和啓用中的規則;向模型註冊 memory_* / rule_* 工具;在會話標題欄和設置頁提供可讀可寫的管理界面。

核心功能

索引式注入(v1.5.0 起)

v1.4 及更早會把最近 25 條記憶全文注入系統提示,條目多時占上下文,超出部分會被 slice(-25) 靜默切掉。v1.5.0 起改爲兩層結構(README 中對標 Claude Code auto memory):

  • 索引常駐:每輪只注入一行一條的索引,例如 - [feedback] 回答用中文,不要用敬語 #風格 #語言 (m7);
  • 正文按需:模型用 memory_get(["m7"]) 讀全文,用 memory_search("關鍵詞") 按關鍵詞、標籤或類型找回索引裏未列出的條目;
  • 預算固定:索引 2400 字符 / 最多 40 條,規則 1200 字符 / 最多 25 條。裝不下時提示裏寫明「還有 N 條未展示,用 memory_search」,不靜默丟棄;
  • 去重:memory_add 對忽略大小寫與空白後完全相同的正文直接拒絕,返回已有條目 id。

檢索爲本地打分(拉丁詞 + 中文 bigram + 標籤/類型命中),不引入 embedding 或向量庫。

記憶類型與標籤

類型包括 user(關於用戶)、feedback(糾正與偏好)、project(決策、約束、坑)、reference(去哪找東西)。每條可帶 tags 與 createdAt / updatedAt。舊數據載入時缺字段會自動補成 project 與空標籤。

模型工具

README 列出的工具:memory_view、memory_search、memory_get、memory_add、memory_remove、memory_rollback、rule_add、rule_remove、memory_debug。

輪末提煉、草稿與版本鏈(v1.6.0)

自動提煉默認關閉,在面板「記憶」頁勾選後生效:

  1. 監聽 session/event 的輪次相關事件,在輪末異步蒸餾,不阻塞輪次收尾;
  2. 只處理達到 minChars(默認 800)的輪次;同一工作區默認 5 分鐘冷卻;
  3. 用當前會話的 provider / model 發輔助請求,要求返回 JSON 數組;本地過濾重複與無效 supersedes;
  4. 結果先進入草稿隊列(面板「待審 N」),批准後才寫入 active 記憶;草稿不注入、不參與檢索;
  5. 新事實推翻舊事實時可帶 supersedes: "m3":新條 active,舊條 archived,面板與 memory_rollback 支持回滾一步。

默認參數:minChars: 800、cooldownMs: 300000、maxDraftsPerTurn: 3;面板目前主要暴露自動提煉開關,其餘可改 memory-store.json 的 settings。

界面入口

  • 標題欄圖標:conversation.session.header.utilities 同排 28×28 圓形圖標,點開浮層錨在圖標下方;
  • 設置頁:settings.section 中的「記憶與規則」。

工作區與數據文件

記憶庫按會話工作區分文件:<workspace>/.dsh-memory/memory-store.json。目標根在載入時按順序解析並鎖定:顯式會話、當前 initiator 會話、pinnedRoot、配置根 sandboxPolicy.workspaceRoot。各根各自一份狀態,寫入只落在本次狀態所屬根。

v1.3.x 及更早寫在 .animetrack/memory-store.json,格式一致;新路徑不存在而舊路徑存在時會回退讀取,下一次落盤寫新路徑,舊文件不會被改寫或刪除。

安裝與啓用

這是標準 npm 包 + DSH bundle,通過 plugin_manager install_bundle 安裝(不要手工改 profile 的 package.json / cordis.patch.yml,也不要手工跑 pnpm)。操作要求會話爲 danger-full-access,或審批策略爲 ask 並由你批准。

從 GitHub 安裝(發佈形態,當前版本 tag 爲 v1.6.0):

plugin_manager install_bundle
  target: github:AieXile/dsh-memory-plugin#v1.6.0
  # 也可以寫完整地址:git+https://github.com/AieXile/dsh-memory-plugin.git#v1.6.0

從 npm 安裝(發佈後):

plugin_manager install_bundle
  target: dsh-memory-plugin@1.6.0

從本地目錄安裝(開發用):

plugin_manager install_bundle
  target: F:\Projects\dsh-memory-plugin

本地路徑會寫成 link:<絕對路徑>,改源碼後重啓 DSH 才載入 Host 半部新代碼;Client 半部刷新頁面即可。

從 @animetrack/memory-plugin 升級時需 remove_bundle 後重裝 dsh-memory-plugin,並重啓 DSH;若 cordis.patch.yml 仍留 id: animetrack-memory-rules,應刪掉(新版條目爲 dsh-memory-rules)。工具名與數據格式無需搬運。

典型用法

驗證是否加載

  • Host:cordis_inspect_query → host / Config / listConfigs,entry 爲 include:dsh-memory-rules;
  • 工具:新會話工具表應出現 memory_view、memory_search、memory_get 等;memory_debug 可查看已知根、條目數、注入統計等;
  • 注入:系統提示裏應出現 Memory index (N of M; …),正文不應整段出現;memory_get(["m1"]) 可取回全文;
  • 路由:GET /dsh-memory/memory-store?sessionId=<會話id> 返回 store 與 preview 預算統計;
  • 界面:標題欄圓形圖標與設置頁「記憶與規則」。

模型側讀寫記憶

需要全文時調用 memory_get,按關鍵詞或標籤找回索引外條目時用 memory_search,增刪用 memory_add / memory_remove,規則用 rule_add / rule_remove。

自動提煉(可選)

在面板「記憶」頁勾選「輪末自動提煉爲草稿」,完成一輪不少於 800 字符的對話後,在「待審」中批准再入庫。默認關閉,因會產生額外模型調用。

不改 DSH 的自測

node test/host-harness.mjs

用真實文件系統與假 ctx 驅動 lib/host.js,覆蓋工具、注入、路由、舊路徑遷移等邏輯。

適用場景與注意

適合誰:需要在多個工作區複用同一 profile、又希望記憶跟項目目錄走、且希望控制每輪提示詞體積的 DSH 用戶;需要規則常駐、記憶可檢索、可選輪末提煉與人工審批的場景。

結構與依賴:dual-face 包,Host 爲 ESM(lib/host.js),Client 爲經典腳本(lib/client.js);零依賴、零 peer,不參與 DSH 版本門禁。README 記載已在 DSH 0.1.7-rc.2 + pnpm 11.7(Windows)實測。

權限與安全:插件在當前 DSH 進程權限下讀寫工作區文件並註冊 HTTP 路由與工具。安裝前應閱讀倉庫源碼與 MIT 許可證,確認是否符合你的環境策略;自動提煉會向當前會話的模型發起輔助請求,注意成本與數據出境策略。

改代碼後務必重啓 DSH:Host 半部的 webServer / tools 註冊在進程內不會隨 disable→enable 或重裝 bundle 完全釋放,僅重啓才能保證單實例乾淨加載。

結尾

dsh-memory-plugin 把「記憶 + 規則」做成與工作區綁定的持久 bundle:索引注入控預算,工具與本地檢索補全文,面板與設置頁可管可審,v1.6.0 還可選輪末提煉與 supersedes 版本鏈。

DSH 生態強調「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。星標與版本以倉庫爲準(當前 package 版本 1.6.0)。

羽毛球分组比赛记分
小程序二维码

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

小夜