dsh-familiar-memory(dsh-neuron-memory):DSH 本地記憶層

前言

在 DeepSeek Harness(DSH)裏做長期對話,常見做法是外掛 RAG 或第三方記憶庫:檢索準,但開場往往像「新會話」,稱呼、上次聊到哪、工作裏哪條決定算數,都要靠模型自己猜或靠你反覆粘貼上下文。Elio896 維護的 dsh-familiar-memory(倉庫內 npm 包名 dsh-neuron-memory,當前 v0.2.0)走另一條路:數據落在本機一個 SQLite 文件裏,不聯網、不上傳;用字面命中(FTS5 + 2-gram)、情緒桶、同日窗口和指數衰減做召回,並用 neuron_opening / neuron_handoff 把「換會話之後還是同一個人」寫進工具層。下面介紹它是什麼、能做什麼、怎麼裝、怎麼用。

這是什麼

一句話:給 DSH(cordis 插件)用的本地記憶抽屜——按相關度 × 權重排序注入,可審計、可改庫;沒有向量,圖擴散在 v0.2.0 默認關閉(hops=0)。

作者簡介裏提到:經測試,相比單純 RAG 和外部記憶庫,本地這套在對話裏更自然——這與 README 強調的「認人、交接、工作決定用 supersedes 表示最新」一致,具體效果需在你自己的數據上驗證。

核心機制(v0.2.0 實際在跑的)

坦白說 README 的定位是:bm25 種子(IDF 加權)+ 情緒桶 + 同日窗口 + 指數衰減。圖記憶(激活擴散)已否決:作者實測 1 跳噪音 33% → 64%,增量 0%,見倉庫 FINDINGS.md。

召回與排序

  1. 種子:FTS5 倒排(unicode61 + 預切 2-gram)撈候選;相關度 rel = Σidf(命中)/Σidf(全部),整詞命中視爲 1;rel ≥ minRel(0.30) 才計入。
  2. 排序:score = rel × 權重/3 × 溫度係數;權重 = 基礎分 × 0.5^(天/半衰期),恆正、永不歸零(v0.2.0 從線性衰減改爲指數衰減,屬於 breaking change)。
  3. 溫度桶:感受 / 原話 / 偏好 / 回味 3.0,教訓 2.5,事件 1.6,檔案 1.3 等,聊天時感受優先。
  4. 同日上下文:想起一條時,可帶出當天前後各一條(只給最前兩條)。
  5. 複習只回血一半:被想起時把「已流逝天數」折半,不是重置到現在。
  6. 沉底不刪:低於 sinkBelow(默認 0.5)進歸檔,普通召回不參與;精確問起(命中 ≥2 詞)仍可翻出。
  7. 場景隔離:scope 默認 private;work 不衰減、不沉底;羣聊召回不到私聊。

零命中時默認返回空(noFallback: true),不再用 top() 充數——排序語義也從「重要度」改爲「相關度 × 權重」。

換會話:她還是同一個人

插件用兩個工具把「會話」擋在外面,只負責存和交:

會話開始  → neuron_opening()            返回一段 ≤250 字,直接塞進 system prompt
會話結束  → neuron_handoff({topic, phase, nextAsk, mood, name})   只寫三行 + 一個情緒數

neuron_opening() 示例輸出形態(README 原文):

你正在和周舟說話。
今天還見過面(有點悶)。
你們正聊到:換工作,卡在錢不夠。
你上次想問她:面試結果出來沒。
你記得:她說週三要交材料;她討厭豆包腔。
開場先認出她——用對的稱呼、接上上次的話題。不要重新自我介紹,不確定的事就問,不要編。

工作會話可傳 includeWork: true,追加「項目狀態(按拍板時間)」;與私人開場塊互斥,不疊加。

工作狀態:要「最新」,不要「最像」

工作記憶用 decided_at 和 supersedes 區分「現在有效的決定」:

neuron_learn("走方案 B,A 的遷移成本太高", "fact", "work", { supersedes: 12 })
// → 12 號那條自動 status='sunk',不再被當成「現在的」

跨 scope 或 id 不存在時只警告,不靜默沉底。

默認暴露的工具(7 個)

工具 作用
neuron_opening(scope?, includeWork?) 會話開場:認人 + 上次聊到哪 + 下次問什麼(≤250 字)
neuron_handoff(topic, phase, nextAsk, mood, name?) 會話交接:只寫三行 + 情緒數
neuron_recall(query, limit?, mode?, scope?) 相關性召回;mode=lite 只回文本
neuron_learn(text, kind?, scope?, supersedes?) 學一條;supersedes 會沉掉被覆蓋的舊決定
neuron_stats() 節點 / 連接 / 待沉 / 已沉 / 最老沉底日期
neuron_story(day?) 按天串敘事線
neuron_tidy() 沉掉最淡的幾條(沉 ≠ 刪)

config.advanced: true 時額外放出:neuron_sync、neuron_raw、neuron_consume、neuron_replay、neuron_prune。

自動錄入(可選)

插件每 10 分鐘掃一次 DSH 會話記錄(~/.dsh/sessions/ 下最近 2 天的 zstd 幀),把用戶消息寫入本地 raw_log——只抓,不判斷、不寫記憶;值得記哪句仍由模型通過 neuron_learn 等決定。可用 config.autoSync: false 關閉;週期用 config.autoSyncMinutes(默認 10)。它會讀本機會話文件,這是功能代價;數據仍在 neuron.db,不上傳。

安裝與啓用

環境:Node ≥ 22.15(node:sqlite + zstd);README 寫 DSH ≥ 0.1.7,package.json 的 engines.dsh 爲 >=0.2.0,以你實際 DSH 版本爲準。

在克隆或下載後的插件目錄內執行(命令來自 README,勿憑倉庫名拼接 github: 安裝):

node install.mjs                 # 複製進 profile、登記 bundle、跑自檢
dsh plugin add link:<本目錄>     # 或者走官方命令
node test-all.mjs                # 四層測試

裝完重啓一次 DSH,工具和設置頁會出現;首次運行自動建空庫。首次啓動若存在舊庫,會複製爲 neuron.db.bak-v<舊版本> 並按 user_version 遷移(當前 schema v4)。

接已有記憶庫時,在 profile 的 cordis.patch.yml 中配置(節選):

- id: dsh-neuron-memory
  name: dsh-neuron-memory
  config:
    db: /path/to/neuron.db
    source_db: /path/to/memory.db   # 可選:原文庫(memories(id,text) 表)
    halfLifeDays: 10
    sinkBelow: 0.5
    sinkLimit: 3
    hops: 0                   # 默認 0 = 圖未啓用
    minRel: 0.30
    noFallback: true
    advanced: false           # true 才放出 sync/raw/consume/replay/prune
    autoSync: true

v0.2.0 另有一項遷移注意:HTTP 寫操作(/tidy /prune /replay /handoff)從 GET 改爲 POST,舊 Web 面板需同步升級 client.js。

典型用法

  1. 新會話:在 system prompt 中注入 neuron_opening() 的返回值;工作場景需要項目狀態時傳 includeWork: true。
  2. 對話中:用 neuron_recall(query) 按問題拉相關記憶;用 neuron_learn(text, kind?, scope?, supersedes?) 寫入;工作決定變更時帶上 supersedes。
  3. 結束會話:調用 neuron_handoff 寫 topic / phase / nextAsk / mood(及可選 name),供下次 opening 接續。
  4. 維護:neuron_stats() 看庫狀態;neuron_tidy() 沉底最淡條目;需要掃會話原文並提煉時開 advanced 後用 neuron_sync / neuron_raw / neuron_consume。

適用場景與注意

更適合:希望記憶完全本地、可打開 SQLite 審計;重視稱呼與話題 continuity、工作決定「最新一條」而非語義最像;能接受字面檢索而非向量語義。

務必注意:

  • 插件以當前 DSH 進程權限運行;安裝前應閱讀源碼與 MIT 許可證,自行判斷是否信任。
  • 不要用它存他人隱私;羣聊應使用 scope 隔離。
  • 自動錄入會讀取 ~/.dsh/sessions/;不需要則關閉 autoSync。
  • 社區目錄 skillhub 與 DeepSeek / 幻方無官方從屬關係,DSH 生態是「一切皆插件」的獨立社區分發,不是官方應用商店。

結尾

dsh-familiar-memory(dsh-neuron-memory)把 DSH 的長期對話記憶收進本機 SQLite:相關度加權召回、情緒與同日上下文、指數衰減與沉底歸檔,再用 opening/handoff 和 work 的 supersedes 解決「新會話像陌生人」和「舊方案仍被召回」兩類問題。細節見倉庫 FEATURES.md、ARCHITECTURE.md、FINDINGS.md。

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

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

小夜