Agent 的三大模块(一)——记忆 Memory

Agent 的三大模块(一)——记忆 Memory
xiaoye记忆——Memory
Agent 的记忆分为短期记忆和长期记忆。
短期记忆(Short-Term Memory),也称为工作记忆,即最近即时上下文的缓冲区,包括 Agent 最近的行动。
然而 Agent 的执行可能还会涉及多个子任务步骤的执行、多轮工具的调用,短期记忆并不能满足记忆这么多步骤。这就需要长期记忆(Long-Term Memory),来让 Agent 记住数十甚至数百个执行步骤。
如何实现短期记忆
LLM 都有一个上下文窗口(context window),代表了这个 LLM 能够处理的 token 数量。content window通常至少为 8192 个 token,有时可以扩展到数十万个 token。
短期记忆实际上并不是真正让模型记住对话,而是将完整的对话历史作为 prompt 的一部分,和当前问题一起输入进大模型中,来让大模型获取到之前的对话。如果对话历史的 token < LLM 的 Content Window,那么就可以有效模拟记忆。
对于对话历史过大,或者模型本身的 content window 太小的时候,我们可以接入另一个总结 LLM 来总结迄今为止发生的对话,再输入到 Prompt 里面去。
通过持续总结对话,我们可以保持较小的对话规模。这将减少 token 数量,同时只跟踪最重要的信息。
如何实现长期记忆——RAG
LLM Agent 的长期记忆不止包括一些对话的历史内容,它指的是 Agent 过去所有的操作、决策和互动记录等等,而不仅仅是静态的数据或信息。
实现长期记忆的常见技术是将所有先前的交互、行动和对话存储在外部向量数据库(Vector database)中。
怎么构建这个向量数据库呢?我们需要用到 嵌入模型(Embedding Model) 来将对话信息、决策记录、训练数据等等转化为固定长度的向量来表示,比如单词“猫”被向量化为[0.5, 0.2, 0.1],“狗”被向量化为[0.4, 0.2, 0.3]。在这个向量空间中,尽管具体数字不同,但“猫”和“狗”的向量相对更近,因为它们都是动物。
拥有了这个充满知识的向量数据库后,当用户再次输入任何问题,我们都可以继续通过
Embedding Model 将用户问题向量化,并在数据库中查找出和用户问题向量最相关的向量(通常利用计算余弦相似度或其他相似度量来完成)。查找出来的相关向量数据会作为 prompt 的一部分,和新一次的用户问题一起输入给 Agent 处理。
这种方法也就是检索增强生成(Retrieval-Augmented Generation, RAG)。至于 RAG 详细的实现细节,以及 Embedding Model 具体是如何工作的,之后再详细讲解。


