CODEX KNOWLEDGE

记忆体系分工与蒸馏方案(2026-04-19)

2026/04/24 18 min read CODEX KNOWLEDGE 目录 CODEX KNOWLEDGE 类 能力设计 项目 ATRAMENTI CONSOLE 形态 规范 记忆体系分工与蒸馏方案(2026 04 19)

记忆体系分工与蒸馏方案(2026-04-19)

说明:本文现在承担“仓内记忆体系现状与职责边界”真源,不是计划台账;活计划条目和状态更新只允许写入 E:\My Project\Atramenti-Console\codex\plugins\obsidian\data\docs\agent\plan.md

边界说明:本文只负责记忆体系专题现状,不承担项目总体 current-state 三件套职责;项目总体当前状态仍先看 PROJECT-CONTEXT.mdSESSION-HANDOFF.mdplan.md

当前结论(2026-04-21)

当前仓内记忆体系已经收口为“两层主链路 + 一层自动蒸馏镜像 + 三份审计真源”:

  1. plan.mdPROJECT-CONTEXT.mdSESSION-HANDOFF.md 继续作为记忆体系相关的可审计真源
  2. experience-manager 作为唯一对外 MCP 入口与结构化长期记忆入口
  3. qmd 作为本地检索与镜像层
  4. experience-manager -> qmd 之间现在新增自动蒸馏镜像层:把重复经验压成 distilled/clustersdistilled/rulesdistilled/anti-patterns
  5. memory-lancedb-pro 已退役,已从仓库删除,不再属于当前活链路
  6. 仓库根旧路径 E:\My Project\Atramenti-Console\mcps 已退役;当前唯一 canonical MCP 根目录是 E:\My Project\Atramenti-Console\codex\mcps

一句话:

现在的标准口径不是 experience-manager + qmd + memory-lancedb-pro,而是 审计真源 + experience-manager + 自动蒸馏镜像 + qmd

当前活链路

1. 真源层

  • 活计划台账:E:\My Project\Atramenti-Console\codex\plugins\obsidian\data\docs\agent\plan.md
  • 项目上下文:E:\My Project\Atramenti-Console\codex\PROJECT-CONTEXT.md
  • 会话交接:E:\My Project\Atramenti-Console\codex\SESSION-HANDOFF.md

这三者继续承担记忆体系相关的:

  1. 全量事实
  2. 时间线
  3. 人工修订与审计回溯

2. 结构化记忆入口

  • 唯一对外入口:experience-manager
  • 运行时入口:E:\My Project\Atramenti-Console\codex\mcps\experience\mcp\experience-manager-mcp.mjs
  • durable sink:云端 experience-manager 数据

当前要求是:

  • 用户面只保留一个入口
  • 不再把 core-qmd-dist-src-mcpmemory-lancedb-pro-mcp 暴露成并行外部 MCP
  • 计划结果蒸馏继续进入 experience-manager

3. 本地检索层

  • 主检索层:E:\My Project\Atramenti-Console\codex\mcps\core\qmd
  • 当前 canonical 索引:C:\Users\ASUS-KL\.cache\qmd\index.sqlite
  • repo 稳定包装器:E:\My Project\Atramenti-Console\codex\skills\qmd\scripts\qmd.ps1
  • 当前集合:experience-manager

4. 自动蒸馏镜像层

  • 蒸馏脚本:E:\My Project\Atramenti-Console\codex\mcps\experience\scripts\sync-to-qmd.mjs
  • 蒸馏输出根:E:\My Project\Atramenti-Console\codex\mcps\core\qmd\collections\experience-manager\distilled
  • 输出子层:
    • clusters\:把相近经验压成 cluster 文档
    • rules\:从重复经验中抽出稳定规则
    • anti-patterns\:从重复失败/根因信号中抽出反模式
  • 蒸馏 manifest:E:\My Project\Atramenti-Console\codex\mcps\core\qmd\collections\experience-manager\distilled\manifest.json

当前统一口径:

  • 蒸馏层不是第二个外部记忆 MCP
  • 它只是 experience-manager 写入后自动刷新出来的本地压缩镜像
  • 后续 recall 仍统一从 experience-manager 入口进入,只是同一个入口现在能读到更短、更高密度的 distilled 文档

当前统一口径:

  • qmd 是主检索层,不是并行真源
  • memory_recall 优先查 qmd
  • 只有 qmd 没有可用命中时,才回退到 cloud experience/note search
  • refresh_mirrors 当前会刷新 qmd,并同时重建 distilled cluster / rule / anti-pattern 文档

当前已验证状态

截至 2026-04-21,当前真实状态是:

  • experience-manager MCP 可正常 initialize
  • tools/list 可正常返回工具清单
  • memory_status 可返回 cloud / qmd / distilled manifest 状态
  • memory_recall("MySQL") 已直接命中 qmd,不再停留在 cloud fallback
  • refresh_mirrors 当前只返回 qmd
  • 当前 qmd live 状态不再写死成单个快照值;因为 plan / handoff / experience 持续同步会让 indexed / pending 在同一轮收口里继续漂移,精确数字应始终以 E:\My Project\Atramenti-Console\codex\skills\qmd\scripts\qmd.ps1 status -c experience-manager 为准
  • 在本轮 2026-04-21 收口执行中,旧 checkpoint 已从 326 / 426 / 66 继续向前推进到更高 embedded、更低 pending 的状态,说明 backlog 正在被持续清理,而不是停在旧数字不动

已验证入口包括:

  • node --check E:\My Project\Atramenti-Console\codex\mcps\experience\mcp\experience-manager-mcp.mjs
  • node --check E:\My Project\Atramenti-Console\codex\scripts\sync-plan-outcome-to-experience.mjs
  • npm run typecheck(workdir: E:\My Project\Atramenti-Console\codex\mcps\experience
  • 真实 stdio initialize
  • 真实 stdio tools/list
  • 真实 stdio memory_status
  • 真实 stdio memory_recall
  • 真实 stdio refresh_mirrors
  • E:\My Project\Atramenti-Console\codex\skills\qmd\scripts\qmd.ps1 search "MySQL" -c experience-manager -n 3 --json

当前标准链路

当前仓内标准链路已经收口为:

  1. 计划状态更新写入 plan.md
  2. 最终状态(已完成 / 已验证 / 失败)经 append-plan.ps1 触发结果蒸馏,但长期经验仍应受经验准入门槛约束
    • 如需显式覆盖默认门槛,可在状态更新里记录 经验沉淀决策:record / auto / skip
  3. 蒸馏结果写入 experience-manager
  4. experience-manager 刷新 qmd 镜像
  5. qmd 镜像刷新时额外生成 distilled cluster / rule / anti-pattern 文档
  6. 后续任务先读最近计划,再查 experience-manager / qmd

补充当前实现口径:

  • repo 内所有活 MCP 真源统一归到 E:\My Project\Atramenti-Console\codex\mcps
  • experience-manager 负责对外暴露统一记忆入口
  • qmd 负责本地检索与镜像,不再作为并行对外入口
  • 自动蒸馏镜像层负责把重复经验压成更短的检索单元,但不改变对外入口边界

额外当前口径:什么状态可以自动进入长期经验

当前默认不是“所有最终状态都值得长期保留”,而是:

  1. 计划必须已经进入最终状态
  2. 结论必须带有可复用信息,而不只是任务完成宣告
  3. 结论应能追溯到验证证据、适用场景或避免重走信息
  4. 如果只是一次性 closeout 记录,应停留在 plan.md / SESSION-HANDOFF.md,而不是强行提升为经验
  5. auto 默认只接收 已验证 / 失败 且带强复用信号的结果;普通 已完成 需要显式 record

因此当前推荐理解是:

  • plan.md 保存完整过程与最终状态
  • experience-manager 保存经过压缩后仍值得复用的结论
  • 自动蒸馏负责把重复结论进一步压成规则/反模式,而不是替代人工边界判断
  • routine audit、候选核对、feature delivery、deploy-ready 打包、部署上线、删仓删除、目录改名、清理收尾这类一次性交付记录,默认不该自动进入长期经验

对应脚本与入口:

  • E:\My Project\Atramenti-Console\codex\scripts\append-plan.ps1
  • E:\My Project\Atramenti-Console\codex\scripts\sync-plan-outcome-to-experience.mjs
  • E:\My Project\Atramenti-Console\codex\mcps\experience\scripts\sync-to-qmd.mjs

经验准入门槛

当前统一门槛是:

  • 没有验证证据的猜想,不进入长期经验
  • 只有一次性进度价值的状态,不进入长期经验
  • 不能说明适用场景/边界的结论,不进入长期经验
  • 只有当结论对后续类似任务有复用价值时,才值得由 plan.md 提升到 experience-manager

这条门槛的目的,是避免把 experience-manager 重新写成第二份 plan ledger。

退役与边界

已退役

  • codex\mcps\memory-lancedb-pro
  • codex\skills\memory-lancedb-pro
  • 独立外部注册:memory-lancedb-pro-mcp

当前统一口径:

  • memory-lancedb-pro 仅允许出现在带日期的历史验收 / 审计材料中
  • 它不再是当前运行时组成部分
  • 不再允许为它补新路径、补新入口、补 facade、补兼容包装

不要再做的事

  • 不要把 plan.md 替换成黑盒记忆库
  • 不要把每一次中间状态都塞进长期记忆
  • 不要再恢复 memory-lancedb-pro 作为 bridge 层
  • 不要重新引入第二套对外记忆 MCP 入口
  • 不要创建新的“记忆体系汇总页 / 跳转页 / 薄索引页”

还剩什么未完成

当前真正未完成的不是链路打通,而是检索覆盖的收尾:

  • qmd 的 pending embeddings 需要在每轮文档/计划同步后继续收尾,直到当前尾差清空
  • 由于本机是 CPU-only,qmd embed 会明显偏慢;遇到“看起来卡住”时,应先区分是模型下载、会话管道中断,还是 backlog 仍在缓慢下降
  • 当前稳定做法是:优先确保本地 embedding GGUF 已落到 C:\Users\ASUS-KL\.cache\qmd\models\embeddinggemma-300M-Q8_0.gguf,再用 E:\My Project\Atramenti-Console\codex\scripts\qmd.ps1 embed 继续补尾差

除这点外,当前仓内记忆体系的实现边界已经明确:

  • 真源:plan.md / PROJECT-CONTEXT.md / SESSION-HANDOFF.md
  • 入口:experience-manager
  • 检索:qmd

历史说明

这份文档最初记录的是 2026-04-19 的“方案期”分工判断;经过 2026-04-202026-04-21 的收口、脱钩、删除与复验后,当前内容已经按现状改写。

如果后续再看到 memory-lancedb-pro

  1. 先默认它属于历史材料
  2. 只有在带日期的验收 / 审计记录里保留
  3. 不要把它重新解释成当前活实现