前言¶
在 DeepSeek Harness(DSH)裏跑智能體,上下文窗口遲早會滿:要麼靠宿主粗暴截斷,要麼把整段對話或超長工具輸出反覆塞進 prompt,既費 token 也容易把模型帶偏。社區裏常見的做法是外掛向量庫或手工摘抄筆記,但檢索邊界、遺忘策略和「死記憶復活」往往各管各的,和宿主會話狀態也脫節。
下面介紹維護者 382quaii 發佈的記憶類插件 dsh-layers-hippocampus(npm 包名 dsh-layers-hippocampus,倉庫名 dsh-Layers-Hippocampus,Hippocampus 雙 p)。它在 DSH 側提供分層長期記憶:追加式事件日誌、可重建索引、按天日記、獨立語義層、L2.5 趨勢隔離、離線知識圖譜,以及完整 Web 面板;運行時 Host 半邊零 npm 依賴(僅用 Node 內置模塊,React 由 Harness 提供)。當前資料版本 1.5.6,許可證 MIT,要求 Node >= 22。
這是什麼¶
一句話定位:給 DSH 智能體的「賽博海馬體」——以唯一真相源(追加式 JSONL 事件日誌)爲中心,索引、日記、活躍標籤、知識圖譜都是可丟棄、可重建的投影;寫入走事件溯源,檢索帶衰減與圖譜聯想,刪除走兩階段倒計時並帶墓碑防復活。
插件在 SkillHub 目錄分類爲「記憶」,GitHub 倉庫:https://github.com/382quaii/dsh-Layers-Hippocampus。詳細設計見倉庫內 docs/ARCHITECTURE.zh.md。
核心功能¶
分層與數據流¶
- L1 事件日誌:追加式 JSONL 代際 +
CURRENT指針。 - L2 索引:標籤表、活躍集合、日記、墓碑;A/B 雙緩衝,讀者看不到半成品。
- L1.5 標籤層級樹:按
/解析爲 root / mid / leaf;root 受保護,leaf 引用歸零可修剪,mid 失去葉子後進入寬限期(幽靈節點),召回時對僅經寬限 mid 的命中只回元數據,引導deep_raw。 - L2.5 趨勢隔離:短命觀察,經晉升窗口與突發檢測才升級爲長期記憶。
- L3 語義層:摘要與原始日誌生命週期獨立。
- 圖譜:標籤共現網絡的離線投影;
recall命中 Tag 時可讀取state/graph.json,取最強 3 個鄰居並以 0.5 懲罰係數進入候選池。
上下文被 evict 時,引擎可將最近一批折成 folded_summary 寫回 L1(標籤 status:folded);自然月結束後 maintain() 可壓成 status:monthly 月記,不參與日常衰減,模糊時間查詢會優先召回。
工具面(memory_*)¶
宿主暴露一組以 memory_ 爲前綴的工具,README 摘要如下:
| 工具 | 用途 |
|---|---|
remember |
追加長期記憶(內容哈希冪等);可選 media_url + media_type;pinned: true 須帶 tags |
checkpoint |
記錄唯一進行中的重任務(task_id、progress 0–100) |
space_transfer / transfer_to_global |
跨空間遷移,須 user_approved: true |
recall |
關鍵詞 + 標籤檢索,含圖譜聯想;寬限 mid 僅元數據;mode: "deep_raw" 受限 raw 掃描 |
capture |
一輪原始對話進取證層(門控與預算,不進索引) |
reinforce |
確認記憶並推進複習檔位(間隔 1,2,4,7,15,30 天) |
forget / restore |
兩階段刪除與取消 |
admin |
status、maintain、active_tags、semantic 等 |
系統提示會注入靜態段 memory:policy,引導模型在需要歷史、文件或系統信息時優先 memory_recall,避免盲目讀超長外部文件。本插件工具返回超長 JSON 時由 slimToolPayload 寫入 raw 並返回瘦身版,可用 memory_recall(mode="deep_raw", hash="…") 按 sha256 恢復。
原始回合(raw)與確定性遺忘¶
- 獨立日分片
raw/YYYY-MM-DD.jsonl,不進主日誌與索引;deep_raw讀出前對 snippet 脫敏(Bearer、sk-、長 base64 →[redacted]),本地磁盤仍爲明文。 forget默認掛起delete.graceHours(資料示例 24h),到期由maintain()推進 tombstone → archive → consolidation → purge;content_hash冪等與event_id身份紀律避免重複寫與遺忘後復活。- v1.5.0 起對「超級大標籤」有索引截斷(默認每標籤最多 500 postings)與檢索降級,強制
deep_raw帶時間窗等治理,防止上下文與內存洪峯。
Web 面板與多空間¶
插件含 Web UI(dsh.client.platform: web),設置頁可遷移 dataDir(後臺拷貝與校驗,併發由 .migration.lock 阻斷)。v1.5.0 文檔還涉及多空間路由與會話交接能力,與 space_transfer 系列工具配合使用。
安裝與啓用¶
DSH 生態主張「一切皆插件」;SkillHub(https://www.skillhub.cn/plugins/382quaii/dsh-Layers-Hippocampus)是社區目錄站點,與 DeepSeek / 幻方無官方從屬關係。安裝方式以 README 爲準。
從 GitHub 指定版本:
pnpm add "github:382quaii/dsh-Layers-Hippocampus#v1.5.6"
從 npm:
pnpm add dsh-layers-hippocampus
通過插件管理器(README 推薦示例):
plugin_manager action=install_bundle target="C:\Users\86135\Documents\deepseek-harness\default-workspace\dsh-memory"
安裝後 profile 會插入類似配置:
- insert:
- id: hippocampus
name: "dsh-layers-hippocampus"
config:
briefing: true
Host 半邊隨下一次宿主啓動生效;UI 在頁面加載時從 boot graph 取得。冷啓動後可用倉庫腳本確認路由:
node scripts/wait-for-routes.mjs
典型用法¶
經過上面的步驟啓用插件後,智能體在對話中通過工具調用操作記憶,而不是直接改磁盤文件。常見路徑如下。
- 寫入可檢索記憶:調用
memory_remember,爲條目打標籤(層級標籤如tech/frontend/vue3);需要「永置頂」的經驗須pinned: true且帶 tags,否則返回MEM_E_PINNED_TAG_REQUIRED。 - 日常回憶:調用
memory_recall,用關鍵詞與tags檢索;需要原話時用mode: "deep_raw",並按要求提供start_time/end_time(大標籤場景可能強制時間窗,錯誤碼如MEM_E_TIME_RANGE_REQUIRED)。 - 長任務進度:調用
memory_checkpoint更新唯一活躍任務的progress;7 天未刷新可由maintain()自動降級。 - 確認與遺忘:調用
memory_reinforce推進複習;誤刪前用memory_restore,否則memory_forget進入掛起倒計時。 - 運維:調用
memory_admin action="status"或action="maintain"查看狀態、觸發維護(raw TTL、月記、待刪隊列、標籤樹修剪等)。
跨空間遷移必須人類批准:space_transfer / transfer_to_global 須 user_approved: true,否則引擎攔截。
適用場景與注意¶
適合誰:需要在本機 DSH 工作區內長期沉澱決策、標籤化知識、任務 checkpoint,並希望在上下文 eviction 後仍能通過 recall / 圖譜聯想 / 月記召回的開發者;也適合需要 Web 面板查看存儲、圖譜與維護狀態的場景。
務必知曉:
- 插件以當前 dsh 進程權限讀寫數據目錄;安裝前應閱讀源碼與 MIT 許可證,確認數據路徑與隱私策略(含 raw 明文、跨空間遷移的隱私詞攔截規則)。
media_url僅接受 http(s) 或絕對路徑;內聯超長 base64 會被拒絕寫入。deep_raw有raw.maxScanTurns、raw.maxResultTokens等預算,超大日分片存在「尾掃偏置」:一次掃描可能只看到該分片最新 N 條,需調參或分頁時間窗;返回體中的truncated與notes會說明未掃完,不會靜默假裝無數據。- 超級大標籤檢索會被降級爲元數據或最近少量摘要,避免把數千條記憶一次性打進 prompt。
結尾¶
dsh-layers-hippocampus 把長期記憶做成可重建的分層投影:追加日誌、確定性遺忘、圖譜聯想與 raw 黑匣子分工明確,並自帶 Web 面板與多空間遷移門禁。若要在 DSH 裏替換「無限堆上下文」或鬆散筆記,可從目錄頁與倉庫 README 的安裝命令起步,再按 memory_* 工具鏈接入智能體工作流。