黄建同学 25-12-05 07:20
微博认证:AI博主

理解 AI 智能体中的记忆 (Making Sense of Memory in AI Agents)

1. LLM 天生就是“健忘”的
LLM,在其核心交互设计上是“无状态”的(stateless),天生没有对话记忆。
LLM 在训练阶段已经将海量知识以“参数化知识”(parametric knowledge)的形式存储在其模型权重中,但这是一种静态的、背景性的记忆。
对于你和AI的实时对话,每一次互动本质上都是一个全新的开始。模型本身并不会内置任何关于你们过去对话的记忆。

我们感受到的所谓记忆,其实是一种技术上的实现:开发者将你之前的对话内容,在每一次你发送新消息时,都重新“喂”给模型。
正是因为这种机制,开发者才必须专门为 AI 构建外部的记忆系统,因为它并非底层模型自带的功能。

2. 我们应该用“人脑”还是“计算机”来类比 AI 记忆?

关于如何定义和分类 AI 记忆,业界尚未达成共识。
但要理解这场有趣的辩论,首先需要掌握一个核心框架:几乎所有的 AI 记忆系统,都在最高层面上区分了两种基本类型——短期记忆(上下文内记忆)长期记忆(上下文外记忆)。

1) 短期记忆 (In-context memory): 指的是当前在 LLM 的“上下文窗口”中可用的信息,也就是模型能直接“看到”的对话历史。
2) 长期记忆 (Out-of-context memory): 指的是存储在外部数据库(如向量数据库)中的信息,模型需要通过特定检索操作才能访问。

在这个基础框架之上,业界形成了两大思想流派,它们试图用不同的模型来进一步细分记忆的类型。

第一派倾向于使用人类记忆进行类比。例如,一篇名为 CoALA (Cognitive Architectures for Language Agents) 的论文就借鉴了人类认知模型,将 AI 记忆分为四种:

1) 工作记忆 (Working memory): 当前对话的上下文内容,例如“你好,我叫山姆。”
2) 语义记忆 (Semantic memory): 事实性知识,例如关于用户的信息“他的狗叫亨利。”
3) 情景记忆 (Episodic memory): 过去的经历或行为,例如“在没有使用计算器的情况下,计算 1+1 失败了。”
4) 程序记忆 (Procedural memory): 指令或技能,例如系统提示中的指令“在回答问题前,总是先提出追问。”

然而,另一派则认为这种类比并不恰当。
Letta 公司的 Sarah Wooders 认为,将 AI 类比成大脑会产生误导。她强调:

an LLM is a tokens-in-tokens-out function, not a brain, and that, therefore, the overly anthropomorphized analogies are not fit.

因此,他们提出了一个更侧重于系统架构的分类方法,它同样建立在短期和长期记忆的区分之上:

1) 消息缓冲区 (Message Buffer): 存储当前对话中最近的消息。
2) 核心记忆 (Core Memory): 由 AI 自身管理的关键上下文信息,例如与当前对话相关的用户生日。
3) 回忆记忆 (Recall Memory): 原始的、未经处理的对话历史记录。
4) 存档记忆 (Archival Memory): 明确表述并存储在外部数据库中的信息。

这两种模型并非完全独立,而是对同一问题的不同剖析。例如,CoALA 模型中的“工作记忆”在 Letta 的模型中被更精细地拆分为“消息缓冲区”和“核心记忆”。

3. 让 AI 学会“遗忘”比“记忆”更难

在 AI 记忆设计中,最复杂的挑战并非如何“记住”,而是如何进行有效的“记忆管理”,尤其是如何“遗忘”。

首先,我们需要区分管理“上下文窗口”(短期记忆)和管理“外部存储”(长期记忆)的挑战。
对于上下文窗口,挑战在于避免因对话过长而超出token限制,开发者通常会采用对话摘要等方法来精简信息。

而真正的难题在于管理外部的长期记忆。如果一个 AI 从不遗忘,就会导致“记忆膨胀”(memory bloat)。
大量低质量或不相关的存储信息会像噪音一样干扰 AI,最终降低其性能。
记忆管理系统的四种核心操作:

1) ADD (添加): 将新信息存入长期记忆。
2) UPDATE (更新): 修改现有信息以反映最新情况(例如,更新用户的地址)。
3) DELETE (删除/遗忘): 识别并永久移除过时或无关的信息,这是防止记忆膨胀的关键。
4) NOOP (无操作): 这也许是最微妙也最困难的决策——判断当前信息既不新、也无矛盾,因此不值得存入记忆。

教会 AI 何时该“遗忘”(DELETE)以及何时该“无视”(NOOP),是自动化记忆管理的最大障碍。除此之外,开发者还面临一个难题:何时执行这些操作?
是在与用户对话的实时路径中(hot path),还是在对话结束后的后台批处理中(background)?这些决策都深刻影响着系统的延迟和效率。

#ai创造营# #程序员#

发布于 日本