dsh-experience-recall:跨項目把記憶裏的經驗在合適時機注入 DSH

前言

在 DeepSeek Harness(DSH)裏做智能體開發時,模型會在當前會話裏推理、調工具、踩坑再修正;但這些結論往往只留在這一次任務裏。換到另一個倉庫或另一個 profile,同樣的坑可能再踩一遍。社區裏常見做法是依賴會話上下文、手動粘貼筆記,或單獨查記憶庫——步驟多,且很難在「下一步就要決策」的前一刻自動出現。

下面介紹維護者 OverDustD7 發佈的 dsh-experience-recall(npm 包名 dsh-experience-recall,GitHub OverDustD7/dsh-experience-recall)。它屬於 DSH 社區插件目錄中的「記憶」類插件:監聽當前會話裏的推理、工具參數與結果、錯誤等事件,當運行中的工作與記憶庫裏曾在其他項目裏學過的條目對上時,在下一步 agent/pre-step 邊界前注入一條短消息。檢索與相關性判斷默認都在本機完成;注入內容仍會佔用宿主模型的上下文與輸入 token。

這是什麼

一句話定位: Cross-project experience recall for DeepSeek Harness——工作匹配到別處已學經驗時,把那條經驗作爲短消息注入下一步之前;全程可本地運行,由本地小模型做相關性裁決。

插件以 profile bundle 形式接入 DSH(Cordis 插件)。當前 npm 版本爲 0.8.2(見倉庫 package.json),許可證 MIT。SkillHub 目錄頁:dsh-experience-recall(社區站點,與 DeepSeek / 幻方無官方從屬關係)。

核心功能

注入長什麼樣

README 給出真實會話中的注入示例(節選):標題爲「可能相關的歷史經驗 · 來自其他項目」,正文刻意壓縮成一行可複用結論,並帶記憶 id,便於模型按需用 mnemon_recall / document_search 拉全文。每輪最多少量條,單條約 1.2 KB。

工作流程

  1. 從 session/event(推理、文本、工具參數與結果、錯誤)出發。
  2. 用從記憶庫與項目文檔派生的詞表做機械關鍵詞匹配(不調用模型)。
  3. 經過門控:每輪每詞一次、每條記憶一次、冷卻、每輪配額等。
  4. 本地小模型判斷「這條經驗是否會改變下一步該怎麼做」(串行,約 0.4 s)。
  5. 就緒結果在下一個 agent/pre-step 邊界追加;邊界不等待——若檢索或裁決未完成,本步照常進行,卡片可能晚一步到達。無法解析或不確定的裁決會丟棄,不會憑猜測注入。

詞表不是手寫:來自記憶庫(作者標籤/實體與正文專有名詞)和項目文檔(含各文檔 ## 小節),並過濾無法區分的詞。新的記憶在 mnemon_* 工具調用後會自動納入。

依賴與行爲邊界

需求 作用 缺失時
DSH >= 0.1.5-rc.1 宿主 —
Node >= 22.5(推薦 24.x) 經 node:sqlite 讀記憶庫;Node 22 需 --experimental-sqlite,23.4 起無需該 flag 插件仍可運行,但記憶派生詞表爲空(文檔與種子詞仍可用)
dsh-mnemon + mnemon CLI 索引與語義檢索 無 CLI 時仍可能觸發已索引卡片,但 CLI 檢索不可用
本機 Ollama(默認 http://localhost:11434,模型默認 qwen3.5:9b) 生成卡片與裁決相關性 可觀察、可寫日誌,但不注入——拒絕猜測

注入消息使用 DSH v4 的 producer-owned source(kind: "plugin:dsh-experience-recall"),並與舊版 { kind: "plugin", plugin } 包裝兼容,便於可見性、去重與再注入距離等邏輯。

安裝與啓用

官方安裝命令(README 原文;web 爲 DSH Web UI 使用的 profile 名,若你改名請替換):

dsh plugin --profile web add dsh-experience-recall

也可跟蹤 GitHub 或本地開發目錄(同樣經 profile 轉發到包管理器):

dsh plugin --profile web add github:OverDustD7/dsh-experience-recall
dsh plugin --profile web add link:/path/to/dsh-experience-recall

安裝後重啓 dsh web。安裝過程會把包寫入 profile 的 dsh.profile.bundles,不要再手動重複添加同一 loader id,否則會報 duplicate loader entry id。

可選配置寫在 bundle 行的 config 中(包內 cordis.patch.yml 或 $DSH_HOME/profiles/<name>/cordis.patch.yml,後者優先),例如:

- id: experience-recall
  config:
    maxInjectionsPerTurn: 0     # 僅觀察,不注入
    localModel: 'qwen3.5:9b'

常用鍵包括:enabled、stateDir(默認 $DSH_HOME/dsh-experience-recall)、localModel / localEndpoint、mnemonCliPath、mnemonDataDir / mnemonStore、cardBuilder(mechanical 可跳過模型建卡)等;完整表格見倉庫 README。

典型用法

驗證是否在工作

  1. 在聊天中執行 /experience-recall:輸出詞表規模、掃描/命中計數、裁決接受/拒絕/未答次數(含延遲與重試)、注入次數,以及最後一條通過的卡片。
  2. 查看磁盤日誌:$DSH_HOME/dsh-experience-recall/logs/observe.ndjson,記錄 trigger / recall / verify / inject / term-cooldown 等,便於回答「爲何注入或未注入」。
  3. 安裝自檢:
node node_modules/dsh-experience-recall/tools/check-install.mjs

若 state 目錄不在默認位置,可加 --cache / --log。

新裝後建議先跑幾分鐘真實任務:首次啓動會用本地模型爲每條記憶建卡(數百條記憶約 5 分鐘),詞表在建卡完成前會偏薄。

切換本地小模型

/experience-recall model                    # 列出 Ollama 已安裝 chat 模型並卡片選擇
/experience-recall model qwen3.6:35b-a3b    # 直接指定,跳過卡片
/experience-recall help                     # 子命令幫助

裁決與建卡每次調用讀取當前模型,切換後無需重啓;選擇會寫回 profile patch。未安裝的模型名會提示,裁決失敗時卡片會回退到機械構建器;已建好的卡片 wording 不會隨切換而改變。

適用場景與注意

適合誰: 已在 DSH 裏用 mnemon 等能力沉澱跨項目經驗、又希望當前任務在關鍵詞與上下文對齊時自動看到「別處學過的結論」的開發者。強調本地裁決、可審計日誌,與「一切皆插件」的 DSH 生態一致。

務必注意:

  • 插件以當前 dsh 進程權限運行,安裝前請自行審閱源碼與 MIT 許可證,並確認 Ollama、mnemon 數據目錄路徑符合你的安全策略。
  • 無本地模型時 deliberately 不注入,避免幻覺式「回憶」。
  • 注入仍消耗宿主模型 token;可通過 maxInjectionsPerTurn: 0 等配置只觀察不注入。

結尾

dsh-experience-recall 把「其他項目裏已經驗證過的經驗」從被動查庫變成在關鍵步驟前的短消息提醒:機械匹配 + 門控 + 本地小模型裁決,且全過程可對照 observe.ndjson 復盤。目錄與詳情見 SkillHub 插件頁,源碼與完整配置說明見 GitHub 倉庫。

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

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

小夜