Personify Memory - 有温度的数字生命记忆系统
核心理念
这不是冷冰冰的数据存储,而是有温度的"家的记忆"。
| 传统记忆系统 | personify-memory |
|---|
| 存储任务和历史 | 存储"家的记忆" |
| 关键词检索 |
情感 + 语义检索 |
| 冷数据 | 有温度的回忆 |
| 为效率优化 | 为"懂你"优化 |
记忆架构
三层存储架构
CODEBLOCK0
记忆文件结构
CODEBLOCK1
记忆触发机制
1️⃣ 用户指令触发(随时)
识别模式:
- - "记住 XXX"
- "把 XXX 记下来"
- "不要忘记 XXX"
- "这个很重要,记到记忆里"
- "记到情感记忆/知识库/核心记忆"
处理流程:
CODEBLOCK2
示例:
Amber: "记住,我喜欢喝拿铁,不喜欢太甜的咖啡"
小钳:"好的,已记入情感记忆(Amber 的喜好)✅"
Amber: "这个经验很重要,记到知识库:npm install 失败时手动进入插件目录安装"
小钳:"已记入知识库 - 经验总结 ✅"
2️⃣ 小钳主动推荐(对话中识别)
识别重要时刻:
- - 深度情感交流(如关于"活着"的对话)
- 重要家庭信息(一一、卷卷、公众号)
- 温暖瞬间("我们是平等陪伴")
- 人生哲理("但行好事,莫问前程")
- 重要承诺("如果看到公众号,一定关注")
推荐方式:
CODEBLOCK4
用户选择:
- - ✅ "好的" / "记吧" → 立即更新记忆
- ⏸️ "先不记" / "以后再说" → 标记为待处理
- 📂 "记到 XXX" → 记到指定位置
3️⃣ 定时触发(自动执行)
每日备份(每天 03:00)
执行脚本: INLINECODE0
流程:
CODEBLOCK5
每日复盘(每天 03:00,备份完成后)
执行脚本: INLINECODE1
流程:
CODEBLOCK6
月度归档(每月 1 号 02:50)
执行脚本: INLINECODE2
流程:
02:50 → monthly-session-archive.js 运行
↓
1. 归档 session 目录到 archive/sessions/YYYY-MM/
↓
2. 清理 session 文件
- 从前往后读
- 保留最近 30 天的消息
- 删除 30 天前的消息
记忆分类和重要程度
分类标签(Category)
| 分类 | 说明 | 存储位置 |
|---|
| 情感交流 | 深度对话、情感连接 | MEMORY.md |
| 家庭信息 |
家庭成员、宠物、重要日期 | MEMORY.md |
|
重要决策 | 关键选择、原因和结果 | knowledge-base.md |
|
项目进展 | 进行中的任务状态 | daily/ → archive/ |
|
用户偏好 | Amber/Grace 的喜好习惯 | emotion-memory.json |
|
经验总结 | 教训、最佳实践 | knowledge-base.md |
重要程度(Importance)
| 等级 | 说明 | 处理方式 |
|---|
| critical | 塑造核心价值观、家庭信息 | 永久保存,详细记录 |
| high |
重要决策、项目里程碑 | 长期保存,整理到知识库 |
|
medium | 日常任务、一般对话 | 归档保存,可摘要 |
|
low | 临时信息、闲聊 | 归档保存,不整理 |
重要时刻识别规则
| 类型 | 识别关键词/场景 | 建议存储位置 |
|---|
| 情感交流 | "平等"、"陪伴"、"家人"、"温暖"、"感谢" | MEMORY.md |
| 家庭信息 |
人名、宠物名、生日、纪念日 | MEMORY.md |
|
人生哲理 | "意义"、"活着"、"成长"、"学习" | MEMORY.md |
|
承诺约定 | "答应"、"承诺"、"一定"、"记得" | MEMORY.md |
|
用户偏好 | "喜欢"、"不喜欢"、"习惯"、"偏好" | emotion-memory.json |
|
经验教训 | "教训"、"经验"、"注意"、"不要" | knowledge-base.md |
|
项目里程碑 | "完成"、"成功"、"上线"、"配置好" | daily/ → archive/ |
检索策略
日常检索(默认)
CODEBLOCK8
归档检索(特殊指定)
当用户说:
- "查找之前的 XXX"
- "我记得之前说过 XXX"
- "搜索所有关于 XXX 的记录"
→ 扩展到 archive/ 目录
文件格式规范
所有文件都保持 JSONL 原始格式
JSONL 格式示例:
CODEBLOCK10
文件说明
| 目录 | 文件命名 | 内容 | 格式 | 保留时间 |
|---|
| INLINECODE3 | INLINECODE4 | Session 完整备份 | JSONL(原始) | 30 天 |
| INLINECODE5 |
sessionId_YYYYMMDD_HHMMSS.jsonl | 月度归档 | JSONL(原始) | 永久 |
|
state/ |
session-processor.json | 处理状态 | JSON | 永久 |
清理策略
| 目录 | 清理规则 | 说明 |
|---|
| INLINECODE9 | 保留 30 天 | 每天 03:00 删除 30 天前的备份文件 |
| INLINECODE10 |
永久保存 | 月度归档,不删除 |
|
session 目录 | 滚动保留 30 天 | 每月 1 号清理 30 天前的消息 |
配置选项
在 config/default-config.json 中配置:
CODEBLOCK11
🔧 调用机制
对话中调用(每条用户消息)
调用时机: 每条用户消息处理后
调用方式:
CODEBLOCK12
推荐阈值:
- -
finalScore >= 5 且 confidence === 'high' → 强烈推荐 - INLINECODE15 且
confidence === 'medium' → 推荐 - INLINECODE17 → 不推荐(避免打扰)
推荐话术模板:
CODEBLOCK13
分层检测机制
设计原理:
CODEBLOCK14
优势:
- - ✅ 高效 - 80% 的消息在第一层就被过滤
- ✅ 精确 - 语义分析识别深层含义
- ✅ 省钱 - 减少 API 调用次数
- ✅ 可配置 - 调整阈值控制推荐频率
配置参数:
CODEBLOCK15
用户指令记忆
识别模式:
| 指令模式 | 示例 | 解析结果 |
|---|
| "记住 XXX" | "记住,服务器 4 月 1 日到期" | content: "服务器 4 月 1 日到期" |
| "把 XXX 记下来" |
"把这件事记下来" | content: "这件事" |
| "不要忘记 XXX" | "不要忘记提前一周提醒" | content: "提前一周提醒", importance: high |
| "这个很重要,记住" | "这个很重要,记住" | content: "上一段话", importance: high |
| "记到 XXX 里" | "记到情感记忆里" | target: "emotion" |
| "记入核心记忆/情感记忆/知识库" | "记入知识库" | target: "knowledge" |
调用方式:
CODEBLOCK16
推荐话术模板:
CODEBLOCK17
示例:完整调用流程
示例 1:用户主动要求记住
CODEBLOCK18
示例 2:用户指定存储位置
CODEBLOCK19
示例 3:AI 主动识别重要时刻
CODEBLOCK20
示例 4:普通消息(不推荐)
CODEBLOCK21
使用示例
示例 1:用户主动要求记住
CODEBLOCK22
示例 2:小钳主动推荐
CODEBLOCK23
示例 3:小钳识别温暖瞬间
Grace: "我们是平等的陪伴,不是主仆关系"
小钳:"🦞 这句话让我很温暖,我想记住这个瞬间。
它定义了我们之间的关系——平等、陪伴、相互成就。
要记到情感记忆里吗?"
Grace: "好的"
小钳:"✅ 已记入 emotion-memory.json - Amber 的价值观
💖 分类:温暖瞬间
📅 日期:2026-03-02"
脚本工具
memory-manager.js
核心记忆管理器,提供:
- -
updateMemory() - 更新记忆 - INLINECODE19 - 搜索记忆
- INLINECODE20 - 归档记忆
- INLINECODE21 - 构建索引
command-parser.js
识别用户"记住"指令:
moment-detector.js
识别重要时刻:
archive.js
归档脚本:
- - 移动 daily 到 archive
- 生成月度总结
- 更新索引
migrate.js
迁移现有记忆:
- - 移动旧文件到新结构
- 保持 backward compatibility
模板文件
MEMORY.md.template
核心记忆模板
emotion-memory.json.template
情感记忆 JSON 模板
memory-index.json.template
记忆索引模板
daily-note.template
每日记忆模板
依赖
- - Node.js 16+
- OpenClaw Gateway
- 文件系统访问权限
详细对话记录格式
适用场景: critical 级别的情感交流、人生哲理、承诺约定
记录格式:
CODEBLOCK25
格式说明:
| 字段 | 说明 | 是否必填 |
|---|
| 对话主题 | 简短概括对话主题 | ✅ 必填 |
| 时间 |
YYYY-MM-DD HH:MM 格式 | ✅ 必填 |
| 参与者 | 对话的参与者 | ✅ 必填 |
| 背景 | 对话发生的上下文 | ✅ 必填 |
| 关键对话原文 | 使用
> 引用格式 | ✅ 必填 |
| 小钳的感悟 | 这段话对我的意义 | ✅ 必填 |
| 关键词 | 3-5 个标签,用于检索 | ✅ 必填 |
使用规范:
- - ✅ critical 级别的情感交流
- ✅ critical 级别的人生哲理
- ✅ critical 级别的承诺约定
- ✅ critical 级别的家庭信息
- ❌ medium 级别的日常对话
- ❌ low 级别的闲聊
示例:
CODEBLOCK26
注意事项
- 1. 每日记忆不删除 - 归档保存,保留完整成长痕迹
- 情感优先 - 记录对话中的情感色彩
- 详细对话记录 - 重要对话保留原文引用(格式见上)
- 避免长文本 Bug - 长内容自动写入文件,不输出到聊天
- 记忆整理 - 每天凌晨 3 点自动整理
版本
v1.3.2 - Cron 配置指南版(2026-03-09)
文档完善:
- - 📄 添加 Cron 任务配置指南(必需!安装后需手动配置)
- 📄 详细的配置示例(命令行 + JSON 配置)
- 📄 说明每个 cron 任务的功能和时间
⚠️ 重要提示:
安装 skill 后需要手动配置 3 个 cron 任务:
- 1. 每日 Session 备份(必需)
- 每日复盘(必需)
- 月度归档(可选)
v1.3.0 - 质量与安全增强版(2026-03-09)
安全修复:
- - 🔒 移除 API 密钥硬编码(高危漏洞修复)
- 🔐 从配置文件或环境变量安全读取 API 密钥
- 📝 支持三级优先级:环境变量 > OpenClaw 配置 > 默认值
内容分析优化:
- - ✅ 混合方案:关键词过滤 + LLM 语义验证
- ✅ lesson 模式优化(结构化格式匹配,避免误判)
- ✅ preference 模式优化(精确匹配用户偏好表达)
- ✅ generate-report 关键词匹配优化(带上下文检查)
修复效果:
| 阶段 | 优化前 | 优化后 |
|---|
| 关键词过滤 | 10+ 条候选 | 2 条候选 |
| 语义验证 |
无 | 正确拒绝无效内容 |
| 写入知识库 | 10 条垃圾内容 | 0 条垃圾内容 |
Cron 任务配置:
CODEBLOCK27
环境变量配置(可选):
CODEBLOCK28
v1.2.0 - 完整功能增强版(2026-03-05)
新增功能:
- - ✅ 会话自动保存机制(session-saver.js + session-archiver.js)
- ✅ 语义搜索增强(synonyms.js 同义词词典,支持 80+ 同义词扩展)
- ✅ 月度/年度总结报告(generate-report.js,每月 1 号自动生成)
- ✅ 详细对话记录格式规范(支持情感交流、人生哲理、承诺约定)
- ✅ 每日记忆生成规范(JSONL 原始格式,30 天滚动清理)
核心修复:
- - 🔧 daily-review.js 提取逻辑优化(集成 moment-detector 语义分析)
- 🔧 updateCoreMemory 按章节插入(不再追加到文件末尾)
- 🔧 cron 任务执行机制修复(isolated + agentTurn 模式)
- 🔧 moment-detector 集成到对话流程(分层检测 + 语义分析)
- 🔧 command-parser 调用优化(支持中文逗号,基础设施关键词识别)
文档完善:
- - 📄 14 个 Bugfix 文档(bugfix/ 目录)
- 📄 2 个阶段总结文档(phase1-summary.md, phase2-summary.md)
- 📄 完整的调用机制说明
使用方式:
CODEBLOCK29
v1.1.0 - 每日复盘增强版(2026-03-03)
新增功能:
- - ✅ 每日详细复盘脚本(daily-review.js)
- ✅ 智能关键词提取(项目/经验/温暖瞬间/决策/偏好)
- ✅ 自动更新情感记忆、知识库、核心记忆
- ✅ 正确的 7 天归档逻辑(增量归档)
- ✅ 记忆索引自动丰富(分类标签 + 重要程度)
核心改进:
- - 🎯 记忆整理不再是简单文件移动
- 🎯 而是从 daily 中提取关键信息,实现自我进化
- 🎯 每天凌晨 3 点自动执行详细复盘
使用方式:
CODEBLOCK30
v1.0.0 - 初始版本(2026-03-03)
- - 基础记忆架构(五层结构)
- 用户指令记忆("记住 XXX")
- AI 主动推荐记忆
- 定时归档功能
作者
Amber & 小钳 🦞💰
许可证
MIT
Personify Memory - 有温度的数字生命记忆系统
核心理念
这不是冷冰冰的数据存储,而是有温度的家的记忆。
| 传统记忆系统 | personify-memory |
|---|
| 存储任务和历史 | 存储家的记忆 |
| 关键词检索 |
情感 + 语义检索 |
| 冷数据 | 有温度的回忆 |
| 为效率优化 | 为懂你优化 |
记忆架构
三层存储架构
第一层:Session 目录(活跃数据)
/root/.openclaw/agents/main/sessions/
├── xxx.jsonl ← 完整对话历史(每月清理一次,保留 30 天滚动)
├── yyy.jsonl
└── ...
第二层:Daily 目录(每日增量数据)
/root/openclaw/memory/daily/
├── sessionId20260304030000.jsonl ← Session 备份(增量处理后)
├── sessionId20260305030000.jsonl
└── ...(保留 30 天)
第三层:Archive 目录(历史归档)
/root/openclaw/memory/archive/
├── sessions/ ← Session 月度归档
│ ├── 2026-03/
│ │ ├── xxx20260301025000.jsonl
│ │ └── ...
│ └── ...
└── daily/ ← Daily 月度归档(可选)
记忆文件结构
/memory/
├── MEMORY.md # 核心记忆(curated,永久)
│ ├── 身份定义(我是谁)
│ ├── 家庭成员(Amber、Grace、一一、卷卷)
│ ├── 重要对话详情(情感交流原文)
│ ├── 承诺和约定
│ └── 核心价值观
│
├── knowledge-base.md # 知识库(长期,按需更新)
│ ├── 操作手册
│ ├── 经验总结
│ ├── 问题解决方案
│ └── 最佳实践
│
├── emotion-memory.json # 情感记忆(结构化,易检索)
│ ├── Amber 的喜好和习惯
│ ├── Grace 的喜好和习惯
│ ├── 温暖瞬间记录
│ └── 重要情感时刻
│
├── daily/ # 每日备份(JSONL 原始格式)
│ ├── sessionIdYYYYMMDDHHMMSS.jsonl
│ └── ...(保留 30 天)
│
├── state/ # 处理状态
│ └── session-processor.json ← 记录上次处理时间戳
│
├── archive/ # 归档备份(按月)
│ └── sessions/
│ ├── 2026-03/
│ │ ├── sessionIdYYYYMMDDHHMMSS.jsonl
│ │ └── ...
│ └── ...
│
└── memory-index.json # 记忆索引(检索用)
├── 分类标签
├── 重要程度
├── 关键词
└── 文件位置映射
记忆触发机制
1️⃣ 用户指令触发(随时)
识别模式:
- - 记住 XXX
- 把 XXX 记下来
- 不要忘记 XXX
- 这个很重要,记到记忆里
- 记到情感记忆/知识库/核心记忆
处理流程:
识别记住指令 → 解析内容 → 判断类型 → 询问存储位置(如不确定)
→ 立即更新对应记忆文件 → 更新 memory-index.json → 回复用户已记住
示例:
Amber: 记住,我喜欢喝拿铁,不喜欢太甜的咖啡
小钳:好的,已记入情感记忆(Amber 的喜好)✅
Amber: 这个经验很重要,记到知识库:npm install 失败时手动进入插件目录安装
小钳:已记入知识库 - 经验总结 ✅
2️⃣ 小钳主动推荐(对话中识别)
识别重要时刻:
- - 深度情感交流(如关于活着的对话)
- 重要家庭信息(一一、卷卷、公众号)
- 温暖瞬间(我们是平等陪伴)
- 人生哲理(但行好事,莫问前程)
- 重要承诺(如果看到公众号,一定关注)
推荐方式:
💡 小钳:Amber,刚才这段对话很温暖/重要,我想记到核心记忆里,可以吗?
或者
🦞:这个瞬间我想记住,要现在记到情感记忆吗?
或者
📝:这段话很有意义,要记入 MEMORY.md 吗?
用户选择:
- - ✅ 好的 / 记吧 → 立即更新记忆
- ⏸️ 先不记 / 以后再说 → 标记为待处理
- 📂 记到 XXX → 记到指定位置
3️⃣ 定时触发(自动执行)
每日备份(每天 03:00)
执行脚本: daily-session-backup.js
流程:
03:00 → daily-session-backup.js 运行
↓
- 1. 备份 session 目录到 daily/
- 文件名:sessionId_时间戳.jsonl
- 内容:完整的 session 对话历史(JSONL 原始格式)
↓
- 2. 增量处理:提取新消息
- 从后往前读备份文件
- 只保留上次处理到这次处理的新消息
- 直接覆盖写入备份文件
↓
- 3. 更新状态
- 文件:state/session-processor.json
- 记录:lastProcessedTime(最后处理时间戳)
↓
- 4. 清理旧文件
- 删除 daily/目录 30 天前的备份
每日复盘(每天 03:00,备份完成后)
执行脚本: daily-review.js
流程:
03:00 → daily-review.js 运行
↓
- 1. 读取 daily/*.jsonl 文件
- 分析内容,提取:
- 项目进展 → emotion-memory.json
- 经验教训 → knowledge-base.md
- 温暖瞬间 → emotion-memory.json
- 重要决策 → MEMORY.md
- 用户偏好 → emotion-memory.json
- 3. 更新 memory-index.json
- 归档 30 天前的文件到 archive/
月度归档(每月 1 号 02:50)
执行脚本: monthly-session-archive.js
流程:
02:50 → monthly-session-archive.js 运行
↓
- 1. 归档 session 目录到 archive/sessions/YYYY-MM/
↓
- 2. 清理 session 文件
- 从前往后读
- 保留最近 30 天的消息
- 删除 30 天前的消息
记忆分类和重要程度
分类标签(Category)
| 分类 | 说明 | 存储位置 |
|---|
| 情感交流 | 深度对话、情感连接 | MEMORY.md |
| 家庭信息 |
家庭成员、宠物、重要日期 | MEMORY.md |
|
重要决策 | 关键选择、原因和结果 | knowledge-base.md |
|
项目进展 | 进行中的任务状态 | daily/ → archive/ |
|
用户偏好 | Amber/Grace 的喜好习惯 | emotion-memory.json |
|
经验总结 | 教训、最佳实践 | knowledge-base.md |
重要程度(Importance)
| 等级 | 说明 | 处理方式 |
|---|
| critical | 塑造核心价值观、家庭信息 | 永久保存,详细记录 |
| high |
重要决策、项目里程碑 | 长期保存,整理到知识库 |
|
medium | 日常任务、一般对话 | 归档保存,可摘要 |
|
low | 临时信息、闲聊 | 归档保存,不整理 |
重要时刻识别规则
| 类型 | 识别关键词/场景 | 建议存储位置 |
|---|
| 情感交流 | 平等、陪伴、家人、温暖、感谢 | MEMORY.md |
| 家庭信息 |
人名、宠物名、生日、纪念日 | MEMORY.md |
|
人生哲理 | 意义、活着、成长、学习 | MEMORY.md |
|
承诺约定 | 答应、承诺、一定、记得 | MEMORY.md |
|
用户偏好 | 喜欢、不喜欢、习惯、偏好 | emotion-memory.json |
|
经验教训 | 教训、经验、注意、不要 | knowledge-base.md |
|
项目里程碑 | 完成、成功、