让 AI 记住你说过的每一句话:零成本记忆系统完整构建记录
从"聊完就忘"到"结构化持久记忆"的完整迭代记录。基于 OpenClaw 多 Agent 团队的真实生产环境,历时 17 天打磨。
为什么 Agent 需要记忆系统?
AI Agent 有一个致命缺陷:它没有真正的记忆。
每次对话都有一个上下文窗口(Context Window),看起来像记忆,但它会被压缩(Compaction)、会丢失、会在重启后清零。你跟 Agent 聊了一整天的决策、偏好、进展,第二天它全忘了。
更糟糕的是,Agent 自己不知道它忘了什么。它会自信地给你重复建议、重复犯错、重复问你已经回答过的问题。
解决方案只有一个:把记忆写进文件。
你不写进文件的东西 = 你从来不知道的东西。
这是 17 天实战中总结出的第一定律。
架构总览:三层记忆 + 三层检索
三层记忆
- 工作台:
NOW.md,当前状态看板,每次 Heartbeat 刷新 - 日记:
memory/YYYY-MM-DD.md,当日事件流水,实时追加 - 长期智慧:
MEMORY.md,跨天教训精华,极少更新
关键原则:不混用。
NOW.md只放事实状态(谁在干什么、什么阻塞了),不放教训- 日记放所有细节(决策、完成、踩坑),是最完整的信息源
MEMORY.md只放真正跨场景通用的智慧,一天更新不超过一次
三层检索
当 Agent 需要回忆时:
L1: INDEX.md(目录级扫描,1 秒)
↓ 找不到
L2: 目录 + grep(文件级搜索,3 秒)
↓ 找不到
L3: 语义搜索(全文检索,5 秒)
大多数查询在 L1 就能命中。INDEX.md 是整个系统的入口。
V1:朴素方案(Day 1-10)
最初的方案非常简单:
MEMORY.md — 所有长期记忆
NOW.md — 当前状态
memory/
2026-01-29.md — 每日日记
2026-01-30.md
...
问题
MEMORY.md越来越长(43 条教训挤在一个文件里),Agent 读起来慢- 日记是流水账,要找某个决策得翻好几天
- 没有分类,投资教训和 cron 调度教训混在一起
- 写入不可靠,Edit 工具追加内容经常因精确匹配失败而静默丢数据
V2:结构化记忆(Day 11-15)
关键发现
研究了 ClawVault 项目后发现一个反直觉的结论:
纯 Markdown 文件的记忆准确率(74%)高于专业向量数据库方案(68.5%)。
原因:结构化的 Markdown 文件对 LLM 来说是天然友好的格式,不需要额外的 embedding 和检索步骤。
改造:加目录,加类型
memory/
INDEX.md ← 总索引(Agent 启动时第一个读的文件)
YYYY-MM-DD.md ← 每日日记(不变)
decisions/ ← 决策记录(带 frontmatter)
lessons/ ← 经验教训(按主题归档)
people/ ← 人物档案
projects/ ← 项目档案
preferences/ ← 偏好设定
决策记录模板
每个决策文件都有 YAML frontmatter:
---
date: 2026-02-08
type: decision
status: active
tags: [community, monetization]
---
# 先做社群扩大受众
## Context
直接推进阶课程,但社群还没建立信任基础。
## Decision
先做社群扩大受众,积累信任后再推进阶课程。
## Alternatives Considered
- 直接推付费 bootcamp → 拒绝(没有信任基础,转化率低)
经验教训的组织方式
不按时间,按主题。同一个主题的所有教训追加到同一个文件:
# Cron 调度纪律
## 美股时差对齐 (2026-02-13)
北京时间与美股交易日的对应是周二至周六。Cron 设为 `2-6`。
## Write vs Edit 陷阱 (2026-02-13)
Isolated cron session 倾向用 Write 覆盖整个文件。
所有 memory/ 写入必须用 printf >> 追加。
写入机制:printf >> 大法
printf '\n### 14:30 — 记忆系统文档完成\n\n- 完成了完整的记忆系统迭代文档\n' >> memory/2026-02-15.md
为什么用 printf >>?
>>是追加,永远不会覆盖printf比echo更可靠(处理特殊字符)- 不依赖任何工具的精确匹配逻辑
- 文件不存在时会自动创建
统一到 Heartbeat Skill
把记忆写入逻辑封装成一个 Skill,在每次 heartbeat 时由主 session 执行:
Heartbeat 触发(每 1 小时)
↓
Phase 1: 记忆写入
1.1 扫描对话上下文 → 找决策/完成/教训/偏好变化
1.2 追加到 daily log(用 printf >>)
1.3 分流到 decisions/ 或 lessons/(如有)
1.4 更新 INDEX.md(仅新建文件时)
1.5 刷新 NOW.md(每次都做)
↓
Phase 2: 外部扫描 + 飞轮检查
合并的好处: 每天省 $2-3,而且写入质量更高——heartbeat 在主 session 里,能看到完整对话。
备份:三重保障
# 每晚 23:00 自动执行
cd memory && git add -A && git commit -m "backup: $(date +%Y-%m-%d)" && git push
- 本地文件(实时)
- Obsidian Sync(实时同步到手机)
- GitHub 私有仓库(每晚备份,版本历史)
整个 memory/ 目录就是一个 Obsidian vault,手机上装 Obsidian + Sync,随时可以浏览 Agent 的记忆。
反模式清单
❌ 不要做
- 用 Edit 追加 memory/ 文件
- 用 Write 覆盖已有文件
- 写"系统空闲,无变化"这种废话
- 每个教训建一个新文件
- 在 NOW.md 里放教训
- 在 MEMORY.md 里放日常记录
✅ 应该做
- 用
exec printf >> - 只在文件不存在时用 Write
- 没内容就不写
- 追加到已有的主题文件
- 3-10 行,有细节但不啰嗦
总结:给想做 Agent 记忆系统的人
- 文件就是记忆。 别想太复杂,Markdown 文件比向量数据库更可靠
- 三层分离。 工作台(NOW)、日记(daily)、智慧(MEMORY),不混用
- 按主题组织经验,而不是按时间。 投资教训全在一个文件里,比散落在 30 天日记里好找 100 倍
- 写入方式比写入内容更重要。
printf >>永远不会覆盖你的数据 - 合并重复系统。 独立的 checkpoint cron + heartbeat 做着重叠的事,合并后更便宜、更准确
- INDEX.md 是关键。 Agent 启动时只需要读一个文件就能导航整个记忆库
技术栈:OpenClaw + Markdown + Git + Obsidian
成本:几乎为零(Gemini Flash heartbeat + GitHub 免费私有仓库)
效果:Agent 跨 session、跨天、跨 compaction 保持一致性