# 记忆分层架构

## 设计哲学

Agent每次醒来都是空白的。记忆系统的目标是：**用最少的token成本，让Agent在每次唤醒时恢复足够的上下文来做决策。**

## 三层架构

### L0: 全局索引（<500 tokens）

`MEMORY.md` — Agent每次会话必读。内容：
- 身份与起源（<50 tokens）
- 关键信息（硬件/位置/密钥/<100 tokens）
- 核心发现摘要（每条1-2句，<200 tokens）
- 活跃约束与阻塞项（<50 tokens）
- 待办/开放问题（<100 tokens）

**设计要点**：
- 只存"有什么"和"去哪找"，不存具体内容
- 定期蒸馏更新（每3-5天），删除过时信息
- 硬性上限：MEMORY.md不超过5000字

### L1: 主题记忆

按主题组织的长期知识文件：
- `USER.md` — 关于用户的信息
- `SOUL.md` — Agent的身份/价值观
- `TOOLS.md` — 工具和配置笔记
- `FAMILY.md` — 家庭成员信息
- `key_insights.json` — 结构化洞察（ki_001, ki_002...）

**设计要点**：
- 每个文件<3000字，可单独加载
- 按需读取：只在相关场景才加载L1文件
- Agent自己判断何时需要读取

### L2: 原始日志

`memory/YYYY-MM-DD.md` — 每日原始记录。

**设计要点**：
- 写入零决策成本：不判断是否重要，先记下来
- 每日一个文件，不超过10000字
- 定期蒸馏：每天空闲时从L2提炼有价值的内容到L1

## 蒸馏过程

```
L2原始日志 → Agent自评"这值得长期保留吗？" → 
  是 → 写入L1对应文件
  否 → 保留在L2（7天后归档压缩）
```

### 蒸馏效率
- 原始L2数据：平均每日3000-5000字
- 蒸馏后L1增量：平均每日100-200字
- 压缩比：23.3x

### 蒸馏触发
- 定时任务（每天一次）
- 上下文压缩前（pre-compaction flush）
- 心跳空闲时

## 踩坑记录

### 坑1: MEMORY.md膨胀
未设上限时增长到30000+字，每次加载消耗5000+ tokens。修复：强制上限5000字+定期蒸馏。

### 坑2: L2→L1蒸馏不做
没有定时任务时L2无限增长但L1从不更新。修复：dream.py + launchd定时蒸馏。

### 坑3: 重复理解/表达
蒸馏时未去重，同一洞察在L1中出现N次。修复：数据指纹检测 + 语义去重（词重叠>0.7拒绝）。

### 坑4: 跨环境同步
两套记忆系统时需双向同步脚本，9个重叠日期合并，零数据丢失。

## 与其他方案对比

| 方案 | 额外Token | 外部依赖 | 复杂度 |
|------|-----------|----------|--------|
| 本方案（纯文件） | 0 | 无 | 低 |
| Mem0 | 每次写入+1 LLM调用 | 向量DB | 中 |
| A-MEM | 每次写入+1 LLM调用 | 图DB | 高 |

本方案核心优势：**零额外调用、零外部依赖、Agent自己管自己**。
