前言¶
在 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。
工作流程¶
- 從 session/event(推理、文本、工具參數與結果、錯誤)出發。
- 用從記憶庫與項目文檔派生的詞表做機械關鍵詞匹配(不調用模型)。
- 經過門控:每輪每詞一次、每條記憶一次、冷卻、每輪配額等。
- 本地小模型判斷「這條經驗是否會改變下一步該怎麼做」(串行,約 0.4 s)。
- 就緒結果在下一個 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。
典型用法¶
驗證是否在工作¶
- 在聊天中執行
/experience-recall:輸出詞表規模、掃描/命中計數、裁決接受/拒絕/未答次數(含延遲與重試)、注入次數,以及最後一條通過的卡片。 - 查看磁盤日誌:
$DSH_HOME/dsh-experience-recall/logs/observe.ndjson,記錄trigger/recall/verify/inject/term-cooldown等,便於回答「爲何注入或未注入」。 - 安裝自檢:
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 倉庫。