跳转至

AI 项目记忆库搭建

设计哲学

奥卡姆剃刀:每个项目固定 3 个文件,不多不少。多了是噪音,少了是残缺。

每项目 3 个文件的结构,对应 AI 需要知道的"我是谁、我在干什么、我踩过什么坑"三个最核心问题。

文件 回答 操作
_项目概况.md 我是谁?(定位/技术栈/约束) 只读
当前状态.md 我在干什么?(最近/下一步/阻塞) 覆盖
经验教训.md 我踩过什么坑? 追加

目录结构

00_Memory/AI_项目记忆/
├── _MOC.md                  # 总索引
├── AIasMe/
│   ├── _项目概况.md
│   ├── 当前状态.md
│   └── 经验教训.md
├── HankKnowledge/
│   ├── _项目概况.md
│   ├── 当前状态.md
│   └── 经验教训.md
├── Broker/
│   ├── _项目概况.md
│   ├── 当前状态.md
│   └── 经验教训.md
└── news/
    ├── _项目概况.md
    ├── 当前状态.md
    └── 经验教训.md

4 项目 × 3 文件 + 1 索引 = 共 13 个文件。

架构:两层机制

第1层 — CODEBUDDY.md 被动引用(核心,零成本)

每项目 CODEBUDDY.md 末尾引用 3 个记忆文件,AI 每次对话自动读取。

## AI 项目记忆(HankKnowledge 共享)

先读取以下文件了解项目上下文:
- D:\myKnowledge\HankKnowledge\00_Memory\AI_项目记忆\<项目>\_项目概况.md
- D:\myKnowledge\HankKnowledge\00_Memory\AI_项目记忆\<项目>\当前状态.md
- D:\myKnowledge\HankKnowledge\00_Memory\AI_项目记忆\<项目>\经验教训.md

当遇到重要决策、踩坑经验、项目状态变化时,更新对应文件。
总索引: D:\myKnowledge\HankKnowledge\00_Memory\AI_项目记忆\_MOC.md

第2层 — project-memory SKILL 主动管理(按需触发)

触发词:项目记忆记录经验踩坑记录跨项目查询更新项目状态

写入规则: - 经验教训.md追加,条目按时间倒序,不覆盖已有内容 - 当前状态.md覆盖更新,只保留当前状态 - 写入后必须向用户展示:写入了哪个文件、当前共多少条记录

为什么不用 Hook

Hook 是全量记录(每次对话存档),项目记忆需要人工判断"什么是值得记住的"。两者不冲突,各司其职。

为什么选 CODEBUDDY.md 而不是单独 SKILL

对比 CODEBUDDY.md 仅 SKILL
加载时机 每次对话自动 需主动触发
适用场景 被动提醒(开局有记忆) 主动操作(精准记录)

CODEBUDDY.md 和 SKILL 互补,不是替代关系。

经验教训格式

### YYYY-MM-DD 标题

- **现象**: 问题的表面表现
- **根因**: 根本原因分析
- **方案**: 具体解决方案
- **避免**: 如何预防重复

踩过的坑

  1. SKILL 写成文档而不是指令 — AI 只输出分析不写文件。教训:SKILL.md 的第一读者是 AI,不是人类,必须用强制语言。
  2. 初始数据为空 — 搭建完模板后没有立即填充初始数据。教训:搭建即填充,模板不等于完成。
  3. 缺少确认机制 — 写入操作后没有向用户展示结果。教训:每个写操作必须有可见的输出反馈。
  4. 过早抽象 — 曾为 AIasMe 增加了变更日志、AI 规范索引、L2_SOP 子目录,实际运行中冗余低效。教训:MVP 先跑通核心流程,不要提前设计"可能有用"的结构。

参考

  • 项目记忆索引: _MOC
  • project-memory SKILL: ../.codebuddy/skills/project-memory/SKILL.md