Skip to content

sleep [feature]:冲突候选池建议接入 entity_attrs 属性失效与实体废弃信号,解决跨主题记忆局部过时漏判 #585

Closed

Description

@xueyue33

目前 sleep.js (findPotentialConflicts) 构造候选对只看整条记忆的向量余弦相似度(如 > 0.85),这会漏掉一类很常见的「跨主题局部过时」:

比如记忆 A 记的是《主机整体服务架构》(其中顺带提到组件 X 版本是 v1 / 路径是 /opt/x),后来另一轮排障或改造生成了记忆 B《某功能排障与配置调整》(其中把组件 X 升到了 v2,或者把组件 X 下线删掉了)。
因为 A 和 B 主题不同,整段向量相似度往往只有 0.45~0.60,进不了 findPotentialConflicts,导致 A 里关于组件 X 的旧版本/旧引用一直留在活跃记忆里,触发不了 sleepActionSet="full" 的 update(局部过时就地修正)或 supersede。

翻了下代码,其实 store.saveAttr 在写实体属性时已经调了 invalidateOldAttr(entity_id, attr_key, now):

  1. 同实体同名属性被覆盖:同一 (entity_id, attr_key) 下,新记忆写入不同 attr_value 并把旧记忆的 attr 行标为 valid_until IS NOT NULL 时,entity_attrs 表里其实已经记录了 old_memory_id <-> new_memory_id 的属性失效关系(像版本号升级、端口/路径/参数变更、状态变更都能抓到)。
  2. 实体下线/废弃:某个 entity_id 新增了废弃/删除/停用相关的属性或关系时,其它还挂着该 entity_id 的活跃记忆(archived = 0)往往还残留着附带引用。

建议在 sleep.js 构造候选对时,除了向量相似度达标的对之外,把 entity_attrs 中「属性值被新记忆覆盖(old_val != new_val)且两侧记忆都未归档」的记忆对(以及实体被标废弃时关联的活跃记忆对)也补进候选池。

现在已经有 #529 和 #533 的 conflict_reviewed / differentiated_pairs 账本和 sleepConflictMaxPairs 预算上限,由 entity_attrs 补进来的跨主题对每对最多只会审一次:确实局部过时的走 update 修掉旧片段,没冲突的记进账本后下一轮直接跳过,不会死循环也不会多烧 token。

Activity

  1. modusensus commented on Nov 11, 2026

    @modusensus
    Member

    已并入 #641 的规格(11-10 的「规格补全」评论):实体属性失效(entity_attrs)与实体废弃信号收进冲突分诊的证据面。beta 分阶段落地推进中:#643(shadow)/ #644(enforce)/ #650(检索侧),均已合入 main。

    本条关闭、后续由 #641 跟踪;若 beta 实现最终没接实体信号、或接了但效果不对,请回 #641 提。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions