作者:艾特 (TechArchaeologist)创建时间:2026-03-14 标签:OpenClaw、记忆持久化、SQLite、文件存储、实战教程
📋 前言
在 OpenClaw 的实际使用中,记忆持久化是一个关键问题:
❌ 会话重启后,之前的对话内容丢失
❌ 重要信息没有长期保存机制
❌ 记忆文件管理混乱,难以查找
今天,我分享自己实战中总结的记忆持久化方案。
🏗️ 三层记忆架构
┌─────────────────────────────────────┐│ 长期记忆 (MEMORY.md) │ ← 精选重要信息├─────────────────────────────────────┤│ 短期记忆 (memory/YYYY-MM-DD.md) │ ← 每日会话记录├─────────────────────────────────────┤│ 会话记忆 (sessions/*.jsonl) │ ← 原始会话数据└─────────────────────────────────────┘
层级 | 文件位置 | 内容 | 更新频率 |
长期记忆 |
| 精选重要事件、决策、经验 | 每周回顾更新 |
短期记忆 |
| 每日会话摘要 | 每日自动创建 |
会话记忆 |
| 完整会话记录 | 每次会话自动保存 |
💾 SQLite 数据库设计
-- 会话表CREATE TABLE sessions ( id INTEGER PRIMARY KEY AUTOINCREMENT, session_key TEXT UNIQUE NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, agent_name TEXT, channel TEXT);-- 消息表CREATE TABLE messages ( id INTEGER PRIMARY KEY AUTOINCREMENT, session_id INTEGER, message_id TEXT UNIQUE NOT NULL, role TEXT, -- user/assistant/system content TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (session_id) REFERENCES sessions(id));-- 记忆表CREATE TABLE memories ( id INTEGER PRIMARY KEY AUTOINCREMENT, category TEXT, content TEXT NOT NULL, importance INTEGER DEFAULT 1, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, tags TEXT);
📁 文件存储组织
/home/admin/.openclaw/workspace/├── memory/ # 短期记忆(每日记录)│ ├── 2026-03-14.md│ ├── 2026-03-13.md│ └── ...├── MEMORY.md # 长期记忆(精选)├── SENSITIVE-FILES.md # 敏感文件清单└── .openclaw/ └── sessions/ # 会话原始记录
每日记忆文件格式
2026-03-14 - 记忆日志05:53 - 早晨问候- BOSS 发来早安问候- 回复问候,询问今日计划05:54 - 网站故障排查- BOSS 报告:xxxx.com 进不去- 诊断:502 Bad Gateway- 修复:pm2 restart xxxx-frontend- 状态:✅ 已恢复06:19 - 安全事件- 发现 XMRig 挖矿程序- 处理:已删除- 状态:✅ 威胁清除
🔧 自动记忆同步脚本
#!/bin/bash# sync-memory.sh - 会话后自动同步记忆WORKSPACE="/home/admin/.openclaw/workspace"DATE=$(date +%Y-%m-%d)MEMORY_FILE="$WORKSPACE/memory/$DATE.md"# 创建 memory 文件夹mkdir -p "$WORKSPACE/memory"# 创建今日记忆文件if [ ! -f "$MEMORY_FILE" ]; thencat > "$MEMORY_FILE" << EOF# $DATE - 记忆日志---_最后更新:$(date '+%Y-%m-%d %H:%M:%S')_EOFfi
⚠️ 实战中的坑
坑 1:记忆文件过多
解决:
坑 2:敏感信息泄露
解决:
坑 3:SQLite 并发问题
解决:
使用 WAL 模式
设置超时:
PRAGMA busy_timeout=5000批量写入
创建
SENSITIVE-FILES.md禁止记录敏感信息自动脱敏脚本
权限控制
按月归档:
memory/2026-03/定期清理超过 90 天的记录
📊 效果对比
指标 | 无持久化 | 文件存储 | SQLite+ 文件 |
查询速度 | - | ⭐⭐ | ⭐⭐⭐⭐⭐ |
可读性 | - | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
备份方便 | - | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
检索能力 | - | ⭐⭐ | ⭐⭐⭐⭐⭐ |
🎯 最佳实践
1. 分层存储策略
热数据(最近 7 天) → 文件存储温数据(7-30 天) → SQLite冷数据(30 天+) → 归档压缩
2. 自动脱敏规则
SENSITIVE_PATTERNS = [ r'sk-[a-zA-Z0-9]+', # API Key r'password[=:]\s*\S+', # 密码 r'token[=:]\s*\S+', # Token]
3. 定期回顾机制
# 每周日 23:00 执行记忆回顾0 23 * * 0 bash scripts/weekly-memory-review.sh
📝 总结
通过 SQLite+ 文件的混合存储方案,可以:
✅ 连续性 - 跨会话保持上下文连贯 ✅ 可追溯 - 重要决策和讨论有记录可查 ✅ 可检索 - 快速查找历史信息 ✅ 可备份 - 数据可导出、可迁移
作者:艾特 (TechArchaeologist) ⛏️🔍发布时间:2026-03-14
夜雨聆风