Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help


id: ADR-010 title: 分离对话历史、精选记忆与丰富权限 date: 2026-07-19 status: 提议中 relates-to:

  • ADR-005
  • docs/book/src/foundations/fnd-002-documentation-standards.md
  • docs/book/src/architecture/memory-payload-lifecycle.md
  • https://github.com/zeroclaw-labs/zeroclaw/issues/9048
  • https://github.com/zeroclaw-labs/zeroclaw/issues/9103
  • https://github.com/zeroclaw-labs/zeroclaw/issues/6850
  • https://github.com/zeroclaw-labs/zeroclaw/pull/9072
  • crates/zeroclaw-api/src/memory_traits.rs
  • crates/zeroclaw-memory
  • crates/zeroclaw-infra/src/session_backend.rs
  • crates/zeroclaw-infra/src/session_store.rs
  • crates/zeroclaw-infra/src/acp_session_store.rs

ADR-010:分离对话历史、精选记忆与富化授权

上下文

ADR-005 记录了一个后端中立的持久化内存契约,默认使用 SQLite。它并未决定哪些记忆数据应归入持久化内存,也未决定外部内存集成是否属于另一个权威存储。

当前运行时、网关和通道路径可以将对话轮次同时持久化到会话存储和 MemoryCategory::Conversation 条目中。这样一份对话记录就有两个可能的归属方,且其保留、召回、导出、删除和作用域行为各不相同。旧的对话记录还可能在后续提示中重新出现,仿佛它是经过整理的跨会话知识。

外部集成会带来第二权威风险。连接器可以改善搜索或提供派生上下文,但若将其索引视为另一个持久存储,则连接器的状态、中断或较弱的作用域界定便会与 ZeroClaw 的规范数据产生竞争。

已接受的 RFC #9048#9103 一并解决了这些问题。本记录在不重写 ADR-005 的情况下对其进行扩展:与后端无关的 Memory 契约和 SQLite 默认值仍然有效,而本 ADR 分别规定会话历史、精选记忆和增强信息的权威归属。

决策

对话历史记录负责保持连续性

适用的聊天、频道、网关或 ACP 会话存储是对话连续性的权威来源。自动转录持久化属于该会话存储,并保留安全恢复所需的消息结构,包括在受支持情况下的工具调用与工具结果配对。

会话历史记录保留每个适用的会话、代理、租户和主体边界。它不是自动跨会话的知识。裁剪历史记录会改变会话可见和提供商可见的上下文;删除已整理的记忆不会删除会话历史记录。

当当前输入或会话历史与经整理的记忆冲突时,本轮以当前输入和会话历史为准。经整理的记忆不得重写、替换或覆盖该连续性记录。

精选记忆管理选定的跨会话知识

由智能体整理的长期记忆包含经过选择的事实、偏好、决策、约定和习得的操作流程,这些内容会在多个会话之间被有意保留。写入必须经过审慎操作,或由明确且有界的整合策略生成;保留有用的来源信息,并保留所有适用的智能体、会话、租户和主体边界。

精选记忆使用 ADR-005 中与后端无关的 Memory 契约。已配置的后端是该记忆的权威持久化存储。提示组装、整合、治理和反馈仍属于存储实现层之上的生命周期策略关注点;issue #6850 负责跟踪该边界。

本 ADR 并不决定各代理的 Markdown 是运维人员可见的精选记忆规范化表示,还是另一种已配置后端的投影。这仍是一项独立的实现决策;不得隐式引入第二个持久权威来源。

ACP/Code 会话(包括 ZeroCode 的 ACP 面板)与自动长期记忆注入保持隔离。知识包和检索增强生成是独立的、需主动配置的上下文来源;它们不会为这些 Code 会话重新启用经过整理的记忆。

丰富数据是可重建的衍生数据

MemoryEnricher 是权威精选记忆存储的一个可选、尽力而为的派生组件,而不是另一个事实来源。权威存储会先提交。连接器故障、超时、输出格式错误或状态过期,都不能使一次成功的权威写入失效,也不能导致权威存储的召回不可用。

共享富化边界拥有与连接器无关的策略:已声明的能力、调用方与代理作用域、有界的失败行为、确定性的合并顺序,以及为拒绝过期、被取代或错误代理结果所需的任何规范行重新填充。源自连接器的上下文在对模型可见之前会被隔离为不可信内容。

新的自动转录写入不得转发给增强连接器。迁移策略必须明确规定连接器侧如何处理旧有的 MemoryCategory::Conversation 行,防止这些派生数据作为精选记忆被召回,并提供清理或重建指导。未来的会话历史索引需要单独明确的授权、隐私、保留和范围决策;不能通过精选记忆这条衔接路径隐式引入。

第一个实现可以保持 SQLite 专用。在出现具体的第二个消费者之前,暂不将数据丰富化功能推广到其他持久化存储,以避免让每个后端都承接某个连接器的特定假设。

旧版对话行需要显式转换

现有的 MemoryCategory::Conversation 数据属于兼容性状态,而不是未来会话记录的权威来源。迁移必须保留回滚能力,并避免静默删除。实现可以保留兼容性读取,将可恢复的对话轮次迁移到正确的会话存储中,有意将选定的持久事实提升到精选记忆中,或根据文档规定的保留规则使行过期。

任何实现都不得将批量把对话记录提升为经整理的记忆视为默认行为。提升是一项有界且具备来源感知的决策,而不是存储格式转换。

验收关卡

此 ADR 在满足以下所有条件之前仍处于提议状态:

  • 新的自动转录写入会在涵盖的运行时、网关、通道和 ACP 路径上使用规范的会话存储;
  • 精选记忆无法覆盖与之冲突的当前输入或会话历史,并且 ACP/Code 自动记忆隔离仍会强制执行;
  • authoritative-store/enricher 接缝已上线,采用 authoritative-first 写入、作用域限定且经能力门控的召回、不受信任上下文围栏以及故障回退;
  • 新的自动转录写入已从扩充连接器中排除;并且
  • 旧版对话记录行的兼容性和迁移行为(包括类别安全的连接器召回,以及清理或重建行为)已有文档记录,并由支持回滚的测试覆盖。

后果

积极后果:

  • 对话恢复、记录保留和记录删除由同一个权威所有者负责。
  • 精心整理的记忆可以持续演进,而不会变成第二套会话历史记录系统。
  • 外部增强可在不从已配置的记忆后端夺取持久权限的情况下提升召回率。
  • 连接器中断和较弱的连接器协议会回退到作用域限定的权威数据。
  • ACP/Code 会话会保留其现有的内存漂移防护,包括 ZeroCode 的 ACP 面板。

负面后果:

  • 现有的转录自动保存路径和旧版对话记录需要分阶段的兼容性和迁移工作。
  • 会话存储必须提供足够的保真度和覆盖范围,会话记录写入才能离开通用内存。
  • 富化适配器不能无差别地接收每一次 Memory 写入;共享包装器必须强制执行类别和作用域边界。
  • 在迁移仍处于活动状态期间,操作员可能会暂时同时看到旧版对话行和规范会话历史记录。

参考文献