为什么 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 短期记忆:对话历史管理