用 graph-memory 给 DeepSeek Harness 装上可追溯的知识图谱记忆

前言

智能体跑长任务时,上下文很快会变成两难:把整段对话原样回放,token 一路涨;开新会话,昨天刚修好的报错、刚验证过的安装步骤又全部消失。压缩(compaction)回答的是「这段对话还塞不塞得下」,真正缺的往往是另一件事:下一轮该召回哪些已经沉淀下来的知识。

graph-memory 走的是后一条路。它不把聊天记录当档案堆进提示词,而是从对话里抽出结构化三元组,存进本地知识图谱,新问题出现时只注入相关的局部子图。本文按社区目录页、GitHub 仓库 README / README_CN、package.jsoncordis.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_recordgm_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.jsonengines 字段是 >=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: truerecallEnabled: truerecallMaxNodes: 6recallMaxDepth: 2maintenanceInterval: 6。换 Embedding 模型或维度后,插件会按 fingerprint 回填向量,不同维度的向量不会被静默拿来比较。

DSH 原生工具

安装成功后,智能体侧可以使用这四个工具:

工具 作用
gm_status 查看插件是否 active、数据库路径、抽取/召回开关、向量状态和维度
gm_search 按问题或关键词主动搜索长期图谱
gm_record 确定性写入一条 TASKSKILLEVENT
gm_stats 查看节点、边、类型和社区统计

自动抽取依赖辅助模型输出的稳定性。仓库建议:beta 阶段的关键知识用 gm_record 显式写入,不要只靠自动抽取。gm_record 需要 nametype(只能是 TASK / SKILL / EVENT)、descriptioncontent

日常对话不必先调用 gm_search。适配器会在用户消息进入后做语义/全文召回,并在组装系统提示时注入相关子图。跨 Session、重启 DSH 后,本地 SQLite 里的记忆仍然在。

OpenClaw 入口仍然保留

如果你本来在 OpenClaw 上用它,DSH 适配没有要求迁移数据。OpenClaw 侧仍走原来的插件入口,并需要在 ~/.openclaw/openclaw.jsonplugins.slots.contextEngine 设为 graph-memory,否则可能只看到 recall、库里却没有抽取结果。本文以 DSH 安装为准,OpenClaw 细节见仓库 README。

适用场景与注意事项

比较适合:

  • 用 DeepSeek Harness 跑会跨多轮、甚至跨会话的开发或运维任务,希望把「怎么装、怎么修、依赖什么」留下来。
  • 需要解释记忆从哪来:节点带原始会话证据,边能表达 SOLVED_BYREQUIRES 这类关系。
  • 希望先本地落地、暂不部署 Neo4j:社区版默认 SQLite。

需要留意的边界:

  • 当前是 beta。版本号是 1.6.0-beta.1,对照宿主是 0.1.0-rc.5;DSH 还在 Developer Preview。
  • DSH 入口缺两个工具gm_updategm_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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜