告别跨会话失忆
写在前面:这不是又一篇”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
