
记忆不是上下文:智能体状态的实用架构
2026年8月12日工程

为什么智能体记忆需要事件时间、有效区间与显式替代,而不是最后写入覆盖一切。
用户说:“我上个月搬到了柏林。”一只时钟记录搬家何时发生,另一只时钟记录系统何时知道。如果记录里只有插入时间,历史问题和当前状态检索迟早会互相矛盾。
时间感知记忆不要求模型预测每一个日期。它要求系统只表达证据真正支持的时间,并让变化可见,而不是用最后一次写入覆盖一切。
valid_from 与 valid_to 表达有效区间。| 字段 | 它回答的问题 | 示例 |
|---|---|---|
| Event date | 描述的事件何时发生? | 7 月 3 日搬家 |
| Valid from | 事实何时开始成立? | 柏林从 7 月 3 日成为现居城市 |
| Valid to | 事实何时停止成立? | 里斯本从 7 月 3 日不再是现居城市 |
| Created at | 系统何时首次保存这条记录? | 用户在 8 月 12 日提到搬家 |
| History event | 系统何时更新自己的理解? | 运营人员在 8 月 13 日纠正日期 |
“用户现在住在哪里?”寻找的是有效区间覆盖现在的事实;“用户六月住在哪里?”寻找的是覆盖过去某个时点的区间。两个问题可能引用同一关系在不同时间段的状态。
当前状态检索通常应排除已经失效的记录,除非查询明确请求历史。历史检索应返回旧记录、它的有效区间,以及导致变化的来源或替代记录。
当柏林取代里斯本时,只更新一个画像字段能得到正确当前值,却破坏了旧答案为什么提到里斯本的解释。替代链接会关闭旧区间并指向新记录,同时让两者留在历史中。
它支持:
假设用户八月说搬家发生在七月,九月又澄清租约六月开始,但实际搬入在七月。应用的领域模型必须决定这条记忆描述的是哪一个事件。修改 valid_from 可能改变现实时间解释;不可变系统历史仍要记录这项纠正在九月到达。
这就是双时间推理的核心:系统现在如何理解现实世界的时间线,以及这种理解如何沿系统自身时间线变化。
“我喜欢深色模式”和“演示时使用浅色模式”可能在不同元数据或任务作用域下同时成立。执行替代前,应比较主体、关系、对象、作用域、条件和时间。全局覆盖会把上下文例外错误地变成矛盾。
对于类型明确的产品状态,尽量使用确定性规则。模型可以提出关系候选,但持久层应强制执行区间和所有权不变量。
相对时间需要可靠参考时点。“去年”只有在来源事件具有已知日期、时区假设可控时才能规范化。“我以前住在里斯本”证明过去存在一段关系,却未必证明精确边界。
安全选择包括:
相似度分数无法决定查询在问现在、过去状态,还是一次变化的历史。需要显式路由时间意图:
| 案例 | 期望行为 |
|---|---|
| 新当前事实替代旧事实 | 当前查询返回新值,as-of 查询返回旧值 |
| 纠正迟到 | 现实时间发生变化,系统历史保持完整 |
| 两条事实在不同条件下成立 | 两者在明确作用域或元数据下继续有效 |
| 来源没有可靠日期 | 不制造精度 |
| 旧事实语义排名更高 | 有效期过滤阻止当前召回旧事实 |
| 替代记录被删除 | 历史和当前状态策略仍然明确 |
规范记录在创建时间和不可变历史之外,公开 event_date、valid_from、valid_to 与 superseded_by。搜索支持 event-date 过滤;状态视图可以把 current、as-of 和 history 答案映射回规范来源 ID。
这些字段让时间行为成为可能,但不能保证推理模型提取了正确日期。评估必须分别检查存储记录、检索渲染和最终答案。