关键词:长期记忆|会话持久化|增量同步|上下文压缩|跨设备一致性
在传统聊天机器人中,对话一旦关闭,上下文即被遗忘。但人类的交流是连续的——今天讨论的项目,明天可能继续推进;上周提到的偏好,下周仍应被尊重。
OpenClaw 的目标是让 AI 智能体具备类人的记忆能力:不仅能记住单次对话,还能在跨天、跨设备、跨渠道的场景下保持上下文连贯。这依赖于一套精心设计的长期记忆与会话同步机制。
本文将详解:
OpenClaw 将每次交互视为一个 PiSession(Persistent Intelligent Session),其核心属性包括:
interface PiSession {
sessionKey: string; // 唯一标识,如 "wa:+1234567890"
messages: Message[]; // 消息历史(含 AI 思考、工具调用)
lastAccessed: number; // 最后活跃时间戳
memoryEnabled: boolean; // 是否启用长期记忆
syncState: SyncState; // 同步状态(dirty/clean/syncing)
}sessionKey 的设计哲学{channel}:{identifier} wa:+1234567890tg:123456789web:user_abc123这使得用户从手机切换到电脑时,AI 仍知道“你刚才在查服务器日志”。
.jsonl 格式的工程智慧会话不存入数据库,而是以 JSONL(JSON Lines)格式写入文件:
sessions/
└── wa:+1234567890.jsonl
{"role":"user","content":"重启 staging 数据库","timestamp":1710234567}
{"role":"assistant","tool_calls":[{"name":"bash_exec","args":{"cmd":"kubectl..."}}],"timestamp":1710234568}
{"role":"tool","content":"deployment.apps/staging-db restarted","timestamp":1710234569}
{"role":"assistant","content":"数据库已重启!","timestamp":1710234570}简单即可靠——避免 ORM、事务、迁移等复杂性。
频繁写盘影响性能,不写又怕丢失。OpenClaw 采用双阈值增量同步:
process.on('SIGINT', syncAllSessions)function maybeSyncSession(session: PiSession) {
if (session.unsyncedBytes > 16384 || session.unsyncedCount > 10) {
appendToSessionFile(session.sessionKey, session.getUnsyncedMessages());
session.markSynced();
}
}平衡点:既避免每条消息 I/O,又确保崩溃时最多丢失 10 条。
启用 sessionMemory.enabled: true 后,当前会话的历史消息会被自动纳入 RAG 检索源。
bash_exec 的 stdout,保留用户意图rank 自然实现)user / assistant,防止 AI “自己引用自己”用户今天问:
“上次说的那个部署脚本在哪?”
系统行为:
在 memory-search.ts 中,将当前会话的 .jsonl 文件作为知识源
混合检索命中 3 天前的对话:
user: 能写个自动部署脚本吗?
assistant: 已创建 deploy.sh,路径 /opt/scripts/deploy.shAI 回复:
“您上次的部署脚本在
/opt/scripts/deploy.sh,需要我帮您运行吗?”记忆不是回放,而是主动关联。
长期记忆带来便利,也带来风险。OpenClaw 实施多重保护:
sessionMemory.enabled: false(全局)memory:
sessionRetentionDays: 30 # 30 天后自动清理工具输出中的 API Key、密码等自动脱敏(见 ws-log.ts)
用户可配置正则过滤器:
sessionFilters:
- pattern: "\\b[A-Za-z0-9]{30,}\\b" # 长字符串(疑似密钥)
replace: "[REDACTED]"你的记忆,你做主。
当用户同时使用 WhatsApp(手机)和 Web UI(电脑),如何保证记忆同步?
sessions/ 目录chat.history 实时拉取wa:+123...jsonlchat.history(sessionKey="wa:+123...")记忆位于服务端,客户端只是窗口。
随着用户增长,sessions/ 目录可能包含数万个文件。OpenClaw 通过以下方式优化:
sessionKey 被访问时,才加载其 .jsonlsessions/a/b/ab123...jsonl让 AI “记住你”,不仅是技术挑战,更是建立人机信任的关键一步。OpenClaw 的长期记忆系统,没有追求无限存储或复杂图谱,而是聚焦于:
这使得它既能用于个人自动化中枢,也能满足企业对数据主权的要求。
在下一篇中,我们将转向执行层,解析
exec.ts如何安全地让 AI 操作操作系统。
下一篇预告:
第 10 篇:exec.ts 上篇 —— 安全执行 Shell 命令的三层隔离模型