记忆设计中的不对称性
Agent 记忆栈的评估方式通常与搜索引擎相同:召回基准、embedding 质量、重排序延迟。写入路径受到的关注要少得多。然而每一次检索失败都有上游原因,在我们审查的大多数生产事故中,原因都是某些本不该被存储的内容被写入了,或者存储时缺少了日后决定如何处理它所需的元数据。
检索之所以被基准测试,是因为它容易基准测试。固定的语料库、查询集、排序指标。摄取更难评分,因为正确性取决于上下文:同一句话在一轮对话中是持久的偏好,在另一轮中则是随口一提。因此,团队将摄取实现为一个简单的追加调用,把判断推迟到检索时,而做出该判断所需的信息早已被丢弃。
后果的排序与大多数团队的预期不同。过度记忆的 agent 会先损害其隐私态势,然后才损害其准确性。存储用户的偶然披露不会立即改变回答质量;它改变的是日后数据泄露、传票、支持导出或模型提供商日志的影响范围。准确性侵蚀来得更慢,因为过时和矛盾的条目会在检索时相互竞争。
删除是最明显的症状。大多数记忆工具将删除视为事后补充——在向量存储上删除一行,却不保证 embedding 已从索引段中消失、由该条目派生的摘要已消失、或下游缓存已失效。在删除不受支持的地方,留存就变成了偶然的而非有意选择的。
写入策略接口
解决办法是将写入路径变成一个策略边界,而非一次追加。三个属性承担了大部分工作。
每次写入都携带来源信息
每个记忆条目都应携带来源记录:它由哪一轮对话产生、由哪个 tool call 提供、受哪项用户同意覆盖、由哪个 agent 身份写入。这不是审计装饰。来源信息使得日后的删除请求能够被精确回答——你可以找到派生条目,而不仅仅是原始条目——也使得过时条目在开始扭曲决策时能够被追溯到引入它的那一轮对话。

一个最小 schema,以持久化之前的验证步骤形式表达:
MemoryWrite = {
"content": str,
"provenance": {
"turn_id": str,
"tool_call_id": str | None,
"consent_ref": str | None,
"writer": str, # agent or component identity
"written_at": datetime,
},
"sensitivity": Literal["public", "internal", "personal", "restricted"],
"retention": {
"expires_at": datetime | None,
"basis": Literal["session", "consent", "contract", "indefinite"],
},
"redaction": {
"state": Literal["none", "applied", "required"],
"fields": list[str],
},
}
未通过验证的写入在边界处被拒绝。这是拒绝它们成本最低的地方:该条目尚未被 embedding、索引、摘要或复制。
按类别设定留存的敏感度分级
留存应当是类别的函数,而非全局默认值。从文档中提取的公开事实与在对话中主动提供的个人细节不需要相同的生命周期。按类别分配留存使得策略可以被审查一次并在各处执行,而不是在每个功能中重新争论。
权衡是真实的。细粒度类别增加了写入路径必须做出的决策数量,而每一个额外的决策都是 agent 可能出错的地方。保守的默认值——更短的留存、更高的敏感度——减少了暴露,但也降低了 agent 回忆用户期望它记住的上下文的能力。没有哪种设置能避免这种张力;关键在于让这种张力显式且可审查,而不是隐含在追加调用中。
schema 中的脱敏与过期
脱敏和过期通常被实现为定期扫描存储的作业。扫描不适合记忆,因为它是回溯性的:条目已经存在、已被读取、可能已被摘要、并可能在扫描运行之前已经影响了决策。将两者移入
具体而言,过期可以是读取时评估的谓词和写入时的压缩触发器,因此过期条目永远不会被返回,并在下一轮被回收。脱敏可以是一个状态转换,重写已存储的内容并使以该条目标识符为键的派生摘要失效。两者都不需要单独的系统;两者都要求 schema 预见到它们。

诚实地评估记忆
记忆评估应衡量写入策略声称提供的属性。
召回的精确度,而非数量。 返回更多上下文的记忆系统并不更好;它只是更大。衡量检索到的条目中与决策相关的比例,以及如果移除某个检索到的条目会有多少决策发生改变。数量指标奖励过度记忆,而这正是要解决的故障模式。
删除后的行为,而不仅仅是插入后的行为。 记忆的测试套件通常是插入、查询、断言。它们很少删除、然后查询、然后断言被删除的内容已从直接召回、从摘要、从任何缓存上下文中消失。只检查主存储的删除测试会通过,而派生制品仍保留着该内容。
过时条目的影响。 追踪超过其有用寿命的条目是否仍影响当前输出。一种可行的机制是反事实探测:在屏蔽过期或低置信度条目的情况下重新运行一部分决策样本,并进行比较。出现分歧表明留存正在做本应由新鲜度来做的工作。
这些测试比召回基准更慢、更不令人满意,而且它们产生的发现需要策略变更而非模型变更。这就是诚实的权衡:写入策略工作是上游的、横切的,且更难归因于单一指标,这正是它通常被推迟到事故迫使它被处理的原因。
这在实践中改变了什么
将记忆视为写入策略问题会改变工程投入的方向。摄取边界变成一个经过验证的接口,来源、敏感度和留存作为一等字段。删除变成一个受支持的操作,对派生数据有明确的语义。评估覆盖整个生命周期,而不仅仅是读取路径。
这一切都不需要新的记忆架构。它需要在存储的那一刻决定:存储的是什么、代表谁存储、存储多久、以及它将如何被移除。记忆良好的 agent 不是存储最大的那些;而是其存储只包含系统能够证明保留合理性的条目的那些。
