为什么 Agent 需要记忆?

想象一个助理,每次你找他,他都把你忘得一干二净——你是谁、你的工作是什么、你上次交代了什么任务。这样的助理,根本无法提供真正的帮助。

没有记忆的 Agent:反复重复的痛苦

# 没有记忆的 Agent 对话示例
user: "我叫张伟,是一名 Python 开发工程师"
agent: "你好!有什么可以帮你的?"

user: "帮我写一个函数"
agent: "好的,请问您需要什么功能的函数?"

# 第二天...
user: "昨天那个函数有个 bug"
agent: "抱歉,我不了解您之前的对话内容。
       请问您需要帮助修复什么函数?"  # 完全忘记了!

这种体验让用户感到沮丧,也限制了 Agent 能处理的任务复杂度。

记忆系统的三个层次

Agent 的记忆系统类比人类记忆,分为三个层次:

记忆系统层次图

短期记忆(Short-term Memory)

  • 类比:工作时桌面上放的文件
  • 内容:当前对话的消息历史
  • 特点:容量有限(受 Context Window 限制),会话结束后消失
  • 用途:维持多轮对话的连贯性

长期记忆(Long-term Memory)

  • 类比:文件柜里存放的档案
  • 内容:用户偏好、重要信息、历史对话摘要
  • 特点:持久存储,跨会话访问,容量大
  • 用途:个性化服务、知识积累

工作记忆(Working Memory / Scratchpad)

  • 类比:草稿纸
  • 内容:当前任务的中间推理步骤
  • 特点:任务进行时存在,完成后可清空
  • 用途:复杂多步骤推理,避免"重复推理"

记忆失效的典型场景

理解什么时候"没有记忆会出问题",有助于决定在哪里加入记忆系统:

# 场景1:偏好遗忘
# 用户说过"我喜欢简洁的代码,不加注释"
# 但下次对话 Agent 又开始写大量注释

# 场景2:上下文断裂
# 用户正在讨论一个复杂问题,对话太长超出 Context Window
# Agent 开始忘记对话开头说过的内容

# 场景3:重复学习
# 用户每次都需要介绍自己和背景
# Agent 无法积累对用户的了解

# 场景4:任务连续性
# 用户要求"继续上次我们讨论的方案"
# Agent 不知道上次讨论了什么

记忆系统设计的核心挑战

1. Token 限制

# Context Window 限制了短期记忆的大小
# GPT-4o 有 128K Token 的上下文
# 但长对话 Token 消耗快,成本高

# 解决方案:
# - 滑动窗口:只保留最近 N 轮对话
# - 摘要压缩:将旧对话压缩为摘要
# - 向量检索:从长期记忆中检索相关片段

2. 什么值得记忆

# 并非所有信息都值得存储
# 要记忆的:
keep_memory = [
    "用户姓名、职业、偏好",
    "重要决策和结论",
    "用户自定义的规则(如代码风格)",
    "正在进行的项目信息",
]

# 不需要记忆的:
skip_memory = [
    "日常闲聊",
    "重复的问候",
    "临时性的查询",
    "已过期的信息",
]

3. 记忆的准确性

# 存入记忆的信息可能是错误的
# Agent 需要具备:
# - 更新记忆的能力(用户更正偏好)
# - 区分事实和推测
# - 记忆来源追溯

小结

记忆系统是 Agent 实用性的核心:

  • 短期记忆:维持当前对话连贯性
  • 长期记忆:跨会话积累知识
  • 工作记忆:支持复杂推理任务
  • 核心挑战:Token 限制、选择性记忆、准确性

📖 想深入了解记忆系统的学术前沿? 请阅读 5.6 论文解读:记忆系统前沿进展,涵盖 Generative Agents、MemGPT、MemoryBank、CoALA 四篇核心论文的深度解读。


下一节:5.2 短期记忆:对话历史管理