Skip to content

Latest commit

 

History

History
108 lines (79 loc) · 13.1 KB

File metadata and controls

108 lines (79 loc) · 13.1 KB

v0.3.0:可组合记忆内核

简体中文 | English | 扩展开发

v0.3.0 把原有三层系统提升为可组合记忆内核,同时保持一个安装包、默认三层行为、公开工具与现有数据格式兼容。Runtime、Documents、Memory Spaces 现在是三个可启停 Layer;现有路由由 default-three-tier Strategy 表达,Provider 构造通过 Registry/Factory 解耦。

你需要做什么

读者 行动
已有用户 备份、更新、重启并核对三个默认 Layer;无需迁移数据,也无需新增 View 操作
新用户 第一次走通流程时保持三个默认 Layer 全部开启
运维者 切换范围、Layer 或扩展后,检查设置保存结果与状态页 generation
扩展作者 只从 dsh-mnemon/* 公共子路径导入,并通过 mnemonMemory / MemoryBoot 注册 contribution

交付内容

  • 新增 wire-safe Contracts、MemoryCatalog、原子 MemoryTopologyManagerMemoryKernel、Guard、MemoryPlanMemoryReceipt
  • Catalog、Topology 和 Guard 分别带代际边界;组件或 Guard 变化后,旧 Plan 在执行前被拒绝并要求重新规划;已接受的 Plan 会被原子 claim 一次,顺序或并发重放都不能重复数据面步骤。
  • 普通设置面只为每个 Layer 提供一个总开关。开启表示允许默认策略按需使用,不会强制 Recall;关闭同时停止上下文、模型工具、后台处理和数据面 Web/RPC。
  • Kernel 内部继续区分能力与触发来源并执行 Guard;这些约束属于权威控制面,不作为 v0.3 普通用户的细粒度配置项。
  • 新增 MemoryBoot 与 Cordis mnemonMemory 服务(MemoryExtensionHost 保留为 v0.3 预发布别名)。扩展可以在 Host 挂载前或运行中贡献 Layer、Adapter、Strategy、Guard 与 MemorySource;热卸载推动新 generation,Source readiness 以事务方式验证。
  • 设置页通过 memory-system RPC 读取实时描述符并动态渲染 Layer,不再依赖固定前端枚举。新发现 Layer 默认关闭;保存只写变化 Layer 的 enabled 布尔值。
  • 新增 Strategy manifest、权限边界和 deterministic replay 原语,为后续模型生成策略的 shadow/canary/回退流程建立制品接口。
  • 源码拆为多个 private workspace,但 npm 仍只发布 dsh-mnemon,并新增 contractskernelextension-sdkprovider-sdkstrategy-sdk、默认 Layer/Strategy 等子路径。
  • Root Agent 的每个用户回合固定一个不可变、轻量的 MemoryTurnView。有界 Wake 完整保留 Runtime 投影,并只提供 Documents 与 Memory Spaces 的数量封面;同一回合的每个模型 step 使用相同 Source revision/digest。完整 Document 与 Memory Space ID 集合留在 Host,不受 Wake 预算截断。
  • Recall 与 related 读取从 root 回合派生权限(child agent 沿 parentSession),根据 Host 固定状态校验可选 Memory Space ID,然后直接调用 MnemonService。模型侧没有 View/node ID、Zoom、View capability、完整目录或已选 ID 回显,也没有第二个 Recall LLM。Recall 仍由 LLM 驱动:普通回合是 0 次 Provider 查询;首次查询后,只有 LLM 判断 evidence 不足时,才可显式提交一个实质不同的精炼查询。同查询重放,第三个查询不能到达 Provider,也不创建 child Agent。两次共享至多 6 条、每条 1,200 字符、总正文 4,800 字符的 envelope,首次准入会为恢复路径预留容量;随后另可进行一次独立有界的 Related。模型侧不暴露容易误判的语义过滤器,并丢弃低相关项、限制 medium/unknown evidence。
  • 已授权的 Mnemon Native smart search 如果在质量筛选后丢失结构化精确锚点,或聚焦查询缺少足够词面覆盖,会执行一次有界本地 keyword 恢复。恢复结果先按阈值校验、去重并排在泛化结果之前,再经过同一质量策略与输出 envelope;不会重复请求远程 Provider,也不改变 Recall 调度或模型调用次数。两次由 LLM 选择的查询各自保留一个有界 medium/unknown 准入槽,使精炼保持有效,但不会放宽共享的 6 条/4,800 字符 envelope。
  • 模型侧 Document search、Memory Space catalog 和 status 各自具有硬上限。同一 root 回合的 root、child 与并行调用共享一个 Documents 搜索槽,后续调用只返回简短的未执行提示,不再访问磁盘。Document search 使用有界汉字双字 token,使自然中文查询能够命中相关段落,而不会退化为一个无法匹配的整句 token;聚焦查询同时要求最低 token 覆盖,以过滤偶然的局部重叠。完整记录、Provider 设置、文件路径、详细统计和未启用 Provider 行继续留在 Web/RPC 控制面,不再累积到对话历史。
  • Runtime 写入继续支持本回合新提供的事实和显式保存/纠正请求;但纯读取问题不会把 Documents、Recall 或 Related 返回的证据复制、提升或摘要进热记忆,除非用户明确要求进行这种提升。
  • 兼容 Controller 与 Provider 的成功 Authority mutation 统一生成 MemoryReceipt,回执在回合边界合并,使下一个回合重新快照 TurnView;当前回合保持不可变。
  • MEMORY.md 容量维护只让无工具 planner 规划路由和压缩候选。Host 把目标限制为已有、active、可写的 Space,逐条精确写入原始 entry,验证 committed receipt 或完全一致的 Recall evidence,最后把 compaction 与原 add/replace/remove 作为一次 revision-bound 本地提交。待提交或正被 replace/remove 的 entry 不会作为旧来源归档;coverage、字节预算或 revision 任一无效都保留 Runtime 并失败关闭。
  • 后台审查先经过确定性的 dirty-candidate 和当前轮 no-memory admission。达到 activity 门槛但没有持久化信号的普通对话不会启动 child;简短 recall/writeback cue 每个会话至多出现一次。

Benchmark 与行为验证

以下结果固定于 2026-08-24 的产品候选 6066aa796326a98575e142d68883b11b09d38f13;它与身份整理前实际运行评测的 95a4a450e62098614cbb443d12f6d675f5e75402 具有完全相同的文件树。正式基线为 dsh-mnemon@0.2.16 / e5aae00797772bee34f414820b545d21391b84c7,运行于 DSH 0.1.1-rc.2,真实模型为 deepseek-v4-flash。行为门禁属于发布证据;真实 Provider 的 token 与延迟变化是该环境下的观测结果,不是跨模型、网络和硬件的 SLA。

  • 最终 v0.3 完整场景 27/27 完成。额外的两组稳定 Recall 门禁各运行 20 个全新隔离 session,语义与工具策略合计 40/40;没有 Runtime/Documents/Memory Space 写入,没有为 Recall 预取 Memory Space Catalog,也没有 child Agent。
  • Recall 仍由 LLM 决定是否调用:无须持久历史的 steady-state 为 16/16 且 0 次 memory tool;误导措辞组仅 1/20 由 LLM 发起一次实质不同的 refinement,第三个 query 仍受 Host 上限阻止。
场景 正确性 v0.2.16 → v0.3 token 中位 用户 wall 中位 调度变化
Autonomous Recall 10/10 → 10/10 279,077 → 99,736(-64.26%) 86.95s → 14.87s(-82.90%) child 13 → 0
Isolated Recall 5/5 → 5/5 119,352 → 22,609(-81.06%) 47.68s → 8.59s(-81.99%) child 9 → 0
Capacity maintenance baseline 完成 2/2;v0.3 3/3 137,879 → 37,275(-72.97%) 58.88s → 28.27s(-51.98%) child 5 → 1
Steady-state 16/16 → 16/16 85,650 → 84,741(-1.06%) 8.39s → 8.38s 两版均 0 memory tool
上下文与检索 v0.2.16 v0.3.0 判读
realistic corpus 首请求 10,198 tokens 10,167 tokens 固定上下文没有新增 token 税
80 Documents + 80 Spaces 首请求 10,200 tokens 10,169 tokens;Wake 4,158 字符 标题、ID、描述和正文不随目录规模进入 Prompt
direct retrieval hit@1 41/60 60/60 长尾命中改善
direct retrieval hit@6 45/60 60/60 v0.3 的 60 个 expected 查询全部命中
result 正文中位 304 字符 304 字符 没有通过扩大结果正文换取命中率
本地检索 P95 43.22ms 62.73ms 增加 19.51ms,是有界本地恢复的明确代价

双向 canonical data 验证为 4/4,不需要迁移。另有 20 个 absent 查询,两版都可能返回候选,因此非空结果不能被当作事实存在证明。

上表是本次冻结结果的公开发布记录。公开的评测 Harness 说明记录场景、方法、安全边界与复跑命令;每次运行会把机器可读指标写入指定输出目录。原始 Provider trace、request/session event 与本机路径刻意不提交;理解公开结论或复跑 Harness 不依赖任何私有工程归档。

升级与数据兼容

从 v0.2.16 升级不需要迁移数据。Runtime JSON/Markdown、Documents、Memory Space registry、Provider service registry、Mnemon Native Store 与远程 Provider 数据格式均未改变。

TurnView、Source 权限、Turn pin 和待发布 Receipt 是 Host 运行态,不写入上述用户数据格式。现有设置、命令、RPC、WebUI 和用户操作流程不要求理解或手动管理 View;Recall 会自动使用固定的 Source 状态,不新增交互。

未配置 memoryTopology 时自动得到与旧版本等价的三层默认拓扑:三个 Layer 均启用,内部使用固定兼容策略。已有 storageScopedataDir、Provider、召回质量、生命周期、工具和界面设置继续生效。

建议升级步骤:

  1. 按现有流程备份当前 Mnemon root 或导出 Mnemon Pack;
  2. 更新 dsh-mnemon 并重启每个使用它的 DSH profile;
  3. 设置 → 记忆系统 → 记忆层确认三个默认 Layer;
  4. 状态检查 Catalog/Topology generation 和 Provider;
  5. 分别打开三个 Sidebar Tab,并用一轮对话确认 Runtime 注入与按需 Recall。

enabled=false 只停止参与,不会删除或迁移数据。Sidebar Tab 保留并显示“已关闭”;重新启用会使用原目录。降级到 v0.2.16 前建议备份,并从 YAML 移除只对 v0.3.0 有意义的 Layer 开关;本版本没有改变持久数据,因此包级回退不需要反向数据迁移。v0.2.x 会忽略这些开关并恢复旧版硬编码参与行为,但 canonical data 仍可读取。

扩展作者迁移

  • 只从 dsh-mnemon/* 公共子路径导入,不依赖仓库内 src/packages/ 路径。
  • 把组件注册交给 mnemonMemory.register() 返回的 disposer;不要维护进程外的第二个 Catalog。
  • 为每个参与自动投影的扩展 Layer 提供 MemorySource。只有必须进入每轮 Wake 且本身有界的文本才使用 eager;较大记忆使用 routed,只提供有界封面与 Host-only 路由状态。
  • Strategy 只提出 JSON-safe steps,不持有数据面句柄;使用 manifest 限权,并用 replay 覆盖禁用层、自动/手动、预算与越权案例。
  • executor 尊重 AbortSignal,让 Kernel 生成 succeededpartialfailedcancelled 回执。
  • 收到 stale-plan 错误后重新规划,不要重放旧步骤。

仓库内原有 src/memory-system/* 只作为源码兼容 facade;第三方应使用 npm 子路径。

安全边界与当前限制

  • Guard 只能拒绝,Strategy 无法放宽 Host 或参与模式;Guard 集合变化会使旧 Plan 失效。
  • Cordis isolate 管理作用域和卸载,不隔离恶意 JavaScript。Layer executor、Provider Adapter 和 Strategy 必须来自受信任包。
  • 本版本不会自动执行模型刚生成的代码;只交付 manifest、权限封装、replay 和 Kernel 权威校验。
  • 任意新引擎可以先作为独立 Layer/Adapter 接入;Memory Spaces 中全新的 Provider 设置卡、动态连接 schema 与持久 registry 注册尚未泛化,九个现有 Provider 继续由内置 Catalog 管理。
  • 现有 controller 数据面保持兼容,并已统一受 Layer 参与 gate 约束;尚未全部改走持久 MemoryPlan 的兼容路径会把已提交 Authority 变更桥接为同一个 MemoryReceipt 合约,不建立第二种回执。

验证范围

发布验证覆盖 TypeScript、完整 Vitest、确定性双构建、所有公共子路径导入、声明解析、真实隔离 Headless profile 激活、发布包内容、publint 与 attw。新增回归重点覆盖 Catalog/Topology generation、热注册与卸载、Guard 变化、stale Plan、部分回执、三层开关的 8 种组合、描述符驱动设置页及 Sidebar 停用态。

  • 本地完整套件 472 项通过;1 项 Windows 专用 smoke test 只在当前非 Windows 环境跳过。
  • 双构建比较 103 个生成文件并确认 hash 一致;10 个 Node-compatible 公共入口可直接导入,Client 入口按浏览器 wrapper 验证。
  • 隔离 Headless profile 成功激活并向模型请求暴露 35 个总工具,其中 5 个代表性 Mnemon 工具全部存在。
  • 发布包为 110 个文件,publint strict 与 attw ESM profile 均通过。DSH 0.1.1-rc.2 UI primitives 仍只产生上游缺失 source map 的开发期警告。

上一个版本见 v0.2.16 发布说明