返回首页
automation2026-02-15

让 AI 记住你说过的每一句话:零成本记忆系统完整构建记录

作者: Ray Wang (@wangray)查看原文
AD SLOT — TOP

从"聊完就忘"到"结构化持久记忆"的完整迭代记录。基于 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 >>

  • >> 是追加,永远不会覆盖
  • printfecho 更可靠(处理特殊字符)
  • 不依赖任何工具的精确匹配逻辑
  • 文件不存在时会自动创建

统一到 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
  1. 本地文件(实时)
  2. Obsidian Sync(实时同步到手机)
  3. GitHub 私有仓库(每晚备份,版本历史)

整个 memory/ 目录就是一个 Obsidian vault,手机上装 Obsidian + Sync,随时可以浏览 Agent 的记忆。

反模式清单

❌ 不要做

  • 用 Edit 追加 memory/ 文件
  • 用 Write 覆盖已有文件
  • 写"系统空闲,无变化"这种废话
  • 每个教训建一个新文件
  • 在 NOW.md 里放教训
  • 在 MEMORY.md 里放日常记录

✅ 应该做

  • exec printf >>
  • 只在文件不存在时用 Write
  • 没内容就不写
  • 追加到已有的主题文件
  • 3-10 行,有细节但不啰嗦

总结:给想做 Agent 记忆系统的人

  1. 文件就是记忆。 别想太复杂,Markdown 文件比向量数据库更可靠
  2. 三层分离。 工作台(NOW)、日记(daily)、智慧(MEMORY),不混用
  3. 按主题组织经验,而不是按时间。 投资教训全在一个文件里,比散落在 30 天日记里好找 100 倍
  4. 写入方式比写入内容更重要。 printf >> 永远不会覆盖你的数据
  5. 合并重复系统。 独立的 checkpoint cron + heartbeat 做着重叠的事,合并后更便宜、更准确
  6. INDEX.md 是关键。 Agent 启动时只需要读一个文件就能导航整个记忆库

技术栈:OpenClaw + Markdown + Git + Obsidian
成本:几乎为零(Gemini Flash heartbeat + GitHub 免费私有仓库)
效果:Agent 跨 session、跨天、跨 compaction 保持一致性

AD SLOT — BOTTOM
让 AI 记住你说过的每一句话:零成本记忆系统完整构建记录 — ClaWHow