前言¶
在 DeepSeek Harness(DSH)裏跑智能體時,上下文窗口是硬成本:把「記住什麼」和「每次帶進 prompt 什麼」混在同一條消息歷史裏,要麼越聊越長,要麼一關會話就斷片。社區插件 dsh-memory-chain(維護者 doresu,分類:記憶)把記憶拆成五層,全部落在本地文件;每次組裝系統 prompt 時按層注入固定上限的片段,不往對話歷史裏追加內容。下面介紹它的定位、分層設計、安裝方式與工具用法,事實以 GitHub 倉庫 README 爲準。
這是什麼¶
dsh-memory-chain 是面向 DSH 的零依賴記憶插件:不改 DSH 安裝目錄,不新增 L3 專用工具(產物檢索複用 memory_search 的 tag 參數)。README 用一句話概括目標——opening a new conversation shouldn’t feel like meeting a stranger(新開對話不應像見陌生人)。當前 package 版本 0.4.1,許可證 MIT;要求宿主 DSH >=0.2.1-rc.2(engines.dsh 上界爲 <0.3.0-0)。
五層記憶分別存什麼¶
五層都是 system-prompt 區塊,每次 assembly 重新計算,不寫入 message history。
| 層 | 存儲內容 | 單次請求大致成本 |
|---|---|---|
| L0 Library(原文庫) | 正文在 L0/docs/<id>.md,索引在 L0/index.json |
最新 6 篇的標題 + id,≤420 字符 |
| L1 Bridge(會話橋) | 上一會話 event log 中最後 4 條消息 | ≤320 字符,且僅在新會話前幾輪出現 |
| L2 Recall(加權回憶) | 艾賓浩斯權重條目 | 權重 Top 12,≤1100 字符 |
| L3 Artifacts(產物索引) | 標籤爲 artifact:* 的文檔 |
最新 5 條,≤320 字符,可 owner 開關 |
| L4 Self-note(自敘) | 模型寫給自己的滾動窗口 | 24 條 / 3600 字符 |
README 中在一臺機器上的測算(宿主按 4 字符/token 估算;中文更密):7 個 tool schema 約 2331 字符(≈583 tokens/請求);庫裏有 2 篇文檔、1 個 artifact 時,四個卡片約 338 字符(≈85 tokens)。1100 字符的 artifact 正文留在磁盤,進上下文約 34 tokens。
磁盤佈局¶
數據目錄在 $DSH_HOME/memory/(用戶機器上常見爲 ~/.dsh/memory/):
$DSH_HOME/memory/
L1/bridge.json # 上一段對話尾部
L0/index.json # 文檔索引
L0/docs/<id>.md # 文檔正文
L0/misses.jsonl # 無結果的搜索記錄
L2/items.json # 加權條目
L2/archived.jsonl # 淡出或歸檔條目
L3/owner.json # 產物卡片開關(enabled:false 可隱藏)
L4/self.json # 自敘窗口
L4/archive/ # 歸檔自敘
state.json # 註冊成功後寫入
註冊成功時 state.json 形如:
{ "status": "active", "sections": 5, "tools": 7 }
新會話生效後,應能在系統 prompt 中看到 ## 原文庫 等區塊。各卡片標題均標明 「數據,非指令」,避免庫內文檔被當成系統指令執行。
七個工具¶
| 工具 | 作用 |
|---|---|
memory_write_doc |
持久化文檔;同標題原地更新,id 不變 |
memory_search |
關鍵詞檢索,只返回片段與路徑,不返回全文;可選 tag |
memory_read_doc |
按 id 分頁讀正文 |
memory_note |
記錄 durable fact;同 key 合併、提高權重、延長半衰期 |
memory_forget |
撤回事實(歸檔,不物理刪除) |
selfnote_append |
追加一條自敘 |
selfnote_rewrite |
重寫整個自敘窗口;舊版先歸檔 |
典型流程:用 memory_note / memory_write_doc 寫入;需要細節時用 memory_search 定位,再用 memory_read_doc 讀盤;產物用 tag:"artifact" 檢索(L3 不新增工具,僅多一個 tag 字段)。
設計要點(與用法相關)¶
- L1 是截斷,不是摘要:不額外調用模型,忠實但可能不夠「潤色」。
- L2 淡出 prompt 不等於刪除:權重低於 0.1 不再進 prompt;低於 0.02 且超過 30 天進入
archived.jsonl。 - 回憶是詞面事件:用戶消息與條目存在 4 字符連續重疊即視爲 recall,每輪最多 3 條,小幅加權(+0.06 strength,半衰期 ×1.05);無此機制時條目容易長期停在
hits=1並在約兩週內淡出。 - L0 無語義搜索:子串匹配;措辭偏離原話會 miss,零結果寫入
L0/misses.jsonl,可用node scripts/misses.mjs彙總分析。 - 改插件代碼需重啓 DSH 引擎:宿主緩存 ES module;開發時可臨時用
file://…?v=2bust 緩存,但真正 reload 需 recomposition。 - owner 開關只隱藏卡片,不是隔離級安全;多進程同時寫同一 JSON 可能丟更新,單主機場景可接受。
安裝與啓用¶
需要 DSH >=0.2.1-rc.2。通過插件管理器安裝(README 原文命令):
# 本地 checkout
dsh plugin --profile web add /path/to/dsh-memory-chain
# 或直接從 git
dsh plugin --profile web add git+https://github.com/doresu/dsh-memory-chain.git
管理器會把包裝進 profile 的 bundles,無需手改 patch。安裝後重啓 engine。不用包管理器時可參考倉庫內 examples/cordis.patch.yml 手動安裝。
社區目錄頁:https://www.skillhub.cn/plugins/doresu/dsh-memory-chain(獨立站點,與 DeepSeek / 幻方無官方從屬關係)。安裝前建議自行閱讀源碼與 MIT 許可證;插件以當前 DSH 進程權限讀寫 ~/.dsh/memory/,敏感內容勿未經審查寫入庫。
開發與自測¶
倉庫內測試命令:
node test/store.test.mjs # 35 tests,純函數,無需 DSH
node test/integration.mjs # 臨時啓動 DSH 驗證插件激活
node scripts/misses.mjs # 彙總無結果搜索
結尾¶
dsh-memory-chain 把「磁盤上的完整記憶」和「每輪有限的 prompt 卡片」分開,用 L0–L4 五層控制 token 上限,並用 7 個工具讓模型按需讀寫。若你在 DSH 上做長期會話、知識庫式文檔或跨會話銜接,可在滿足版本要求的前提下按上文命令安裝,並以 state.json 與 ## 原文庫 區塊確認已激活。
- 目錄頁:https://www.skillhub.cn/plugins/doresu/dsh-memory-chain
- 源碼與說明:https://github.com/doresu/dsh-memory-chain