跳转至

状态与记忆管理

有效的记忆管理决定了智能体究竟像一个持久、智能的系统,还是一个无状态的聊天机器人。核心挑战在于:哪些内容留在成本高昂的上下文窗口中,哪些内容卸载到外部存储。

概述

记忆架构

智能体记忆分为三个功能层级:

层级 用途 存储方式 类比
短期记忆(工作记忆) 当前任务上下文与对话流程 内存 / checkpointer RAM
情景记忆 可检索的历史事件与结果日志 向量数据库 / 结构化日志 日记
长期记忆(语义记忆) 持久化的事实、偏好与已学规则 知识图谱 / SQL 硬盘

最佳实践

核心挑战 描述 经验教训与已考虑的替代方案 采用的解决方案
上下文窗口溢出 长会话超出模型 Token 限制,导致截断或报错 曾尝试扩大上下文窗口,但成本呈二次方增长 实现滑动窗口或递归摘要,压缩历史记录
跨会话状态丢失 智能体在不同会话间忘记用户偏好和历史决策 曾存储完整对话历史,但检索变得缓慢且噪声增多 提取并持久化关键事实(实体抽取)至结构化存储,按需检索
记忆更新冲突 多个智能体并发写入共享记忆,导致数据不一致 曾使用单一共享向量数据库,并发写入造成脏读 实现乐观锁,或采用基于时序知识图谱(Zep/Graphiti)的事件溯源记忆
记忆检索相关性 拉取过多无关上下文,导致响应质量下降 曾仅用嵌入相似度检索 top-K,拉入了不相关事实 将语义搜索与元数据过滤(时效性、实体类型、会话 ID)结合使用
记忆隐私与隔离 用户 A 的记忆泄漏到用户 B 的上下文 曾跨用户共享嵌入空间,导致命名空间冲突 在所有记忆存储中强制执行严格的租户/用户命名空间隔离,并审计访问模式
隐式记忆与显式记忆 智能体遗漏用户未明确陈述的重要事实 曾依赖用户主动说"记住这个",但大多数用户不会这样做 运行后台抽取 LLM 监控对话,自动保存关键事实
记忆过期 随着用户情境变化,存储的事实逐渐过时 曾无限期保留所有事实,导致智能体基于陈旧偏好行动 为易变事实附加 TTL;使用时序图追踪事实随时间的演变。对于托管平台,可使用定时 dreaming(Anthropic)在会话间自动清除矛盾事实
重工具任务的工作记忆 复杂的多步工具链丢失中间状态 曾将所有状态通过上下文窗口传递,触及 Token 上限 使用暂存区 / AgentFS 存储中间工具输出,在上下文中通过指针引用
无需重新训练的自我改进 智能体在不进行模型微调的情况下,跨会话重复犯同样的错误 曾在系统提示词中手动更新规则,工程师疲于应对 使用定时记忆整合(dreaming)从情景日志中提取重复模式,自动晋升为程序性记忆
智能体输出质量的自评估 不经人工审查难以判断智能体是否成功完成任务 曾抽样检查,遗漏了部分回归问题 添加独立的评分智能体(Outcomes 模式),在单独的上下文窗口中依据纯文本评分标准对输出打分,循环直至评分通过或达到最大迭代次数
定时/自动化循环在运行间失去连续性 周期性自动化任务(cron、/loop/goal)对上一次运行的尝试或已解决事项毫无记忆 每天早晨从头重新执行同一个分类提示词,重复工作并重新浮现已解决的问题 将循环状态外部化到 Markdown 文件或任务看板(如通过 MCP 接入 Linear),记录已完成和待处理的事项——智能体在运行间会遗忘,但代码库/任务追踪器不会;参见循环工程

记忆解决方案参考

方案 提供商 核心技术 核心优势
Mem0 独立 向量 + 图 自动跨会话提取并精炼用户事实
Zep 独立 时序知识图谱 追踪事实随时间的演变
AgentFS Turso SQLite 支持的虚拟文件系统 以单一可移植 .db 文件实现类文件系统的持久化
Letta (MemGPT) 独立 虚拟上下文 自主管理 RAM/磁盘,实现上下文自主换页
LangMem LangChain 托管 SaaS 与 LangGraph 节点深度集成
Claude Managed Agents Memory + Dreaming Anthropic 文件系统 + 定时整合 原生自我改进记忆,支持 dreaming(会话间整合)与 outcomes(自评分);Harvey 报告任务完成率提升 6 倍
Bedrock Memory AWS 托管 AWS 面向 Bedrock 智能体的企业级扩展与合规支持

长期记忆(LTM)策略选择

策略 最适合场景 存储方式
Vector RAG 对大型知识库进行模糊/语义搜索 Pinecone、Chroma、pgvector
知识图谱 关系推理、多跳问题 Neo4j、FalkorDB
实体抽取 个性化、固定属性(过敏信息、偏好设置) Postgres、Redis
增量摘要 无需存储每条消息的长期叙事 Markdown / 文本文件
反思 / 整合 自我纠错、从历史失败中学习 AgentFS / 专用数据库

无状态智能体设计与水平扩展

LLM 本身是无状态的,因此将记忆持久化到外部存储对生产环境智能体而言不可妥协。其回报在于:任意智能体实例均可处理任意请求,从而实现无服务器水平扩展。

Google Cloud 模式:将智能体逻辑设计为携带外部状态的无状态容器化服务,可部署于 Cloud Run(自动扩缩)或 Vertex AI Agent Engine。

关键架构选择: - Vertex AI Agent Engine:提供内置的持久化会话与记忆服务。托管便利,但灵活性较低。 - Cloud Run + 外部数据库:灵活性更高,可直接集成 AlloyDB 或 Cloud SQL,但需自行管理持久化层。

处理长时任务:对于复杂任务,采用异步/事件驱动模式。服务将任务发布到 Pub/Sub,触发 Cloud Run 工作节点异步处理。智能体在后台任务运行期间保持响应。

有状态工具的可靠性:当工具调用失败(网络问题、瞬时错误)时,智能体必须安全地重试。这要求: - 幂等工具:工具设计上需保证以相同输入调用两次不会产生重复副作用(如重复扣款、重复发送消息)。对于涉及金融交易或外部写入的工具至关重要。 - 指数退避:以递增的延迟自动重试,给下游服务留出恢复时间。

多智能体共享状态(AWS 模式)

在多智能体系统中,智能体通过共享状态而非直接耦合来协同工作。AWS 推荐三层共享状态架构:

层级 存储 特性 适用场景
任务状态 Amazon DynamoDB 个位数毫秒级读取、智能体故障后仍可存续、完整审计链 持久化工作流执行状态——每一步均有记录
会话上下文 Amazon ElastiCache 亚毫秒访问、TTL 管理 对话轮次 + 最近访问的有效载荷
领域知识 Amazon Bedrock Knowledge Bases 向量检索、治理管控、跨所有智能体共享 避免智能体实例间的知识重复
中间结果 Amazon S3 成本效益高、持久 在 DynamoDB 任务状态中通过指针引用,绝不在有效载荷中直接传递

交接有效载荷原则:只包含下一个智能体所需的内容。冗长的有效载荷会膨胀上下文窗口,降低推理质量。将大型中间产物存入 S3,传递引用而非内容本身。

记忆治理:血缘、留存、PII 与删除权

记忆存储会不断累积受监管义务约束的敏感数据。治理必须在设计阶段内建,而不能事后补救。

数据血缘

每次记忆写入都应生成一条审计记录,包含:session_idagent_iduser_idtimestampsource_ip。所有记忆记录都应附带 {tenant_id, data_classification, retention_class} 标签。

存储 血缘机制
所有记忆写入 AWS CloudTrail API 记录
工作流状态变更 Amazon DynamoDB Streams(审计回放)
S3 知识库记录 Amazon S3 对象元数据(文档来源)

分层留存策略

层级 存储 建议 TTL 说明
会话 Redis / ElastiCache 默认 24 小时 超过 24 小时的会话通常已过时;激进 TTL 可释放 DRAM
工作流 DynamoDB 90 天 Step Functions 执行日志保留 90 天
长期 MongoDB Atlas 每租户可通过 expireAfterSeconds 配置 字段:timestamp
知识库源文档 Amazon S3 1 年后转入 Glacier,7 年后删除 S3 Lifecycle 规则

PII 检测与处理

在任何数据写入长期存储前,应在巩固 Lambda 中应用 Amazon Bedrock Guardrails PII 过滤器。可配置为“检测并掩码”或“检测并阻止”模式。覆盖的 PII 类型包括姓名、SSN、电子邮件、信用卡号和 IP 地址。对 MongoDB Atlas 中含 PII 的字段使用由 KMS 管理密钥的字段级加密。知识库同步作业摄取文档前,使用 Amazon Macie 扫描 S3 源存储桶。

删除权(GDPR/CCPA)

在每层记忆存储上为 user_id 建立索引,可实现定向清除,避免全表扫描:

存储 删除方式
MongoDB Atlas 通过 user_id 索引执行 deleteMany({user_id: X})
DynamoDB user_id 上建立 GSI——无需全表扫描即可清除工作流日志
Redis Cloud SCAN pattern 'session:*:{user_id}:*' + DEL——由删除请求触发异步 Lambda 任务
Amazon Bedrock Knowledge Bases 删除 S3 对象,再通过同步作业重新索引,以排除已删除文档

多智能体状态一致性的事件溯源方案(Confluent 模式)

这是共享可变状态存储的替代方案:通过不可变日志与事件溯源维护多个智能体间的状态一致性,如 Confluent 在 A Guide to Event-Driven Design for Agents and Multi-Agent Systems(2025)中所述。该模型将每次智能体交互视为在持久化事件日志(而非数据库记录)上的"输入 → 处理 → 输出":

  • 每个事件均以不可变的追加条目记录——零数据丢失,且保留状态演变的完整审计链。
  • 基于回放的恢复:智能体故障后,通过从最后保存的偏移量回放事件来恢复状态,而非从快照重建。
  • 并行消费互不干扰:多个智能体可独立消费同一事件流,各自追踪自身偏移量,在无锁争用的情况下实现水平扩展。

这与上文 AWS 三层共享状态模型形成互补:任务状态和中间结果可由事件日志派生(或以事件日志为底层支撑),替代或补充 DynamoDB 等行存储——尤其适用于主要访问模式为"按时序查询发生了什么"而非"查询当前值"的场景。

参见