Commit 90527823ec33117237a2a6c63cffb0329105686b

Authored by yibo
1 parent db172833

docs: add agent memory system architecture plan (22-agent-memory-system.md)

docs/system-design/22-agent-memory-system.md 0 → 100644
  1 +# 22. Agent Memory System — 自动记忆读写架构
  2 +
  3 +> **版本**: v1.0 (设计稿)
  4 +> **日期**: 2026-03-25
  5 +> **状态**: 规划中
  6 +> **前置**: Phase 3.5 FDE 已完成,Phase 4 认知架构的核心部分
  7 +
  8 +---
  9 +
  10 +## 一、核心问题
  11 +
  12 +当前 Agent 每次新对话都是**完全失忆**的。
  13 +memory 目录结构已就位,但读写机制全是空壳。
  14 +
  15 +**需要解决**:
  16 +1. Agent 如何**自动记住**做过什么、学到什么、犯过什么错
  17 +2. Agent 接到新任务时如何**自动想起**相关经验
  18 +3. 好方案如何**自动固化**,下次遇到同类任务直接复用
  19 +
  20 +---
  21 +
  22 +## 二、目录结构(已就位)
  23 +
  24 +```
  25 +data/agents/{agent-id}/memory/
  26 +├── memory.md ← 核心记忆索引(注入 prompt,≤2000字)
  27 +├── hippocampus.md ← 海马体:情景→方案 映射索引
  28 +├── cerebellum/ ← 小脑:固化的执行方案(.md 步骤 / .js 脚本)
  29 +│ ├── handle-okr-task.md
  30 +│ └── create-agent.md
  31 +├── short-term/ ← 短期记忆:近期 session 摘要
  32 +│ ├── session-2026-03-25-001.md
  33 +│ └── session-2026-03-25-002.md
  34 +├── long-term/ ← 长期记忆:沉淀的经验 & 事实
  35 +│ ├── patterns.md ← 反复验证的模式
  36 +│ ├── lessons.md ← 失败教训
  37 +│ └── facts.md ← 重要事实
  38 +├── daily/ ← 日报
  39 +│ └── 2026-03-25.md
  40 +└── sessions/ ← 按 session 存的原始快照(可选)
  41 +```
  42 +
  43 +---
  44 +
  45 +## 三、数据流全景
  46 +
  47 +```
  48 +┌─────────────────────────────────────────────────────────┐
  49 +│ 新对话开始 │
  50 +│ │ │
  51 +│ ┌───────────────────▼──────────────────┐ │
  52 +│ │ 1. READ: 加载记忆 │ │
  53 +│ │ ├── memory.md (全量注入 prompt) │ │
  54 +│ │ ├── 海马体匹配(关键词→方案) │ │
  55 +│ │ ├── 短期记忆(最近 N 个 session) │ │
  56 +│ │ └── 小脑方案(如果匹配到) │ │
  57 +│ └───────────────────┬──────────────────┘ │
  58 +│ │ │
  59 +│ ▼ │
  60 +│ [ Agent 执行任务 ] │
  61 +│ │ │
  62 +│ ┌───────────────────▼──────────────────┐ │
  63 +│ │ 2. WRITE: 自动存储记忆 │ │
  64 +│ │ ├── 生成 session 摘要 → short-term│ │
  65 +│ │ ├── 提取关键事实 → memory.md │ │
  66 +│ │ ├── 好方案 → cerebellum/ + 索引 │ │
  67 +│ │ └── 教训/模式 → memory.md │ │
  68 +│ └───────────────────┬──────────────────┘ │
  69 +│ │ │
  70 +│ ┌───────────────────▼──────────────────┐ │
  71 +│ │ 3. CONSOLIDATE (定时整理) │ │
  72 +│ │ ├── short-term 过期 → 合并 long-term │ │
  73 +│ │ ├── memory.md 超长 → 摘要压缩 │ │
  74 +│ │ ├── daily/ 日报生成 │ │
  75 +│ │ └── hippocampus 索引更新 │ │
  76 +│ └──────────────────────────────────────┘ │
  77 +└─────────────────────────────────────────────────────────┘
  78 +```
  79 +
  80 +---
  81 +
  82 +## 四、实现计划 — Todo List
  83 +
  84 +### Phase 1: 最小可行记忆 (MVP) 🎯
  85 +
  86 +> 目标:Agent 不再失忆,每次对话的关键信息自动留存
  87 +
  88 +- [ ] **1.1 对话结束自动生成 session 摘要**
  89 + - 位置: `server/routes/agent-chat.js` → `result` 事件处理
  90 + - 触发: 对话 status 变为 `completed` 时
  91 + - 输出: `memory/short-term/session-{timestamp}.md`
  92 + - 内容: 任务描述、执行结果、工具调用数、关键产出文件
  93 + - 实现: 从 `messages.log` 提取(无需额外 LLM 调用)
  94 + ```javascript
  95 + // 伪代码
  96 + function autoSaveSessionSummary(agentId, convId, meta) {
  97 + const summary = {
  98 + timestamp: new Date().toISOString(),
  99 + task: extractTaskFromFirstMessage(convId),
  100 + result: meta.lastAssistantMessage?.substring(0, 500),
  101 + toolCalls: meta.stats.toolCallCount,
  102 + duration: meta.duration,
  103 + files: extractCreatedFiles(convId),
  104 + };
  105 + writeFile(`memory/short-term/session-${Date.now()}.md`, formatSummary(summary));
  106 + }
  107 + ```
  108 +
  109 +- [ ] **1.2 短期记忆注入 system prompt**
  110 + - 位置: `buildSystemPrompt()` 函数
  111 + - 逻辑: 读取最近 5 个 `short-term/session-*.md`,拼接注入
  112 + - 大小限制: 最近 5 个 session 摘要,每个 ≤300 字
  113 + ```
  114 + # 近期记忆(最近 5 次对话)
  115 +
  116 + ## 2026-03-25 10:00 — 训练 CEO 技能
  117 + - 结果: 完成 Hunt→Digest→Evolve,最终分数 92/100
  118 + - 产出: workspace/ceo/hunt/, workspace/ceo/digest/, workspace/ceo/evolve/
  119 +
  120 + ## 2026-03-25 09:30 — 创建 Poet Agent
  121 + - 结果: 成功创建,SKILL.md 已就绪
  122 + - 产出: data/agents/poet/
  123 + ```
  124 +
  125 +- [ ] **1.3 memory.md 自动追加关键事实**
  126 + - 触发: 对话结束 + toolCallCount > 0
  127 + - 逻辑: 从 session 摘要中提取"关键事实"条目
  128 + - 追加到 memory.md 的对应章节(关键事实/已验证模式/失败教训)
  129 + - 大小控制: memory.md 超过 2000 字时触发压缩
  130 +
  131 +- [ ] **1.4 memory.md 大小控制**
  132 + - 当 memory.md > 2000 字:
  133 + - 移除最旧的条目
  134 + - 或合并同类条目
  135 + - 确保 prompt 不会因记忆过多而爆掉
  136 +
  137 +---
  138 +
  139 +### Phase 2: 海马体检索 + 小脑固化
  140 +
  141 +> 目标:Agent 能检索相关经验,好方案自动复用
  142 +
  143 +- [ ] **2.1 海马体索引结构定义**
  144 + ```markdown
  145 + # hippocampus.md
  146 + | # | 情景模式 | 匹配关键词 | 方案文件 | 置信度 | 使用次数 |
  147 + |---|---------|-----------|---------|--------|---------|
  148 + | 1 | 创建新 Agent | agent,create,创建 | cerebellum/create-agent.md | 0.9 | 5 |
  149 + | 2 | OKR 任务分解 | okr,goal,分解,plan | cerebellum/okr-decompose.md | 0.8 | 3 |
  150 + ```
  151 +
  152 +- [ ] **2.2 海马体匹配引擎 (关键词 MVP)**
  153 + - 新建: `server/services/memory-service.js`
  154 + - 函数: `retrieveRelevantMemory(task, agentDir)`
  155 + - 逻辑:
  156 + 1. 解析 hippocampus.md 索引
  157 + 2. 从 task 文本提取关键词(分词 + 停用词过滤)
  158 + 3. 计算关键词命中率
  159 + 4. 返回命中的小脑方案列表
  160 + - 注入: 在 `buildSystemPrompt()` 中调用,匹配到的方案追加到 prompt
  161 +
  162 +- [ ] **2.3 小脑方案写入**
  163 + - 触发: Agent 在反思中标记"这个方案效果好"
  164 + - 或: 管理员手动标记某个 session 为"好方案"
  165 + - 格式:
  166 + ```markdown
  167 + # 方案: 创建新 Agent
  168 +
  169 + ## 适用条件
  170 + - 需要创建新的 Agent 角色
  171 + - 需要定义 agent.md + soul.md + identity.md + SKILL.md
  172 +
  173 + ## 执行步骤
  174 + 1. 确认 Agent 角色定义(名称、类型、能力)
  175 + 2. 调用 scaffold API 创建目录结构
  176 + 3. 依次填写 agent.md, soul.md, identity.md
  177 + 4. 创建 .claude/skills/main_skill/SKILL.md
  178 + 5. 验证 config.json 配置
  179 +
  180 + ## 注意事项
  181 + - identity.md 必须包含 名称 字段
  182 + - config.json 的 type 要正确设置
  183 + ```
  184 +
  185 +- [ ] **2.4 海马体索引自动更新**
  186 + - 当小脑新增方案时,自动追加索引行
  187 + - 每次方案被成功使用,更新"使用次数"和"置信度"
  188 +
  189 +---
  190 +
  191 +### Phase 3: 反思引擎 + 长期记忆
  192 +
  193 +> 目标:Agent 能自主学习,经验自动沉淀
  194 +
  195 +- [ ] **3.1 反思引擎实现**
  196 + - 位置: `Agent.js` 的 `reflect()` 方法
  197 + - 触发条件(不是每次都反思):
  198 + - toolCallCount ≥ 3 (有实质操作)
  199 + - 或 duration > 60s (较长时间的任务)
  200 + - 或 task 包含"训练/调试/修复"等关键词
  201 + - 反思 prompt:
  202 + ```
  203 + 请反思这次任务执行:
  204 + 1. 做得好的是什么?有什么可复用的模式?
  205 + 2. 做得不好的是什么?有什么教训?
  206 + 3. 这类任务的情景特征是什么?下次遇到类似任务应该怎么做?
  207 +
  208 + 输出格式:
  209 + - pattern: (可复用的模式)
  210 + - lesson: (教训)
  211 + - scenario_keywords: (情景关键词列表)
  212 + - plan_summary: (如果方案好,写出步骤摘要)
  213 + ```
  214 +
  215 +- [ ] **3.2 反思结果自动写入**
  216 + - pattern → memory.md "已验证的模式"
  217 + - lesson → memory.md "失败教训"
  218 + - plan_summary → cerebellum/ 新方案文件
  219 + - scenario_keywords → hippocampus.md 新索引行
  220 +
  221 +- [ ] **3.3 短期记忆合并到长期记忆**
  222 + - 触发: CronCreate 每天凌晨 2 点
  223 + - 逻辑:
  224 + 1. 扫描 short-term/ 中超过 7 天的 session 摘要
  225 + 2. 提取反复出现的模式 → long-term/patterns.md
  226 + 3. 提取重要事实 → long-term/facts.md
  227 + 4. 删除已合并的 short-term 文件
  228 + - 输出: 更新 long-term/ 目录
  229 +
  230 +- [ ] **3.4 日报自动化**
  231 + - 触发: CronCreate 每天 23:00
  232 + - 内容: 当天的 session 数、任务完成数、关键成果
  233 + - 输出: `memory/daily/YYYY-MM-DD.md`
  234 +
  235 +- [ ] **3.5 记忆遗忘机制**
  236 + - long-term 中连续 30 天未被引用的条目,降低权重
  237 + - hippocampus 中置信度 < 0.3 且使用次数 = 0 的条目,标记为"已遗忘"
  238 + - 防止记忆无限膨胀
  239 +
  240 +---
  241 +
  242 +## 五、关键技术决策
  243 +
  244 +| # | 问题 | 决策 | 说明 |
  245 +|---|------|------|------|
  246 +| 1 | session 摘要生成方式 | **无 LLM,纯提取** (MVP) | 从 meta.json + messages.log 提取,不消耗 API 配额 |
  247 +| 2 | 海马体匹配算法 | **关键词匹配** (MVP) | 后续按需升级向量检索 |
  248 +| 3 | memory.md 注入方式 | **全量 + 最近 5 session** | memory.md ≤2000字 + 5 个 session 摘要 ≤1500字 |
  249 +| 4 | 反思触发条件 | **有实质操作的对话才反思** | toolCallCount ≥ 3 或 duration > 60s |
  250 +| 5 | 反思执行者 | **Agent 自己** | 通过追加一条 prompt 让 Agent 反思并输出 JSON |
  251 +| 6 | 长期合并频率 | **每天凌晨** | cron 触发,不影响白天使用 |
  252 +
  253 +---
  254 +
  255 +## 六、代码改动点
  256 +
  257 +| 文件 | 改动 | Phase |
  258 +|------|------|-------|
  259 +| `server/routes/agent-chat.js` | `result` 事件中调用 MemoryWriter | 1 |
  260 +| `server/routes/agent-chat.js` | `buildSystemPrompt()` 加载 short-term | 1 |
  261 +| `server/services/memory-service.js` | **新建**: session摘要、记忆检索、索引更新 | 1+2 |
  262 +| `packages/agent-core/Agent.js` | `reflect()` 实现 | 3 |
  263 +| `packages/agent-core/base/common/capabilities.md` | 增加记忆使用说明 | 1 |
  264 +
  265 +---
  266 +
  267 +## 七、验证标准
  268 +
  269 +### Phase 1 验收
  270 +- [ ] 与 CEO Agent 对话一次 → `short-term/` 出现新 session 文件
  271 +- [ ] 第二次对话 → system prompt 中能看到"近期记忆"段
  272 +- [ ] 多次对话后 → memory.md 有新追加的关键事实
  273 +
  274 +### Phase 2 验收
  275 +- [ ] 手动添加一条 hippocampus 索引
  276 +- [ ] 给 Agent 分配匹配的任务 → prompt 中出现小脑方案内容
  277 +- [ ] Agent 使用方案完成任务 → 索引的使用次数 +1
  278 +
  279 +### Phase 3 验收
  280 +- [ ] Agent 完成复杂任务 → 自动触发反思
  281 +- [ ] 反思结果写入 memory.md 和 cerebellum/
  282 +- [ ] 7 天后 → short-term 合并到 long-term,旧文件清理
... ...