为 DeepSeek Harness 提供本地 SQLite 知识图谱记忆:自动把对话里的任务/技能/事件抽成有类型节点,跨会话向量化召回,免去重放历史。
$ dsh plugin --profile web add github:adoresever/graph-memory在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
graph-memory 把和 AI 对话中产生的任务、技能、事件和它们之间的关系沉淀成本地知识图谱,并在新问题出现时只召回相关的局部子图注入上下文,从而让 DeepSeek Harness 拥有可追溯、可搜索、跨会话共享的长期记忆。
@photostructure/sqlite(本地 SQLite 存储 + FTS5)、@sinclair/typebox(Schema)、可选的 OpenAI 兼容 Embedding HTTP 服务dsh.ts 作为 DeepSeek Harness / Cordis 适配器走 bundle.patch 自动注入;index.ts 保留对 OpenClaw 的兼容入口;src/{extractor,recaller,graph,store,format,engine} 六个子目录共享一套算法层dsh.ts(DSH 入口,apply 函数挂载 tools / llm / systemPrompt / agentLoop / sessions / credentials 六个接缝),cordis.patch.yml(DSH bundle 声明)日常用 DSH 跟 AI 协作开发时,经常出现几周前讨论过某个库的用法、某次 bug 修复方案、某个 API 设计决策,但新会话里模型完全不知道 —— 用户不得不反复贴历史。Graph Memory 让模型在每次新会话启动前自动看到这些沉淀下来的知识,无需手动复制粘贴。它也适合长流程项目(持续数天的开发任务、多分支并行迭代),因为它能区分不同来源节点并保持召回路径可解释。
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DeepSeek Harness | 0.1.0-rc.5 实测验证(DSH 仍为 Developer Preview) | 插件走 Cordis bundle.patch 注入;当前 DSH 未公开最低版本约束 |
| Node.js | >=20(package.json 声明);DSH 实际使用建议 22.19+ 或 24+ | |
| 平台 | macOS / Windows / Linux | 跨平台,无额外系统库要求 |
| 原生模块 | @photostructure/sqlite(native) | @photostructure/sqlite 跨平台预编译;@sinclair/typebox 纯 JS |
dsh plugin --profile web add github:adoresever/graph-memory
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
dbPath | string | SQLite 图谱数据库存放路径,留空则使用 $DSH_HOME/graph-memory/graph-memory.db | ~/.dsh/graph-memory/graph-memory.db |
extractionEnabled | boolean | 是否启用自动从对话里抽取任务/技能/事件 | true |
recallEnabled | boolean | 是否在 Prompt Assembly 阶段自动注入相关记忆 | true |
recallMaxNodes | integer | 跨会话召回时最多向当前 prompt 注入的节点数 | 6 |
recallMaxDepth | integer | 图遍历深度(从召回种子节点出发走几跳) | 2 |
maintenanceInterval | integer | 每隔多少轮检查一次信号,触发 PageRank + 社区检测 | 6 |
embedding.apiKeyEnv | string | Embedding 服务的 key 在启动环境里的变量名(如 GRAPH_MEMORY_EMBEDDING_API_KEY),由 DSH Credentials 解析真实值 | 未设置 |
embedding.baseURL | string | Embedding 服务的接口地址,OpenAI 兼容,DashScope / OpenAI / 本地服务都能接 | OpenAI 默认 |
embedding.model | string | 向量模型名,默认 text-embedding-3-small | text-embedding-3-small |
embedding.dimensions | integer | 向量维度(如 DashScope text-embedding-v4 为 1024),仅在服务支持时设置 | 由服务决定 |
未列出的 env 变量名对照:
GRAPH_MEMORY_EMBEDDING_API_KEY/GRAPH_MEMORY_EMBEDDING_BASE_URL/GRAPH_MEMORY_EMBEDDING_MODEL/GRAPH_MEMORY_EMBEDDING_DIMENSIONS,由cordis.patch.yml读取并注入到上面这套字段里。
Q: 这个插件需要联网吗?API key 会泄露吗?
A: 默认完全离线运行,只有当用户主动配置向量服务(Embedding)时才会发请求。key 只以环境变量名形式写在 Cordis patch 里,真实密钥由 DSH Credentials 解析,数据库里不会持久化任何 secret。
Q: 卸载插件会丢失我之前的记忆吗?
A: 不会丢失。SQLite 数据库独立于插件存在,禁用或卸载插件都只是不再读取/写入,原 graph-memory.db 随时可重新挂载复用。
Q: 想清空记忆怎么操作?
A: 关闭插件后手动删除 $DSH_HOME/graph-memory/graph-memory.db 文件即可。Community 版未提供一键清空工具,删除前建议备份。
Q: 跟 DSH 自带的会话压缩有冲突吗?
A: 不冲突。压缩决定当前窗口还能装多少原始历史,图谱记忆决定哪些"已经被消化过的知识"值得在下一轮唤醒 —— 两者目标正交,可同时启用。
Q: 自动抽取偶尔漏掉重要内容怎么办?
A: 用 gm_record 工具主动写入,给出 name / type(TASK/SKILL/EVENT)/ description / content 四个字段,会跳过 LLM 抽取链路直接落库,可作为 beta 阶段的兜底手段。
Q: DSH 模式下找不到 gm_update / gm_maintain?
A: 这是预期行为。DSH/Cordis 适配器只暴露 gm_status、gm_search、gm_record、gm_stats 四个工具,gm_update 和 gm_maintain 暂时保留在 OpenClaw 入口,DSH 端未实现。
Q: 是否支持中文和长内容?
A: FTS5 检索对中文按 unicode 分词匹配;向量检索走 Embedding 模型,与语种无关。长内容会被分块抽取,不要求完整塞进单条节点。
进阶 — 需要懂 DSH 的 Cordis bundle 安装机制、能配置 Embedding 服务的环境变量,并理解 SQLite 与 FTS5 的基本概念才能调优召回;但装好即用的默认配置也能正常工作,普通用户也能跑起来。
gm_update 和 gm_maintain 工具,这两个能力目前只在 OpenClaw 入口可见gm_record 工具手动写库git clone + npm run build + npm pack 走本地 tarball 安装freshTailCount 在 openclaw.plugin.json 中已被标记 deprecated(旧方案按"新鲜尾部"切分,现已改为按用户轮次切分,不再生效)0.1.0-rc.5 上验证过
Traceable, searchable, cross-session memory for AI agents.
One memory core, native to DeepSeek Harness, with the OpenClaw plugin entry retained.
中文 · Advantages · Architecture · DSH Install · Pro Plugin · Technical Report (Chinese)
Compaction answers “how much of this conversation still fits?” Graph Memory answers “which past knowledge is worth recalling now?”
Reusable conversation knowledge becomes typed nodes:
TASK: goals, execution, and outcomes;SKILL: validated reusable methods;EVENT: errors, fixes, decisions, changes, and facts.Typed edges such as USED_SKILL, SOLVED_BY, REQUIRES, PATCHES, and CONFLICTS_WITH preserve relationships. A new question retrieves a relevant local subgraph instead of replaying the complete history.
gm_status reports store path, graph counts, vector coverage, mode, and dimensions.gm_record.The original OpenClaw adapter was measured in a seven-turn workflow that installed, authenticated, and queried bilibili-mcp:
| Turn | Without Graph Memory | With Graph Memory |
|---|---|---|
| R1 | 14,957 | 14,957 |
| R4 | 81,632 | 29,175 |
| R7 | 95,187 | 23,977 |
The measured reduction at R7 was approximately 75% in that specific workflow. This is a scenario-level comparison, not a universal savings guarantee; the mechanism is replacing indiscriminate history replay with a relevant knowledge subgraph.
The DSH integration does not discard the original project. Graph Memory is evolving from an OpenClaw memory plugin into a graph-memory core that different agent harnesses can load natively.
| Stage | Deliverable | Status |
|---|---|---|
| OpenClaw origin | Context Engine, cross-session graph memory, dual-path recall | Maintained |
| Community graph engine | SQLite, FTS5, vectors, graph ranking, provenance | Available |
| DeepSeek Harness | Cordis adapter, native tools, auto-recall, Credentials | Implemented and tested |
| Graph Memory Pro | Visual graph workbench, controlled drag-and-drop, optional Neo4j | Architecture reviewed; DSH Host and Client Plugins not yet implemented |
On March 15, 2026, the project owner presented Graph Memory's architecture at the CLAW program event held in Tsinghua Science Park. The following owner-supplied materials and the Sina Finance event report document that development.
The image below is the existing OpenClaw / ClawX-era Pro graph prototype. It demonstrates a previously explored interaction direction; it is not a shipped DSH frontend.
Names and venue information document project history only and do not imply endorsement by Tsinghua University, Sina Finance, DeepSeek, or OpenClaw.
TASK ──USED_SKILL──▶ SKILL
TASK ──SOLVED_BY───▶ EVENT
SKILL ──REQUIRES────▶ SKILL
EVENT ──PATCHES─────▶ SKILL
SKILL ──CONFLICTS_WITH──▶ SKILL
Nodes retain episodic user/assistant provenance. This preserves the context in which knowledge was created, not only a lossy summary.
flowchart LR
Q[Current query] --> EXACT[Exact path]
Q --> GENERAL[Generalized path]
EXACT --> SEARCH[Vector / FTS5]
SEARCH --> EXPAND[Community expansion + traversal]
GENERAL --> SUMMARY[Community-summary match]
SUMMARY --> MEMBERS[Community members]
EXPAND --> PPR[Personalized PageRank]
MEMBERS --> PPR
PPR --> CONTEXT[Deduplicated local context]
flowchart LR
USER[User message] --> SESSION[DSH Session Events]
SESSION --> ADAPTER[Graph Memory Cordis Adapter]
ADAPTER --> EXTRACT[Structured Extraction]
EXTRACT --> GRAPH[(SQLite / FTS5 / Vectors)]
USER --> RECALL[Semantic + Lexical Recall]
GRAPH --> RECALL
RECALL --> RANK[Community Expansion + PPR]
RANK --> PROMPT[Prompt Assembly]
PROMPT --> LOOP[DSH Agent Loop]
CREDS[DSH Credentials] --> ADAPTER
TOOLS[gm_* Tools] --> ADAPTER
The code follows a host-neutral core plus host adapters:
graph-memory/
├── dsh.ts # DeepSeek Harness / Cordis adapter
├── index.ts # OpenClaw adapter
├── cordis.patch.yml # DSH bundle entry
└── src/
├── extractor/ # conversation → TASK / SKILL / EVENT
├── recaller/ # vector, FTS5, graph expansion and recall
├── graph/ # PageRank, communities and deduplication
├── store/ # SQLite schema and queries
├── format/ # safe context assembly
└── engine/ # LLM and embedding providers
| Capability | Status | Notes |
|---|---|---|
| Native Cordis loading | Done | No DSH fork required |
| Cross-session auto-recall | Done | Injected during Prompt Assembly |
| Explicit record and search | Done | gm_record, gm_search |
| Vector backfill and migration | Done | Model, dimension, and fingerprint tracked |
| Visible plugin state | Done | Active in Plugin Inventory |
| Pro visual workbench | Not shipped | Requires a DSH Client Plugin |
Current beta: 1.6.0-beta.1. Local acceptance used DeepSeek Harness 0.1.0-rc.5. DSH remains in Developer Preview and may introduce compatibility-breaking changes. Testing covered tarball installation, active plugin state, 1024-dimensional vector backfill, semantic recall across Sessions, persistence across restarts, and FTS5 fallback. All 107 automated tests passed.
Plugin enabled: graph-memory/dsh is active in the DSH plugin list
Cross-session semantic recall in a fresh Session
Prerequisites: Node.js 22.19+ or 24+. The current beta is not yet published to npm, so build the tarball from source:
git clone https://github.com/adoresever/graph-memory.git
cd graph-memory
npm ci
npm test
npm run build
npm pack
Install the generated tarball into the 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
# From a deepseek-harness source checkout:
pnpm dsh plugin --profile web add /absolute/path/to/graph-memory-1.6.0-beta.1.tgz
pnpm dsh web
After installation, verify that graph-memory/dsh is enabled under Settings → Plugins → Plugin list.
Default store:
$DSH_HOME/graph-memory/graph-memory.db
Without DSH_HOME, this is normally ~/.dsh/graph-memory/graph-memory.db.
Do not send secrets in chat. Cordis stores only a credential reference; DSH credentials resolves the real value for each embedding operation.
DashScope example:
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
Without embeddings, Graph Memory continues with FTS5 and does not block conversation.

| Tool | Purpose |
|---|---|
gm_status | Plugin, store, extraction, recall, and vector state |
gm_search | Explicit long-term graph search |
gm_record | Persist a TASK, SKILL, or EVENT |
gm_stats | Node, edge, type, and community statistics |
Automatic recall does not require an explicit gm_search tool call. The plugin retrieves relevant memory during Prompt Assembly.
The accurate conclusion is not “Pro can already be installed into DSH.” It is: Pro's graph database, retrieval, PageRank, community, and CRUD backend can be migrated; its OpenClaw host code and old ClawX integration must be replaced by a DSH Host + Client Plugin. The current desktop-2.0 implementation is OpenClaw + Neo4j and contains no installable DSH Client renderer.
The reviewed desktop-2.0 code includes Neo4j Driver, GDS, APOC, vector indexes, graph maintenance tools, and CRUD routes. Today it also:
openclaw/plugin-sdk at the entry;/graph-memory-pro/neo4j-config;The correct plugin architecture is:
flowchart LR
CORE[Graph Memory Core] --> STORE[SQLite default / Neo4j optional]
STORE --> HOST[DSH Host Plugin]
HOST --> REMOTE[Typed Remote API]
REMOTE --> CLIENT[DSH Client Plugin]
CLIENT --> SPLIT[Conversation + Graph split view]
CLIENT --> DROP[Controlled drag-to-context]
The first Pro plugin does not need mandatory Neo4j:
GraphSnapshot data, never database passwords or arbitrary Cypher access;Pro should therefore be an optional Graph Memory DSH plugin module, not a separate standalone product.
graph-memory # Community: current native Host Plugin
@adoresever/graph-memory-pro-dsh # Pro: Host + Client Plugin, to be built
@adoresever/graph-memory-store-neo4j # Optional large-graph adapter, to be built
The first milestone should be Pro Lite: reuse the existing SQLite graph and add the DSH graph workbench, so users do not need Neo4j. Neo4j stays optional for larger graphs, GDS, and advanced analysis. This is a planned architecture; the existing desktop-2.0 Pro is still Neo4j-only and does not yet implement a switchable SQLite / Neo4j GraphStore.
This illustrates the target experience only. The npm package graph-memory@1.5.8 is still the OpenClaw release, and @adoresever/graph-memory-pro-dsh has not been published. These commands do not work today:
# PLANNED — NOT AVAILABLE YET
dsh plugin --profile web add graph-memory
dsh plugin --profile web add @adoresever/graph-memory-pro-dsh
dsh web
During development, install a local tarball:
npm run build
npm pack
dsh plugin --profile web add /absolute/path/to/graph-memory-pro-dsh-*.tgz
GraphStore, GraphSnapshot, and RecallResult so SQLite and Neo4j implement the same API.The old Pro /graph-memory-pro/neo4j-config route returns connection details to the browser; this is a security flaw that must be removed. In the future DSH Pro design, the Host resolves Credentials and the browser receives only a bounded GraphSnapshot, never a Bolt password or unrestricted Cypher access.
Existing OpenClaw users retain the original entry:
openclaw plugins install graph-memory
openclaw plugins enable graph-memory
openclaw gateway restart
The Context Engine slot must also be activated in ~/.openclaw/openclaw.json; otherwise the package may appear installed without running the full ingestion and extraction pipeline:
{
"plugins": {
"slots": {
"contextEngine": "graph-memory"
},
"entries": {
"graph-memory": {
"enabled": true
}
}
}
}
The Community memory core is host-neutral. DSH development does not require OpenClaw users to abandon their entry or data.
npm ci
npm test
npm run build
npm pack
Release checks:
dist/dsh.js and cordis.patch.yml;gm_record for critical beta knowledge.gm_update and gm_maintain; those remain OpenClaw-entry tools.MIT © 2026 adoresever
See docs/ATTRIBUTIONS.md for asset, logo, and trademark notes.