在 DeepSeek Harness (DSH) 的開發與使用中,代理往往僅能在單次會話內保留上下文,會話結束後即丟失重要信息。nattocb/dsh-plugin-memory 插件旨在解決這一問題,它爲 DSH 提供了一套持久化的五層記憶模型,使代理能夠跨會話“記住”用戶信息和項目細節。
核心功能¶
該插件通過兩層 Cordis 接口實現功能:在 agent/pre-step 階段注入相關記憶,並通過 ctx.tools.register 註冊 6 個專用工具。
五層記憶模型¶
記憶被結構化地分爲五個層級(L0-L4),每一層都有獨立的寫入路徑、截斷預算和注入規則:
- L0 用戶身份:位於 ~/.dsh/AGENTS.md,由用戶自行管理,插件不干預。
- L1 個人資料:存儲於 profile.md,包含工作背景、個人背景、當前關注和近期動態,支持版本輪換。
- L2 項目上下文:包含全局索引 MEMORY.md 和具體的 <topic>.md 主題文件。
- L3 每日日誌:以追加模式記錄每日內容,文件名爲 YYYY-MM-DD.md。
- L4 技能:繼承自現有 DSH 技能體系。
索引與主題拆分 (L2)¶
爲了保持文件輕量且易於管理,MEMORY.md 僅包含一行指針(不超過 150 字符),實際內容存儲在對應的 <topic>.md 文件中。索引文件有硬性限制(200 行或 40,000 字符),確保冷啓動時的上下文成本可控。
6 個代理工具¶
插件通過 ctx.tools.register 註冊以下工具,供代理在運行時調用:
- memory_write:寫入或覆蓋主題文件,可選添加索引行。
- memory_read:讀取主題文件或全局索引。
- memory_search:在全局/項目/雙向範圍內進行關鍵詞搜索。
- memory_daily:向當前工作目錄的每日日誌文件追加一行。
- memory_forget:刪除主題文件及其索引指針。
- memory_profile:讀取或合併更新個人資料。
相關性注入與自動提取¶
- 相關性注入:每次步驟執行時,插件會根據最新查詢選擇相關主題文件,並以
<system-reminder data-role="memory">塊的形式插入上下文。若無 LLM 路由,則使用關鍵詞評分。 - LLM 自動提取:當會話進入空閒狀態(60 秒防抖)時,插件會掃描最近的事件,利用 LLM 嘗試提取新的主題文件和索引行。
安裝與啓用¶
安裝過程需指定已啓用的插件配置文件(如 web)。安裝後需重啓服務。
dsh plugin --profile web add github:NattoCB/dsh-plugin-memory
重啓 dsh web 後,插件會在啓動時初始化內存存儲根目錄:
- 全局存儲:~/.dsh/memory/
- 項目存儲:<cwd>/.dsh/memory/
配置項¶
插件支持通過 DSH Bundle 配置,主要控制注入、提取和相關性篩選的行爲:
| 配置項 | 默認值 | 說明 |
|---|---|---|
enableEntryInjection |
true |
每次會話開始時是否插入記憶引導說明。 |
enableRelevance |
true |
每個步驟是否追加相關主題文件。 |
enableExtraction |
true |
是否在空閒時觸發 LLM 自動提取。 |
maxRelevant |
5 |
每次步驟最多展示的相關文件數。 |
relevanceTopK |
8 |
LLM 排序時的候選文件數量。 |
llm.provider |
"" |
用於提取/排序的 LLM 提供商,留空則僅使用關鍵詞。 |
llm.model |
"" |
對應的模型名稱。 |
使用示例¶
安裝並重啓 dsh web 後,你可以通過以下方式使用記憶功能:
- 告知記憶:直接告訴代理一些值得記住的信息,或讓代理在處理完任務後自動提取。
- 檢查記憶根目錄:稍後打開會話時,檢查
~/.dsh/memory/或項目目錄下的.dsh/memory/,查看MEMORY.md和生成的主題文件。 - 使用工具:代理可以利用註冊的工具(如
memory_search)主動檢索歷史記憶。
注意事項¶
- 無 LLM 依賴:即使未配置
llm路由,插件依然可用。此時僅保留條目注入、關鍵詞相關性和個人資料輪換功能,自動提取和 LLM 排序將被禁用。 - 數據即上下文:記憶文件通過
fs/promises直接寫入,是代理讀取的上下文,而非權限授予機制。 - 純插件架構:該插件不提供 HTTP API 或 GUI 面板,完全依賴 DSH 的內部接口運行。
- 路徑限制:所有寫入操作被限制在存儲根目錄內,不涉及用戶 UID 層級。
生態背景¶
DeepSeek Harness 採用“一切皆插件”的架構。此插件由社區開發者 NattoCB 維護,旨在豐富 DSH 生態。關於該插件的完整目錄與源碼,可參考其 GitHub 倉庫。