返回文章列表
LLM经验

Agent的短期记忆和长期记忆

·未分类

一、为什么Agent需要记忆?

没有记忆的Agent,每次任务都是孤立事件。就像一条金鱼——转一圈就忘了刚才做过什么。记忆让Agent从"一次性回答问题"升级到"持续完成任务",是区分真正有用的AI系统与玩具级AI的关键。

举个例子:你跟一个AI助手说"我对海鲜过敏",下次让它推荐餐厅时,如果它还推荐海鲜大餐——那说明它完全没有"记忆"。一个有记忆的Agent,会在下次直接排除海鲜选项。


二、短期记忆(Short-Term Memory)

什么是短期记忆?

短期记忆是Agent在执行单个任务或一次会话中的临时缓冲区,用于维持任务的连续性和上下文一致性。一旦任务完成或会话结束,这些记忆就会被清除。

类比:就像你去医院看病,看病过程中你记得挂号科室、医生名字、检查结果……但走出医院后,这些细节就慢慢忘了,因为它们对后续生活没什么用了。

短期记忆存储什么?

  • 会话内的用户输入和Agent回复
  • 工具调用的结果(API返回值、查询结果等)
  • 中间推理状态和临时变量
  • 当前任务的目标、约束和已完成步骤

短期记忆的关键特性

维度 说明
生命周期 分钟~小时级(单次会话内)
容量 MB级,受LLM上下文窗口限制
存储方式 内存数据库(如Redis)或LLM原生上下文

常见实现方式

1. 基于上下文窗口的记忆

最简单直接的做法——把历史对话、当前目标和中间结果全部塞进LLM的上下文窗口里。

  • 优点:实现成本极低,几行代码搞定
  • 缺点:任务变长时上下文迅速膨胀,推理质量下降,token成本飙升

2. 结构化状态记忆

不再用自然语言堆砌,而是用JSON或表单形式记录任务状态:

{
  "目标": "帮用户预订巴黎旅行",
  "约束": "预算1万以内,靠近地铁",
  "已完成": ["查航班", "比价酒店"],
  "待办": ["订酒店", "买景点门票"],
  "当前步骤": "订酒店"
}
  • 优点:执行路径稳定、可解释性强,能显著降低Agent"跑偏"的概率
  • 缺点:需要预先设计好数据结构

3. 滚动摘要记忆

定期对已有的长对话进行压缩和总结,用摘要替代原始内容进入上下文。

  • 优点:大幅降低token成本,同时保证任务连续性
  • 缺点:压缩过程可能丢失细节
  • 适用:长任务Agent的标配方案

4. 会话内检索式记忆

本质上是"短期RAG"——将本次任务中产生的信息写入临时可检索空间,需要时按当前问题检索,而不是一次性全部加载到上下文中。

  • 优点:按需回忆关键信息,平衡上下文长度和执行可靠性
  • 适用:多文档、多工具协作的复杂任务

三、长期记忆(Long-Term Memory)

什么是长期记忆?

长期记忆是跨会话、跨任务的持久化记忆,用于沉淀用户偏好、历史背景、经验教训等可复用信息。

类比:你需要永远记住爸妈是谁、自己叫什么名字、自己对什么过敏——这些信息对生活至关重要,需要长期保留。Agent也一样,需要记住用户的核心偏好和重要事实。

长期记忆存储什么?

  • 用户长期偏好(如"喜欢无糖奶茶"、"对海鲜过敏")
  • 结构化事实知识和实体关系
  • 跨会话的任务经验和历史背景
  • 成功/失败的策略总结

长期记忆的关键特性

维度 说明
生命周期 天级~月级,甚至永久保留
容量 GB~TB级,依赖外部存储
存储方式 向量数据库 + 关系数据库 + 图数据库

常见实现方式

1. 向量化记忆(长期RAG)

目前最主流、应用最广泛的方式。将用户偏好、历史对话摘要、关键事实进行向量化存储,通过语义相似度进行检索和回忆。

  • 优点:天然适合非结构化信息,扩展性强
  • 技术栈:Chroma、Milvus、Pinecone等向量数据库
  • 典型场景:个人助理记住用户的长期偏好和历史背景

2. 结构化用户画像与事实库

将关键事实拆解为结构化字段,通过明确的写入和更新逻辑维护:

用户画像:
  - 姓名: 小明
  - 职业: 算法工程师
  - 偏好: 技术类内容, 无糖饮品
  - 禁忌: 海鲜过敏
  - 常用工具: PyTorch, Transformers
  • 优点:可控性强、可解释性高、准确性高
  • 技术栈:MySQL、PostgreSQL、Neo4j(图数据库)
  • 适用:企业级Agent、客服系统

3. 经验与策略记忆

关注的不是"发生了什么",而是"什么方式更有效"。Agent在任务完成后进行复盘,总结成功/失败的策略。

  • 形式:案例库、规则权重、策略标签
  • 作用:让Agent从"执行者"进化为"决策者"
  • 适用:复杂规划型Agent(自动化研究、代码修复、投放优化)

4. 记忆的三层处理

  • RAG检索:存储到数据库,方便后续语义检索
  • 重要记忆提取:标记一段时间内非常重要的人、事、物
  • 记忆摘要:对历史记忆进行总结归纳,大幅减少存储体积

遗忘机制——容易被忽视但至关重要

随着长期记忆规模扩大,"记什么、不记什么"比存储本身更重要。一个成熟的Agent系统需要:

  • 写入门槛:只记录高价值信息,避免垃圾信息污染记忆库
  • 定期评估:判断已有信息是否仍有价值
  • 遗忘策略:对低价值、过期或错误的记忆进行压缩或删除

核心原则:长期记忆的竞争力不在于存得多,而在于存得对、忘得及时。 否则Agent反而会被过去的错误信息拖累。


四、短期 vs 长期记忆对比

维度 短期记忆 长期记忆
核心作用 保证单个任务的完成 支撑跨任务的成长与个性化
生命周期 分钟~小时级 天级~月级(可永久)
容量 MB级 GB~TB级
存储方式 内存/Redis/LLM上下文 向量库 + 关系库 + 图库
访问速度 毫秒级 毫秒~秒级
典型场景 多轮对话、实时客服 个性化推荐、长期陪伴

一句话总结:短期记忆保证"把事做完",长期记忆决定"下次能否做得更好"。


五、三层记忆体系(进阶)

实际上,除了短期和长期记忆,还有一层更底层的工作记忆(Working Memory)

层级 工作记忆 短期记忆 长期记忆
时间跨度 秒~分钟 分钟~小时 天~月
核心作用 推理过程中的临时草稿 单次会话的上下文缓冲 跨会话的知识金库
存储媒介 Python内存结构 Redis / LLM上下文 向量库 + 关系库
典型内容 任务拆分的中间步骤 用户输入和Agent回复 用户偏好和历史经验

三层协同示例:旅行助手推荐巴黎景点

  1. 工作记忆(临时推理):存储推理步骤 → [检索偏好 → 匹配景点 → 生成推荐]
  2. 短期记忆(本次会话):读取对话历史 → [用户说"我喜欢印象派艺术"]
  3. 长期记忆(跨会话):检索历史偏好 → [用户计划7月去巴黎旅行]
  4. 融合推理:结合三层信息,生成个性化推荐 → 推荐奥赛博物馆、橘园美术馆等印象派相关景点

推理完成后:工作记忆立即销毁 → 短期记忆保留到会话结束 → 新发现的偏好提炼后写入长期记忆。


六、常见误区

误区1:短期记忆越长越好

过长的上下文会导致推理质量下降("大海捞针"效应),token成本飙升。应该通过摘要、检索等方式保持简洁高效。

误区2:长期记忆 = 存更多数据

关键是"存什么"和"怎么用",而不是"存多少"。需要定期清理和评估记忆质量,防止错误信息的反噬。

误区3:记忆系统可以后期再加

记忆架构应该在设计阶段就考虑,后期改造成本很高。一开始就应该为记忆的存储、检索和清理留好接口。