智能体的记忆管理系统概述
为什么矢量数据库不足以管理智能体系统的内存?这是一个很实际的问题。

1. 智能体系统简介
智能体是当前的热门话题,这个领域已经不乏讨论。但说到具体细节,其实存在不少混淆。到底什么是智能体系统?它和生成式人工智能(Gen AI)或大型语言模型(LLM)智能体之间有什么本质区别?要厘清这个问题,可以先看一个实际营销场景下的功能与非功能要求,如图1所示。
给定一个用户任务,智能体平台的核心目标听起来很直接:找出能够执行该任务的智能体(或智能体组)。所以,第一个必需的组件是一个协调层,它能把任务拆解成子任务,再由一个协调引擎去调度相应的智能体执行。目前来看,整个过程依赖LLM进行任务拆解,这就是它和Gen AI重叠的地方。但不太走运的是,这也意味着当前的智能体系统决策水平,直接被LLM的推理能力所限制。
举个例子,用GPT4做一个任务拆解:
生成量身定制的电子邮件营销活动,在1个月内实现100万美元的销售额,适用的产品及其性能指标请参见 [url]。连接客户关系管理系统 [集成],获取客户姓名、电子邮件地址和人口统计详细信息。详见图1:(分析产品)-(确定目标受众)-(创建量身定制的电子邮件营销活动)。
在这个任务中,智能体需要持续监控执行情况与环境,并进行自主调整。比如说,它一旦发现自己无法完成销售目标,就会自主追加任务:(寻找替代产品)-(利用客户数据)-(进行A/B测试)。同样重要的一点是,绝大多数用例都需要和企业系统(比如刚才提到的CRM)集成。这里可以参考一下Anthropic提出的模型上下文协议(MCP),它能把智能体和外部系统里的企业数据连接起来。考虑到这类复杂任务的运行周期很长,内存管理就成了智能体系统的关键:初始邮件营销活动启动后,智能体还需要持续监控整整一个月。
这既需要在任务之间共享上下文,也需要长期保持执行上下文。
目前,常见的解决方案是用矢量数据库(Vector DBs)来外部存储智能体内存,在需要的时候再取出来用。后续我们会深入探讨:
- 用矢量数据库管理智能体内存
- 数据质量问题
但这里要说明的是:矢量数据库对智能体任务来说是不够的,因为它需要处理的记忆类型远不止这些:
- 语义记忆(常识)
- 外显记忆(个人经历)
- 程序记忆(技能和任务程序)
这些都需要其他形式——比如知识图谱、有限状态机——来更有效地管理。
2. 使用矢量数据库的对话式内存管理
矢量数据库的核心专长是存储矢量以及基于矢量相似性做查询。目前,它也是存储和检索对话智能体数据的主要手段。图2就是一个典型的例子,展示了基于矢量数据库的对话智能体如何进行编码和内存管理。
这首先涉及选择一个编码器模型。离线数据会单独编码成一个流程,把各种形式的原始数据(文本、音频、视频)转成向量。相似的原始对话数据项,在编码空间里会被映射到相邻的位置上。
比如,文本必须先转成数字向量,才能被计算机处理,这就需要使用标记符号转换器。标记可以是字节、字符、字符集、单词,甚至是完整的句子。字节对编码(BPE)是现在最常用的标记化方式,它把相邻的一对字节当作一个标记来处理。
选对“标记”非常关键,因为它既影响神经网络能够掌握的标记间关系,也影响训练网络的计算复杂度。
这些编码好的数据会保存在矢量数据库里。在推理时,可以用相同的编码器模型,基于矢量相似性做检索。聊天过程中,对话智能体可以主动选择通过编码查询长期记忆系统,在矢量数据库中搜索相关信息,然后根据这些信息生成回复。
2.1 矢量数据库的数据质量问题
所有人都同意数据质量对AI至关重要,但企业当前的数据质量计划基本都集中在结构化/SQL数据上。它们忽略了非结构化数据——文本、图像、音频、视频——而这些数据占了企业数据的近80%,也正好和Gen AI用例密切相关。所以这一节我们专门讨论:
对存储在矢量数据库里的非结构化数据来说,数据质量到底意味着什么?
RAG(检索增强生成)和微调是当前把预训练LLM“调整”到企业数据上、减少幻觉的主要机制之一,如图3的Gen AI生命周期所示。
给定用户查询后,RAG管道实际由三个阶段组成(图4):
- 检索:用户查询先被转成嵌入(矢量格式),然后和其他内容进行相似度比较(搜索)。
- 增强:从矢量存储中检索搜索结果/上下文,这个存储和底层文档库保持同步更新。
- 生成:把检索到的信息块作为提示模板的一部分,给LLM更多上下文,让它生成更准确、更符合语境的回复。
我们先看看结构化/SQL数据世界的常见数据质量维度:
- 准确性:数据在多大程度上反映了真实世界的情况?
- 完整性:是否存在缺失值、空值等问题?
- 一致性:相同信息在不同地方是否存储不一致?
- 及时性:数据的新鲜度(以时间戳形式体现)。
然后把这些维度映射到非结构化数据/矢量数据库的世界里(如图4):
在矢量数据库中,一个集合对应一个SQL表,每个集合项可以包括ID、矢量和元数据。
准确性
- 正确性:LLM回复的事实准确性。
- 基础性:LLM的回复和它的基础知识库之间的关联关系。
不正确
缺失数据
及时性
3. 智能体记忆
虽然上述方法对存储和检索以问答对形式存在的对话来说效果不错,但应对智能体系统需要的其他记忆类型时,它明显不够用,特别是当我们需要复制或改进人类执行的操作时:
- 语义记忆:包含事实、概念、含义等常识。
- 外显记忆:关于过去具体事件和情况的个人记忆。
- 程序记忆:运动技能(比如开车)以及完成任务的程序。
- 情感记忆:与经历相关的感受。
3.1 人类记忆的理解
想搞清楚这个问题,可以先了解人脑在短期和长期记忆方面的工作原理(图5)。
整个过程始于感官系统。环境中的信息首先进入
感官记忆
短时记忆(STM)
信息要从短时记忆转移到
长时记忆(LTM)
编码一般通过重复、阐述或与现有知识建立联系等机制实现。
编码成功之后,信息就进入长时记忆。长时记忆容量巨大,可以存储信息数小时甚至终生。
检索系统
- 回忆:在没有外部线索的情况下主动重建信息。
- 识别:从备选信息中辨认出以前遇到过的东西。
- 启动效应、助记技巧、信息分块和复述等检索策略,可以进一步加强检索过程。
3.2 与智能体记忆的映射
基于对人脑的理解和智能体/应用的实际需求,我们需要考虑以下内存类型(图6):
- 语义知识:来自外部系统(如维基百科)和内部系统(如Sharepoint、Confluence、文档、消息平台等)。
- 情节记忆:对过去具体事件和情况的记忆——这些洞察是在智能体运行过程中获得的。
- 程序记忆:相当于人类记忆游泳或开车这类运动技能的方式,具体指概述智能体如何完成特定任务的工作流程和程序。
- 情感记忆:记录与体验相关的情感,深入了解用户的关系、偏好、反应和数据,让人工智能在互动中更像人、更有温度。
目前来看,语义记忆可能是LLM中唯一能通过预训练和嵌入获取的记忆类型,其他记忆类型仍在研发中。
接下来展示如何为智能体系统实现一个综合的
内存管理模块
默认情况下,
记忆路由器
STM -> LTM 转换器模块始终处于活动状态,负责不断获取检索到的上下文,从中提取“配方”(可以参考AutoGen中的可教智能体和配方概念),然后存储在语义层中(通过矢量数据库实现)。与此同时,它还会收集其他相关的属性(如令牌数量、执行响应的成本、系统状态、执行的任务/生成的响应),一并存入语义层(同样通过矢量数据库实现)。
- 创建一段情节,然后存入知识图谱
- 底层程序存入有限状态机(FSM)
4. 结论
简单总结一下:内存管理对长期运行的智能体至关重要。矢量数据库对对话型智能体表现不错,但面对复杂智能体任务的多内存需求,尤其是情节记忆和程序记忆,它根本不够用。
在这篇文章中,我们抛出了一个智能体记忆架构的初稿,核心思路是在短时记忆(STM)和长时记忆(LTM)模块之间加一个记忆路由器来做请求分发。主要贡献在于提出了一个从STM到LTM的转换器模块,它能分别把情节性记忆和程序性记忆抽象出来,存入知识图谱和有限状态机(FSM)。目前团队正在全力优化智能体系统的LTM存储和检索能力,同时也正在探索其他形式化的方法。