前言¶
在 DeepSeek Harness(DSH)裏做長期任務時,模型默認只看見當前會話上下文。把偏好、踩坑記錄、工具說明拆成零散筆記,要麼每次手動粘貼,要麼讓模型自己 grep 全文——前者費手,後者容易漏讀索引、誤改正文。社區插件 dsh-memory(維護者 mounta1n-18,分類:記憶)把「跨對話記憶」落成本機 Markdown 加一張索引表,再配管理界面和仿軌跡的記憶日誌;日常只在系統提示詞裏佔一行分類大綱,壓縮時才按需調用模型。
這是什麼¶
dsh-memory 是 DSH 的零依賴、無構建插件(Host 半 index.js + Client 半 client.js)。數據在 ~/.dsh/memory/,不上傳、不埋點;除壓縮流水線外,不會把記憶正文批量發給模型。npm 包名爲 @local/dsh-memory,當前版本 1.1.1,許可證 MIT。
核心功能¶
一行大綱進系統提示詞¶
插件向系統提示詞注入 memory:outline(order 9890):按 【教訓】/【資料】/【說明書】/【項目記憶】/【其它】 分組,教訓永遠排第一。索引來自 MEMORY.md;停用條目不出現。關鍵詞口徑是「以後什麼場景該想起它」,不是摘要。存在啓用的教訓時,大綱末尾會追加一句:動手前先過一遍【教訓】,命中場景就先 memory_read 再開工。
另有 memory:tidy-status(order 9900):平時無輸出,有待審批改稿或上次整理失敗時才一行告警。
四個記憶工具¶
模型可用:
memory_read:按名稱 / 關鍵詞 / 描述命中,只返回正文memory_write/memory_update/memory_delete:對鎖定條目一律拒絕
首關鍵詞必須是 資料、教訓、說明書、其它 之一;項目記憶只能經設置頁或 /remember 人工通道創建。宿主對記憶正文路徑做閘門:grep / glob 不能直接掃正文,須走 memory_read。
教訓三段式¶
寫教訓時強制結構:① 場景;② 錯誤鏈條;③ 繞開與修復。關鍵詞應寫「犯錯前正在做的任務」,不宜只寫 HTTP 狀態碼之類事後症狀。
設置頁「記憶管理」¶
Client 注入設置區:搜索(去抖 250 ms)、分類摺疊、新建/刪除、啓用與鎖定、待審批改稿的雙欄 diff、沙漏觸發壓縮、回憶率與「待刪除」候選(窗口內未回憶且複覈日超 14 天等規則,由插件現算,不寫進索引表)。
記憶日誌頁¶
會話頂部增加「記憶」頁籤(conversation.view,與對話、軌跡並列):按會話列出 memory_* 調用與 /remember 歸納,操作分色、右側詳情含完整正文;帶 callId 時可跳回軌跡裏對應工具調用。DSH 軌跡行類型是固定枚舉,第三方不能插新行類型,故做成獨立視圖。
回憶統計與壓縮流水線¶
- 一輪 = 用戶按一次回車(
user/message且source.kind === 'user');工具調用、子代理等不計數。 - 壓縮觸發:全局用戶輪每滿 100 輪,或設置頁點沙漏。按窗口內回憶次數與複覈間隔決定輕調整 / 中刪減 / 僅標待刪除;鎖定與已有待審改稿不送模型。壓縮使用
deepseek-flash,顯式thinking: { type: 'disabled' },response_format: json_object。
/remember 命令¶
客戶端註冊斜槓命令(大腦圖標):向 POST /dsh-memory/remember 提交 sessionId,優先借 DSH 的 llm 服務,在上下文末尾加隱藏指令並附帶 memory_write 工具聲明,把當前對話歸納成一條記憶;狀態顯示在輸入框右側控件行。
數據面(本機目錄)¶
路徑:~/.dsh/memory/
| 路徑 | 作用 |
|---|---|
MEMORY.md |
7 列索引表(文件、關鍵詞、啓用、類型、何時讀、複覈、受保護),唯一索引 |
*.md |
單條記憶,YAML 頭 + 正文 |
.tidy/status.json |
上次整理/壓縮相關記錄(不含待審批份數的事實源) |
.tidy/proposed/*.md |
待審批改稿(僅正文) |
.tidy/turns.json / recall.json |
用戶輪計數與回憶流水 |
.tidy/compress.json |
壓縮流水線狀態 |
.tidy/calls.json |
記憶工具調用流水(供「記憶」頁籤,最多 400 條) |
改 Host 後需重啓 DSH;改 Client 刷新頁面即可。
安裝與啓用¶
官方唯一支持路徑是 DSH 的 plugin_manager,安裝目標爲本倉庫在磁盤上的絕對路徑(不是 git clone 後憑名稱拼接的快捷命令):
plugin_manager { "action": "install_bundle", "target": "<本倉庫的絕對路徑>" }
卸載:
plugin_manager { "action": "remove_bundle", "target": "@local/dsh-memory" }
維護者提供的自檢(不碰真實記憶庫):在插件目錄執行 node tools/selfcheck.mjs,改 Host 邏輯後建議先跑再重啓。
典型用法¶
- 安裝並重啓 DSH,打開設置 →「記憶管理」,按分類新建或導入記憶;教訓類按三段式填寫,關鍵詞寫場景觸發詞。
- 新會話裏模型系統提示詞已含大綱;需要細節時讓模型調用
memory_read(名稱或關鍵詞),勿讓其直接 read/grep 記憶正文文件。 - 長任務結束後在對話裏執行
/remember,或等每 100 輪自動壓縮判定;有待審 diff 時在設置頁批准或拒絕。 - 在會話「記憶」頁籤查看本輪及歷史
memory_*與歸納記錄,必要時「在軌跡中定位」覈對工具調用。
適用場景與注意¶
適合:需要在本機沉澱分類記憶、控制提示詞 token、用回憶率驅動整理,且願意配合 DSH 插件生態的開發者。
注意:
- 插件以當前 DSH 進程權限運行,安裝前應閱讀 GitHub 源碼 與 MIT 許可證,確認可接受數據落盤位置與壓縮時向所配模型發送的正文。
- 依賴宿主私有槽位(
settings.section、conversation.view、commandUi.register等),DSH 大版本升級後需複覈。 - 設置頁導航圖標借用了外殼 section id
archived-sessions以匹配歸檔圖標樣式。 - README 標明星標爲社區倉庫狀態;目錄頁與 GitHub 以維護者文檔爲準。
結尾¶
dsh-memory 把跨會話記憶收斂成「索引一行 + 工具讀寫 + 人工審閱 + 可選壓縮」,並在 UI 裏補齊管理與可追溯日誌。進一步瞭解可訪問社區目錄頁與倉庫: