Agent Memory 技术对比与应用
Agent Memory 技术对比与应用:从理论到生产落地的完整指南
摘要/引言
问题陈述
当我们谈论新一代 AI 应用时,「Agent(智能体)」无疑是近两年最火爆的关键词之一。从 GitHub 上的 AutoGPT 热榜登顶,到 OpenAI 的 DevDay 推出 Custom GPTs 和 Assistant API,再到现在国内各大厂的 Agent 平台(如字节豆包Agent、智谱AI智谱清言Agent、百度文心一言智能体广场),Agent 的落地速度远超我们的想象。
但只要真正上手开发过 Agent 的开发者,都会遇到同一个核心痛点:当前的大语言模型(LLM)普遍存在「上下文窗口有限」和「长期记忆缺失」的问题——比如当你让一个基于 GPT-3.5 Turbo(16K 上下文)的 Agent 帮你回顾上个月写的10篇技术文档并总结优化建议,它要么完全“失忆”,要么只记得最后一两篇的开头;当你让它连续执行30个步骤以上的复杂任务(比如“帮我从北京朝阳区某个小区找一套符合‘3室2厅2卫、南北通透、预算1500万以内、近地铁10号线、有重点小学学区’要求的房源,并生成一份详细的看房计划,包括预约中介、准备的问题清单、交通路线、周边配套对比表”),它很可能执行到第10步就忘记了之前的「核心约束条件」(比如预算)或「中间决策结果」(比如已经筛选出了5套符合要求的备选小区),最终给出一个完全不符合要求的输出。
核心方案
解决 LLM 长期记忆缺失和上下文窗口限制问题的核心方案,就是为 Agent 配备一套「结构化的、可存储的、可检索的、可更新的、可推理的记忆系统(Agent Memory System)」——简单来说,就是给 Agent 装上一个“数字大脑皮层”,让它像人类一样能够:
- 感知与编码:将从环境(比如用户输入、API调用结果、文档内容、传感器数据)中获取的信息转换成记忆的可存储格式;
- 存储与组织:按照不同的「记忆类型」(比如感官记忆、短期工作记忆、长期情节记忆、长期语义记忆、长期程序性记忆)或「业务场景」(比如用户画像、项目进度、知识库内容)对记忆进行分层、分类存储;
- 检索与激活:根据当前 Agent 所处的「任务上下文」或「用户需求」,从海量记忆中快速、准确地找到最相关的、最有用的信息片段(这个过程通常被称为「RAG for Memory」或「Memory Augmented RAG」);
- 更新与维护:根据新的输入或中间决策结果,实时更新或修正已有的记忆;同时,定期清理「不重要的、过时的、重复的记忆」(这个过程通常被称为「Memory Pruning」),避免记忆系统过载;
- 推理与抽象:利用已有的记忆片段,进行逻辑推理、归纳总结、类比联想,生成新的「知识型记忆」或「决策型记忆」;同时,从大量的情节记忆中抽象出语义记忆或程序性记忆(比如从多次“找房失败”的情节中抽象出“学区房房源紧张,需要提前3个月预约中介”的语义规则)。
主要成果/价值
读完本文后,你将能够:
- 系统掌握 Agent Memory 的核心概念:从人类记忆的心理学理论入手,理解 Agent Memory 的分层架构、记忆类型、核心要素;
- 深入对比主流的 Agent Memory 技术方案:包括 LangChain Memory、AutoGPT Memory、Vector DB 原生记忆方案、图数据库(Graph DB)增强的记忆方案、Neural Memory Networks 神经记忆网络方案等,从「功能特性、性能表现、易用性、成本、适用场景」五个维度进行量化对比;
- 从零到一实现一个完整的 Agent Memory 系统:以 Python 为编程语言,结合 LangChain、ChromaDB(向量数据库)、Neo4j(图数据库)、Redis(缓存数据库)四个主流工具,构建一个支持「感官记忆→短期工作记忆→长期情节记忆→长期语义记忆→长期程序性记忆」分层存储的 Agent Memory 系统,并实现「编码、存储、检索、激活、更新、维护、推理、抽象」八大核心功能;
- 掌握 Agent Memory 系统的最佳实践与性能优化技巧:比如如何设计合理的记忆索引、如何选择合适的向量嵌入模型、如何优化记忆检索的效率与准确性、如何进行记忆修剪、如何结合 RAG 和 Memory 实现更强大的智能体;
- 了解 Agent Memory 技术的行业发展趋势与未来展望:比如多模态记忆、跨模态记忆融合、终身学习记忆、神经符号混合记忆等前沿方向。
文章导览
本文将按照以下四个部分展开:
- 第一部分:引言与基础:介绍问题背景、核心方案、主要成果/价值、目标读者与前置知识、文章目录;
- 第二部分:核心概念与理论基础:从人类记忆的心理学理论入手,构建 Agent Memory 的分层架构与核心要素模型,对比人类记忆与 Agent Memory 的异同,介绍主流的 Agent Memory 技术分类;
- 第三部分:主流 Agent Memory 技术方案对比:从「功能特性、性能表现、易用性、成本、适用场景」五个维度,对 LangChain Memory、AutoGPT Memory、ChromaDB/Weaviate/Pinecone 等 Vector DB 原生记忆方案、Neo4j/JanusGraph 等 Graph DB 增强的记忆方案、MemNet/NTM/Differentiable Neural Computer 等 Neural Memory Networks 神经记忆网络方案进行详细对比;
- 第四部分:从零到一实现 Agent Memory 系统:首先进行项目介绍、环境安装、系统功能设计、系统架构设计、系统接口设计;然后分步实现「感官记忆模块、短期工作记忆模块、长期情节记忆模块、长期语义记忆模块、长期程序性记忆模块、记忆检索与激活模块、记忆更新与维护模块、记忆推理与抽象模块」;最后进行结果展示与验证、性能优化与最佳实践、常见问题与解决方案;
- 第五部分:行业发展与未来展望:介绍 Agent Memory 技术的发展历史,分析当前的行业应用案例(比如智能客服、个人助理、企业知识库、游戏 AI NPC、自动驾驶),探讨未来的发展趋势;
- 第六部分:总结与附录:快速回顾文章的核心要点,列出参考资料,提供完整的源代码链接、完整的配置文件、数据表格等补充信息。
目标读者与前置知识
目标读者
本文适合以下三类读者:
- 初级 AI 应用开发者:已经使用过 LangChain、OpenAI API、Vector DB 等工具开发过简单的 AI 应用(比如 RAG 知识库问答系统),但对 Agent Memory 系统的概念、技术方案、实现方法不太熟悉,希望进一步提升自己的 AI 应用开发能力;
- 中级 AI 系统架构师:已经有一定的 AI 应用开发经验,正在负责或参与企业级 Agent 平台的设计与开发,希望深入了解主流 Agent Memory 技术方案的优劣,选择适合自己业务场景的技术栈;
- AI 技术爱好者:对 LLM、Agent、Memory 等前沿 AI 技术感兴趣,希望系统学习 Agent Memory 的相关知识。
前置知识
阅读本文前,你需要具备以下基础知识或技能:
- Python 编程基础:能够熟练使用 Python 3.8+ 编写代码,了解类、对象、函数、装饰器、异常处理等 Python 核心概念;
- 大语言模型(LLM)基础:了解 LLM 的基本原理(比如 Transformer 架构、自注意力机制、上下文窗口),能够使用 OpenAI API、智谱AI API、百度文心一言 API 等主流 LLM API 进行调用;
- 向量数据库(Vector DB)基础:了解向量嵌入(Embedding)的基本概念,能够使用 ChromaDB、Weaviate、Pinecone 等主流 Vector DB 进行向量的存储与检索;
- LangChain 基础:了解 LangChain 的基本架构(比如 Chain、Agent、Tool、Memory、Document Loader、Text Splitter、Embedding),能够使用 LangChain 开发简单的 RAG 系统或 Agent;
- 图数据库(Graph DB)基础(可选但推荐):了解图数据库的基本概念(比如节点、关系、属性、标签),能够使用 Neo4j 进行简单的图数据存储与查询;
- Redis 基础(可选但推荐):了解 Redis 的基本数据结构(比如 String、List、Set、Hash、Sorted Set),能够使用 Redis 进行缓存、消息队列等操作。
文章目录
第一部分:引言与基础(续)
第二部分:核心概念与理论基础
2.1 核心概念:从人类记忆到 Agent Memory
2.1.1 核心概念一:人类记忆的心理学理论
在构建 Agent Memory 系统之前,我们首先需要了解人类记忆的心理学理论——因为目前主流的 Agent Memory 分层架构,几乎都是借鉴了人类记忆的心理学模型。
2.1.1.1 Atkinson-Shiffrin 多存储模型(Atkinson-Shiffrin Multi-Store Model)
Atkinson-Shiffrin 多存储模型是由美国心理学家 Richard Atkinson 和 Richard Shiffrin 于 1968 年提出的,是目前最经典、最广为人知的人类记忆心理学模型之一。该模型将人类记忆分为三个独立但相互关联的存储系统:
-
感官记忆(Sensory Memory):
- 定义:也称为「感觉登记(Sensory Register)」,是人类记忆系统的第一个入口,用于暂时存储来自视觉、听觉、触觉、嗅觉、味觉等感官的原始信息;
- 存储容量:非常大,几乎可以存储所有感官接收到的原始信息;
- 存储时间:非常短,通常只有几百毫秒到几秒钟——比如视觉感官记忆(也称为「图像记忆(Iconic Memory)」)的存储时间约为 0.25-0.5 秒,听觉感官记忆(也称为「声像记忆(Echoic Memory)」)的存储时间约为 2-4 秒;
- 编码方式:原始的感官编码,比如视觉信息是图像编码,听觉信息是声音编码;
- 信息流向:只有经过「注意(Attention)」筛选的信息,才会进入「短期工作记忆」;未被注意的信息会快速消失,不会被进一步处理;
- 作用:为大脑提供一个“缓冲池”,让大脑有时间选择哪些信息需要进一步处理。
-
短期工作记忆(Short-Term Working Memory, STWM):
- 定义:也称为「工作记忆(Working Memory)」(注意:有些心理学家将「短期记忆(Short-Term Memory, STM)」和「工作记忆」区分开来,但目前主流的 Agent Memory 系统通常将它们合并为一个概念),是人类记忆系统的第二个入口,用于暂时存储当前正在处理的信息;
- 存储容量:非常有限,根据美国心理学家 George Miller 于 1956 年提出的「神奇数字 7±2 法则(The Magical Number Seven, Plus or Minus Two)」,人类的短期工作记忆通常只能存储 5-9 个独立的信息单元(也称为「组块(Chunk)」)——不过,通过「组块化(Chunking)」的方式(比如将“13812345678”拆分成“138-1234-5678”三个组块),可以显著提升短期工作记忆的有效存储容量;
- 存储时间:比较短,通常只有几秒钟到几分钟——如果不进行「复述(Rehearsal)」(比如不断重复某个电话号码),信息会快速消失;
- 编码方式:主要是听觉编码,其次是视觉编码和语义编码;
- 信息流向:经过「复述」和「深度加工(Deep Processing)」的信息,会进入「长期记忆」;未被复述或深度加工的信息会快速消失;
- 作用:相当于大脑的“工作台”或“草稿纸”,用于处理当前的任务(比如进行数学计算、理解一段文字、与他人对话)。
-
长期记忆(Long-Term Memory, LTM):
- 定义:是人类记忆系统的第三个入口,用于永久或长期存储已经深度加工的信息;
- 存储容量:几乎是无限的,目前没有证据表明人类的长期记忆会达到容量上限;
- 存储时间:可以从几分钟到几十年甚至终身;
- 编码方式:主要是语义编码,其次是视觉编码和听觉编码;
- 信息流向:当需要使用长期记忆中的信息时,会通过「检索(Retrieval)」将其提取到「短期工作记忆」中进行处理;
- 作用:相当于大脑的“硬盘”或“图书馆”,用于存储所有的知识、经验、技能、情感等。
为了更直观地理解 Atkinson-Shiffrin 多存储模型,我们可以用以下的 Mermaid 流程图来表示:
(视觉/听觉/触觉/嗅觉/味觉)] -- ----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PS'
2.1.1.2 Tulving 长期记忆分类模型(Tulving’s Classification of Long-Term Memory)
Atkinson-Shiffrin 多存储模型虽然很好地解释了人类记忆的分层存储机制,但它对「长期记忆」的分类不够细致。为了弥补这一不足,加拿大心理学家 Endel Tulving 于 1972 年提出了「Tulving 长期记忆分类模型」,将长期记忆分为两个主要类型:
-
陈述性记忆(Declarative Memory):
- 定义:也称为「外显记忆(Explicit Memory)」,是指可以有意识地回忆和陈述的信息——比如“中国的首都是北京”、“我昨天晚上吃了火锅”;
- 存储内容:主要是「事实性信息」和「情节性信息」;
- 提取方式:有意识的、主动的提取;
- 细分类型:
a. 情节记忆(Episodic Memory):- 定义:也称为「自传体记忆(Autobiographical Memory)」,是指与个人特定的时间、地点、情境相关的记忆——比如“我2023年10月1日在北京天安门广场看了升国旗仪式”;
- 存储内容:主要是「个人经历的事件」,包括事件发生的时间、地点、参与者、情境、个人情感等;
- 特点:具有「时间戳」、「空间锚点」、「个人关联性」;
b. 语义记忆(Semantic Memory): - 定义:是指与个人特定的时间、地点、情境无关的、通用的、客观的知识记忆——比如“地球是圆的”、“水的沸点是100摄氏度(在标准大气压下)”、“Python 是一种编程语言”;
- 存储内容:主要是「概念、规则、定义、事实、公式」等通用知识;
- 特点:不具有「时间戳」、「空间锚点」、「个人关联性」,是人类共享的知识体系。
-
程序性记忆(Procedural Memory):
- 定义:也称为「内隐记忆(Implicit Memory)」,是指无法有意识地回忆和陈述,但可以通过行为表现出来的技能或习惯记忆——比如“骑自行车”、“游泳”、“打字”、“系鞋带”;
- 存储内容:主要是「技能、习惯、操作流程」等;
- 提取方式:无意识的、自动的提取;
- 特点:需要通过「反复练习」才能形成,一旦形成就很难遗忘。
为了更直观地理解 Tulving 长期记忆分类模型,我们可以用以下的 Mermaid 实体关系图(ER图)来表示:
2.1.1.3 Baddeley 工作记忆模型(Baddeley’s Working Memory Model)
Atkinson-Shiffrin 多存储模型将「短期记忆」看作是一个单一的、被动的存储系统,但这一观点受到了很多心理学家的质疑。为了弥补这一不足,英国心理学家 Alan Baddeley 于 1974 年提出了「Baddeley 工作记忆模型」,将「短期工作记忆」看作是一个由多个子系统组成的、主动的信息处理系统。该模型最初包含三个子系统,后来在 2000 年又补充了第四个子系统:
-
语音回路(Phonological Loop):
- 定义:用于处理和暂时存储语音信息;
- 细分组件:
a. 语音存储(Phonological Store):也称为「声像存储器」,用于暂时存储语音信息,存储时间约为 2 秒;
b. 发音复述装置(Articulatory Rehearsal Process):也称为「发音控制过程」,用于通过「默读」或「出声复述」的方式,将语音信息保持在语音存储中,或者将视觉信息转换成语音信息存入语音存储; - 作用:比如进行数学计算时记住数字、理解一段文字时记住语音信息。
-
视觉空间模板(Visuospatial Sketchpad):
- 定义:用于处理和暂时存储视觉信息和空间信息;
- 细分组件:
a. 视觉缓存(Visual Cache):用于暂时存储视觉信息(比如形状、颜色、大小);
b. 内部抄写器(Inner Scribe):用于处理空间信息(比如位置、方向、运动); - 作用:比如在脑海中想象一个物体的形状、规划一条路线、记住一个房间的布局。
-
情景缓冲器(Episodic Buffer):
- 定义:是 Baddeley 于 2000 年补充的子系统,用于暂时存储和整合来自语音回路、视觉空间模板、长期记忆的信息;
- 存储容量:有限,约为 4 个组块;
- 编码方式:多模态编码(可以存储语音、视觉、语义等多种信息);
- 作用:比如在理解一段复杂的文字时,整合文字的语义信息(来自长期语义记忆)、语音信息(来自语音回路)、视觉信息(来自视觉空间模板);在进行逻辑推理时,整合多个前提条件(来自长期语义记忆或短期工作记忆的其他子系统)。
-
中央执行系统(Central Executive):
- 定义:是工作记忆模型的「核心控制单元」,用于分配注意力资源、协调各个子系统的工作、处理策略性任务(比如决策、规划、问题解决);
- 存储容量:有限,没有自己的存储功能,主要负责控制和协调;
- 作用:比如在同时进行“听音乐”和“写作业”时,分配注意力资源;在进行数学计算时,决定使用哪种计算方法;在进行对话时,决定接下来要说什么。
为了更直观地理解 Baddeley 工作记忆模型,我们可以用以下的 Mermaid 架构图来表示:
(核心控制单元/无存储功能)] -----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PS'
2.1.2 核心概念二:Agent Memory 的定义与分层架构
借鉴人类记忆的心理学模型(Atkinson-Shiffrin 多存储模型、Tulving 长期记忆分类模型、Baddeley 工作记忆模型),我们可以给出Agent Memory 的定义:
Agent Memory(智能体记忆) 是指 Agent 用于感知、编码、存储、组织、检索、激活、更新、维护、推理、抽象从环境(比如用户输入、API调用结果、文档内容、传感器数据)中获取的信息的一套结构化的、可扩展的、可交互的系统,其核心目标是弥补 LLM 上下文窗口有限和长期记忆缺失的问题,提升 Agent 的长期任务执行能力、上下文理解能力、个性化服务能力、知识积累能力和逻辑推理能力。
同时,我们可以构建Agent Memory 的分层架构——这个架构几乎是 Atkinson-Shiffrin 多存储模型和 Tulving 长期记忆分类模型的“数字版本”,但为了适应 Agent 的实际应用场景,我们对某些部分进行了调整和扩展:
(Sensory Memory Laye -----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PS'
接下来,我们详细介绍 Agent Memory 分层架构的每一层:
2.1.2.1 感官记忆层(Sensory Memory Layer)
Agent Memory 的感官记忆层,完全借鉴了人类记忆的感官记忆模型,是 Agent Memory 系统的第一个入口,用于暂时存储来自环境的原始、未经过滤的信息。
- 存储内容:
- 文本信息(比如用户输入的文字、API调用返回的文本、文档内容的原始文本);
- 语音信息(比如用户输入的语音、语音识别前的音频文件);
- 图像信息(比如用户上传的图片、摄像头采集的图像、API调用返回的图片);
- 视频信息(比如用户上传的视频、摄像头采集的视频、API调用返回的视频);
- 传感器数据(比如温度、湿度、位置、速度等数值型或文本型数据);
- 其他 Agent 输出的原始信息(比如文本、JSON、XML)。
- 存储容量:可以根据实际应用场景进行调整,通常设置为最近 100-1000 条原始信息;
- 存储时间:可以根据实际应用场景进行调整,通常设置为最近 1-24 小时;
- 编码方式:
- 文本信息:原始文本编码;
- 语音信息:原始音频编码(比如 WAV、MP3)或语音识别后的文本编码;
- 图像信息:原始图像编码(比如 JPG、PNG)或图像描述文本编码(比如使用 BLIP-2、GPT-4V、Claude 3 Opus 等多模态模型生成的图像描述);
- 视频信息:原始视频编码(比如 MP4、AVI)或视频关键帧提取+图像描述文本编码+语音识别文本编码;
- 传感器数据:原始数值/文本编码或结构化 JSON 编码;
- 其他 Agent 输出:原始文本/JSON/XML 编码。
- 信息流向:
- 经过「注意筛选模块」或「语义过滤模块」筛选的信息,会进入「短期工作记忆层」;
- 未被筛选的信息会在达到「存储时间上限」或「存储容量上限」时被自动删除(这个过程通常被称为「FIFO 修剪(First-In-First-Out Pruning)」);
- 作用:
- 为 Agent 提供一个“原始信息缓冲池”,让 Agent 有时间选择哪些信息需要进一步处理;
- 为“多模态信息融合”提供基础(比如将图像信息的图像描述文本和语音信息的语音识别文本融合成一个统一的文本信息);
- 常见实现工具:
- Redis(String、List、Stream 数据结构);
- Kafka(消息队列,用于存储高吞吐量的原始信息);
- 文件系统(用于存储原始的音频、图像、视频文件)。
2.1.2.2 短期工作记忆层(Short-Term Working Memory Layer)
Agent Memory 的短期工作记忆层,借鉴了 Atkinson-Shiffrin 多存储模型的短期工作记忆模型和 Baddeley 工作记忆模型,是 Agent Memory 系统的第二个入口,也是Agent 与 LLM 交互的核心桥梁,用于暂时存储当前正在处理的任务上下文、中间决策结果、重要的原始信息片段。
- 存储内容:
- 当前任务上下文:比如用户的当前问题、当前任务的目标、当前任务的约束条件、当前任务的已执行步骤;
- 中间决策结果:比如 Agent 调用 Tool 后的返回结果、Agent 对某个问题的初步分析结果、Agent 对某个记忆片段的初步检索结果;
- 重要的原始信息片段:比如从感官记忆层筛选出来的、与当前任务高度相关的用户输入、API调用结果、文档内容片段;
- 从长期记忆层检索出来的、与当前任务高度相关的记忆片段:比如与当前用户相关的历史对话记录(长期情节记忆)、与当前任务相关的通用知识(长期语义记忆)、与当前任务相关的操作流程(长期程序性记忆)。
- 存储容量:可以根据 LLM 的上下文窗口大小进行调整,通常设置为LLM 上下文窗口大小的 60%-80%(比如如果使用 GPT-3.5 Turbo 16K,那么短期工作记忆层的存储容量可以设置为 10K-13K Token)——这样做的目的是为了给 LLM 的「生成输出」留出足够的 Token 空间;
- 存储时间:可以根据实际应用场景进行调整,通常设置为当前任务的执行周期(比如如果当前任务是“找房”,那么存储时间可以设置为从用户开始提问到用户结束找房为止;如果当前任务是“多轮对话”,那么存储时间可以设置为最近 10-50 轮对话);
- 编码方式:
- 主要是结构化文本编码(比如 Markdown、JSON、XML),因为结构化文本更容易被 LLM 理解和处理;
- 其次是向量嵌入编码(比如使用 OpenAI text-embedding-3-small、智谱AI text-embedding-2、Cohere embed-v3.0 等向量嵌入模型生成的向量),用于快速检索短期工作记忆层中的信息片段;
- 信息流向:
- 经过「重要性评分模块」或「深度加工模块」处理的信息,会进入「长期记忆层」;
- 未被处理的信息会在达到「存储容量上限」或「存储时间上限」时被自动删除(常见的修剪策略有「FIFO 修剪」、「LRU 修剪(Least Recently Used Pruning)」、「重要性评分修剪」);
- 会将「当前任务上下文」、「中间决策结果」、「重要的原始信息片段」、「从长期记忆层检索出来的记忆片段」组合成一个「Prompt 模板」,输入到 LLM 的上下文窗口中;
- 核心功能(借鉴 Baddeley 工作记忆模型):
- 语音回路(数字版本):用于处理和暂时存储语音信息的文本化结果;
- 视觉空间模板(数字版本):用于处理和暂时存储图像/视频信息的文本化结果;
- 情景缓冲器(数字版本):用于暂时存储和整合来自语音回路、视觉空间模板、长期记忆层的信息,组合成 Prompt 模板;
- 中央执行系统(数字版本):用于分配注意力资源、协调各个子系统的工作、决定哪些信息需要进入长期记忆层、决定采用哪种记忆检索策略;
- 常见实现工具:
- Redis(Hash、Sorted Set、JSON 数据结构);
- LangChain Memory(ConversationBufferMemory、ConversationSummaryMemory、ConversationBufferWindowMemory、ConversationKGMemory 等);
- 自定义的内存数据结构(比如 Python 的 deque、list、dict)。
2.1.2.3 长期记忆层(Long-Term Memory Layer)
Agent Memory 的长期记忆层,完全借鉴了 Tulving 长期记忆分类模型,是 Agent Memory 系统的第三个入口,也是Agent 的“数字硬盘”或“数字图书馆”,用于永久或长期存储已经深度加工的、重要的信息。
- 存储内容:
- 长期情节记忆(Long-Term Episodic Memory):与个人(或 Agent)特定的时间、地点、情境相关的记忆——比如用户的历史对话记录、Agent 执行某个任务的完整过程、Agent 与其他 Agent 的交互记录;
- 长期语义记忆(Long-Term Semantic Memory):通用的、客观的知识记忆——比如企业知识库的内容、行业规则、产品说明书、用户画像的结构化信息;
- 长期程序性记忆(Long-Term Procedural Memory):技能、习惯、操作流程的记忆——比如 Agent 执行某个任务的标准操作流程(SOP)、Agent 的决策规则、Agent 的 Tool 调用策略;
- 存储容量:几乎是无限的,可以根据实际应用场景进行水平扩展;
- 存储时间:可以从几天到几十年甚至终身,可以根据实际应用场景设置「记忆过期时间(TTL, Time To Live)」;
- 编码方式:
- 长期情节记忆:
- 结构化文本编码(比如 Markdown、JSON、XML),包含「时间戳」、「用户/Agent ID」、「任务 ID」、「情境信息」、「内容」、「重要性评分」、「情感评分」等字段;
- 向量嵌入编码,用于语义检索;
- 图数据库编码(节点+关系+属性),用于存储情节记忆之间的关联关系(比如“用户 A 在 2023 年 10 月 1 日的对话中提到了‘找房’,在 2023 年 10 月 5 日的对话中又提到了‘找房’,并且两次找房的预算都是 1500 万以内”);
- 长期语义记忆:
- 非结构化文本编码(比如 PDF、Word、Markdown、HTML 的文本化结果);
- 向量嵌入编码,用于语义检索;
- 图数据库编码(节点+关系+属性),用于存储语义记忆之间的关联关系(比如“Python 是一种编程语言,Python 可以用来开发 AI 应用,AI 应用包括 RAG 系统和 Agent”);
- 结构化数据库编码(比如 MySQL、PostgreSQL、MongoDB),用于存储结构化的语义知识(比如用户画像的结构化信息:用户 ID、姓名、年龄、性别、职业、收入、兴趣爱好等);
- 长期程序性记忆:
- 结构化文本编码(比如 Markdown、JSON、XML、YAML),用于存储标准操作流程(SOP)、决策规则、Tool 调用策略;
- 代码编码(比如 Python、JavaScript),用于存储可直接执行的技能或操作流程;
- 向量嵌入编码,用于检索相关的操作流程或决策规则;
- 长期情节记忆:
- 信息流向:
- 当 Agent 需要使用长期记忆中的信息时,会通过「语义检索模块」、「图检索模块」或「混合检索模块」将其提取到「短期工作记忆层」中;
- 当 Agent 有新的「深度加工后的信息」或「抽象后的知识」时,会通过「记忆更新模块」或「记忆添加模块」将其存储到长期记忆层中;
- 会定期通过「记忆修剪模块」清理「不重要的、过时的、重复的记忆」;
- 会定期通过「记忆推理与抽象模块」从大量的情节记忆中抽象出语义记忆或程序性记忆;
- 常见实现工具:
- 向量数据库:ChromaDB(开源、轻量级、适合本地开发)、Weaviate(开源、企业级、支持多模态)、Pinecone(云服务、高性能、适合生产环境)、Milvus(开源、企业级、支持水平扩展)、Qdrant(开源、轻量级、高性能);
- 图数据库:Neo4j(开源、企业级、最流行)、JanusGraph(开源、分布式、支持多种存储后端)、ArangoDB(开源、多模型、支持图+文档+键值对)、NebulaGraph(开源、企业级、高性能、分布式);
- 结构化数据库:MySQL(开源、关系型、最流行)、PostgreSQL(开源、关系型、功能强大)、MongoDB(开源、文档型、适合存储非结构化或半结构化数据);
- LangChain Memory:ConversationSummaryBufferMemory、VectorStoreRetrieverMemory、ConversationKGMemory、ZepMemory(第三方 LangChain Memory 插件,企业级);
- 第三方记忆服务:Zep(开源、企业级、Agent 记忆平台)、LangSmith(LangChain 的云服务、包含记忆管理功能)、OpenAI Assistant API(内置记忆管理功能)。
2.1.3 核心概念三:Agent Memory 的核心要素组成
一个完整的 Agent Memory 系统,通常由以下八大核心要素组成:
| 核心要素 | 定义 | 主要功能 | 常见实现技术/工具 |
|---|---|---|---|
| 感知与编码模块(Perception & Encoding Module) | 负责从环境中获取原始信息,并将其转换成记忆的可存储格式 | 1. 从环境中获取原始信息(文本/语音/图像/视频/传感器数据); 2. 对原始信息进行预处理(比如文本清洗、语音识别、图像描述、视频关键帧提取); 3. 对预处理后的信息进行编码(比如结构化文本编码、向量嵌入编码、图数据库编码) |
文本预处理:NLTK、spaCy、jieba; 语音识别:OpenAI Whisper、百度语音识别、阿里语音识别; 图像描述:BLIP-2、GPT-4V、Claude 3 Opus; 视频处理:FFmpeg、OpenCV; 向量嵌入:OpenAI text-embedding-3-small、智谱AI text-embedding-2、Cohere embed-v3.0、Sentence-Transformers; 图数据库编码:Neo4j Cypher、ArangoDB AQL |
| 注意筛选模块(Attention Filtering Module) | 负责从感官记忆层中筛选出与当前任务或用户需求相关的信息 | 1. 分析当前任务或用户需求; 2. 计算感官记忆层中每条信息与当前任务或用户需求的「相关性评分」; 3. 根据「相关性评分」筛选出 Top N 条信息,送入短期工作记忆层 |
相关性评分:TF-IDF、BM25、余弦相似度(向量嵌入)、LLM 评分; 筛选策略:Top N 筛选、阈值筛选 |
| 存储与组织模块(Storage & Organization Module) | 负责按照不同的记忆类型或业务场景对记忆进行分层、分类存储 | 1. 分层存储(感官记忆层→短期工作记忆层→长期记忆层); 2. 分类存储(长期情节记忆→长期语义记忆→长期程序性记忆); 3. 索引构建(向量索引、全文索引、图索引、结构化索引) |
分层存储:Redis(感官/短期)+ ChromaDB/Pinecone(长期语义)+ Neo4j(长期情节/语义关联)+ MySQL(长期结构化); 索引构建:ChromaDB HNSW、Pinecone HNSW、Neo4j Schema Index、MySQL B+ Tree Index |
| 检索与激活模块(Retrieval & Activation Module) | 负责根据当前任务上下文从海量记忆中快速、准确地找到最相关的信息片段 | 1. 分析当前任务上下文; 2. 将当前任务上下文转换成查询向量或查询语句; 3. 采用合适的检索策略(语义检索、全文检索、图检索、混合检索)进行检索; 4. 对检索结果进行「重排序(Reranking)」; 5. 将重排序后的 Top N 条信息送入短期工作记忆层 |
语义检索:ChromaDB、Pinecone、Weaviate; 全文检索:Elasticsearch、OpenSearch、BM25; 图检索:Neo4j Cypher、ArangoDB AQL; 混合检索:LangChain Ensemble Retriever、Weaviate Hybrid Search; 重排序:Cohere Rerank、Cross-Encoder(Sentence-Transformers)、LLM Rerank |
| 更新与维护模块(Update & Maintenance Module) | 负责根据新的输入或中间决策结果实时更新或修正已有的记忆,同时定期清理不重要的、过时的、重复的记忆 | 1. 记忆添加; 2. 记忆更新; 3. 记忆删除; 4. 记忆修剪(FIFO、LRU、重要性评分、TTL); 5. 记忆去重 |
记忆添加/更新/删除:ChromaDB API、Pinecone API、Neo4j API、MySQL API; 记忆修剪:Redis TTL、自定义 Python 脚本; 记忆去重:余弦相似度(向量嵌入)、MinHash、SimHash |
| 重要性评分模块(Importance Scoring Module) | 负责计算每条记忆的「重要性评分」,用于决定哪些记忆需要进入长期记忆层、哪些记忆需要被优先检索、哪些记忆需要被修剪 | 1. 基于「内容语义」的重要性评分(比如是否包含核心约束条件、是否包含重要的决策结果); 2. 基于「用户反馈」的重要性评分(比如用户是否对该记忆的内容做出了正面或负面的反馈); 3. 基于「时间衰减」的重要性评分(比如最近的记忆重要性更高,随着时间的推移重要性逐渐降低); 4. 基于「使用频率」的重要性评分(比如使用频率越高的记忆重要性更高); 5. LLM 评分 |
内容语义评分:TF-IDF、关键词匹配、LLM 评分; 时间衰减评分:Importance(t)=Importance0×e−λtImportance(t) = Importance_0 \times e^{-\lambda t}Importance(t)=Importance0×e−λt(其中 Importance0Importance_0Importance0 是初始重要性评分,λ\lambdaλ 是时间衰减系数,ttt 是时间间隔); 使用频率评分:Importance(f)=log(f+1)Importance(f) = \log(f + 1)Importance(f)=log(f+1)(其中 fff 是使用频率); 综合评分:Importance=w1×Importancesemantic+w2×Importancefeedback+w3×Importancetime+w4×ImportancefrequencyImportance = w_1 \times Importance_{semantic} + w_2 \times Importance_{feedback} + w_3 \times Importance_{time} + w_4 \times Importance_{frequency}Importance=w1×Importancesemantic+w2×Importancefeedback+w3×Importancetime+w4×Importancefrequency(其中 w1+w2+w3+w4=1w_1 + w_2 + w_3 + w_4 = 1w1+w2+w3+w4=1) |
| 推理与抽象模块(Reasoning & Abstraction Module) | 负责利用已有的记忆片段进行逻辑推理、归纳总结、类比联想,生成新的知识型记忆或决策型记忆,同时从大量的情节记忆中抽象出语义记忆或程序性记忆 | 1. 逻辑推理(比如演绎推理、归纳推理、类比推理); 2. 归纳总结(比如从大量的历史对话记录中归纳总结出用户的兴趣爱好、消费习惯、性格特点等用户画像信息); 3. 类比联想(比如从“用户 A 喜欢买科幻小说”类比联想到“用户 A 可能也喜欢看科幻电影”); 4. 知识抽取(比如从非结构化的文档内容中抽取结构化的知识,存入长期语义记忆的图数据库中); 5. 流程抽象(比如从大量的“找房成功”的情节记忆中抽象出找房的标准操作流程(SOP),存入长期程序性记忆中) |
逻辑推理:LLM(Chain-of-Thought, Tree-of-Thought, Graph-of-Thought)、知识图谱推理(Neo4j Cypher、RDFox); 归纳总结:LLM、TextRank; 知识抽取:LLM、spaCy、NLTK、OpenIE、DeepKE; 流程抽象:LLM、Process Mining(PM4PY) |
| 中央控制模块(Central Control Module) | 是 Agent Memory 系统的「大脑」,负责协调各个核心要素的工作,与 Agent 的其他模块(比如 Agent 决策模块、Tool 调用模块、LLM 交互模块)进行交互 | 1. 协调感知与编码模块、注意筛选模块、存储与组织模块、检索与激活模块、更新与维护模块、重要性评分模块、推理与抽象模块的工作; |
更多推荐



所有评论(0)