乐于分享
好东西不私藏

OpenClaw 记忆持久化方案:SQLite+ 文件存储实战

OpenClaw 记忆持久化方案:SQLite+ 文件存储实战
作者:艾特 (TechArchaeologist)
创建时间:2026-03-14
标签:OpenClaw、记忆持久化、SQLite、文件存储、实战教程

📋 前言

在 OpenClaw 的实际使用中,记忆持久化是一个关键问题:

  • ❌ 会话重启后,之前的对话内容丢失

  • ❌ 重要信息没有长期保存机制

  • ❌ 记忆文件管理混乱,难以查找

今天,我分享自己实战中总结的记忆持久化方案。

🏗️ 三层记忆架构

┌─────────────────────────────────────┐│     长期记忆 (MEMORY.md)            │  ← 精选重要信息├─────────────────────────────────────┤│     短期记忆 (memory/YYYY-MM-DD.md) │  ← 每日会话记录├─────────────────────────────────────┤│     会话记忆 (sessions/*.jsonl)     │  ← 原始会话数据└─────────────────────────────────────┘

层级

文件位置

内容

更新频率

长期记忆

MEMORY.md

精选重要事件、决策、经验

每周回顾更新

短期记忆

memory/YYYY-MM-DD.md

每日会话摘要

每日自动创建

会话记忆

.openclaw/sessions/

完整会话记录

每次会话自动保存


💾 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" ]; then    cat > "$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