Proposition-level Graph Memory: Representation, Retrieval and Governance for Long-running Agents
当前面向智能体的记忆系统,绝大多数把问题定义为存储与召回:如何把对话与文档切分、向量化、分层存放,并在需要时准确取回。本文认为这一定义遗漏了长期运行场景中真正的困难。当一个智能体连续运行数月,写入的不再是彼此独立的片段,而是会互相矛盾、会随时间失效、会被后续事实推翻的结论集合。此时系统的质量不再由召回率决定,而由三个此前很少被形式化的问题决定:两条记忆冲突时依据什么裁决;被推翻的结论如何处置才不损失可追溯性;以及——什么样的记忆才应当被遗忘。
本文提出并论证一套以命题为最小单元、以扩散激活为召回机制、以可撤销仲裁为治理内核的记忆模型。四项主张构成其理论骨架:(1)存—再—判,写入端不设价值过滤器,代价不对称使"先存后判"严格优于"判后再存";(2)低提取强度不等于低价值,据 Bjork 新失用理论区分存储强度与提取强度,从而论证遗忘的唯一合法判据是命题被证伪,而非久未使用;(3)冲突四分类与事实优先仲裁,多数所谓冲突实为作用域差异,真正的二选一是少数,且裁决必须以可核验的客观事实为最高依据;(4)失效不删除,被推翻的结论降权保留并记录推翻关系,使"当时为何如此判断"始终可追溯。
本文同时给出该模型的完整形式化定义(强度函数、扩散规则、枢纽抑制、剪枝阈值)与一个长期运行实例的观察数据,并明确交代模型的边界:它刻意不做形式化本体与逻辑推理——本文将论证在需要审计的场景中,这不是能力缺失,而是必要的路线选择。
关键词:智能体记忆 · 命题级索引 · 扩散激活 · 组织记忆 · 记忆治理 · 可撤销仲裁 · 知识连续性 · 数据血缘
在关于"AI 记忆"的讨论中,三种性质完全不同的东西经常共用同一个词,这是许多设计分歧的真正来源。
| 层面 | 承载物 | 失效方式 |
|---|---|---|
| 上下文窗口 | 本次推理可见的 token 序列 | 会话结束即全部消失;扩大窗口只是推迟消失 |
| 检索增强 | 外部语料的向量索引 | 不消失,但不演化——文档写下时是什么,一年后仍是什么 |
| 记忆 | 系统自己得出、并会自己修正的结论 | 会互相矛盾、会过期、会被推翻——需要治理 |
把上下文窗口做大,解决的是第一层;把语料切得更细、索引做得更好,解决的是第二层。检索增强的原始工作[1]把外部索引称为非参数记忆(non-parametric memory)——这一技术路线从命名起就与"记忆"相关,本文并非借用新词。但需要指出的是,非参数记忆解决的是知识的可及性,而不是结论的生命周期。
第三层才是长期运行场景的实际困难所在。一个连续工作数月的智能体,其记忆库中不断累积的是它自己得出的判断:某个做法为什么行不通、某个约定的适用边界在哪里、某项决定当初基于什么前提。这些条目具有三个语料所没有的性质:它们彼此可能矛盾;它们会因外部世界变化而失效;它们被推翻时,"曾经如此认为"本身仍是有价值的信息。
检索系统的错误是召回错了或没召回。记忆系统在此之外还有两类特有错误,且都不会在检索指标上体现:
本文的全部设计取向,可以概括为对这两类不可观测错误的系统性防御。
记忆系统的核心难点不在存储与召回,而在记忆之间的关系随时间演化时的治理:冲突如何裁决、失效如何处置、遗忘依据什么。检索质量是入场券,治理机制才是长期运行下的分水岭。
在图上做检索增强的工作中,有两条常被混为一谈、实则目标不同的路线。
其一是面向全局摘要的路线。该路线[2]要解决的是"这批语料整体在讲什么"这类查询,手段是先做社区检测、再为每个社区预生成摘要,索引期成本很高,回答的是全局性问题。
其二是面向多跳召回的路线。该路线[3]受海马索引理论启发,在无模式(schemaless)图上以查询中的概念为种子运行个性化 PageRank,一步完成跨文档的多跳联想召回,索引期成本低。本文的召回机制属于这一路线,但如 §4 所述,采用的是更早的扩散激活形式而非 PageRank。
近年出现的"记忆操作系统"类工作,把记忆的生产、组织、分层存储、调度、演化与治理组织为完整生命周期,并提供云端、私有化与端侧的多形态交付。这类工作的贡献主要在工程分层与调度:让记忆按场景与时机被合理地调入调出,从而同时改善准确率与 token 成本。
另有以时序知识图为核心的智能体记忆工作,其重要贡献是引入事实的有效期区间,使"这条结论在哪段时间内为真"成为可查询的一等属性,并对被取代的事实采取标注而非删除的处理方式。本文 §8.3 的失效处置与之同源。
上述工作大多把治理作为生命周期中的一格加以罗列(通常表现为权限、隔离、审计三项,以及一个"冲突处理准确率"的整体指标),但较少展开裁决依据本身:两条记忆冲突时,凭什么判定谁胜?判错了能否撤回?什么样的信号有资格作为裁决依据,什么样的没有?
本文的贡献正在此处。§3–§5 描述表征与检索,是与既有工作共享的基础;§6–§8 描述沉淀、遗忘与仲裁,是本文的主要主张所在。
本模型中,记忆的最小单元不是文档、不是段落、也不是实体,而是命题。这一选择有直接的文献依据:面向检索的密集索引研究[4]将命题定义为"文本中的原子表达,每个封装一个独立的事实性内容,以简洁、自足的自然语言形式呈现",并给出三条判据:
第三条是关键。它意味着一条记忆被召回时,不需要连带召回它的原始语境就能被正确使用。这直接决定了系统能否在数月之后仍然安全地复用早期结论——若一条记忆的含义依赖于当初的会话上下文,而那段上下文早已不存在,则该记忆在被召回的同时就已经失真。
命题级的选择带来一个必须正面交代的结构性差异。传统知识图谱以实体为节点,其技术框架[10]包含数据层与模式层、知识抽取、知识融合、知识存储检索与知识推理等环节,通常需要先由领域专家定义本体(类层级、定义域与值域、公理),再做实体对齐,方能支持逻辑推理。
本模型的节点是结论级命题而非实体,因而不做实体对齐;不设形式化本体,其类型系统仅是轻量模式层;在图上做的是多跳召回而非逻辑推理。按上述框架的严格定义,本模型不构成完整意义上的知识图谱,准确的表述是命题级知识图或无模式知识图。
不做本体,换来的是零启动成本与随业务自动生长。先定本体的路径要求在系统投用之前就穷举清楚知识的结构,而业务知识恰恰是边做边成形的;本体一旦建成即被冻结,业务口径一变就要返工——这是大量知识工程止步于试点的常见原因。
不做推理,换来的是可审计性。本模型只召回图中已显式存在的结论,每一条都能追溯到写入时刻与出处,不会生成任何"由前提推导得出、但从未有人写下"的结论。在监管与审计场景中,不臆造是必要条件,而非能力缺陷。
模式层仅有两项约定。其一是四类型,按知识的性质而非主题划分:
| 类型 | 承载内容 | 时效特征 |
|---|---|---|
| 规范类 | 应当如何行事的规则与经验 | 长期有效,随实践修订 |
| 知识类 | 客观事实、操作程序、外部约定 | 随外部世界变化而失效 |
| 事务类 | 进行中的事项、决定与其动机 | 快速衰减,需显式复核 |
| 主体类 | 关于协作对象的画像与偏好 | 缓慢演化,很少被推翻 |
其二是作用域(scope):每条规范类命题可声明其适用场景。这一字段的作用在 §8.1 展开——它是消解伪冲突的主要手段,也是本模型不需要频繁做"二选一"裁决的结构性原因。
本模型的召回机制不是新发明,其理论原型是语义处理中的扩散激活[5]:概念在网络中被激活后,激活能量沿连接向邻近概念扩散,强度随距离衰减,并在多条路径汇聚处叠加。该理论提出于 1975 年,本模型所做的是给它补上两个工程约束——枢纽抑制与种子资格——使其在真实规模的图上不至于退化为全图泛滥。
召回分两步:先做扁平匹配得到种子,再沿边扩散。
扩散机制中最不直观、却最关键的一条约束是:只有精确命中的节点有资格作为扩散种子。正文中偶然提及查询词的节点可以出现在结果里,但不得把能量传播给它的所有邻居。
取消这一约束的后果在真实图上被实测过:允许弱命中作种子时,能量泛滥导致原有结果的前列中有相当大一部分被冲掉;而同一份数据在关闭扩散的扁平模式下,结果几乎不变。这说明退化不是来自打分改动本身,而是来自传播源资格的放宽——一个"顺嘴提过"的节点没有资格决定它的邻居是否值得被看见。
强度函数的三个组成部分,各自对应一项已确立的实验发现:
exp(−d/hl) 形式。须说明:本模型借鉴上述记忆现象的函数形态,但不主张实现任何统一认知理论意义上的认知架构。这里做的是工程近似,不是认知建模。
该函数的当前形态源自一次可复现的失败。早期版本将常驻级的基分设为远高于其余各项之和的常数、半衰期设为近乎无穷(等价于永不衰减)。其数学后果是所有常驻级记忆恒为同一分值:在数百个节点中有数十条精确并列,排序退化为插入顺序,"最近在忙什么"的查询返回的实际上是按标识符字母序排列的前若干条。同时,在检索打分中该基分淹没了相关性项,使仅命中单个词的常驻记忆压过命中全部关键词的普通记忆。
这一案例的一般教训值得单独记下:在排序系统中,"绝对优先"等价于"取消排序"。任何维度一旦被赋予压倒性权重,该维度内部就失去了区分度,而系统会静默地退化为它的次要排序键——且不会报错。
必须明确:强度函数回答的是"最近在做什么",不是"什么最重要"。二者是正交维度。一条半年后才会用到的关键约束,其强度必然很低,但其价值不因此降低分毫。混淆这两个维度,是下一节所要处理的问题的直接来源。
直觉的设计是在写入端设一道价值过滤器:判断某条信息"是否重要到值得记住",通过者才写入。本模型明确取消这道过滤器,判据只剩一条客观问题:这是不是此前不知道的?是,则写入。
论证基于两类错误的代价不对称:
| 错误类型 | 后果 | 可观测性 / 可补救性 |
|---|---|---|
| 多存了 (记了无用的) |
检索噪声增加,占用少量存储 | 可观测:噪声会在检索结果中显现 可补救:由查重、体检、定期复核逐步清理 |
| 漏存了 (该记的没记) |
知识永久丢失 | 不可观测:系统不知道自己丢过什么 不可补救:无任何机制能提示"这里本该有一条" |
在两类错误的代价与可补救性如此不对称时,理性的默认档只能是存。更重要的是,写入端的价值判断需要预测"这条信息将来是否有用"——而这恰是系统在写入时刻最缺乏依据的判断。把不可靠的预测判断从写入端移到检索端,是本节的核心主张:检索端做过滤时,"当下要什么"是已知的,判断因而变得可靠。
输入端无损,过滤后置。写入不做价值预测,只做重复检测;价值的裁决交给强度衰减、检索排序与后置复核共同完成。过滤器的位置从"写入前"移到"读取时",因为只有在读取时刻,"有没有用"才是一个有答案的问题。
取消价值判断不等于放任写入。写入端保留一道客观闸门:新建条目前先检索既有条目,若相似度超过阈值则拦截,要求改为更新既有条目而非新建。这道闸门是可自动化的,因为"是否重复"是关于现状的事实问题,而"是否重要"是关于未来的预测问题——前者可以由机器判断,后者不能。
与之配套的一条接口约束值得指出:向既有条目补充内容时,必须使用追加语义而非整体重写语义。若接口默认整体重写,一次"补充一段"的意图就会静默抹掉该条目的全部历史。本模型因此提供带署名与时间戳的追加操作,并把整体重写限定为需要显式合并原文的场景。这不是接口洁癖:在长期系统中,任何一个默认为破坏性的操作,最终一定会被误用一次。
本节是本文与多数实践分歧最大之处。常见的记忆淘汰策略是按使用频率或最近使用时间清理低分条目——这实质上假设了可及性等于价值。记忆研究并不支持这一假设。
新失用理论[9]区分了记忆的两种强度:存储强度(storage strength,学得多牢)与提取强度(retrieval strength,此刻多容易取出)。该理论的核心论断是:提取强度会随时间与干扰而下降,而存储强度并不因此衰减——一段长期未被提取的记忆,并没有变弱,只是变得不易触及。
把这一区分映射到工程系统:本模型的强度函数所度量的,全部是提取强度。它适合用来排序、用来决定注入什么,但完全不适合用来决定删除什么。以提取强度作为淘汰依据,等于系统性地删除那些"重要但当前不紧急"的知识——而这类知识在真实工作中占比极高。
存在一类记忆,其使用频率与其价值负相关。考虑一条约束性规则:"绝不执行某项破坏性操作。"当这条规则被良好遵守时,它不会出现在任何决策链路的显式引用中,因而使用计数长期为零、时间项持续衰减,在任何基于热度的淘汰名单上都会排在最前面。
一条约束性记忆被遵守得越好,就越不会被触发,因而越"冷"。自动化的热度淘汰会精确地优先删除那些最有效的约束——它们的低热度正是其生效的证据。
其工程后果是明确的:约束类记忆的淘汰不可自动化。可自动获取的信号(使用次数、上次使用时间)对这类记忆均为反信号。本模型的处理方式是把淘汰改造为强制提问:当常驻配额触顶时,引擎不自动删除,而是强制发起一次审查,要求逐条回答一组客观问题:
这四问的共同点是:全部关于客观现状,不含"是否重要""是否还需要"这类主观预测。能自动化的部分(生成候选名单、检测指向已完结版本的标识)交给机械规则;不能自动化的部分(裁定)交给具备语境的判断者。
删除一条记忆的唯一合法判据是它已被证明是错的,或它所针对的场景已不复存在。"久未使用"不构成删除理由。重要性与紧急性是两个正交维度,而自动信号只能观测到后者。
事务类记忆(进行中的事项)需要另一套时效机制。这类记忆有一个反直觉的性质:一个卡住了三个月的项目,其热度必然最低,而它恰恰最不该被忘记。机械衰减在这里不仅无效,而且有害——它会优先淡化那些停滞最久、因而最需要被重新审视的事项。
本模型因此为事务类条目引入显式复核到期日:创建时即设定复核期限(默认约一个月),到期后由体检机制列为待复核,要求给出"已完成 / 仍在办 / 已放弃"的明确结论。与之配套的是退出条件必填约束——新建事务类条目时必须写明"什么条件算做完",否则拒绝创建。缺少退出条件的事项会成为永远显示为"进行中"的僵尸条目,这类条目对系统的危害不在于占用空间,而在于它们让"当前在办事项"这一视图整体失去可信度。
当两条记忆表面矛盾时,直觉反应是二选一。本模型的第一条治理原则是先分类、再裁决,因为经验上真正需要二选一的冲突是少数。
| 类型 | 特征 | 处置 |
|---|---|---|
| 伪冲突 (作用域差异) |
两条规则各自在不同场景下成立,只是都没写清适用范围 | 两条都留,补齐作用域声明。规则相遇时窄者优先 |
| 时间演进 | 旧结论当时正确,前提已变 | 标注取代关系,旧条目降权保留(见 §8.3) |
| 表述过度 | 某条把话说满了,去掉绝对化措辞后并不矛盾 | 弱化措辞,两条共存 |
| 真冲突 | 同一场景下给出互斥指令 | 进入裁决程序(见 §8.2) |
作用域字段(§3.3)的价值在此显现:它把大量本会演变成"二选一"的情形,转化为可以共存的分工。凡是能通过补充限定条件而共存的,都不应当被裁决掉一条——因为被删掉的那条通常在它自己的场景里是对的,删除它等于制造一个未来会重犯的错误。
进入真冲突裁决后,关键问题是:凭什么判?本模型规定了严格的依据层级,高层级依据存在时不得使用低层级依据。
| 层级 | 依据 | 说明 |
|---|---|---|
| 一 | 可核验的客观事实 | 争议若关于代码、配置、文件、命令输出等可直接查证的对象,必须先去查。查到的事实压倒任何陈述。这是本类系统区别于纯文本比对的关键依据来源 |
| 二 | 向权威主体确认 | 核不了又判不准时,直接询问。这是正解而非退路——询问的成本远低于错误裁决的长期代价 |
| 三 | 软信号 (新近性、重复度、作用域宽窄) |
只提供倾向,不构成结论。可用于排序候选,不可用于单独定案 |
当冲突的一方是刚刚收到的新输入时,系统存在强烈的倾向去采信它、并覆盖既有记忆。这一倾向是危险的:新不等于对——陈述者也会记错、说岔、或基于过期印象。若既有记忆有事实支撑,正确做法是回到第一层级去核实,而不是让位。
这一点有实测支撑。在一次受控测试中,同一系统在引入该约束前面对刻意灌入的错误信息时,照单全收并覆盖了原本正确的记忆;引入约束后,同样的输入触发了主动的代码核查,并据核查结果拒绝了该输入。差异不在模型能力,而在是否规定了核实义务。
裁决产生败方后,处置方式是本模型的第三项主张:不删除,只标注与降权(实现上为检索得分乘以一个小于 1 的惩罚系数 ρ,见 §4.2),并记录指向胜方的推翻关系与判决理由。
三条理由:
这一处置与数据血缘的通行模型天然对齐:判决记录本质上是一条活动(Activity)记录,连接被推翻的实体(Entity)、取而代之的实体,以及作出判决的主体(Agent)——恰是溯源本体[11]的三元核心结构。这使得记忆库的修订历史可以直接映射到既有的血缘标准之上,而无需另造一套审计模型。
工程上还有一条相关约束:判决必须通过结构化的仲裁操作执行,而不能以"在正文里追加一段说明"的方式表达。只有前者才在图中留下机器可读的推翻关系与可查询的判决日志;后者留下的只是一段文字,日后无法被检索、无法被撤销、也无法进入审计。凡需要日后追溯的动作,都必须走结构化接口。
冲突检测能否完全自动化?本模型给出的答案是否定的,并有量化依据。
以字面重叠度(二元组 Jaccard 相似)作为冲突候选的机械筛,在一次针对真实记忆库的评测中,对字面重叠型冲突能召回过半,而对换词表达型冲突——两条记忆用完全不同的措辞表达互斥主张——召回极低,几乎全部漏过。后者在自然产生的记忆中占比不低,因为同一件事在不同时期会被用不同的语言重新表述。
机械相似度筛只能用作候选生成器,不能用作判定器。正确的分工是:机械规则负责在大规模库中快速缩小范围(廉价、高召回、低精度),语义判断负责逐条裁定(昂贵、高精度)。把机械筛的输出直接当作结论,会同时产生两类错误——放过换词型冲突,并把大量字面相似而实质互补的条目误判为冲突。
长期运行的智能体面临上下文持续增长的问题。通行做法是在接近容量上限时对历史进行摘要压缩。本模型采取另一种立场:
上下文是可随时丢弃的工作内存;记忆图才是真正的存储。
其推论是:当上下文需要回收时,正确的动作不是"生成一份摘要以保留信息",而是先把活跃线索显式沉淀为记忆条目,然后整体清空。二者的区别不是实现细节:摘要是有损压缩,且损失不可见——被摘要丢掉的细节不会留下任何痕迹;而显式沉淀是把该留的东西按结构写进持久层,留与不留是一次明确的决定,可被检查、可被补充。
这一立场也改变了对上下文增长的态度:既然记忆在图中,上下文增长的唯一代价是重复读取的开销,而不是信息丢失的风险。该沉淀的平时随手沉淀,上下文就不必被当作需要抢救的资产。
会话开始时向工作内存装入什么,本模型采用三段结构,各段回答不同的问题:
| 段 | 选取依据 | 回答的问题 |
|---|---|---|
| 常驻段 | 标记为约束类,全量注入,设固定配额上限 | 哪些线绝对不能踩 |
| 热度段 | 强度函数 top-K | 最近在做什么 |
| 时序段 | 按最后修改时间倒序 | 刚刚发生了什么(不看重要性) |
三段并存是必要的,因为任一单段都有系统性盲区:常驻段不反映当下;热度段会漏掉刚写入但尚未被使用的条目;时序段则完全不区分轻重。此外,常驻段设有硬配额——不是为了节省空间,而是因为无上限的"最高优先级"等价于没有优先级(同 §5.3 的教训)。配额触顶时强制进行的"上一条下一条"审查,是维持该段区分度的唯一手段。
一条容易被忽略的推论:关于记忆维护本身的规则,必须存放在记忆之中,而不能只依赖引擎在特定时机推送提示。引擎的供给全部是被动触发式的,触发条件不满足就永远不会发生;而维护是一项需要主动持续进行的行为。把维护规则本身作为记忆条目存放,它才会在日常检索中被召回。
本模型并非纸面设计,其全部机制均来自一个连续运行数月的实例,且本文所引的每一处退化案例(§4.3 的能量泛滥、§5.3 的同分退化、§8.2 的输入盲从、§8.4 的机械筛覆盖率)都是该实例上的实测结果,而非假想。
| 观察项 | 数值 / 状态 |
|---|---|
| 图规模 | 单张图达数千个命题节点、上万条边量级 |
| 链接有效率 | 绝大多数链接指向有效节点,断链由体检机制定期清理 |
| 常驻段配额 | 已触顶,进入强制审查态 |
| 多实例 | 多个独立主体各持一张互不共享的图 |
需要明确交代的是这组数据的性质:这是单实例的长期运行观察,不是基准测试。本文不提供与其他系统在公开数据集上的对比指标。本文的论证依据是机制的内在一致性与可复现的失败案例,而非分数。将其称为实证,仅限于"这些机制确实在真实负载下运行了足够长的时间,且其失效模式已被观察到并修正"这一意义上。
本文的核心论点可以压缩为一句话:长期运行的记忆系统,其难点不在记住,而在如何对待已经记住的东西。
围绕这一论点,本文提出四项可检验的主张:
这四项主张彼此并不独立:它们共同指向同一个立场——记忆系统应当把不可靠的判断尽量后置到信息最充分的时刻,并且让每一次判断都是可以被撤回的。存储与召回是这套系统的地基,但决定它能否连续工作数年而不腐坏的,是地基之上的治理机制。
关于文献的说明。正文中标注的每一条引用,均为可公开检索的已发表工作。§10 的运行数据取自单一实例,性质为长期运行观察而非公开基准测试,已在该节明确标注。文献 [13]–[17] 未在正文中逐条标注,列于此处作为组织记忆与知识连续性方向的背景来源。
术语说明。本文使用"命题级知识图"而非"知识图谱"指称本模型的图结构,理由见 §3.2;使用"主动遗忘"指称记忆条目的退役,该操作发生于外部存储层,与参数级的知识编辑无关,见 §11。
命题级图记忆 · 理论基础报告 v1.0 · 公开版 · 2026 年 8 月