前言¶
智能體跑長任務時,上下文很快會變成兩難:把整段對話原樣回放,token 一路漲;開新會話,昨天剛修好的報錯、剛驗證過的安裝步驟又全部消失。壓縮(compaction)回答的是「這段對話還塞不塞得下」,真正缺的往往是另一件事:下一輪該召回哪些已經沉澱下來的知識。
graph-memory 走的是後一條路。它不把聊天記錄當檔案堆進提示詞,而是從對話裏抽出結構化三元組,存進本地知識圖譜,新問題出現時只注入相關的局部子圖。本文按社區目錄頁、GitHub 倉庫 README / README_CN、package.json、cordis.patch.yml 以及 DeepSeek Harness 官方倉庫覈對後整理:它是什麼、當前 DSH 適配到哪一步、怎麼裝、怎麼用。
需要先分清兩件事。DeepSeek Harness(dsh)本身是 DeepSeek AI 開源的智能體運行時,核心理念是「一切皆插件」;本文引用的插件目錄 deepseek-harness-plugin.com 是獨立社區站點,用來發現和對比插件,與 DeepSeek / 幻方沒有官方從屬關係,不要把它當成官方應用商店。
這是什麼¶
graph-memory 是一款記憶類插件,由 adoresever 維護,源碼在 adoresever/graph-memory,許可證爲 MIT,主要語言是 TypeScript。2026 年 8 月 18 日打開目錄頁和 GitHub 時,倉庫星標均爲 540;社區目錄將其放在「記憶」分類,並標爲精選。當前包版本是 1.6.0-beta.1。
它解決三類常見問題:
- 上下文膨脹:長對話裏大量歷史其實和當前問題無關,卻仍被整段回放。
- 跨會話失憶:Session A 裏驗證過的方法、踩過的坑,Session B 默認帶不過去。
- 經驗孤島:修好的報錯、可複用的步驟如果只散落在 markdown 或聊天記錄裏,彼此沒有邊,下次也檢索不到因果關係。
目錄頁的定位可以概括成一句話:基於知識圖譜的 agent 記憶插件,從對話中抽取結構化三元組,實現可追溯、可檢索、跨會話的經驗複用。同一套記憶內核原生接入 DeepSeek Harness,同時保留 OpenClaw 插件入口。
倉庫 README 特別強調:它不是聊天記錄歸檔器,也不是把所有歷史重新塞回上下文。可複用的對話知識會變成帶類型的節點(TASK / SKILL / EVENT),再用類型化的邊把依賴和因果留下來;新問題檢索的是相關局部子圖,而不是完整歷史。
核心功能¶
類型化知識圖譜¶
節點分三類:
TASK:目標、執行過程和結果。SKILL:經過驗證、可以複用的方法。EVENT:錯誤、修復、決策、變更和關鍵事實。
邊保留關係,而不是隻存一句摘要。倉庫文檔給出的類型包括:
TASK ──USED_SKILL──▶ SKILL
TASK ──SOLVED_BY───▶ EVENT
SKILL ──REQUIRES────▶ SKILL
EVENT ──PATCHES─────▶ SKILL
SKILL ──CONFLICTS_WITH──▶ SKILL
節點還會關聯形成知識時的 user / assistant 片段(episodic provenance)。召回時可以解釋這條記憶從哪次會話來、爲什麼被選中,而不是隻剩一句不可覈驗的總結。
雙路徑召回,只注入局部子圖¶
召回不是「把庫裏所有節點塞進 prompt」。README_CN 把流程寫成兩條路徑:
- 精確路徑:向量或 FTS5 檢索 → 社區擴展與圖遍歷 → 個性化 PageRank。
- 泛化路徑:查詢向量匹配社區摘要 → 取社區成員 → 再做圖排序。
兩邊最終匯到去重後的局部上下文。社區版默認用 SQLite,不需要單獨部署圖數據庫;沒配 Embedding 時自動走 FTS5 全文檢索,不阻斷對話。配了 OpenAI 兼容的 Embedding 後,可以接 DashScope、OpenAI 或本地服務,並做語義檢索、社區級召回和向量去重。
DSH 適配器在 Prompt Assembly 階段自動注入相關記憶,不要求模型先調用 gm_search。召回內容會被標記爲不可信參考材料,不能覆蓋當前用戶指令。
原生掛進 DSH,而不是旁路 MCP¶
當前 DSH 適配狀態以倉庫 README 爲準(版本 1.6.0-beta.1):
| 能力 | 狀態 | 說明 |
|---|---|---|
| Cordis 原生加載 | 已完成 | 走插件生命週期,無需 fork DSH |
| 跨會話自動召回 | 已完成 | 在 Prompt Assembly 注入 |
| 顯式記錄與搜索 | 已完成 | gm_record、gm_search |
| 向量回填與模型遷移 | 已完成 | 追蹤模型、維度和 fingerprint |
| 插件狀態可見 | 已完成 | 設置頁插件列表顯示 active |
| Pro 可視化工作臺 | 未交付 | 需要 DSH Client Plugin |
適配器文件是 dsh.ts,Bundle 入口是 cordis.patch.yml,插件在列表裏顯示爲 graph-memory/dsh。它接入 Session、Tool、Agent Loop、Prompt Assembly、LLM 和 Credentials,卸載時隨插件 fiber 關閉數據庫、緩存和事件監聽,不改 DSH 核心源碼。
本機驗收宿主是 DeepSeek Harness 0.1.0-rc.5。倉庫寫明:DSH 仍處於 Developer Preview,後續版本可能出現破壞性變化。驗收覆蓋了 tarball 安裝、插件 active、1024 維向量回填、跨 Session 語義召回、重啓持久化和 FTS5 降級;文檔記載 107 項自動化測試通過。
壓縮約 75% 是特定場景的對照結果¶
目錄簡介和倉庫都提到「可將上下文壓縮約 75%」。這個數字來自舊版 OpenClaw 入口的一次限定對照:在「安裝、登錄並查詢 bilibili-mcp」的 7 輪工作流裏,第 7 輪 token 從 95,187 降到 23,977。README 明確說,這是該工作流的場景級比較,不是所有任務的固定節省比例;機制是用相關知識子圖替代無差別歷史回放。
安裝與啓用¶
社區目錄頁給出的安裝命令如下。在 DeepSeek Harness 終端中運行:
dsh plugin add github:adoresever/graph-memory
如需可復現安裝,目錄頁建議固定 commit 哈希:
dsh plugin add github:adoresever/graph-memory#commit
把 #commit 換成實際提交哈希。插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。安裝前請檢查 源代碼倉庫 和 MIT 許可證,只裝你信任的來源。
倉庫 README 對當前 beta 的說明更細:1.6.0-beta.1 尚未發佈到 npm,文檔中的 DSH 驗收路徑是先從源碼打 tarball,再裝進 Web profile。前置條件寫的是 Node.js 22.19+ 或 24+(package.json 的 engines 字段是 >=20,以 README 的 DSH 安裝節爲準)。
從源碼構建:
git clone https://github.com/adoresever/graph-memory.git
cd graph-memory
npm ci
npm test
npm run build
npm pack
把生成的 tarball 裝進 DSH Web profile:
npx @deepseek-ai/dsh plugin --profile web add /absolute/path/to/graph-memory-1.6.0-beta.1.tgz
npx @deepseek-ai/dsh --profile web --dump-config
npx @deepseek-ai/dsh web
如果是在 DeepSeek Harness 源碼倉庫裏操作:
pnpm dsh plugin --profile web add /absolute/path/to/graph-memory-1.6.0-beta.1.tgz
pnpm dsh web
安裝後,在 設置 → 插件 → 插件列表 裏確認 graph-memory/dsh 爲已啓用。
README 還標明:dsh plugin --profile web add graph-memory 以及 Pro 包 @adoresever/graph-memory-pro-dsh 屬於規劃中的安裝體驗,現在還不能用。當前 npm 上的 graph-memory@1.5.8 仍是 OpenClaw 發行包,不要把它當成已經可安裝的 DSH 插件。
默認數據庫路徑:
$DSH_HOME/graph-memory/graph-memory.db
未設置 DSH_HOME 時,通常是 ~/.dsh/graph-memory/graph-memory.db。
典型用法¶
可選:打開向量檢索¶
不配 Embedding 也能用,召回走 FTS5。若要語義檢索,用環境變量注入密鑰,不要把 API key 發到聊天框。Cordis 配置裏只保存憑據引用,真實值由 DSH Credentials 解析。倉庫給出的 DashScope 示例:
export GRAPH_MEMORY_EMBEDDING_API_KEY='replace-with-your-key'
export GRAPH_MEMORY_EMBEDDING_BASE_URL='https://dashscope.aliyuncs.com/compatible-mode/v1'
export GRAPH_MEMORY_EMBEDDING_MODEL='text-embedding-v4'
export GRAPH_MEMORY_EMBEDDING_DIMENSIONS='1024'
dsh web
cordis.patch.yml 裏的默認項還包括:extractionEnabled: true、recallEnabled: true、recallMaxNodes: 6、recallMaxDepth: 2、maintenanceInterval: 6。換 Embedding 模型或維度後,插件會按 fingerprint 回填向量,不同維度的向量不會被靜默拿來比較。
DSH 原生工具¶
安裝成功後,智能體側可以使用這四個工具:
| 工具 | 作用 |
|---|---|
gm_status |
查看插件是否 active、數據庫路徑、抽取/召回開關、向量狀態和維度 |
gm_search |
按問題或關鍵詞主動搜索長期圖譜 |
gm_record |
確定性寫入一條 TASK、SKILL 或 EVENT |
gm_stats |
查看節點、邊、類型和社區統計 |
自動抽取依賴輔助模型輸出的穩定性。倉庫建議:beta 階段的關鍵知識用 gm_record 顯式寫入,不要只靠自動抽取。gm_record 需要 name、type(只能是 TASK / SKILL / EVENT)、description 和 content。
日常對話不必先調用 gm_search。適配器會在用戶消息進入後做語義/全文召回,並在組裝系統提示時注入相關子圖。跨 Session、重啓 DSH 後,本地 SQLite 裏的記憶仍然在。
OpenClaw 入口仍然保留¶
如果你本來在 OpenClaw 上用它,DSH 適配沒有要求遷移數據。OpenClaw 側仍走原來的插件入口,並需要在 ~/.openclaw/openclaw.json 把 plugins.slots.contextEngine 設爲 graph-memory,否則可能只看到 recall、庫裏卻沒有抽取結果。本文以 DSH 安裝爲準,OpenClaw 細節見倉庫 README。
適用場景與注意事項¶
比較適合:
- 用 DeepSeek Harness 跑會跨多輪、甚至跨會話的開發或運維任務,希望把「怎麼裝、怎麼修、依賴什麼」留下來。
- 需要解釋記憶從哪來:節點帶原始會話證據,邊能表達
SOLVED_BY、REQUIRES這類關係。 - 希望先本地落地、暫不部署 Neo4j:社區版默認 SQLite。
需要留意的邊界:
- 當前是 beta。版本號是
1.6.0-beta.1,對照宿主是0.1.0-rc.5;DSH 還在 Developer Preview。 - DSH 入口缺兩個工具。
gm_update、gm_maintain目前只在 OpenClaw 入口提供。 - Pro 可視化不是現成功能。圖譜工作臺、受控拖拽、可選 Neo4j 仍是規劃架構;現有
desktop-2.0是 OpenClaw + Neo4j,沒有可安裝的 DSH Client Plugin。 - 壓縮比例不可當成 SLA。約 75% 只對上述 7 輪工作流成立。
- 自動抽取會不穩。重要結論請用
gm_record。 - 權限與密鑰。插件以當前 dsh 進程權限運行,安裝時可能執行構建腳本;API key 走宿主憑據或環境變量,不要寫進數據庫、Cordis patch 或聊天記錄。曾出現在聊天、日誌或截圖裏的密鑰應立即輪換。
- 召回不能壓過當前指令。歷史記憶只作參考。
小結¶
graph-memory 把「記得住」從回放聊天記錄,改成了維護一張帶類型和溯源的本地知識圖譜。對 DeepSeek Harness 來說,它已經是原生 Cordis 插件:自動抽取、跨會話召回、gm_* 工具和可選向量檢索都在 1.6.0-beta.1 裏可用;可視化 Pro、npm 一鍵包和部分維護工具還沒有進 DSH。
目錄頁與源碼:
- 社區目錄:https://deepseek-harness-plugin.com/zh-CN/plugins/graph-memory/
- GitHub:https://github.com/adoresever/graph-memory
- DeepSeek Harness:https://github.com/deepseek-ai/deepseek-harness