dsh-chain:讓 DSH 記住「爲什麼這麼決定」

前言

在 DeepSeek Harness(DSH)里長期跑任務時,常見痛點不是「結論忘了」,而是「當時爲什麼這麼定」在上下文被壓縮後一起消失。會話摘要往往只留結果,依據、猶豫和取捨理由很難在下一輪對話裏自動回來。社區插件 canglight/dsh-chain(包名 dsh-chain-shared)面向這類問題:把判斷存成結構化記錄,每輪從磁盤重新渲染進系統提示,並用分級遺忘與檢索把相關條目拉回當前輪次。下面介紹它是什麼、能做什麼,以及如何安裝與使用。

這是什麼

dsh-chain 是 maintainer canglight 維護的 DSH 記憶類插件(GitHub 倉庫 canglight/dsh-chain,社區目錄 SkillHub 條目)。官方 README 的定位是:給 DeepSeek Harness 用的思維鏈記憶插件——記的不是「發生了什麼」,而是「當時爲什麼這麼定」;每條記憶是一句判斷,並附帶依據、猶豫與結論,按時間衰減,只有被重新想起纔會留住。

本倉庫發佈的是全會話通用版:任意會話裏看到的都是同一套記憶鏈。README 明確說明:「每條會話各一套、互不串味」的隔離版不在這個包裏。

當前 npm 包版本爲 2.4.1(見倉庫 package.json);功能說明以 README 與 CHANGELOG 爲準。

核心功能

四個設計目標(README 對照)

問題 插件做法
上下文壓縮後,決策理由丟失 判斷存成 JSONL,每輪從磁盤重新渲染進系統提示,與對話歷史無關
記了很多,用時想不起來 用當前用戶話檢索(jieba 分詞 + 通用 IDF 等),命中則把判斷行貼回提示詞
記憶堆積成噪聲 八個池分半衰期自動淡出;長期未想起的條目先淡、再歸檔
不知道自己記得什麼、哪條還可信 元記憶工具 chain_about 回答「關於 X 我知道什麼 / 多可信 / 變過幾次」

八個記憶池與遺忘

記憶按池分層,各池有不同的寬限期、半衰期與歸檔策略。核心層(原則 / 人格)永不衰減;事實、鐵律、經驗、核心日常、片面日常、情緒、海馬體等池各有時間表。權重衰減不只看時間:被檢索命中的次數會拉長半衰期(README 給出公式 1 + 0.6·log2(1+次數),封頂 4 倍)。

核心池默認最多 32 條(CORE_MAX / 設置項 coreMax)。滿了之後,再向核心層追加「原則/人格」會被拒絕,並提示改寫到 AGENTS.md。標籤若未命中任何池,不猜測,落入「海馬體」並標註「未歸類」,由夜巡審查。

每輪注入與字符預算

插件每輪向系統提示注入一段 ## 我的思維鏈(只對我可見),可包含當前情緒、各池摘要,以及「你這句話讓我想起來」的檢索結果。注入不是「取最近 N 條」,而是按 injectMaxChars(默認 24000 字符,約 8k token)裝箱:常駐候選池按權重全局排序逐條裝入;裝不下的條數寫在段標題裏(另有 N 條未展開(chain_recall 可查)),核心段不參與裝箱。README 稱這樣注入量相對穩定:例如 1000 條記憶時封頂約 24000 字符。

另有一塊工作記憶(待辦 / 承諾),由正則從用戶話中識別,最多 3 條、3 天未提起過期,存在 working.json,不進記憶鏈與星雲圖。

八個工具與一個可視化 Tab

工具 作用
chain_append 寫一條判斷(judgement / evidence / hesitation / conclusion / tags / weight,可選 eventId)
chain_recall 按關鍵詞 / 日期 / 權重查詢;最多補帶 2 條同 eventId 記錄
chain_graph 導出 Mermaid 圖譜
chain_touch 對已有記錄標「確認」或「被推翻」
chain_mood 寫當前情緒(單槽狀態,會過期)
chain_patrol 手動跑夜巡並出報告
chain_about 只讀查詢「關於 X 我知道什麼」(被想起次數、確認次數、生命週期等);調用不算「想起」
chain_conflict 比較指定 id 或同池矛盾候選

會話視圖提供 「思維鏈」 Tab:3D 星雲圖,八個記憶池各成一簇(另有決策 / 元記憶虛擬區),可拖拽旋轉、滾輪縮放、點節點看詳情。

檢索與可選語義路徑

chain_recall 與每輪「這句話讓我想起來」共用檢索:IDF 罕見詞命中與字符二元組重合兩路排名,再按 RRF 融合;沒有詞面證據的條目不進候選。若安裝可選依賴 @huggingface/transformers(約 400 MB),可走語義檢索;未安裝時語義路徑自動退回關鍵詞路,不報錯。

夜巡與自動喚醒

每天 18:00 後(可調 patrolHour),插件在滿足條件時自動跑一次夜巡,報告寫入 ~/.dsh/memories/.chain-shared/patrol/YYYY-MM-DD.md,含久未命中、疑似重複、矛盾候選、海馬體待整理等小節。默認會通過 DSH HTTP 接口向最近說話的那個會話投遞「請審覈報告」消息;可在 ~/.dsh/memories/.chain-shared/settings.json 中設置 wakeSessionId 或 wakeEnabled: false。

安裝與啓用

插件以當前 DSH 進程權限運行,安裝前應自行審閱 GitHub 源碼 與 MIT 許可證。數據默認落在本地 ~/.dsh/memories/.chain-shared/,README 說明插件不聯網、不發遙測。

依賴要求:Node ≥ 20、運行中的 DSH(任意 profile)。建議在插件目錄內安裝依賴(pnpm add link: 不會替插件安裝其自身依賴):

  1. 將插件源碼放到 ~/.dsh/plugins/dsh-chain-shared(來源見上述 GitHub 倉庫)。
  2. 在插件目錄執行:
cd ~/.dsh/plugins/dsh-chain-shared
npm install --registry=https://registry.npmmirror.com
  1. 掛進 profile 並重啓 DSH(插件清單變更不熱加載):
cd ~/.dsh/profiles/web
pnpm add link:~/.dsh/plugins/dsh-chain-shared

README 亦提到可用 dsh plugin add;具體參數以官方文檔爲準,勿在未覈對前自行拼接命令。

可選:@deepseek-ai/schemastery 未裝時插件仍可運行,但思維鏈畫布右上角設置按鈕可能無反應;@node-rs/jieba 未裝時檢索會靜默降級。

如需限定記憶只對部分會話生效,可在啓動 DSH 前設置環境變量 DSH_CHAIN_TARGET_SESSION_IDS(逗號分隔會話 id);缺省爲空表示全會話共享。

首次安裝時記憶庫爲空,需在對話中讓模型寫入,或調用 chain_append 寫第一條。

典型用法

寫入一條判斷

在對話中讓助手調用 chain_append,或自行通過工具接口寫入。字段包括判斷、依據、猶豫、結論、標籤與權重;同一決策可用 eventId 串起前後條目。

按當前話召回

用戶提問或陳述時,插件會用當前句做檢索,把命中條目注入「你這句話讓我想起來」段。需要主動查庫時調用 chain_recall。

查看「關於某主題我知道什麼」

調用 chain_about(只讀),瞭解某主題相關條目的被想起次數、人工確認、是否被取代等,便於判斷可信度。

調整池參數與注入預算

打開「思維鏈」Tab → 右上角 設置:可改八個池的寬限 / 半衰期 / 歸檔、injectMaxChars、coreMax、patrolHour。改完經插件接口 /chain-shared/api/settings 立即生效,並寫入 ~/.dsh/memories/.chain-shared/settings.json。

手動夜巡

# 在插件或文檔約定的方式下調用工具
chain_patrol({ apply: true })  # 手動跑夜巡;apply 爲 true 時可顯式執行權重歸整(見 README)

喚醒行爲自檢(不發消息):

node lib/wake.mjs check
node lib/wake.mjs prompt --dry

適用場景與注意

更適合:希望 DSH 在多輪、長任務中保留決策理由而非僅結論;願意通過工具或對話主動維護記憶;接受全會話共享一條鏈(單用戶或多會話同一 harness 場景)。

不太適合(README 自述):指望「全自動記住一切」;不想讓模型在提示詞裏看到自己的舊判斷;需要強會話隔離(應使用隔離版而非本包)。

使用上需注意:寫入依賴模型判斷,可能漏記或記錯;注入會把歷史判斷塞回系統提示,需自行評估隱私與提示詞長度;核心層有上限,長期「我是誰」類規則仍建議配合 AGENTS.md。

結尾

dsh-chain 把 DSH 的記憶從「發生了什麼」推進到「爲什麼這麼定」:JSONL 持久化、按池遺忘、每輪字符預算注入、檢索召回與 3D 星雲瀏覽,再加夜巡報告與可選自動喚醒,適合在 Harness 生態裏做長期決策鏈沉澱。

DSH 生態強調「一切皆插件」;SkillHub 爲社區目錄站點,與 DeepSeek / 幻方無官方從屬關係。

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

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

小夜