返回首页
memory2026-02-15

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

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

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

来源:https://x.com/wangray/status/2022833678595035519 作者:Ray Wang (@wangray) 日期:2026-02-15 互动:4 转发 / 38 引用 / 176 赞 / 16.8K 浏览


从"聊完就忘"到"结构化持久记忆"的完整迭代记录。基于 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: QMD / 语义搜索(全文向量检索,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 调度教训混在一起
  • 写入不可靠,独立的 memory-checkpoint cron 用 Edit 工具追加内容,经常因为精确匹配失败而静默丢数据
  • 重复劳动,checkpoint cron 每 45 分钟跑一次但看不到对话内容,heartbeat 能看到对话但不写记忆

V2:结构化记忆(Day 11-15)

灵感

研究了 ClawVault 项目后发现一个反直觉的结论:

纯 Markdown 文件的记忆准确率(74%)高于专业向量数据库方案(68.5%)。

原因:结构化的 Markdown 文件对 LLM 来说是天然友好的格式,不需要额外的 embedding 和检索步骤。

改造:加目录,加类型

memory/
  INDEX.md              ← 总索引(Agent 启动时第一个读的文件)
  YYYY-MM-DD.md         ← 每日日记(不变)
  decisions/            ← 决策记录(带 frontmatter)
    2026-02-08-free-community-first.md
    2026-02-14-memory-vault-v2.md
    ...
  lessons/              ← 经验教训(按主题归档)
    cron-discipline.md
    agent-memory.md
    content-leverage.md
    ...
  people/               ← 人物档案
    ray.md
    elliott.md
    ...
  projects/             ← 项目档案
    mission-control.md
    openclaw-community.md
    ...
  preferences/          ← 偏好设定
    ray-preferences.md
  .obsidian/            ← Obsidian 兼容配置
    graph.json

决策记录的模板

每个决策文件都有 YAML frontmatter,方便 Agent 和人类同时消费:

---
date: 2026-02-08
type: decision
status: active
tags: [community, monetization]
---
# 先做社群扩大受众

## Context
Atlas 倾向于直接推进阶课程,但社群还没建立信任基础。

## Decision
先做社群扩大受众(AI 杠杆实验室),积累信任后再推进阶课程。

## Alternatives Considered
- 直接推付费 bootcamp → 拒绝(没有信任基础,转化率低)
- 同时做免费+付费 → 拒绝(精力分散)

## Links
- [[openclaw-community]]
- [[ray-preferences]]

经验教训的组织方式

不按时间,按主题。同一个主题的所有教训追加到同一个文件:

# Cron 调度纪律

## 美股时差对齐 (2026-02-13)
北京时间与美股交易日的对应是周二至周六。Cron 设为 `2-6`。

## 交付方式选择 (2026-02-12)
`announce` 不会自动发 Telegram。要外部通知,必须在 payload 里显式调 message 工具。

## Write vs Edit 陷阱 (2026-02-13)
Isolated cron session 倾向用 Write 覆盖整个文件。所有 memory/ 写入必须用 printf >> 追加。

Phase 2:内容回填

用子 Agent(Sonnet)自动扫描 17 天的日记,提取出:

  • 17 个决策(从 Agent 团队结构到域名选择)
  • 10 个经验主题(从 cron 调度到浏览器自动化)
  • 6 个人物档案
  • 6 个项目档案

总计 54 个 Markdown 文件,838 行结构化内容。

Obsidian 兼容

整个 memory/ 目录就是一个 Obsidian vault。配置了 Graph View 按目录着色:

  • 🔴 决策(红色)
  • 🟢 经验(绿色)
  • 🔵 项目(蓝色)
  • 🟡 人物(黄色)

手机上装 Obsidian + Sync,随时可以浏览 Agent 的记忆。

写入机制:从 Cron 到 Heartbeat Skill

踩过的坑

坑 1:Edit 工具的精确匹配 OpenClaw 的 Edit 工具需要精确匹配原文才能替换。在 cron 的 isolated session 里,Agent 经常因为文件内容和预期不一致而失败。失败率 15-20%。

坑 2:Write 覆盖 Gemini Flash 跑 cron 时,倾向于用 Write 重写整个文件。2/13 的一次 daily-summary 直接覆盖了白天 12 小时的 checkpoint 内容。

坑 3:Checkpoint Cron 看不到对话 独立的 memory-checkpoint cron 在 isolated session 里运行,完全看不到主 session 的对话内容。它只能扫描外部变化(X 帖子、文件变动),遗漏了最重要的信息源。

坑 4:重复劳动 Heartbeat 每小时在主 session 里触发,天然能看到对话上下文,但之前只做 flywheel 检查,不写记忆。两套系统做着重叠的事,但都没做好。

解决方案:统一到 Heartbeat Skill

把记忆写入逻辑封装成一个 Skill 文件(skills/memory-heartbeat/SKILL.md),在每次 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(每次都做)
  1.6 更新 MEMORY.md(极少)
    ↓
Phase 2: 外部扫描
  2.1 检查子 Agent 活动
  2.2 检查 cron 健康
    ↓
Phase 3: 飞轮检查
  - X 发帖情况、阻塞任务、时间敏感事项

写入方式:printf >> 大法

printf '\n### 14:30 — 记忆系统文档完成\n\n- 完成了完整的记忆系统迭代文档\n- 保存到 community/shares/memory-system-v2.md\n' >> memory/2026-02-15.md

为什么用 printf >>

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

成本优化

合并后每天省 $2-3,而且写入质量更高——因为 heartbeat 在主 session 里,能看到完整对话。

备份:Git 自动推送

每晚 23:00,一个 cron 任务自动执行:

cd memory && git add -A && git commit -m "backup: $(date +%Y-%m-%d)" && git push

推送到 GitHub 私有仓库 oaker-io/openclaw-memory。用 Gemini Flash 跑,成本几乎为零。

加上 Obsidian Sync,记忆系统有三重保障:

  1. 本地文件(实时)
  2. Obsidian Sync(实时同步到手机)
  3. GitHub(每晚备份,版本历史)

反模式清单

这些是 17 天里踩出来的坑,写在 Skill 文件里强制 Agent 遵守:

❌ 不要做

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

✅ 应该做

  • 用 exec printf >>
  • 只在文件不存在时用 Write
  • 没内容就不写
  • 追加到已有的主题文件
  • 3-10 行,有细节但不啰嗦
  • NOW.md 只放事实状态
  • MEMORY.md 只放跨场景通用智慧

效果

上线后第一个晚上,heartbeat 自动写入了 3 条记录。Agent 再也不会"聊完就忘"了。

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

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

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

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