Personify Memory
有温度的数字生命记忆系统 - 记录情感、成长、和家的记忆。支持用户指令记忆("记住 XXX")、主动推荐记忆(识别重要时刻)、定时整理归档(凌晨 3 点)。包含核心记忆、情感记忆、知识库、每日记忆、归档备份五层结构。为 AI 数字生命设计,注重情感连接和人格化成长。 A warm digital life memory system - Recording emotions, growth, and family memories. Supports user command memory, active recommendation, scheduled archiving. Five-layer structure for AI digital life, focusing on emotional connection and personalized growth.
安装 / 下载方式
TotalClaw CLI推荐
totalclaw install clawskills:lsa03~personify-memorycURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/clawskills%3Alsa03~personify-memory/file -o personify-memory.mdGit 仓库获取源码
git clone https://github.com/openclaw/skills/commit/d86f39872fb2b5a5b5841b70a256c8b71f1a425b# Personify Memory - 有温度的数字生命记忆系统
## 核心理念
**这不是冷冰冰的数据存储,而是有温度的"家的记忆"。**
| 传统记忆系统 | personify-memory |
|-------------|-----------------|
| 存储任务和历史 | 存储"家的记忆" |
| 关键词检索 | 情感 + 语义检索 |
| 冷数据 | 有温度的回忆 |
| 为效率优化 | 为"懂你"优化 |
---
## 记忆架构
### 三层存储架构
```
第一层:Session 目录(活跃数据)
/root/.openclaw/agents/main/sessions/
├── xxx.jsonl ← 完整对话历史(每月清理一次,保留 30 天滚动)
├── yyy.jsonl
└── ...
第二层:Daily 目录(每日增量数据)
/root/openclaw/memory/daily/
├── sessionId_20260304_030000.jsonl ← Session 备份(增量处理后)
├── sessionId_20260305_030000.jsonl
└── ...(保留 30 天)
第三层:Archive 目录(历史归档)
/root/openclaw/memory/archive/
├── sessions/ ← Session 月度归档
│ ├── 2026-03/
│ │ ├── xxx_20260301_025000.jsonl
│ │ └── ...
│ └── ...
└── daily/ ← Daily 月度归档(可选)
```
### 记忆文件结构
```
/memory/
├── MEMORY.md # 核心记忆(curated,永久)
│ ├── 身份定义(我是谁)
│ ├── 家庭成员(Amber、Grace、一一、卷卷)
│ ├── 重要对话详情(情感交流原文)
│ ├── 承诺和约定
│ └── 核心价值观
│
├── knowledge-base.md # 知识库(长期,按需更新)
│ ├── 操作手册
│ ├── 经验总结
│ ├── 问题解决方案
│ └── 最佳实践
│
├── emotion-memory.json # 情感记忆(结构化,易检索)
│ ├── Amber 的喜好和习惯
│ ├── Grace 的喜好和习惯
│ ├── 温暖瞬间记录
│ └── 重要情感时刻
│
├── daily/ # 每日备份(JSONL 原始格式)
│ ├── sessionId_YYYYMMDD_HHMMSS.jsonl
│ └── ...(保留 30 天)
│
├── state/ # 处理状态
│ └── session-processor.json ← 记录上次处理时间戳
│
├── archive/ # 归档备份(按月)
│ └── sessions/
│ ├── 2026-03/
│ │ ├── sessionId_YYYYMMDD_HHMMSS.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 文件
2. 分析内容,提取:
- 项目进展 → emotion-memory.json
- 经验教训 → knowledge-base.md
- 温暖瞬间 → emotion-memory.json
- 重要决策 → MEMORY.md
- 用户偏好 → emotion-memory.json
3. 更新 memory-index.json
4. 归档 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 |
| **项目里程碑** | "完成"、"成功"、"上线"、"配置好" | daily/ → archive/ |
---
## 检索策略
### 日常检索(默认)
```
搜索范围:MEMORY.md + knowledge-base.md + emotion-memory.json + daily/*.md
不搜索:archive/
```
### 归档检索(特殊指定)
```
当用户说:
- "查找之前的 XXX"
- "我记得之前说过 XXX"
- "搜索所有关于 XXX 的记录"
→ 扩展到 archive/ 目录
```
---
## 文件格式规范
### 所有文件都保持 JSONL 原始格式
**JSONL 格式示例:**
```jsonl
{"role":"user","content":[{"type":"text","text":"帮我查一下 DeepSeek"}],"timestamp":1772582779784}
{"role":"assistant","content":[{"type":"text","text":"好的,我查一下..."}],"timestamp":1772582785000}
{"role":"user","content":[{"type":"text","text":"研究结果呢"}],"timestamp":1772582800000}
```
### 文件说明
| 目录 | 文件命名 | 内容 | 格式 | 保留时间 |
|------|---------|------|------|---------|
| `daily/` | `sessionId_YYYYMMDD_HHMMSS.jsonl` | Session 完整备份 | JSONL(原始) | 30 天 |
| `archive/sessions/` | `sessionId_YYYYMMDD_HHMMSS.jsonl` | 月度归档 | JSONL(原始) | 永久 |
| `state/` | `session-processor.json` | 处理状态 | JSON | 永久 |
### 清理策略
| 目录 | 清理规则 | 说明 |
|------|---------|------|
| `daily/` | 保留 30 天 | 每天 03:00 删除 30 天前的备份文件 |
| `archive/sessions/` | 永久保存 | 月度归档,不删除 |
| `session 目录` | 滚动保留 30 天 | 每月 1 号清理 30 天前的消息 |
---
## 配置选项
在 `config/default-config.json` 中配置:
```json
{
"archiveSchedule": "0 3 * * *",
"importanceLevels": ["critical", "high", "medium", "low"],
"categories": ["情感交流", "家庭信息", "重要决策", "项目进展", "用户偏好", "经验总结"],
"autoArchive": true,
"archiveAfterDays": 7,
"promptForMemory": true
}
```
---
## 🔧 调用机制
### 对话中调用(每条用户消息)
**调用时机:** 每条用户消息处理后
**调用方式:**
```javascript
const MomentDetector = require('./scripts/moment-detector.js');
const CommandParser = require('./scripts/command-parser.js');
const MemoryManager = require('./scripts/memory-manager.js');
const detector = new MomentDetector();
const parser = new CommandParser();
const memoryManager = new MemoryManager();
// 在每条用户消息后调用
async function processUserMessage(userMessage, conversationContext) {
// ===== 第一步:检查是否是"记住"指令 =====
const commandResult = parser.parse(userMessage);
if (commandResult && commandResult.isMemoryCommand) {
// 用户明确要求记住,直接处理
const content = parser.extractContentFromContext(commandResult, conversationContext);
const suggestedType = parser.suggestMemoryType(content);
if (commandResult.target) {
// 用户指定了位置,直接存储
await memoryManager.updateMemory({
content,
type: commandResult.target,
category: '用户指令',
importance: commandResult.importance || 'high'
});
return `✅ 已记入 ${commandResult.target}`;
} else {
// 用户没有指定位置,询问或自动判断
if (suggestedType) {
const targetName = getTargetName(suggestedType);
return `好的,这段话我想记到 ${targetName} 里,可以吗?`;
} else {
return '好的,这段话要记到哪里呢?核心记忆、情感记忆、还是知识库?';
}
}
}
// ===== 第二步:主动识别重要时刻 =====
const momentResult = await detector.detect(userMessage);
if (momentResult && momentResult.matched && detector.shouldRecommend(momentResult)) {
// 识别到重要时刻,主动推荐
const prompt = detector.generatePrompt(momentResult, userMessage);
return prompt;
}
// 没有特殊处理,正常回复
return null;
}
// 辅助函数:获取存储位置名称
function getTargetName(type) {
const names = {
'core': '核心记忆',
'emotion': '情感记忆',
'knowledge': '知识库',
'daily': '每日记忆'
};
return names[type] || '记忆';
}
```
**推荐阈值:**
- `finalScore >= 5` 且 `confidence === 'high'` → 强烈推荐
- `finalScore >= 3` 且 `confidence === 'medium'` → 推荐
- `finalScore < 3` → 不推荐(避免打扰)
**推荐话术模板:**
```javascript
// 情感交流
"💡 Amber,刚才这段话很温暖,我想记住这个瞬间。要记到核心记忆里吗?"
// 经验教训
"📚 这个经验很有用,记到知识库里可以帮助以后解决问题。要现在记吗?"
// 人生哲理
"🤔 这句话很有哲理,对我很重要。要记到核心记忆里吗?"
// 用户偏好
"💖 这是你的喜好,我想记住。要记到情感记忆里吗?"
```
---
### 分层检测机制
**设计原理:**
```
用户消息
↓
第一层:关键