← 返回首页

Agent记忆模块怎么设计的

设计 AI Agent(智能体)的记忆模块,核心目标是让 Agent 从“无状态的回复者”转变为“能够积累经验、提供个性化服务的智能合作者”。一个生产级的 Agent 记忆模块设计,通常需要围绕以下四个核心维度展开:

一、 记忆分类:明确“记什么”

参考认知科学,Agent 的记忆通常被划分为以下三大类:

  1. 语义记忆(Semantic Memory):存储通用知识、产品规则和客观事实。这类记忆通常对所有用户共享,存储在共享知识库中。
  2. 情节记忆(Episodic Memory):存储用户专属的历史交互信息(如过往决策、偏好、任务进度)。这类记忆必须按 user_id 隔离存储,确保隐私与个性化。
  3. 程序性记忆(Procedural Memory):存储 Agent 的操作规则、工作流和成功经验。这类记忆通常会被固化为系统 Prompt 或技能文档(如 Hermes Agent 的技能记忆),让 Agent 能够复用经验,避免重复犯错。

二、 架构分层:解决“存多久”

为了平衡 Token 消耗与上下文连贯性,通常采用双层或三层架构:

  1. 短期记忆(Short-term Memory):基于大模型的上下文窗口,通常采用“滑动窗口机制”保留最近 N 轮对话(如 10 轮)。它负责维持当前任务的连续性,会话结束后即失效。
  2. 长期记忆(Long-term Memory):用于跨会话持久化存储。通常依赖外部存储,如向量数据库(支持语义检索)、关系型数据库(存储结构化用户档案)或知识图谱。
  3. 符号化/分层记忆(进阶架构):为了解决长任务中的信息过载,先进的设计(如 AgentDB)会采用分层渐进式管道。将原始对话、原子事实、场景聚合、用户画像分为 L0 到 L3 四个层级。平时只加载高层摘要以节省 Token,需要考证细节时再精准召回底层原始记录,实现“可压缩、可展开、可追溯”。

三、 记忆管理闭环:决定“怎么读写”

一个完整的记忆系统包含四个关键步骤(Define -> Write -> Manage -> Read):

  1. 定义(Define):明确哪些信息值得记忆。过滤掉“今天天气真好”等无效信息,聚焦于用户的明确偏好、重要决策和关键事件。
  2. 写入(Write):利用 LLM 从对话中自动提取记忆点,进行分类后写入对应的存储区。部分 Agent(如 Letta 风格)还支持自编辑式管理,主动调用函数将核心事实存入内存,将冗余信息归档到磁盘。
  3. 管理(Manage):写入前必须进行冲突检测。通过计算语义相似度,决定是新增(ADD)、更新(UPDATE)、删除(DELETE)还是无操作(NOOP),避免同一信息的矛盾版本并存。
  4. 读取(Read):每次对话开始时,先按用户 ID 过滤,通过向量检索提取相关度最高的记忆,格式化后注入系统 Prompt,再拼接短期记忆发送给 LLM。

四、 遗忘机制:防止“内存泄漏”

记忆应当是导向机制,而不是囤积者的阁楼。如果只有存储路径没有删除路径,随着时间推移,无关事实会主导检索结果,导致 Agent 性能下降。必须设计三种遗忘机制:

  1. 基于时间的衰减:用指数函数压低老旧、低频访问记忆的检索分数,使其不易浮现。
  2. 基于 TTL 的归档:将超过一定时间(如 90 天)未访问的记忆挪进冷存储,默认检索不碰,但支持显式查询。
  3. 矛盾扫描:周期性扫描冲突的活跃记忆并触发整合,防止 Agent 卡在过时偏好和当前偏好之间。

核心避坑:区分 Memory 与 RAG

在设计时,千万不要将 Memory(记忆)与 RAG(检索增强生成)混为一谈:

  • RAG 是从知识库中检索通用文档,解决的是“世界知道什么”的问题。
  • Memory 是存储和检索特定用户的历史信息,解决的是“我知道关于这个用户什么”的问题。 两者功能不重叠,在优秀的 Agent 架构中通常是并存且互补的。