记忆体系分工与蒸馏方案(2026-04-19)
说明:本文现在承担“仓内记忆体系现状与职责边界”真源,不是计划台账;活计划条目和状态更新只允许写入 E:\My Project\Atramenti-Console\codex\plugins\obsidian\data\docs\agent\plan.md。
边界说明:本文只负责记忆体系专题现状,不承担项目总体 current-state 三件套职责;项目总体当前状态仍先看 PROJECT-CONTEXT.md、SESSION-HANDOFF.md、plan.md。
当前结论(2026-04-21)
当前仓内记忆体系已经收口为“两层主链路 + 一层自动蒸馏镜像 + 三份审计真源”:
plan.md、PROJECT-CONTEXT.md、SESSION-HANDOFF.md继续作为记忆体系相关的可审计真源experience-manager作为唯一对外 MCP 入口与结构化长期记忆入口qmd作为本地检索与镜像层experience-manager -> qmd之间现在新增自动蒸馏镜像层:把重复经验压成distilled/clusters、distilled/rules、distilled/anti-patternsmemory-lancedb-pro已退役,已从仓库删除,不再属于当前活链路- 仓库根旧路径
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
这三者继续承担记忆体系相关的:
- 全量事实
- 时间线
- 人工修订与审计回溯
2. 结构化记忆入口
- 唯一对外入口:
experience-manager - 运行时入口:
E:\My Project\Atramenti-Console\codex\mcps\experience\mcp\experience-manager-mcp.mjs - durable sink:云端
experience-manager数据
当前要求是:
- 用户面只保留一个入口
- 不再把
core-qmd-dist-src-mcp或memory-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,并同时重建 distilledcluster / rule / anti-pattern文档
当前已验证状态
截至 2026-04-21,当前真实状态是:
experience-managerMCP 可正常initializetools/list可正常返回工具清单memory_status可返回cloud / qmd / distilled manifest状态memory_recall("MySQL")已直接命中 qmd,不再停留在 cloud fallbackrefresh_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.mjsnode --check E:\My Project\Atramenti-Console\codex\scripts\sync-plan-outcome-to-experience.mjsnpm 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
当前标准链路
当前仓内标准链路已经收口为:
- 计划状态更新写入
plan.md - 最终状态(
已完成/已验证/失败)经append-plan.ps1触发结果蒸馏,但长期经验仍应受经验准入门槛约束- 如需显式覆盖默认门槛,可在状态更新里记录
经验沉淀决策:record / auto / skip
- 如需显式覆盖默认门槛,可在状态更新里记录
- 蒸馏结果写入
experience-manager experience-manager刷新 qmd 镜像- qmd 镜像刷新时额外生成 distilled
cluster / rule / anti-pattern文档 - 后续任务先读最近计划,再查
experience-manager/ qmd
补充当前实现口径:
- repo 内所有活 MCP 真源统一归到
E:\My Project\Atramenti-Console\codex\mcps experience-manager负责对外暴露统一记忆入口qmd负责本地检索与镜像,不再作为并行对外入口- 自动蒸馏镜像层负责把重复经验压成更短的检索单元,但不改变对外入口边界
额外当前口径:什么状态可以自动进入长期经验
当前默认不是“所有最终状态都值得长期保留”,而是:
- 计划必须已经进入最终状态
- 结论必须带有可复用信息,而不只是任务完成宣告
- 结论应能追溯到验证证据、适用场景或避免重走信息
- 如果只是一次性 closeout 记录,应停留在
plan.md/SESSION-HANDOFF.md,而不是强行提升为经验 auto默认只接收已验证/失败且带强复用信号的结果;普通已完成需要显式record
因此当前推荐理解是:
plan.md保存完整过程与最终状态experience-manager保存经过压缩后仍值得复用的结论- 自动蒸馏负责把重复结论进一步压成规则/反模式,而不是替代人工边界判断
- routine audit、候选核对、feature delivery、deploy-ready 打包、部署上线、删仓删除、目录改名、清理收尾这类一次性交付记录,默认不该自动进入长期经验
对应脚本与入口:
E:\My Project\Atramenti-Console\codex\scripts\append-plan.ps1E:\My Project\Atramenti-Console\codex\scripts\sync-plan-outcome-to-experience.mjsE:\My Project\Atramenti-Console\codex\mcps\experience\scripts\sync-to-qmd.mjs
经验准入门槛
当前统一门槛是:
- 没有验证证据的猜想,不进入长期经验
- 只有一次性进度价值的状态,不进入长期经验
- 不能说明适用场景/边界的结论,不进入长期经验
- 只有当结论对后续类似任务有复用价值时,才值得由
plan.md提升到experience-manager
这条门槛的目的,是避免把 experience-manager 重新写成第二份 plan ledger。
退役与边界
已退役
codex\mcps\memory-lancedb-procodex\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-20 到 2026-04-21 的收口、脱钩、删除与复验后,当前内容已经按现状改写。
如果后续再看到 memory-lancedb-pro:
- 先默认它属于历史材料
- 只有在带日期的验收 / 审计记录里保留
- 不要把它重新解释成当前活实现