nanobot 记忆系统与 Dream
🧠 双层记忆架构
nanobot 采用两层记忆设计,解决 LLM 上下文窗口有限的问题:
| 层次 | 存储位置 | 生命周期 | 特点 |
|---|---|---|---|
| 短期(Session) | sessions/*.jsonl | 按 session 隔离 | 完整对话记录,JSONL 格式,支持压缩 |
| 长期(Memory) | memory/MEMORY.md | 跨 session 持久 | 蒸馏后的结构化知识,Markdown 格式 |
每日记忆日志存放在 memory/YYYY-MM-DD.md,作为原始记录;MEMORY.md 是经过整合的精华版本。
💤 Dream 机制
Dream 是 nanobot 的周期性记忆整合任务,类比人类睡眠中大脑对白天记忆的巩固过程。
工作流程
近期 Session 历史
↓ Dream 任务触发
提取关键信息(决策、知识、偏好、事件)
↓
去重、整合、结构化
↓
写入 MEMORY.md(长期记忆)
↓
可选:清理/压缩旧 Session 文件
触发方式
Dream 作为后台任务在 Gateway 模式下自动运行,也可手动触发:
bash
# 在对话中直接触发
"请帮我整理最近的对话,更新长期记忆"📁 文件结构
workspace/
├── MEMORY.md # 长期记忆(手动维护 + Dream 自动更新)
├── memory/
│ ├── YYYY-MM-DD.md # 每日原始记忆日志
│ ├── history.jsonl # 历史整合源数据
│ └── heartbeat-state.json # 心跳检查状态追踪
└── sessions/
├── <session-key>.jsonl # 各 session 的完整对话历史
└── ...
✍️ MEMORY.md 结构建议
markdown
# MEMORY.md - 长期记忆
## 用户关键信息
- 姓名、时区、偏好...
## 正在进行的项目
- 项目A:...
## 重要决策记录
- 2026-07-28:决定使用 nanobot 替换 xxx
## 学到的知识
- ...🔍 记忆检索
nanobot 在构建 context 时会自动从 MEMORY.md 检索相关内容注入到提示词中。也支持通过 memory_search 工具主动检索历史信息。
⚠️ 注意事项
- MEMORY.md 会随每次 Dream 自动更新,建议定期备份
- Session 文件较大时会触发自动压缩,保留摘要
- 多实例运行时,每个实例有独立的 workspace,记忆互不干扰
📝 实践记录
{{待填:Dream 触发的实际效果、记忆质量观察}}