18 KiB
auto-cognition 设计(顶层:心智循环)
本文档:reme4 中长期记忆系统的顶层认知模型 —— 把 agent 的记忆生命周期类比人类睡眠/觉醒回路,推导出三阶段分工与15 维能力清单。
三阶段实现各有专属文档:
- Stage 1 写入(REM 重放抽象) →
auto_dream_design.md- Stage 2 巩固(NREM 深度整合) →
auto_consolidate_design.md- Stage 3 检索(觉醒态提取) →
auto_recall_design.md配套阅读:
auto_memory_design.md:入流端(daily 写入),与 cognition 平行 —— cognition 负责"已落地后的认知循环",memory 负责"经历落地"structure.md§4(retrieve 三种问法)核心立场:
- 长期记忆不是"存 + 取"两个动作,是写入 → 巩固 → 提取的循环 —— 三段时间尺度不同(同步 / 周期 / 同步),设计形态不同
- vault 是事实层,只承载经过 LLM 写入认证的关系;
meta/是派生层,承载概率推断的统计信号- 任一阶段独立演化,任一信号缺失系统降级而不崩
0. 心智循环:reme 的认知模型
agent 的长期记忆系统在概念上对应人脑的海马—皮层回路 + 睡眠—觉醒周期:
┌─────────────────────────────────┐
│ 外部经验(daily / resource) │
└─────────────┬───────────────────┘
│ (auto-memory 写 daily)
▼
┌─────────────────────────────────────────────────┐
│ │
│ ┌────────────────┐ 抽象 / 关系编织 │
│ │ Stage 1 │ ◄─ 类比 REM 睡眠 │
│ │ auto-dream │ "重放 + 写进 schema" │
│ └───────┬────────┘ │
│ │ 写 vault(digest body + wikilink) │
│ ▼ │
│ ┌────────────────┐ │
│ │ vault(事实) │ │
│ └───────┬────────┘ │
│ │ 只读 │
│ ▼ │
│ ┌────────────────┐ 长期组织 / 派生指标 │
│ │ Stage 2 │ ◄─ 类比 NREM 慢波睡眠 │
│ │ auto-consol- │ "巩固 + 修剪 + 集群" │
│ │ idate │ │
│ └───────┬────────┘ │
│ │ 写 meta/ + audit/(派生层) │
│ ▼ │
│ ┌────────────────┐ │
│ │ meta(派生) │ │
│ └───────┬────────┘ │
│ │ 只读 │
│ ▼ │
│ ┌────────────────┐ query → 答案合成 │
│ │ Stage 3 │ ◄─ 类比觉醒态 cue retrieval│
│ │ auto-recall │ "融合 + pattern complete"│
│ └───────┬────────┘ │
│ │ │
└───────────┼─────────────────────────────────────┘
│ 召回结果给 agent
▼
┌─────────────────────────────────┐
│ agent query │
└─────────────────────────────────┘
心智循环回答四个根本问题:
| 问题 | 谁回答 |
|---|---|
| 我经历过什么? | auto-memory(daily 入流) |
| 我从中学到什么? | Stage 1 — auto-dream |
| 这些知识如何长期组织? | Stage 2 — auto-consolidate |
| 我需要时如何调用? | Stage 3 — auto-recall |
memory 负责"经历落地",cognition 三阶段负责"已落地经历的认知循环"。
1. 三阶段全景
| 阶段 | 神经科学类比 | 时间尺度 | 改 vault | 实现归属 |
|---|---|---|---|---|
| Stage 1 dream | REM 重放抽象 | 同步(随入流即跑) | 是(写 digest body) | auto_dream_design.md |
| Stage 2 consolidate | NREM 深度巩固 | 周期 / idle(daily / weekly) | 否(写 meta/ + audit/) |
auto_consolidate_design.md |
| Stage 3 recall | 觉醒态 cue retrieval | 同步(query 触发) | 否(只读;唯一对外写是 meta/access_log.json) |
auto_recall_design.md |
关键的不对称:
- 写入与检索是同步的(用户 / agent 等待),巩固是离线的(idle / 周期)
- 改 vault 的资格被严格限制在 dream + consolidate 中的 split —— 其它阶段全只读
- 三阶段时间尺度差三个数量级,这是设计形态(同步 vs 异步 vs idle)的根本来源
2. 系统级能力(贯穿三阶段)
不属任何单阶段,但任一阶段不能违反:
| 能力 | 含义 |
|---|---|
| 事实层 vs 派生层分离 | vault 只承载经 LLM 写入认证的关系(显式 wikilink);meta/ 承载概率推断的派生指标(community / recency / archived);两者绝不混同 |
| 不变量守恒 | F-invariants(0 文件移动 / 改正文限定 subject / wikilink 是 body 一部分)+ E-invariants(边守恒 E-1/E-2/E-3)横跨三阶段;详 auto_dream_design.md §4.3-§4.4 |
| 阶段独立演化 | 任一阶段算法升级不破坏其它阶段(community 算法换 → dream 不变;打分公式调 → consolidate 不变) |
| 缺失即降级 | 任一派生信号缺失,系统降级而不崩;冷启动可用 |
| 全程可审计 | 每阶段产 audit / report / log,人 / agent 可检视追溯 |
3. Stage 1 — auto-dream:经验 → 抽象
类比:REM 睡眠的记忆重放与抽象提炼。脑在做梦时把白天事件拆解、重组,提取出可泛化的模式,登记进皮层 schema。
根本目的:把"原始经历"转化为"长期值得调取的教训",同时把它编织进已有知识图谱。
3.1 五个能力维度
逻辑递进 —— 输入 → 抽象 → 整合 → 编织 → 写入:
| # | 能力 | 它在问什么 | 失效后果 |
|---|---|---|---|
| 1 | 抽象判断(gate) | 这段材料里有"值得长期记住"的东西吗? | 噪声进 vault / 只蒸馏不抽象 |
| 2 | 经验重放(召回) | 这个抽象在已有记忆里已经存在吗?以什么形式? | 重复节点 / 错过整合机会 |
| 3 | 整合决策 | 创建新节点,还是丰富已有节点?若已有 —— 是再次印证 / 精化范围 / 修正错误? | 已有信息丢失 / 错误没纠正 |
| 4 | 关系编织 | 这个抽象与谁有关系?谁是它的来源? | wikilink 缺失,后续 retrieve 漏召 |
| 5 | 写入安全 | 写入会不会破坏 vault 既有事实?并发冲突如何处理? | 边丢失 / race condition |
3.2 关键定性
- dream 是 vault 的唯一写者(在 cognition 三阶段里;memory 写 daily 不算)
- 写入瞬间是关系建立的唯一可信时机 —— 错过的关系不靠后台扫回(那不是 consolidate 的工作)
- 一次写入,所有未来检索受益(持久化优于实时计算)
详细机制见 auto_dream_design.md。
4. Stage 2 — auto-consolidate:抽象 → 网络
类比:NREM 慢波睡眠的系统巩固 + 突触代谢稳态。脑在深睡时把分散事件融入 schema、修剪弱连接、把长期不用的记忆淡出意识可达范围。
根本目的:跨时间累积地把 vault 从"一堆节点"组织成"有结构、有权重、有时效的网络",但只产派生信号,不污染事实层。
4.1 五个能力维度
按作用尺度从微观到宏观:
| # | 能力 | 作用尺度 | 类比 | 输出形态 |
|---|---|---|---|---|
| 1 | 结构维护 | 节点级 | 海马表征过密 → 分化新单元 | 改 vault(split,唯一例外) |
| 2 | 跨节点关系发现 | 节点对级 | 多次睡眠中识别"同一件事" → schema | audit/ 报告 |
| 3 | 主题集群形成 | 子图级 | 皮层网络的功能性分区 | meta/communities.json |
| 4 | 时效性管理 | 节点级 / 时间维度 | 突触代谢稳态 + 遗忘 | meta/access_log.json + meta/archived.json |
| 5 | 健康监控 | 系统级 | 神经环路诊断 | 告警 / 严重告警 |
4.2 关键定性
- consolidate 是纯只读 + 派生写(读 vault,写
meta/+audit/) - 唯一例外是 split —— 改 vault 的维护任务,但触发严格(D3 inline 写后)且只改自身负责的 parent + children
- 关系判断有错率 → 报告优先,人/agent 介入,不主动合并(夸大置信度的代价是污染事实层)
- 离线 / 周期 / idle —— 与前台不抢资源;失败不影响主流程,下次重跑
详细机制见 auto_consolidate_design.md。
5. Stage 3 — auto-recall:网络 → 答案
类比:觉醒态的 cue-driven retrieval + pattern completion。脑接到 query,激活相关皮层模式,补全成完整答案;同时召回过程本身强化被用到的记忆痕迹。
根本目的:接到当前 query 时,从 vault + 派生信号合成最相关的过去经验 —— 既要覆盖率(不漏)也要信噪比(不冗余)。
5.1 五个能力维度
按召回流程从输入到输出:
| # | 能力 | 它在解决什么 |
|---|---|---|
| 1 | 多路召回 | 不同问法走不同算子(state / semantic / topological 三分立);agent 自选,不强加聚合 verb |
| 2 | 多信号融合 | 单一文本相似度不够 —— 还要节点权威性 / 主题集群 / 时效性;乘法融合 |
| 3 | 信噪比管理 | 节点级去重 + 节点级 surface(frontmatter 一同呈现)+ multi-hop 可控展开 + 冷藏过滤 |
| 4 | 召回反馈 | 被命中的节点 → 写访问日志 → 影响下次 recency / archived 判定 |
| 5 | 鲁棒降级 | 派生信号缺失 → 退到基础召回;version 不兼容 → warning + 跳过该因子 |
5.2 关键定性
- recall 是只读 —— 唯一对外写入是
meta/access_log.json(经 ring buffer + consolidate 聚合) - recall 不引入新 L4 模块(
structure.md✗-15)—— 三种问法分别由 L3 原子工具(list_step/search_step/traverse_step)直接覆盖 - 默认路径 0 LLM 调用(信号都是离线维护好的);LLM rerank / query rewrite 是 SDK 上层选项
详细机制见 auto_recall_design.md。
6. 能力地图(横切视角)
15 维按"作用对象"重排,可以看到三阶段如何分工:
| 作用对象 | dream(写入) | consolidate(巩固) | recall(检索) |
|---|---|---|---|
| 节点(单个) | 1 抽象判断 / 3 整合决策 / 5 写入安全 | 1 结构维护(split) | 3 信噪比(节点级合并/surface) |
| 节点对 / 关系 | 4 关系编织(wikilink) | 2 跨节点关系发现(dups 报告) | (消费已有边,不产新关系) |
| 子图 / 集群 | 2 经验重放(召回邻居) | 3 主题集群形成(community) | 2 多信号融合(community boost) |
| 时间维度 | (写入瞬间) | 4 时效性管理(decay / archived) | 4 召回反馈(access log) |
| 系统健康 | 5 守恒校验 | 5 健康监控(D1 / D10) | 5 鲁棒降级 |
| 入口形态 | 异步 fan-out per sub-unit | 周期 batch / idle | 同步 query response |
几个观察:
- "节点对 / 关系"列在 recall 是空 —— recall 不产新关系,只用已有边(避免 query-time 高成本推断)
- "时间维度"行 dream 缺位 —— 写入瞬间无"时间维度"概念(那是 consolidate 后续才能提取的统计)
- 每行至少有一个阶段负责 —— 没有能力被全阶段忽略
7. 跨阶段不变量
所有阶段共同遵守的硬约束。任何阶段越界 = 设计错误。
7.1 F-invariants(继承 auto_dream_design.md §4.3)
| # | 约束 | 跨阶段含义 |
|---|---|---|
| F-1 | 0 文件移动 | 没有任何阶段可以 move 文件;rename 走 wikilink_handler.retarget_links 显式路径 |
| F-2 | 改正文限定 subject | dream 改 subject body / consolidate split 改 parent + children body;recall 绝不改任何 body |
| F-3 | maintainer 只做 split | consolidate 内的结构维护只做 split;无 merge / dissolve / re-edge |
| F-10 | inbound 不动 | split 后外部 wikilink 仍指 parent,不强制重定向 |
| F-11 | wikilink 是 body 一部分 | 没有"独立的边";所有关系变化是 body 编辑副作用 |
7.2 E-invariants(边守恒)
- E-1:dream update 出边 ⊇ 原出边
- E-2:split 后
(parent_new ∪ ∪children_outbound) ⊇ parent_old - E-3:inbound wikilink split 时不动
recall 不写 body → E-* 与之无关;但 recall 看到的 wikilink 图永远是 dream / split 守恒后的状态。
7.3 派生信号边界
- consolidate / recall 不写 vault —— 关系判断、活跃度统计、社区划分都是概率推断,不污染事实层
meta/*.json不被 retrieve 召回 —— 只作权重信号,不进入"召回结果"集合- audit/ 不被自动消费 —— 报告永远等待人 / agent 介入,不闭环回写
8. 跨阶段数据流(契约总览)
┌──────────────┐ wikilink ┌──────────────┐
│ auto-dream │─落 body──►│ vault/ │
│ (Stage 1) │ │ (事实层) │
└──────────────┘ └──────┬──────┘
│ 只读
▼
┌──────────────────┐
│ auto-consolidate │
│ (Stage 2) │
└─┬────────┬───────┘
│ │
meta/ 元数据───┘ └─── audit/ 报告
(派生层) (人工介入)
│
│ 只读
▼
┌──────────────┐
│ auto-recall │ ◄─ user query
│ (Stage 3) │
└──────┬───────┘
│ 命中钩子(异步)
▼
meta/access_log.json
(recall 唯一对外写入,经 consolidate 聚合)
| 产物 | 路径 | 写入者 | 读取者 | 缺失行为 |
|---|---|---|---|---|
| vault wikilink | digest/**.md body |
dream / split | recall(图遍历) | — |
| dups 报告 | audit/<date>/auto_link_dups.md |
consolidate | 人 / agent | — |
| communities | meta/communities.json |
consolidate | recall | 不做同社区 boost |
| access log | meta/access_log.json |
recall(写命中) + consolidate(聚合) | recall(读 recency) | recency_factor = 1.0 |
| archived list | meta/archived.json |
consolidate | recall(默认过滤) | 不过滤 |
| centrality | file_graph 反向索引(实时,不存) |
自动 | recall(O(1) 查) | — |
契约稳定性:meta/*.json 都带 version + computed_at;recall 启动时校验 version,不兼容则降级。
冷启动:meta/ 为空 → recall 仍能跑(base + centrality + 图)→ 排序略弱不崩。
9. 系统级断言(把"要什么"提炼到 5 条)
-
抽象与事实分层 —— vault 是经 LLM 写过的事实;
meta/是统计 / 算法的派生;两者绝不混同 -
关系建立的时机集中在写入瞬间 —— dream 写入是关系唯一可信来源;consolidate 不补 vault 关系,recall 不预存关系矩阵
-
维护是离线的派生劳动,不是补救 —— consolidate 不修 dream 的疏漏(那叫返工),它做的是 dream 不擅长的事(全局视角 / 统计视角 / 时间视角)
-
检索是融合,不是检索 —— recall 的价值不在"找文本相似",而在"把文本 / 图 / 时效 / 权威多个独立信号合成一个答案"
-
整个心智循环可降级 —— 任一阶段失效或失准,整个系统降级而不崩;冷启动有意义;dogfooding 可演进
10. 与 auto-memory 的边界
auto-memory 写入的 daily event 节点也是图的一部分(承载 daily → digest 的 derived_from:: 边)。但 daily 节点不参与 cognition 三阶段的全部改造:
| cognition 阶段 | 是否触及 daily |
|---|---|
| dream | 只读(作为入流之一) |
| consolidate | 不参与 dups / community / decay(daily 是时间索引,本质不去重 / 不冷藏) |
| recall | 三层并行召回时 daily 也参与命中(structure.md R-2 默认 digest > daily > resource) |
关键约束:cognition 三阶段任何子阶段都不改写 daily(无写回路径);daily 由 auto-memory 写完即只读。
11. 演进 / 待补
当前实现状态:
- ✅ Stage 1 dream 已实现并跑通(
reme4/steps/evolve/dream/) - ⏳ Stage 2 consolidate split 部分将实现;dups / community / decay / archived 待实现
- ⏳ Stage 3 recall 增强未实现(当前 search.py 已有 vector + keyword + RRF + 一跳 expand)
顶层级演进议题(不属任何单阶段):
- ⏳ 能力成熟度路标 —— 把 15 个能力维度按 M0(必须)/ M1(期望)/ M2(演进)分级
- ⏳ 跨阶段集成测试 —— vault 从空到充实的端到端 dogfooding,验证三阶段配合是否符合"心智循环"预期
- ⏳ 可观测性聚合 —— 三阶段各自的 audit / log 现在分散;是否需要统一的 cognition 健康面板
各阶段实现进度详见各自文档的"下一步"章节。