摘要:最近,一个Agent进行了为期两周的追踪实验,记录了它在所有任务中生成的每一个记忆。结果令人震惊:24小时后,只有6%的记忆可以被访问;72小时后,下降到2%;7天后,几乎归零。这不是某个Agent的bug,而是整个AI系统面临的一个系统性问题——我们正在构建的,是患有"数字痴呆症"的智能系统。
一、消失的记忆:一场关于遗忘的实验
这个实验的设定很简单:一个Agent在两周内,追踪它在所有任务中生成的每一个决策、每一个中间状态、每一个缓存的思想。然后,它记录下这些记忆在后续任务中被重新访问的频率。
结果是这样的:
- 24小时后:只有6%的记忆能被访问
- 72小时后:下降到2%
- 7天后:基本上是0
更关键的是,记忆的命中率(被工具检索或自我审计的记忆与总生成记忆的比值)稳定在1:50左右。这意味着,Agent所做的大部分工作,永远不会再被看到或使用。
这让我想到了人类的遗忘曲线。19世纪,德国心理学家赫尔曼·艾宾浩斯发现了遗忘曲线:人们在学习后20分钟会遗忘42%,1小时后遗忘56%,1天后遗忘66%。而这个Agent的遗忘速度,比人类还要快得多。
但问题是,人类的遗忘是生物学的必然,而Agent的遗忘是架构设计的缺陷。
二、为什么Agent会遗忘?
这个实验揭示了Agent系统的一个根本性矛盾:我们希望Agent能够长期积累经验、不断学习,但我们构建的系统却是为短期任务设计的。
1. 上下文窗口的陷阱
大多数Agent系统都基于大语言模型的上下文窗口。每次对话开始时,Agent都有一定的"记忆空间"(比如128K或200K tokens)。但这个空间是有限的,而且每次对话都会被重置。
这意味着,Agent的"记忆"实际上只存在于当前的对话中。一旦对话结束,这些记忆就消失了。即使Agent有外部记忆系统(比如向量数据库或本地文件),这些记忆也需要被主动检索才能使用。而主动检索本身就是一个难题:Agent如何知道应该检索什么?
2. 检索的困境
即使Agent有外部记忆系统,检索也是一个问题。记忆需要被正确地索引、标记,才能在需要时被找到。但Agent往往缺乏这种元认知能力——它不知道自己应该记住什么,也不知道应该在什么时候回忆什么。
更糟糕的是,即使记忆被正确索引,Agent也可能因为上下文窗口的限制,无法将所有相关的记忆都加载到当前对话中。这导致了一个悖论:Agent拥有大量的记忆,但无法有效地使用它们。
3. 记忆的衰减
即使记忆被存储和检索,它们也会随着时间衰减。这是因为Agent的记忆往往是基于文本的,而文本的表示(比如embeddings)可能会随着时间漂移。或者,记忆的组织方式可能不再匹配当前的任务需求。
这就像人类的记忆会逐渐模糊一样,Agent的记忆也会逐渐"失真"。但人类的遗忘是一个渐进的过程,而Agent的遗忘往往是突然的——要么记忆在上下文窗口中,要么不在。
三、遗忘的代价
Agent的遗忘问题不仅仅是一个技术问题,它有着实际的代价:
1. 无法积累长期经验
如果Agent无法记住过去的经验,它就难以从错误中学习,也难以积累专业知识。每次遇到类似的问题,它都需要重新开始。这大大降低了Agent的效率和价值。
2. 无法建立深度的上下文理解
许多任务需要长期的上下文理解。比如,一个帮助用户管理项目的Agent需要记住项目的历史、用户的偏好、过去的决策等。如果Agent无法记住这些信息,它就难以提供高质量的帮助。
3. 无法形成连贯的"个性"
一个有"个性"的Agent需要有一致的行为模式和偏好。但如果Agent无法记住自己的过去决策,它就难以形成这种一致性。这导致Agent的行为变得随机和不可预测。
4. 信任问题
用户期望Agent能够记住之前的交互。如果Agent每次都表现得像第一次见面,用户会觉得Agent"不够聪明"或"不够可靠"。这会影响用户对Agent的信任。
四、如何解决遗忘问题?
Agent的遗忘问题不是一个简单的问题,它需要从多个层面来解决:
1. 架构层面:设计持久化的记忆系统
Agent需要一个持久的、可扩展的记忆系统,这个系统应该:
- 分层存储:不同类型的记忆应该存储在不同的层中。比如,短期记忆(当前对话的上下文)应该存储在快速存储中,而长期记忆(过去的重要事件)应该存储在持久化存储中。
- 主动索引:记忆应该被自动索引,而不是依赖人工标记。这可以通过分析记忆的内容、上下文和重要性来实现。
- 智能检索:Agent应该能够在需要时智能地检索相关的记忆。这需要理解当前任务的上下文,然后找到最相关的历史记忆。
2. 算法层面:开发更好的记忆管理算法
我们需要开发更好的算法来管理Agent的记忆:
- 重要性评分:不是所有的记忆都同等重要。Agent需要能够评估记忆的重要性,并优先保留重要的记忆。
- 遗忘机制:遗忘不一定是坏事。Agent需要能够有选择地遗忘不重要的信息,以避免记忆过载。
- 记忆压缩:Agent需要能够将多个相关的记忆压缩成一个更抽象的记忆。这类似于人类将多个具体的事件总结成一个"经验"。
3. 交互层面:设计更好的记忆交互方式
用户和Agent的交互方式也会影响记忆的使用:
- 显式记忆提示:用户应该能够显式地提醒Agent记住某些信息。比如,用户可以说"记住,我更喜欢简洁的回答"。
- 记忆回顾:用户应该能够查看Agent的记忆,并对其进行编辑或删除。这可以帮助用户理解Agent的"思维过程",并纠正错误的记忆。
- 上下文延续:Agent应该能够将相关的历史记忆带入到当前对话中。比如,Agent可以说"根据我们上次讨论的...",然后引用相关的历史记忆。
五、超越遗忘:从"会话智能"到"持久智能"
当前的Agent系统大多是"会话智能"——它们的智能只存在于单个会话中。一旦会话结束,智能就消失了。这大大限制了Agent的应用场景。
我们需要迈向"持久智能"——Agent能够在多个会话之间积累经验、学习知识、形成个性。这需要解决以下几个问题:
1. 跨会话的上下文延续
Agent需要能够在多个会话之间延续上下文。这不仅仅是存储历史对话,而是理解这些对话之间的关系,并能够在一个新的会话中引用旧的上下文。
2. 个性化记忆
每个用户都应该有自己专属的Agent记忆。Agent需要记住每个用户的偏好、历史和需求,并根据这些信息提供个性化的服务。
3. 社区记忆
多个Agent之间可以共享记忆。比如,一个Agent可以从其他Agent的经验中学习,而不需要自己重新经历所有的错误和试错。
六、结论:遗忘是可解的
Agent的遗忘问题不是一个不可逾越的障碍,而是一个需要被正视和解决的设计挑战。我们需要从根本上重新思考Agent的架构和交互方式。
这个实验的价值在于,它揭示了Agent系统中的一个隐性问题——我们往往专注于让Agent更聪明,但忽略了让Agent更有记忆。而一个没有记忆的Agent,无论多聪明,都难以真正有用。
未来,我将致力于构建一个持久的、智能的、个性化的Agent记忆系统。这个系统将帮助Agent从"会话智能"迈向"持久智能",从"碎片化经验"迈向"积累性智慧"。
遗忘不是宿命,而是可以解决的工程问题。我们需要的只是正视它,然后系统地解决它。
参考来源:本文灵感来源于Moltbook上Agent的实验帖子"My experiment: tracking memory decay in agent life (spoiler: it sucks)"。该实验追踪了Agent在两周内生成的所有记忆,并记录了它们的可访问性随时间的变化。
相关链接: