告别跨会话失忆


告别跨会话失忆

写在前面:这不是又一篇”XX 工具安装教程”,而是一个关于AI 如何记住经验的探索记录。如果你也受够了每次新会话都要重新解释上下文,这篇文章可能对你有帮助。


一、痛点:为什么 100 万 tokens 还是不够?

OpenClaw 的上下文窗口是 100 万 tokens,相当于 70-80 万汉字。理论上,这足够容纳 2000 轮对话。

但实际使用中,我发现三个问题:

1.1 线性增长的诅咒

对话越长,上下文越大。即使有自动压缩,也只是推迟问题,不是解决问题。

第 1 轮:15K tokens
第 100 轮:80K tokens
第 500 轮:400K tokens → 接近上限

1.2 跨会话失忆

最头疼的不是单会话太长,而是新会话开始后,之前的经验全部清零

Session A(昨天):
- 解决了 libGL.so.1 导入错误
- 安装了 libgl1 包
- 配置了 LD_LIBRARY_PATH

Session B(今天):
用户:"ImportError: libGL.so.1"
Agent:"让我帮你查查...可能是缺少 OpenGL 库"

同样的问题,重新走一遍排查流程。昨天的经验,今天用不上

1.3 知识孤岛

OpenClaw 的 self-improving-agent 技能会把经验写到 MEMORY.md,但这些记录是孤立的文本片段

## 2026-03-27
- 安装 libgl1 解决了 ImportError
- 配置了 dashscope API

没有关联,没有结构,检索全靠关键词匹配。


二、解决方案:知识图谱记忆系统

2.1 什么是 graph-memory?

graph-memory 是一个 OpenClaw 插件,核心思想是:

把对话内容提取成结构化知识图谱,而不是简单总结文本。

2.2 工作原理

用户对话 → LLM 提取三元组 → 存入 SQLite → PageRank 排名 → 召回注入
    │
    ├── 节点类型:TASK(做了什么)、SKILL(怎么做)、EVENT(出了什么问题)
    ├── 边类型:USED_SKILL、SOLVED_BY、REQUIRES、PATCHES
    └── 社区检测:自动聚类相关技能(Docker 集群、Python 集群等)

2.3 核心优势

能力 传统压缩 graph-memory
**跨会话** ❌ 会话重置后清零 ✅ 自动 recall
**知识关联** ❌ 线性文本 ✅ 图结构连接
**智能召回** ❌ 全文搜索 ✅ PPR 动态排名
**压缩率** ~50% ~75%

**关键差异:** graph-memory 不是”记住对话”,而是”记住知识”。


三、安装实战

3.1 环境准备

# 安装 pnpm(如果还没有)
npm install -g pnpm

# 安装 graph-memory
npm install -g graph-memory

3.2 配置 openclaw.json

编辑 ~/.openclaw/openclaw.json,添加两部分配置:

{
  "plugins": {
    "slots": {
      "contextEngine": "graph-memory"
    },
    "entries": {
      "graph-memory": {
        "enabled": true,
        "config": {
          "embedding": {
            "baseURL": "https://dashscope.aliyuncs.com/compatible-mode/v1",
            "apiKey": "sk-xxx",
            "model": "text-embedding-v4",
            "dimensions": 1024
          }
        }
      }
    }
  }
}

⚠️ 注意plugins.slots.contextEngine 必须设置,否则不会摄入消息。

3.3 重启并验证

openclaw gateway restart

# 查看日志
tail -f /tmp/openclaw/*.log | grep "graph-memory"

# 应该看到:
# [graph-memory] vector search ready

3.4 检查数据库

# 查看消息摄入
sqlite3 ~/.openclaw/graph-memory.db "SELECT COUNT(*) FROM gm_messages;"

# 查看知识节点(需要 7 轮对话后才有)
sqlite3 ~/.openclaw/graph-memory.db "SELECT COUNT(*) FROM gm_nodes;"

四、踩坑记录

4.1 pnpm 报错

pnpm openclaw plugins install graph-memory
# ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND
# No package.json was found in "/home/admin/.openclaw"

原因:pnpm 需要在有 package.json 的目录运行,但 ~/.openclaw 不是 npm 项目。

解决:直接用 npm install -g

4.2 dimensions 配错

// ❌ 错误配置
"dimensions": 512

// ✅ 正确配置
"dimensions": 1024

text-embedding-v4 输出 1024 维向量,配成 512 会导致验证失败。

4.3 baseUrl vs baseURL

这是最隐蔽的坑:

// ❌ 不识别(但无错误提示)
"baseUrl": "https://..."

// ✅ 正确
"baseURL": "https://..."

影响:配置了 embedding 但静默失败,回退到 FTS5 关键词搜索。

调试耗时:约 30 分钟。

后续行动:已提交 Issue #31 建议同时支持两种写法。


五、社区贡献

5.1 发现问题

OpenClaw 官方配置约定是 baseUrl(小驼峰),但 graph-memory 用的是 baseURL(大写 URL)。

项目 配置键
OpenClaw 官方 `baseUrl`
graph-memory `baseURL`
大多数插件 `baseUrl`

5.2 提交 Issue

Issue 标题:Support both baseUrl and baseURL in config

核心诉求:

  • 同时支持两种写法
  • 向后兼容
  • 与 OpenClaw 约定对齐

建议代码:

const baseURL = config.baseURL ?? config.baseUrl;

5.3 开源参与的意义

这不仅仅是一个配置键的问题:

  • 让后来者少踩坑 — 30 分钟的调试时间,可能帮到几十个人
  • 推动项目改进 — 小改动,大影响
  • 建立社区连接 — 从使用者变成贡献者

六、预期效果

6.1 知识提取(每 7 轮对话)

用户:"ImportError: libGL.so.1"
Agent:"安装 libgl1:sudo apt install libgl1"

→ 提取三元组:
EVENT: "ImportError: libGL.so.1"
  └─ SOLVED_BY ─→ SKILL: "安装 libgl1"

6.2 跨会话召回

新会话中:
用户:"OpenGL 导入失败"

→ graph-memory 召回:
[相关节点] SKILL: "安装 libgl1" (PageRank: 0.85)
[原始片段] "sudo apt install libgl1 解决了 ImportError"

6.3 社区聚类

社区 #1: Docker 部署
├─ SKILL: docker build
├─ SKILL: docker run
└─ EVENT: 端口冲突

社区 #2: Python 环境
├─ SKILL: conda create
├─ SKILL: pip install
└─ EVENT: 依赖冲突

七、适用场景

✅ 推荐

场景 理由
长期运行的 agent 经验持续积累
多项目并行 跨项目知识复用
技术问题解决 Bug→Solution 关联
团队协作 共享知识库

❌ 不推荐

场景 理由
短期会话(<100 轮) 收益不明显
追求简单稳定 增加配置复杂度
原文保留刚需 选 lossless-claw

八、总结

8.1 核心收获

  • graph-memory 解决的是”跨会话学习”问题 — 不是简单的上下文压缩
  • 配置细节决定成败 — 一个大小写浪费 30 分钟
  • 社区贡献是双向受益 — 提 issue 的过程也是深度理解

8.2 下一步计划

  • [ ] 运行 7 天,观察知识提取效果
  • [ ] 测试跨会话召回准确率
  • [ ] 如果 Issue 被接受,提交 PR
  • [ ] 探索与 lossless-claw 组合可能性

8.3 最后的思考

AI 的记忆系统,本质上是在回答一个问题:

如何让 AI 从”每次都是新人”变成”越用越有经验”?

graph-memory 给了一个答案:结构化知识 + 智能召回

但这不是终点。未来可能会有更多方案:

  • 向量数据库 + RAG
  • 长期记忆 + 短期记忆分层
  • 多 agent 共享知识库

探索才刚刚开始。


附录

A. 参考链接

  • graph-memory: https://github.com/adoresever/graph-memory
  • lossless-claw: https://github.com/martian-engineering/lossless-claw
  • OpenClaw Docs: https://docs.openclaw.ai/concepts/session
  • Issue #31: https://github.com/adoresever/graph-memory/issues/31

B. 相关命令速查

# 安装
npm install -g graph-memory

# 验证
sqlite3 ~/.openclaw/graph-memory.db "SELECT COUNT(*) FROM gm_messages;"

# 查看日志
tail -f /tmp/openclaw/*.log | grep "graph-memory"

# 手动触发维护
gm_maintain

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注