本文要点
- 生产记忆不能只靠扩大向量库:要拆成短期上下文、事实、事件、任务状态与审计记录。
- 每一层单独设写入、召回、过期和权限规则,避免召回互相污染。
- 长任务必须保存可恢复状态;受监管场景还要保留完整来源链。
- 上线前做容量、故障与权限验收,再选存储,而不是先堆索引。
长期记忆越做越乱,召回结果开始互相污染? 最快的解法不是继续扩大向量库,而是把记忆拆成短期上下文、事实记忆、事件记忆、任务状态和审计记录,并为每一层单独设置写入、召回、过期和权限规则。
官方 Agent Memory 文档已经明确区分短期记忆与长期记忆:前者保存会话中的原始事件,后者从这些事件中抽取可跨会话复用的信息;长期记忆生成还可能在后台异步完成。(docs.aws.amazon.com)
这篇文章适合正在设计多用户 Agent 平台的 AI 架构师、需要支持长任务恢复的平台工程师,以及负责数据权限、删除和审计的企业技术负责人。如果你仍把所有对话、规则、用户偏好和任务进度写进同一个向量索引,本文可以帮助你重新划分边界。
为什么单一向量库不能直接承担生产记忆?
原型阶段把所有内容嵌入向量库,确实能快速完成语义检索;但生产系统需要处理的不只是“相关性”,还包括事实是否可信、谁能读取、什么时候失效,以及故障后能否恢复。
最常见的隐性成本有以下几类:
- ❌ 事实与推测混在一起:用户明确说过的偏好、模型根据语境猜出的偏好、一次性的调试结论,都可能被同样召回。
- ❌ 权威知识与个人记忆互相覆盖:客服 Agent 记住了某位用户的历史问题,但产品政策仍应从当前知识源检索,不能因为旧记忆而绕过最新规则。长期记忆与 RAG 的职责差异,也被官方文档明确区分。(docs.aws.amazon.com)
- ❌ 删除链条不完整:删除原始对话后,抽取出的事实、向量副本、缓存和备份可能仍然存在。
- ❌ 多 Agent 写入污染共享空间:一个 Agent 的临时判断被另一个 Agent 当成组织级事实,后续所有任务都会受到影响。
- ❌ 任务恢复没有外部状态依据:系统只保存“已经完成付款”这类文字摘要,却没有保存外部系统返回的订单状态,恢复时就可能重复执行不可逆操作。
- ❌ 权限只做在应用入口:如果检索层没有按用户、租户、项目或 Agent 身份过滤,调用方绕过前端后仍可能拿到不该看到的记忆。
因此,生产级架构的核心不是“选哪一个 Memory Framework”,而是先定义每类数据的责任边界。
五层记忆模型,应该怎样分工?
你可以把长期记忆系统设计成以下五层。这里的“五层”是架构分析框架,不代表所有业务都必须部署五个独立产品;小型系统可以共享底层存储,但不能共享生命周期和权限规则。
| 记忆层 | 主要内容 | 推荐写入条件 | 主要召回方式 | 生命周期与权限 |
|---|---|---|---|---|
| 短期上下文 | 当前会话、工具调用、最近几轮消息 | 事件发生即记录 | 会话顺序、时间窗口 | 会话级;按用户和租户隔离 |
| 事实记忆 | 用户偏好、稳定属性、确认过的项目事实 | 明确表达或人工确认后写入 | 结构化过滤 + 语义检索 | 可更新、可撤回;用户或项目可见 |
| 事件记忆 | 历史故障、客户事件、决策过程 | 事件闭环或达到保存门槛后写入 | 时间、实体、标签和语义组合 | 按业务保留周期归档或删除 |
| 任务状态 | 目标、步骤、检查点、外部副作用 | 每个关键步骤成功后更新 | 主键、状态机、检查点 | 任务级;执行 Agent 可写 |
| 审计记录 | 输入事实、检索来源、规则、模型输出、最终动作 | 每次重要决策或外部操作时追加 | 时间线、关联 ID、操作者 | 追加式;读取权限严格控制 |
官方实现示例通常会使用 actorId 和 sessionId 区分使用者与会话,并通过命名空间组织长期记忆;这说明生产架构至少要具备“谁产生”“属于哪次会话”“放在哪个范围”这类元数据。(docs.aws.amazon.com)
第一层:客服 Agent 只把用户事实写入受控记忆
客服场景中,用户偏好和历史事件可以成为 Agent Memory,例如用户习惯的通知方式、已经确认过的故障现象、上次人工处理的结果。但产品政策、退款规则和当前服务条款不能依赖个人记忆,必须继续从权威知识源检索。
每次回答最好保存三组关联信息:
- 使用了哪条用户事实或历史事件;
- 使用了哪份知识文档;
- 这些内容的更新时间和版本。
这样做的好处是,客服人员可以区分“这是用户过去说过的话”与“这是当前有效的企业政策”。如果两者冲突,当前政策应优先,旧记忆只能作为解释背景,不能直接改变规则。
第二层:编码 Agent 把项目规则与运行经验分开
编码 Agent 通常同时接触以下内容:
- 固定项目规则,例如目录约束、提交规范和测试要求;
- 代码事实,例如某个接口的真实参数;
- 任务进度,例如已经修改了哪些文件;
- 调试经验,例如某次环境错误的临时绕过方式。
它们的生命周期完全不同。项目规则可能随着版本控制变更,代码事实应以当前代码和测试结果为准,任务进度随着任务结束而归档,调试经验则必须带适用版本和环境标签。
一个常见错误是把“这次构建失败,删除某个目录后可以通过”直接写成永久共享记忆。更稳妥的做法是记录失败环境、命令、时间、适用版本和验证结果;只有经过重复验证或人工确认,才允许升级为项目级经验。
第三层:多 Agent 共享记忆必须采用默认私有
多 Agent 系统最容易出现的不是“找不到记忆”,而是“找到了不该使用的记忆”。
建议采用由窄到宽的可见范围:
- 任务私有:只对当前任务中的 Agent 可见;
- 用户私有:同一用户的不同会话可见;
- 项目共享:同一项目或团队可见;
- 组织共享:经过审核后才能进入。
共享写入至少应携带来源 Agent、来源任务、数据范围、置信度、创建时间、更新时间和冲突状态。两个 Agent 对同一事实给出不同结论时,不要直接覆盖;应该保留冲突版本,交给规则或人工流程处理。
官方架构资料也把 Agent、Skill 和 Tool 区分开来:Agent 负责编排与决策,Skill 适合封装可复用流程,Tool 则提供确定性的具体动作。记忆写入最好作为受控工具或服务完成,而不是让每个 Agent 直接访问底层存储。(learn.microsoft.com)
长任务怎样保存可恢复状态?
长任务的记忆不能只保存自然语言摘要。你需要把任务目标、当前步骤、已完成步骤、待执行步骤、外部副作用和检查点结构化保存。
例如,一个需要调用多个外部系统的任务可以采用以下状态:
task_id
goal
current_step
completed_steps
pending_steps
external_effects
last_checkpoint
retry_count
status
字段名称可以按你的系统调整,但逻辑不能缺失。尤其是 external_effects,它用于记录“是否已经发信”“是否已经创建资源”“是否已经扣款”这类外部结果,避免 Agent 在重试时把不可逆操作执行两次。
恢复流程建议固定为:
- 读取任务状态和最近检查点;
- 验证外部系统当前状态;
- 对比本地记录与外部返回结果;
- 将任务标记为继续、补偿、人工介入或终止;
- 只有在幂等条件满足时,才重新执行工具调用;
- 完成后追加新的审计记录和检查点。
如果底层任务状态需要事务一致性,应优先使用支持结构化更新和可靠日志的存储,而不是只依赖向量索引。官方数据库文档对预写日志机制的说明也指出,先记录变更日志有助于在故障后恢复一致状态。(postgresql.org)
受监管 Agent 如何保留完整来源链?
在受监管场景中,“模型为什么这么做”不能只回答“因为召回到了某条记忆”。你至少要区分:
- 输入事实:用户或外部系统实际提供了什么;
- 检索结果:Agent 找到了哪些记忆和知识来源;
- 适用规则:当时使用了哪个版本的政策或流程;
- 模型输出:模型生成了什么判断;
- 最终操作:系统实际执行了什么动作;
- 操作主体:哪个用户、哪个 Agent 或哪个服务发起了动作。
这条链路应该使用关联 ID 串起来,而不是把所有内容拼成一段无法查询的文本。
删除个人数据时,也不要简单地“把整条审计记录删掉”。你需要先区分个人内容与审计关系:可以删除或脱敏输入文本、向量和抽取事实,同时保留不含个人内容的事件编号、规则版本、时间线和操作关系,具体保留范围应由适用法律和企业政策决定。NIST AI RMF 将治理、映射、测量和管理作为四项核心职能,并强调风险管理应贯穿 AI 系统生命周期。(airc.nist.gov)
写入、召回与删除门槛
写入门槛
不要让模型自动保存它认为“可能有用”的所有内容。至少可以设置以下判断:
- 是否由用户明确表达;
- 是否能被结构化验证;
- 是否具有跨会话价值;
- 是否包含敏感个人信息;
- 是否有明确的保留依据;
- 是否存在来源和时间;
- 是否与已有事实冲突。
如果只满足“模型觉得有用”,应保留在短期上下文或事件日志中,而不是进入长期事实记忆。
召回门槛
Memory Retrieval 不应只根据向量相似度排序。生产召回至少需要同时考虑:
- 用户、租户、项目和 Agent 权限;
- 数据类型与当前任务是否匹配;
- 内容是否过期;
- 来源可信度;
- 时间新鲜度;
- 与权威知识源是否冲突;
- 召回数量是否会挤占当前任务所需上下文。
一个实用策略是先做硬过滤,再做语义排序:先排除无权限、已删除、已过期和错误租户的数据,再在剩余范围内计算相关性。这样比单纯提高嵌入模型或扩大 top_k 更容易控制风险。
过期与删除门槛
长期记忆至少要支持三种失效方式:
- 时间过期:超过保留周期后自动归档或删除;
- 事件过期:用户修改偏好、项目版本变化或任务关闭后重新验证;
- 人工撤回:用户、管理员或数据主体主动要求删除。
删除流程应覆盖原始事件、抽取事实、向量索引、缓存、备份副本和异步任务队列。若某个备份暂时不能立即修改,就要记录删除请求、影响范围和预计完成状态,否则你无法向审计人员证明删除确实完成。
上线前的容量、故障与权限验收
你可以在预生产环境中逐项勾选:
- [ ] 为短期上下文、事实记忆、事件记忆、任务状态和审计记录分别定义数据结构。
- [ ] 为每一层写明写入条件、读取主体、过期条件和删除责任人。
- [ ] 用不同用户、租户、项目和 Agent 身份测试越权读取。
- [ ] 注入过期事实、冲突事实和错误来源,确认召回结果不会直接覆盖新规则。
- [ ] 模拟向量索引不可用,验证系统能否退回结构化查询或人工处理。
- [ ] 模拟任务执行到一半后服务重启,检查是否能从检查点继续。
- [ ] 对已经完成的外部操作重复发起恢复,确认幂等控制不会重复执行。
- [ ] 删除一条个人记忆后,检查原始记录、抽取记录、索引、缓存和备份标记。
- [ ] 连续增加事件数据,观察写入延迟、检索质量和存储增长,而不是只测试空库。
- [ ] 对审计记录做一次完整回放,确认能还原输入、来源、规则、输出和动作。
- [ ] 根据任务周期与并发模式,决定采用固定资源、弹性资源或混合环境。
这份清单的重点不是验证某个框架“能不能保存记忆”,而是验证整个数据流在异常情况下仍然可解释、可删除、可恢复。
Agent Memory 的存储选择
可以采用“职责优先”的组合,而不是寻找一个包办全部能力的数据库:
- 短期上下文:低延迟状态存储,支持按会话和用户读取;
- 事实记忆:结构化字段加语义索引,便于更新、撤回和过滤;
- 事件记忆:追加式事件存储,保留时间、来源和关联实体;
- 任务状态:支持事务、状态机、检查点和幂等更新;
- 审计记录:追加式日志或对象存储,强调不可随意修改和可回放;
- 检索层:向量检索、关键词检索和结构化过滤组合使用。
如果你选择托管 Memory 服务,也要确认它的官方能力边界。例如,有的实现会把短期事件与长期抽取策略分开,长期记忆只有在启用相应策略后才会生成;这类能力不能从“它支持 Memory”这一名称本身推断出来。(docs.aws.amazon.com)
对于架构评审,你可以参考 kvmboot 帮助中心 中的环境与交付说明,再把实际部署所需的权限、网络、备份和恢复条件写进验收文档。若团队需要了解服务边界,也可以查看 kvmboot 服务说明,但不要把资源租赁本身当成记忆架构的替代品。
常见的优缺点取舍如下:
✅ 固定环境:适合长期稳定负载,配置和网络路径更容易固定;缺点是闲置时仍产生资源成本。 ✅ 弹性环境:适合测试、突发任务和多团队共享;缺点是恢复路径、冷启动和数据持久化需要额外验证。 ⚠️ 混合环境:适合把审计与核心状态固定保存、把检索和实验计算弹性扩展;缺点是跨环境权限、备份和网络故障更复杂。
最终选择应由任务周期、并发量、数据敏感性和恢复目标决定,而不是由某个 Memory 组件的宣传页决定。
常见问题
AI Agent 的长期记忆通常需要分成哪些层?
生产环境至少要把短期上下文、事实记忆、事件记忆、任务状态和审计记录分开管理。它们的写入条件、召回方式、保留周期、权限范围和恢复要求不同,混在同一个向量库里会造成污染、误召回和删除困难。
Agent Memory 数据放在什么存储里更合适?
不要先按数据库名称选型,而应按数据职责选择存储。短期上下文适合低延迟状态存储,事实和事件记忆需要支持结构化字段与语义检索,任务状态需要事务和幂等,审计记录则应进入追加式、可追溯的日志或对象存储。
多 Agent 怎样共享记忆又避免互相污染?
先定义共享范围,再允许写入。每条共享记忆都应带来源 Agent、用户或租户范围、置信度、创建时间、更新时间和冲突状态;默认采用私有可见,只有经过规则校验的事实、项目规则或任务结果才能进入共享空间。
长期记忆怎样设置过期和删除?
把过期分成时间过期、事件过期和人工撤回三类。偏好可在用户修改后失效,项目规则可在版本发布后重新验证,任务状态则在任务关闭并完成审计后归档。删除个人数据时,还要同步处理原始事件、抽取记录、索引副本和缓存。
Agent Memory 生产上线前需要哪些组件?
至少需要记忆写入网关、结构化存储、检索层、身份与租户隔离、过期删除任务、审计链、备份恢复流程和质量监控。对于长任务,还要增加检查点、外部副作用记录与幂等执行器。
如果你当前使用的是共享开发机、临时容器或没有固定权限边界的通用云主机,常见问题通常是环境漂移、网络路径不一致、备份恢复没人实际演练,以及多个项目共享凭据后难以追责。对于需要 macOS 工具链、隔离预生产环境或跨团队复现的 Agent 项目,临时环境还可能缺少稳定的系统依赖和明确的交付边界。
更稳妥的做法是先租用 kvmboot 的隔离云端 Mac,把恢复演练、权限越界测试、数据增长测试和多 Agent 联调跑通,再决定长期资源采用自购设备、固定环境还是混合部署。若你已经确认需要临时预生产资源,可以查看 kvmboot 的美国东部云端 Mac 方案;如果测试结果显示长期高负载、必须接入本地物理接口,或数据不能离开自有网络,那么自建环境通常更合适。
为你的 AI Agent 生产环境配备稳定的云端 Mac
使用 kvmboot 云 Mac 承载多用户、长任务和多 Agent 工作流,获得稳定且可持续的计算资源。
AI Agent 记忆框架实测:Mem0、Zep、Letta 等方案如何选 · MCP Server 部署决策:本地、VPS 与云端 Mac 怎么选 · AI Agent 文件隔离实践:路径白名单、worktree 与权限边界