实践

给 OpenClaw 装上长期记忆:让 AI Agent 不再每次重新认识你

用一套完整的系统图和操作控制台,讲清 GBrain 如何接入 OpenClaw、形成自动召回与自动写入闭环,以及日常查询、同步、维护和排查方法。

作者:黄撑 更新于 2026-07-28
本文目录 14 节 · 点击展开

很多人在长期使用 AI 助手后,都会遇到同一个问题:

昨天已经告诉它的事情,今天为什么又要重新解释?

一次性聊天只需要当前上下文;但维护博客、开发 Agent、管理自动化流程时,项目背景、历史决策、长期偏好和踩坑经验都需要持续保留。

所以我把 GBrain 接进了自己的 OpenClaw。目标不是多装一个搜索工具,而是让 Agent 形成两条真正可运行的闭环:

  • 自动想起来:每次对话开始时,主动召回相关长期知识。
  • 自动记下来:新消息进入后,判断哪些内容值得长期保存,并写回知识库。
OPENCLAW × GBRAIN · LONG-TERM MEMORY SYSTEM让 Agent 从“每次重新认识你”,变成“持续理解你的长期助手”
长期大脑
接入前记忆停留在当前会话

聊天结束后,项目规则、历史决定和长期偏好容易散掉。

重复解释决策断层经验难沉淀
OpenClaw+GBrain
接入后记忆进入长期闭环

重要知识被保存,并在相关任务出现时重新注入上下文。

自动召回自动沉淀长期积累
01
RECALL · 自动想起用户消息 → Context Engine → 长期知识注入
02
CAPTURE · 自动记住用户消息 → Signal Detector → GBrain 写入
本文实测基线GBrain 0.42.57.0 · OpenClaw 2026.7.1-beta.2 · PostgreSQL 17版本升级后,命令参数和桥接逻辑应以本机实际结果为准。

先看整体:它不是一个插件,而是一套双闭环系统

GBrain 不是另一个聊天机器人,也不是 OpenClaw 的替代品。

OpenClaw 负责理解目标、推理、调用工具和执行任务;GBrain 负责保存长期项目、历史决定、人物关系和可复用经验。两者之间还需要 Context Engine、Retrieval Reflex、MCP 和 Signal Detector 把读写链路连接起来。

CHAPTER 01 · SYSTEM MAP一条用户消息,同时经过“当前思考”“自动召回”和“后台沉淀”
系统地图
你提出一个目标
运行中心OpenClaw

理解问题 · 组织上下文 · 调用工具 · 执行任务 · 输出结果

短期状态Memory Core

当前会话、最近状态和轻量偏好。

长期知识GBrain

项目、人物、公司、决定、经验和方法论。

主动操作MCP

让 Agent 搜索、读取、写入和查询长期知识。

A自动召回
01Context Engine接管上下文组装
02Retrieval Reflex识别实体与相关知识
03注入主 Agent带着历史继续思考
B自动写入
01message_received每条新消息到达
02Signal Detector判断是否值得长期保存
03写入 brain后台沉淀,不阻塞回复
核心判断能调用 GBrain 工具,不等于已经拥有长期记忆。

只有自动召回和自动写入都经过真实行为测试,长期大脑才算成立。

为什么只安装 MCP 还不够?

我最开始也以为,安装 GBrain MCP,让 Agent 能搜索和写入知识,就已经完成接入。

实际只完成了最下面一层:Agent 可以主动使用工具。如果每次都要靠模型临时判断“现在是不是应该搜索 GBrain”,记忆仍然不稳定。

CHAPTER 02 · THREE REQUIRED PARTS长期记忆不是一个开关,而是三种能力同时工作
能力分工
MCP
主动工具我想查时,可以查

提供搜索、读取、查询和写入能力,但不会保证每轮对话自动调用。

解决:能不能操作长期知识
CE
Context Engine相关历史,自动回来

在每轮上下文组装时识别当前问题,并主动注入相关长期知识。

解决:能不能自动想起来
SD
Signal Detector重要信息,自动留下

判断消息是否值得长期保存,在后台完成写入,不阻塞主 Agent 回复。

解决:能不能自动记下来
临时指令今天帮我改一下这个标题通常不保存
长期规则以后博客文章默认公开,除非明确要求草稿值得长期保存

我最终采用的安装与接入路径

下面不是我第一次安装时的顺序,而是排除无效尝试后留下的稳定路径。每一步都带一个验证点,上一层没有通过,不进入下一层排查。

CHAPTER 03 · BUILD ROADMAP从 CLI、数据库、知识源,一直走到自动召回和行为验收
接入路径
01
安装 GBrain先证明 CLI 正常验证:gbrain doctor 可运行
02
更换存储层使用 PostgreSQL 17验证:多会话不再抢 PGLite 锁
03
建立知识源独立 Brain Repo验证:brain source 可同步
04
接入主动工具Retrieval Reflex + MCP验证:gbrain MCP 握手成功
05
接入自动召回切换 Context Engine验证:slot = gbrain-context
06
接入自动写入message_received Hook验证:后台写入 source_id = brain
07
最终验收验证真实行为验证:新会话自动召回独特事实

第一步:安装 GBrain,先确认 CLI 正常

GBrain 官方更推荐让 Agent 读取安装说明并执行。可以把下面这段直接交给能够访问网络和终端的 Agent:

Retrieve and follow the instructions at:
https://raw.githubusercontent.com/garrytan/gbrain/master/INSTALL_FOR_AGENTS.md

只安装 CLI 时,可以使用:

bun install -g github:garrytan/gbrain
gbrain doctor

这篇文章不是官方安装文档的复述。官方说明负责把 GBrain 装起来;这里重点记录它怎样进入现有 OpenClaw,并形成自动召回、自动写入和多会话稳定运行。

第二步:多会话场景直接使用 PostgreSQL 17

我最初使用 PGLite。单独运行 GBrain 没问题,但 OpenClaw 的 MCP runtime 会按 session 启动独立进程,多个 gbrain serve 可能同时争用一份数据库文件。

STORAGE DECISION问题不是 GBrain 慢,而是多个会话在抢同一把文件锁
会话 1gbrain serve持有 PGLite 锁
会话 2gbrain serve等待锁
会话 3gbrain serve继续等待
最终表现MCP 启动卡住约 30 秒
最终方案PostgreSQL 17 + pgvector

把共享状态交给数据库服务,不再让多个 session 争用同一个本地文件。

brew install postgresql@17 pgvector
brew services start postgresql@17

createdb gbrain
psql gbrain -c 'CREATE EXTENSION IF NOT EXISTS vector;'

gbrain init \
  --url "postgresql://<user>@127.0.0.1:5432/gbrain" \
  --no-embedding

我当前没有配置 Embedding,所以使用 --no-embedding。这不会影响关键词搜索、实体召回、MCP 查询和 Signal Detector 写入,只是暂时没有完整的向量语义检索。

我实际安装时还遇到一次版本兼容:当时 Homebrew 的 pgvector 扩展没有落到 PostgreSQL 16 的扩展目录,换成 PostgreSQL 17 后恢复正常。最终只保留一个数据库版本,避免两套服务同时占端口。

第三步:建立独立的 Brain Repo

长期知识没有直接塞进 OpenClaw workspace,而是单独保存在:

~/brain
mkdir -p ~/brain
cd ~/brain
git init

gbrain sources add brain --path ~/brain
gbrain sync --source brain --no-pull --no-embed
工作区~/.openclaw/workspace

Agent 规则、Skill 和执行环境

+
知识源~/brain

长期知识的 Markdown 与 Git 仓库

+
检索层PostgreSQL

索引、搜索和运行数据

我最终只保留一个明确的长期 source:brain。后面的 MCP 写入也必须明确落到这个 source。

第四步:接入 Retrieval Reflex 和 MCP

Retrieval Reflex 负责识别相关实体,MCP 负责让 Agent 主动搜索和写入。

gbrain integrations install retrieval-reflex \
  --target ~/.openclaw/workspace

openclaw mcp add gbrain \
  --command "$(command -v gbrain)" \
  --arg serve \
  --cwd ~/brain \
  --env GBRAIN_SOURCE=brain

MCP 配置中最容易被忽略的不是 cwd,而是:

GBRAIN_SOURCE=brain

cwd=~/brain 不会自动保证所有写入都路由到 brain。没有明确 source 时,写入可能回退到 default

{
  "command": "/Users/<user>/.bun/bin/gbrain",
  "args": ["serve"],
  "cwd": "/Users/<user>/brain",
  "env": {
    "GBRAIN_SOURCE": "brain"
  }
}

最后运行:

openclaw mcp doctor

我当时的真实结果是 gbrain: ok

第五步:让 GBrain 真正成为 Context Engine

如果 OpenClaw 仍然使用 contextEngine = legacy,GBrain 只是一个可选工具,没有进入每轮上下文组装。

我最终使用的 slot 是:

{
  "plugins": {
    "slots": {
      "memory": "memory-core",
      "contextEngine": "gbrain-context"
    }
  }
}
插件 IDgbrain-context-engine插件叫什么
Context Engine IDgbrain-contextslot 应该填写的值

我的本地桥接插件位于 ~/.openclaw/extensions/gbrain-context-engine,只负责三件事:

  1. 加载 GBrain 官方 Context Engine;
  2. 适配当前版本 OpenClaw 与 GBrain 的 prompt / messages 参数差异;
  3. message_received 上启动官方 Signal Detector。

这不是所有版本都要长期保留的代码。升级 OpenClaw 或 GBrain 后,应先检查上游是否已经原生解决,能删除桥接层就删除。

第六步:让 Signal Detector 通过系统事件自动运行

signal-detector/SKILL.md 里的 triggers: 只是 Skill 描述,不是 OpenClaw 的原生事件机制。在 AGENTS.md 中写“每条消息都启动 Signal Detector”也只是 Prompt 约束,不够稳定。

我最终使用宿主侧 message_received hook,在每条入站消息后启动隐藏子 Agent:

api.on('message_received', (event, ctx) => {
  void runSignalDetector(event.content ?? '', ctx)
    .catch((error) => api.logger.error(String(error)));
});

这里最重要的是 void:后台记忆任务继续运行,主 Agent 不等待它完成。

用户消息进入 OpenClaw
主 Agent约 3 秒回复不等待记忆任务
Signal Detector约 6.5 秒完成后台写入 source_id = brain

这才算自动记忆闭环真正成立。

日常怎么用:从状态、检索、写入到同步维护

接入完成后,最常见的问题不再是“怎么安装”,而是:

现在应该先敲哪条命令,才能判断知识库、检索和 OpenClaw 接入到底哪一层有问题?

下面把原命令手册合并成一套日常控制台。原则只有一个:先证明 GBrain 自己正常,再向上检查 OpenClaw。

CHAPTER 04 · DAILY CONSOLE状态 → 检索 → 写入 → 同步 → 维护 → OpenClaw 验收
命令控制台
01定位status
02检索search / query
03沉淀capture / link
04同步sync / embed
05维护doctor / export
06验收openclaw mcp
01
STATUS先确认版本、source、数据规模和质量
gbrain --version
gbrain status
gbrain stats
gbrain health

status 看 source、同步和嵌入状态。

stats 看页面、分块和链接数量,确认不是空库。

health 看孤立页、坏链接和过期嵌入等质量信号。

最短证据链:status 看 source → stats 看页面 → search 查确定存在的词
02
SEARCH根据“知道多少”选择 list、search、query 和 get
不知道库里有什么LIST · 浏览目录
gbrain list --limit 10 --sort updated_desc
gbrain list --type concept --limit 20
gbrain list --tag openclaw --limit 20
知道项目名或固定术语SEARCH · 精确找候选
gbrain search "OpenClaw" --source brain --limit 10
gbrain search "品牌雷达" --limit 5
只有问题,没有准确措辞QUERY · 扩展查询
gbrain query "OpenClaw 和 GBrain 分别负责什么?" --limit 5
gbrain query "最近有哪些 OpenClaw 配置变化?" --since 7d --recency strong --limit 10
候选结果gbrain get concepts/brand-radarbacklinks / graph —depth 2
判断:搜索摘要只是候选证据,重要结论回到完整页面确认。
03
CAPTURE先保存内容,再补标签、关系和时间坐标
gbrain capture "以后博客文章默认公开,除非明确要求草稿"

gbrain capture --file ./notes/openclaw-memory.md --slug operational/openclaw-memory --type note
gbrain tag concepts/brand-radar openclaw

gbrain link projects/openclaw-memory concepts/gbrain --link-type uses --context "OpenClaw 使用 GBrain 作为长期知识层"

gbrain timeline-add projects/openclaw-memory 2026-07-25 "完成 GBrain 与 OpenClaw 接入验证"
写入闸门:保存长期偏好、项目决定、踩坑结论和会改变后续执行方式的规则,不保存每条临时指令。
04
SYNCMarkdown 文件变化,不等于检索层已经更新
SOURCEgbrain sources list
PREVIEWgbrain sync —source brain —dry-run
APPLYgbrain sync —source brain
VERIFYgbrain search “确定存在的关键词” —limit 3
gbrain sync —all —parallel 2gbrain sync —source brain —no-embedgbrain embed —stalegbrain sync —source brain —retry-failed
恢复策略:嵌入暂不可用时先同步文本,服务恢复后再补齐 stale embedding。
05
RECOVERY & MAINTENANCE写错先回退;升级前先导出;维护任务分开看
版本与删除
gbrain history concepts/brand-radar
gbrain revert concepts/brand-radar <version_id>
gbrain delete concepts/brand-radar
gbrain get concepts/brand-radar --include-deleted
运行与知识质量
gbrain doctor --fast
gbrain doctor
gbrain advisor
gbrain orphans --count
gbrain lint ~/brain
gbrain check-backlinks check ~/brain
升级与备份
gbrain export --dir ./gbrain-export
gbrain check-update --json
gbrain upgrade
gbrain dream --dry-run
gbrain dream
重要区别:doctor 的规范告警,不自动等于数据库和关键词搜索不可用;GBrain dream 也不是 OpenClaw 的 Memory Dreaming Promotion。
06
OPENCLAW ACCEPTANCE配置存在、服务可连、插件加载和自动召回是四种不同证据
L1MCP 配置openclaw mcp show gbrain —json
L2真实连接openclaw mcp doctor gbrain —probe
L3工具能力openclaw mcp probe gbrain —json
L4插件与 slotopenclaw plugins inspect gbrain-context-engine —runtime
L5新会话行为不手动要求搜索,仍能召回独特事实
openclaw config get plugins.slots.contextEngineopenclaw mcp reloadopenclaw gateway restartopenclaw gateway health

出了问题,不要把所有故障都叫做“没生效”

很多现象看起来都像 GBrain 没有工作,但可能分别发生在 source、同步、检索、MCP、Context Engine 或 Signal Detector。正确排查方式不是反复重启,而是逐层拿证据。

CHAPTER 05 · DIAGNOSTICS每层先证明正常,再进入上一层
故障诊断
  1. 01
    source 与同步gbrain status
    证据:目标 source 存在,最近同步有记录
  2. 02
    页面与检索gbrain search “确定存在的关键词” —limit 3
    证据:目标页面真实返回
  3. 03
    数据库与质量gbrain doctor —fast
    证据:核心存储和检索检查正常
  4. 04
    MCP 传输openclaw mcp doctor gbrain —probe
    证据:服务启动并完成握手
  5. 05
    插件与 slotslot = gbrain-context
    证据:插件 loaded,Context Engine 正确
  6. 06
    自动召回行为新会话 + 独特事实
    证据:回答与日志都证明注入发生
装了 MCP,但新会话不自动想起只完成了主动工具层

检查 Context Engine 是否切到 gbrain-context

插件正常,slot 仍然不生效插件 ID 和 Engine ID 混淆

gbrain-context-engine 是插件;gbrain-context 才是 slot 值。

Context Engine loaded,但没有注入prompt / messages 参数差异

当前版本需要在插件边界把 prompt 临时补成 user message。

每开新会话就卡约 30 秒PGLite 多进程锁冲突

多 session 场景改用 PostgreSQL 17。

Skill 存在,但从不自动写入triggers 不是系统事件

使用宿主侧 message_received hook。

模型说写入成功,brain 里却搜不到写入落到了 default source

MCP 必须设置 GBRAIN_SOURCE=brain,并真实检查 source_id

第 2 层失败留在 GBrain 内排查

处理文件入库、source、同步和搜索,不要反复改 OpenClaw 插件。

第 4 层通过,第 6 层失败转向 Context Engine

MCP 已能主动读写,重点检查插件、slot、Retrieval Reflex 和真实注入。

真正使用起来,会发生什么变化?

长期记忆最明显的价值,不是让模型突然变聪明,而是减少背景重复,让历史决定继续参与今天的判断。

CHAPTER 06 · REAL USE从重复介绍背景,变成带着历史继续工作
实际使用
场景一维护个人博客
以前

每次重新说明博客定位、目录结构、视觉要求和默认发布规则。

现在

相关任务出现时,自动召回写作偏好、历史改造和已确认决策。

博客定位写作偏好发布规则视觉历史
场景二长期开发项目
容易丢失

为什么没选方案 A?之前遇到什么问题?这个设计怎样决定?

长期保留

失败原因、方案取舍和后续边界可以在新会话中继续使用。

历史决策失败原因架构取舍维护边界

我现在故意没有开启的功能

当前系统已经可以正常体验,但我没有一次把所有功能开满。先稳定最小闭环,再决定是否增加更复杂的后台能力。

暂不启用ZeroEntropy Embeddingembedding_disabled = true

关键词搜索、实体召回和 MCP 查询仍可使用。先观察基础召回质量,再决定是否需要完整语义检索。

暂不恢复AutopilotAutopilot: not running

先确认 GBrain 到底记了什么、召回是否准确,再增加后台维护循环。

当前原则:Embedding、reranker、Autopilot 都可以后补,但自动想起和自动记住必须先真的跑通。

最终验收:不要只看插件是否 loaded

配置完成后,我不会只看进程是否启动,而是按两条闭环做真实验收。

基础健康检查可以先运行:

openclaw health
openclaw mcp doctor
gbrain status

我当时的本机状态是:

GBrain 0.42.57.0
brain source: pages=1
Embedding: 0%
Autopilot: not running
MCP: gbrain ok

但这些只说明服务状态,真正重要的是行为。

CHAPTER 07 · ACCEPTANCE只有两条闭环都经过真实测试,才算完成
最终验收
01自动召回

新会话不主动要求搜索,提到已知实体时仍能看到历史知识。

02主回复不被阻塞

发送长期观点后,主 Agent 先正常回复,不等待后台记忆完成。

03自动写入

几秒后 Signal Detector 完成捕获,数据库出现新页面。

04写入正确 source

真实检查 source_id = brain,不只相信模型回复。

05多会话稳定

多个会话同时运行时,不再出现 PGLite 锁等待和 30 秒超时。

闭环成立

自动想起 + 自动记住,GBrain 才真正成为 OpenClaw 的长期大脑。

自动召回用户消息 → Context Engine → Retrieval Reflex → 长期知识注入
自动记忆用户消息 → message_received → Signal Detector → GBrain 写入

这套方案最终保留的原则很简单:先让最小闭环稳定,再增加复杂能力。