前言¶
DSH 的記憶默認堆在 ~/.dsh/memory/ 下,一堆 markdown。能用,但你看不見:不知道寫了哪些記憶、它們之間有什麼關係、人格藏在哪個文件裏、上個會話說到哪兒斷了。插件 zyu-23/dsh-memory-nebula 想做的就是把這個目錄攤開——記憶可視化成力導向星雲圖,並且把記憶、人格、狀態三類數據的讀寫統一接管下來。
維護者是 Zyu-23,分類屬於「記憶」,GitHub 星標爲 0,版本 0.1.0,MIT 許可。屬於個人探索性質的插件,下面介紹的能力都來自其 README,不代表已大規模驗證。
這是什麼¶
一句話:一個 DSH 插件,做四件事:把記憶畫成力導向星雲圖;提供 memory_write / memory_read / memory_list / memory_delete / memory_search 五個記憶工具;把人格存成 persona.json 每輪注入;記錄「此刻正在做什麼」的狀態,換會話不丟。
它兼容 dsh-auto-memory 的 markdown 格式,思路借鑑了 peterpoal134/memory-brain(AGPL-3.0)的「存 / 喂 / 查」設計,本實現爲獨立編寫,採用 MIT 許可。
核心功能¶
星雲圖¶
- 雙星雲:自動掃描
~/.dsh/memory/<slug>/發現多個工作區,每個工作區一個「陣營」;只有一個工作區就是單星雲,不硬編碼路徑。 - 力導向佈局:Canvas 2D 手寫物理引擎,參數爲斥力 2600 / 彈簧 0.045 / 阻尼 0.86;節點按類型着色(人 / 物 / 話題 / 地點 / 技能 / 人格)。
- 點節點看詳情:關聯記憶列表 + 每條記憶的正本路徑。
- 人格簇:圖中間一簇金色節點,對應「她是誰」。
- 三種入口:側欄 Tab(小窗)/ 側欄圖標(全屏)/ 主面板。
記憶與檢索¶
memory_search 是四路打分合並:分詞(中文 bigram)→ IDF 加權 → 字段加權(名字 > 描述 > 正文)→ 關鍵詞、圖譜、重要性、新鮮度合併。沒有 embedding,同義不同詞可能查不到。
人格與狀態¶
人格數據在 ~/.dsh/memory-nebula/persona.json,每輪注入 <memory_nebula_persona>;狀態在 ~/.dsh/memory-nebula/state.json,每輪注入 <memory_nebula_state>。
狀態更新有兩條路:主力是手動調 nebula_state 工具,記錄準確;兜底是新會話開始時如果狀態超過 30 分鐘沒更新,插件用當前用戶消息自動記一筆,前綴「(自動)」,可被手動更新覆蓋。
注入與存儲¶
注入走 systemPrompt.section,order 4300 人格 / 4400 狀態 / 4500 記憶召回,注入文本按檢索結果簽名去抖,目的是減少 KV 緩存失效。記憶正本仍是 markdown + YAML frontmatter,寫入是原子的(tmp → rename)。
安裝與啓用¶
官方 README 只給了「手動安裝(推薦)」,這條路徑可用;npm 渠道暫未發佈,所以沒有可執行的一鍵命令。堅持不要憑插件名拼 dsh plugin add github:owner/repo,那個包名和命令不能保證可用。
1、把本倉庫整個目錄放進你 DSH profile 的 node_modules/:
<你的 DSH 目錄>/profiles/<profile>/node_modules/dsh-memory-nebula/
這一步是下載源碼後手工放置,README 未提供 dsh plugin 形式的快捷安裝。
2、編輯該 profile 的 package.json:
{
"dependencies": {
"dsh-memory-nebula": "0.1.0"
},
"dsh": {
"profile": {
"bundles": [
"...",
"dsh-memory-nebula"
]
}
}
}
3、重啓 DSH,然後驗證:打開側欄看到「記憶星雲」圖標即成功,點開是一張空白星雲圖 + 引導提示。
首次啓動插件會自動初始化兩個空白數據文件:~/.dsh/memory-nebula/entities.json(默認 entities: [])和 ~/.dsh/memory-nebula/persona.json(默認 directives: [] / sections: [])。這是設計如此,星雲圖開箱即空,內容要自己寫;已有數據不會被覆蓋,所以升級安全。
還要注意 peerDependencies 的版本區間:@deepseek-ai/cordis >=4.0.2 <5.0.0,@deepseek-ai/dsh-home-paths / dsh-llm / dsh-tools 都是 >=0.1.5-rc.2 <0.3.0,node 要求 ^22.19.0 || >=24.0.0。
典型用法¶
下面四步來自 README 的「使用(從零開始)」,是一個可復現的最小閉環。
第 1 步,看圖。打開側欄「記憶星雲」,剛裝好時圖是空白的,中間顯示提示:星雲還是空的 → memory_write 寫記憶 → nebula_extract 抽實體 → 刷新。
第 2 步,寫第一條記憶:
{
"name": "my-first-memory",
"description": "一句話摘要",
"type": "project",
"body": "記憶正文……"
}
第 3 步,抽實體,讓這條記憶進圖:
{ "memoryName": "my-first-memory", "side": "host" }
它會讀這條記憶,用 LLM 判斷涉及哪些實體、要不要新建,然後更新 entities.json。
第 4 步,刷新星雲圖,節點就長出來了。之後每條記憶重複「寫 → 抽」,圖會越來越豐富。
交互上:拖拽節點、滾輪縮放、拖空白平移;點節點看關聯記憶和正本路徑;金色人格節點點開看人格條目內容。注意圖是靜態快照,改了記憶要刷新頁面,抽實體也要手動調 nebula_extract。
想自定義人格,默認是空的,編輯 ~/.dsh/memory-nebula/persona.json:
{
"directives": ["LANG_ZH_CN_ONLY", "ADDRESS_AS_USER"],
"sections": [
{ "id": "identity", "title": "身份", "category": "身份", "content": "你是……" }
]
}
directives 是壓縮指令(給模型解析用),sections 是自然語言描述,每條在圖上對應一個金色節點。填好後每輪自動注入。
想手工加實體,也可以直接編輯 ~/.dsh/memory-nebula/entities.json:
{
"entities": [
{ "id": 1, "name": "我的項目", "type": "topic", "side": "host" }
],
"edges": [],
"memoryEntities": { "host": {}, "qq": {} }
}
實體 id 不要重複,圖佈局依賴 id 做確定性定位。
數據位置¶
| 數據 | 位置 |
|---|---|
| 記憶正本 | ~/.dsh/memory/<slug>/*.md(markdown + frontmatter) |
| 實體關係 | ~/.dsh/memory-nebula/entities.json |
| 人格 | ~/.dsh/memory-nebula/persona.json |
| 狀態 | ~/.dsh/memory-nebula/state.json(多工作區時按工作區拆成 state-<key>.json) |
| 節點目錄 | ~/.dsh/memory-nebula/contexts/ |
| 注入調試 | ~/.dsh/memory-nebula/last-inject.json |
排障時先看 last-inject.json,能直接看到這輪注入的內容。
適用場景與注意¶
適合這幾類人:想看到記憶之間關係的 DSH 用戶;想把人格從 AGENTS.md 挪到結構化文件、要求每輪注入的人;在多個工作區之間切換、希望「正在做什麼」跨會話保留的人。
注意幾點:
- 插件以當前 dsh 進程的權限運行,能讀寫你 profile 下的文件和
~/.dsh/數據。安裝前請檢查源碼,確認entities.json/persona.json/state.json的寫入內容符合預期。 - 許可證是 MIT,但
persona.json裏寫的是自定義人格指令,屬於你自己的配置。 - README 明確寫了本插件不提供備份功能,要備份請自行向 DSH 提要求寫備份腳本,或用 git / 雲盤同步
~/.dsh/memory/。 - 已知限制:檢索無 embedding,同義不同詞可能查不到;圖是靜態快照;抽實體是手動的。
- 若要改客戶端渲染代碼:修改
lib/client.template.js後複製爲client.js,lib/*.js是宿主模塊。
結尾¶
這款插件的價值在把記憶從一堆 markdown 變成看得見的星雲,並順手統一了記憶 / 人格 / 狀態的管理。它當前還是早期版本(0.1.0,星標 0),收益取決於你是否有真的需要可視化記憶、需要跨會話狀態的場景;純文本記憶工具的用戶不必急着換。
目錄頁:https://www.skillhub.cn/plugins/Zyu-23/dsh-memory-nebula
GitHub:https://github.com/Zyu-23/dsh-memory-nebula