前言¶
在 DeepSeek Harness(DSH)裏做智能體或長期項目時,上下文窗口和「壓縮上下文」只能保證當前對話塞得進窗口;被壓掉的內容不會以可讀形式留在會話外。若希望幾個月前的決定、偏好和實體關係還能被找回,且數據落在自己可控的目錄裏,而不是依賴向量庫或二進制存儲,就需要一層與壓縮策略並存的長期記憶。dsh-memory-graph(npm 包名 @ilaomianyang/dsh-memory-graph)由社區維護者 ilaomianyang 發佈,分類爲「記憶」;它不自動注入上下文、不做 embedding、不用二進制庫,而是在 Harness 之外維護一份可 grep、可備份、可版本化的純文本記憶庫。
這是什麼¶
一句話:給 DeepSeek Harness 的長期聯想記憶——原始對話事件、帶類型的記憶卡片、實體索引頁,都放在你指定的本地 vault 裏。
與「壓縮上下文」的關係在 README 裏寫得很清楚:壓縮是工作記憶策略,本插件是長期記憶;兩者並存,不是替代。原始層只追加不改寫;語義層用 markdown 卡片承載檢索;衝突通過 superseded 鏈保留「怎麼變成現在這樣」,而不是刪掉舊結論。
三層結構與卡片形態¶
記憶庫默認在 ~/dsh-memory(可在 profile 裏改 vaultDir),目錄大致如下:
~/dsh-memory/
├── vault.json
├── projects.json
├── README.md
├── graph.html
├── episodes/2026-11-02.jsonl
├── cards/2026-11/
├── entities/
└── audit/
三層分工:
- episodes/:原始層,每輪追加一行 JSON,不蒸餾、不刪除,作爲對賬依據。
- cards/:語義層,從原始層蒸餾出的帶類型記憶卡片(markdown),是模型檢索的主要對象。
- entities/:索引層,每個實體一頁,帶提及時間線,用於跨項目聯想。
模型檢索走 cards + entities;episodes 供蒸餾原料與事後覈對。卡片 front matter 含 kind、status(active / superseded / retracted)、supersedes 等字段;被推翻的記憶不會物理刪除,而是標記爲 superseded 並指向新卡片。
在 Harness 裏怎麼用¶
裝完並重啓後,看記憶有三個入口(README 原文):
- 會話頁籤裏的 「記憶」:展示該會話記住了什麼。
- 記憶庫根目錄的 graph.html:整庫關係圖,可雙擊在瀏覽器打開。
- 左側欄 「記憶圖譜」:同一張整庫圖嵌在應用內。
配置在 設置 → 記憶圖譜,一頁四組(採集 / 隱私 / 抽取器 / 檢索),保存後即時生效,無需重載。總開關 enabled、庫路徑 vaultDir、默認項目 defaultProject、跨項目連接 crossProject 等鍵在啓動時讀取,需改 cordis.patch.yml 並重載插件;YAML 與設置頁以 profile 爲最終事實。
抽取器默認 extractor.enabled 爲 false:只採集原始事件、不調用模型蒸餾;開啓後可選 transport: harness(借用設置裏選中的模型)或 http(自填 OpenAI 兼容端點)。自動蒸餾由 auto.* 控制,含追平 catchUp 與每日批次數上限 maxBatchesPerDay。
隱私組可對郵箱、路徑做替換,並用 denyPatterns 追加正則;攔截記錄落在 audit/,只記規則不記內容。
安裝與啓用¶
從 npm 安裝(資料原文命令,勿自行拼接 dsh plugin add):
plugin_manager action=install_bundle target="@ilaomianyang/dsh-memory-graph"
pnpm 會一併安裝依賴 @deepseek-ai/schemastery(設置頁 schema 投影用;未裝時插件仍可運行,但側欄不會出現「記憶圖譜」設置頁)。國內 registry 可加:
plugin_manager action=install_bundle target="@ilaomianyang/dsh-memory-graph" registry="https://registry.npmmirror.com/"
裝完後必須重啓一次 Harness(關窗口重開):Web 側插件清單在啓動時掃描 loader 與 package.json 的 dsh.client,進程內緩存,不重啓側欄可能沒有「記憶圖譜」且無報錯提示。
重啓後打開 設置 → 記憶圖譜(位於「模型」與「內置插件」之間)。卸載:
plugin_manager action=remove_bundle target="@ilaomianyang/dsh-memory-graph"
記憶庫仍在 ~/dsh-memory,獨立於插件。從 npm 安裝的版本可在設置頁「版本與更新」檢查/立即更新;link: 本地目錄安裝會拒絕覆蓋式更新。
當前 package.json 標註版本爲 0.13.0;星標以目錄頁爲準爲 0,不構成功能說明。
典型配置示例¶
下列片段來自 README,展示 profile 中與頁面項可並存的寫法:
- id: memory-graph
config:
vaultDir: '~/dsh-memory'
capture:
enabled: true
userChars: 1500
assistantChars: 1500
privacy:
redactEmails: true
redactPaths: true
denyPatterns: ['我的內部域名\\.corp']
extractor:
enabled: true
transport: 'harness'
maxEpisodesPerRun: 40
retrieval:
limit: 8
hops: 1
auto:
enabled: true
catchUp: true
maxBatchesPerDay: 6
update:
enabled: true
autoInstall: false
採集側默認每條用戶/助手消息最多保留 1500 字;短於 capture.minChars(默認 12)的輪次不入庫。檢索默認 limit: 8、hops: 1。不想插件聯網查 npm 版本時,將 update.enabled 設爲 false。
適用場景與注意¶
適合:需要在 DSH 外持久保存決策、偏好與實體關係,且希望用純文本 + 圖譜瀏覽、而非 embedding 或自動塞回上下文的開發者。
注意:
- 插件以當前 DSH 進程權限讀寫
vaultDir;安裝前應在 GitHub 閱讀源碼與 LICENSE,確認隱私規則是否符合你的環境。 - 開啓抽取器會產生模型調用;自動蒸餾受
auto.maxBatchesPerDay等約束,但仍需自己評估成本。 - DSH 生態是「一切皆插件」;社區目錄 SkillHub 插件頁 與 DeepSeek / 幻方無官方從屬關係,本文事實以倉庫 README 爲準。
結尾¶
dsh-memory-graph 把長期記憶做成你擁有的 plain-text vault:事件只追加、卡片可檢索、實體可聯想,與上下文壓縮互補。進一步瞭解可訪問 GitHub 倉庫 與 SkillHub 目錄頁。