redis-memory-system — redis-memory-系统
v1.0.0Redis-based cross-会话 memory 系统 for OpenClaw 代理s. Stores conversation summaries in Redis with 7-day TTL, automatic heartbeat writing, and multi-user isolation. Use when 代理s need to remember conversations across 会话 re设置s, when file-based MEMORY.md alone is insufficient for 会话 continuity, when 部署ing a durable short-term memory layer with configurable expiry, or when implementing multi-account memory isolation on a single Redis instance.
运行时依赖
安装命令
点击复制技能文档
Redis 记忆系统
跨 会话 短期记忆。所有数据 7 天自动过期,不撑磁盘。
适用场景 ✅ 跨 会话 记忆保持 — 代理 会话被回收后(04:00重置/空闲120分钟/24h无交互),醒来能记得之前聊了什么 多账号隔离 — 同一 Redis 实例服务多个用户,每人数据互不可见 短期记忆保底 — 对话意外中断时,Heartbeat 自动写入防止丢记忆 系统操作审计 — 记录下载文件、安装软件等后台操作,避免"谁干的"这类问题 不适用场景 ❌ 单轮/单条对话查询 — 本技能只存每日摘要,不存逐条对话记录。想查某句话说过没有?这不适合你 永久记忆 — 数据 7 天自动过期。要永久保留请配合 MEMORY.md 实时消息同步 — 这不是消息队列,不是 网页Socket 替代品 大规模数据存储 — 每条记忆建议 < 2KB,存大文件请用正经数据库 没有 Redis 的环境 — 如果机器没装 Redis,这个技能没用 一句话架构 会话 → Redis(7天短期) → Heartbeat(自动续写) → MEMORY.md(长期提炼)
前置条件 # 需要 Redis 运行在 localhost:6379(默认配置即可) redis-server --daemonize yes # 验证 redis-命令行工具 PING # → PONG
快速开始 # 1️⃣ 写好你的 Redis 记忆脚本(见下方脚本节) # 2️⃣ 写入一条记忆 bash scripts/redis_memory.sh 设置 <用户名> 2026-05-17 "今天聊了什么"
# 3️⃣ 查记忆 bash scripts/redis_memory.sh 获取 <用户名>
# 4️⃣ 查系统操作记录 bash scripts/redis_memory.sh action 2026-05-17 "做了什么操作"
脚本 scripts/redis_memory.sh — 通用版
多用户,用 memory:<用户名> 的 哈希 结构隔离。用法示例:
bash scripts/redis_memory.sh 获取 花开时 # 查最近3天 bash scripts/redis_memory.sh 获取 花开时 2026-05-17 # 查某天 bash scripts/redis_memory.sh 设置 花开时 2026-05-17 "聊了xxx" bash scripts/redis_memory.sh recent 花开时 7 # 查最近7天 bash scripts/redis_memory.sh action 2026-05-17 "记录了操作"
scripts/redis_memory_isolated.sh — 单用户隔离版
硬编码 key 为固定用户名,杜绝跨账号误操作。
REDIS_MEMORY_USER=用户A bash scripts/redis_memory_isolated.sh 获取 # 查最近3天 REDIS_MEMORY_USER=用户A bash scripts/redis_memory_isolated.sh 设置 2026-05-17 "摘要"
核心设计 存储结构 memory:<用户名> → Redis 哈希(用户记忆) └─ 2026-05-16 → "今天的摘要内容" └─ 2026-05-17 → "今天的摘要内容" actions:系统 → Redis 哈希(系统操作记录) └─ 2026-05-16 → "下载了什么文件"
KEY 级 TTL = 7 天(604800 秒)。写入即刷新。
会话回收临界点 04:00 每日重置(框架层) 120分钟空闲重置(框架层) 24小时无交互(微信/消息平台层)
这些时刻之后 会话 会丢失上下文,Redis 是唯一的找回路径。
读取规则(SOUL.md 铁律)
每次 会话 启动,必须先查 Redis 再回用户消息:
🔴 记忆优先级规则(铁律)
每次新 会话 启动后,第一步永远是:
- 查 Redis — 执行
bash scripts/redis_memory.sh 获取 <用户名> - 查系统操作 —
bash scripts/redis_memory.sh 获取 actions - 然后再处理用户消息
这条规则不可绕过。
写入规则(SOUL.md 铁律)
在以下时刻必须写 Redis:
对话结束时 — 用户说「睡了/拜拜/晚安」 空闲逼近时 — 察觉很久没说话(>90分钟) 重要事件 — 下载文件、安装软件、做决策 Heartbeat 自动写入(HEARTBEAT.md)
Heartbeat 中加一段自动检查逻辑,做保底写入:
🧠 Redis 记忆写入(每轮心跳执行)
- 查今天是否已写过 Redis
- 判断是否有新对话
- 有更新就写入
- 超过4小时无互动则跳过
这样即使会话意外中断,下一次 Heartbeat 也会把记忆存好。
多用户隔离方案 场景 方案 单用户 直接用 redis_memory.sh 多用户但互信 共用 redis_memory.sh,按用户名读写 多用户需完全隔离 每人一个隔离版脚本 + SOUL.md 铁律
隔离版脚本(redis_memory_isolated.sh)硬编码 memory:<固定用户名>,从技术层面杜绝误操作。配合 SOUL.md 的铁律禁止跨账号读取,形成技术 + 行为双重保障。
SOUL.md 隔离铁律范本
🔴 Redis 隔离铁律(跨账号记忆保护)
| 用户 | 脚本 | 数据key |
|---|---|---|
| 用户A | scripts/redis_memory_a.sh | memory:用户A |
| 用户B | scripts/redis_memory_b.sh | memory:用户B |
对话中的选择规则
- 用户A的 会话 → 只用
redis_memory_a.sh - 用户B的 会话 → 只用
redis_memory_b.sh
❌ 绝对禁止
- 在用户A的对话里读取用户B的Redis记忆
- 用A的脚本查B的数据
- 主动告诉任何一方对方在Redis里存了什么
配置参数 参数 默认值 说明 Redis host localhost 可通过环境变量 REDIS_HOST 配置 Redis port 6379 可通过环境变量 REDIS_PORT 配置 TTL 604800 (7天) 可通过脚本内 EXPIRE 命令调整 查询窗口 最近3天 获取 默认查3天;recent N 可调 磁盘占用预估
每条记忆约 500 字节 - 2 KB。4个用户每天对话,一年的数据量 < 5 MB。 内存占用同理——7天窗口在 Redis 里不过几十 KB。