为何矢量数据库不足以管理Agent AI 系统的内存?
为何矢量数据库不足以管理智能AgentAI系统的内存?
📖阅读时长:10分钟
🕙发布时间:2025-01-13
近日热文:全网最全的神经网络数学原理(代码和公式)直观解释
欢迎关注知乎和公众号的专栏内容
LLM架构专栏
知乎LLM专栏
知乎【柏企】
公众号【柏企科技说】【柏企阅文】
一、智能AgentAI系统简介
当下,AI Agent备受关注,人们对智能AgentAI系统仍存在诸多困惑。究竟什么是智能AgentAI系统?它们与生成式AI(Gen AI)或大型语言模型(LLM)Agent又有何不同?
在本节中,我们将通过强调智能AgentAI系统在实施实际营销用例时的功能及非功能需求,来尝试厘清这一争议,具体内容如图2所示。
给定一个用户任务,Agent平台的目标在于识别出能够执行该任务的Agent(或Agent组)。因此,我们所需的第一个组件便是编排层,它能够将任务分解为子任务,并由编排引擎协调相应Agent的执行。目前,我们借助大语言模型(LLM)进行任务分解,这也是与生成式AI的重叠之处。但遗憾的是,这也意味着当下的智能AgentAI系统受到大语言模型推理能力的限制。
例如,对于“生成量身定制的电子邮件活动,在1个月内实现100万美元的销售额,适用的产品及其绩效指标可在[url]上找到。连接到CRM系统[integration]以获取客户姓名、电子邮件地址和人口统计详细信息”这一提示,GPT4的任务分解情况详见图2:(分析产品)—(确定目标受众)—(创建量身定制的电子邮件活动)。随后,Agent会对执行过程和环境进行监控,并根据实际需求自主做出调整。在此案例中,Agent意识到无法达成销售目标,便自主添加了以下任务:(查找替代产品)—(利用客户数据)—(进行A/B测试) 。
同样值得一提的是,大多数用例都需要与企业系统进行集成(如本案例中的CRM系统)。例如,Anthropic最近提出的模型上下文协议(MCP),可将AIAgent连接到存储企业数据的外部系统。鉴于此类复杂任务具有长期运行的特性,内存管理对于智能AgentAI系统至关重要。在启动初始电子邮件活动后,Agent需要对该活动进行为期1个月的监控。这既涉及任务之间的上下文共享,也需要长期维护执行上下文。
目前的解决方案是使用矢量数据库(Vector DB)在外部存储Agent内存,以便根据需求访问数据项。接下来,我们将深入探讨如何使用Vector DB管理Agent内存,以及其相应的数据质量问题。我们将证明,尽管矢量数据库对于对话内存(问答对)而言已足够,但鉴于Agent任务需要管理额外的内存类型,矢量数据库对于这些任务是不足的,这些额外的内存类型包括语义记忆(常识)、情景记忆(个人经历)、程序记忆(技能和任务程序)、情感记忆(与经历相关的感受)。同时,我们也将强调需要采用替代形式(如知识图谱、有限状态机)来有效地管理这些内存。
二、使用Vector DB的对话内存管理
矢量数据库(DB)专门用于存储向量,并基于向量相似性处理查询。目前,它们是存储和检索与对话Agent对应的数据(内存)的主要媒介。图3展示了用于对话Agent的基于向量数据库的编码/内存管理方式。
这一过程涉及选择一个编码器模型,该模型将离线数据编码作为一个单独的过程,将各种形式的原始数据,如文本、音频和视频,转换为向量。类似的原始对话数据项会被映射到编码空间中位置相近的向量。例如,文本需要转换为数字向量才能被计算机处理,这一过程通过分词器(Tokenizer)完成。一个分词可以是一个字节、字符、字符集、单词,甚至是完整的句子。字节对编码(BPE)是当今最常见的分词器,它将一对相邻字节作为一个分词。选择合适的“分词”至关重要,因为这会影响神经网络能够掌握的分词间关系,以及训练该网络的计算复杂度。
此编码数据被保存在Vector DB中,随后在推理过程中,可使用基于向量相似性的相同编码器模型进行检索。在聊天过程中,对话Agent可以通过对查询进行编码,并在向量数据库中搜索相关信息,从而查询长期记忆系统。检索到的信息会基于存储的内容用于回答查询。
(一)矢量数据库的数据质量问题
尽管每个人都认可数据质量对人工智能的重要性,但目前企业的数据质量举措大多集中在结构化/SQL数据上,并未考虑非结构化数据,如文本、图像、音频和视频,而这些非结构化数据几乎占与Gen AI用例相关的企业数据的80%。因此,在本节中我们将探讨这个问题:对于存储在向量数据库中的非结构化数据,数据质量意味着什么?特别是在检索增强生成(RAG)的背景下。
与微调一起,RAG构成了使用企业数据“调整”预训练LLM的主要机制之一,使其更贴合上下文,减少过程中的幻觉(如图4所示的Gen AI生命周期阶段)。给定一个用户查询,RAG管道实际上由以下3个阶段组成(图5):
- 检索:将用户查询转换为嵌入(矢量格式),以将其相似度分数(搜索)与其他内容进行比较。
- 增强:利用从矢量存储中检索到的搜索结果/上下文,该矢量存储与底层文档存储库保持最新且同步。
- 生成:通过将检索到的块作为提示模板的一部分,生成贴合上下文的回复,该提示模板为LLM提供有关如何回答查询的额外上下文。
我们首先来看当今结构化/SQL数据世界中常见的数据质量维度:
- 准确性:数据与现实场景的接近程度如何?
- 完整性:关于缺失值、空值等的数据完整性。
- 一致性:相同的信息在不同的地方存储方式不同。
- 及时性:以时间戳形式捕获的数据的新鲜度。
然后我们尝试将这些维度映射到非结构化数据世界/Vector DBs,如图5所示。在Vector DB世界中,一个集合对应一个SQL表,每个集合项可由以下部分组成:ID、向量(实际数据,以浮点数数组形式捕获)、元数据(如产品类别、时间戳)。
在矢量存储中捕获的数据准确性至关重要。设想一个AI基于不准确的信息撰写新闻文章,最终可能产生错误信息,而非有价值的见解。我们依靠以下两个指标来衡量这一点:
- 正确性:指LLM回复的事实准确性。
- 接地性:指LLM的回复与其底层知识库之间的关系。研究表明,回复可能正确,但接地性不佳。
由于嵌入过程中可能出现问题,一些向量可能会损坏、不完整,或者生成的维度不同,从而导致不正确和/或不一致的向量。这可能会导致输出混乱或脱节。例如,如果AI根据质量参差不齐的录音生成音频,结果可能会明显不均衡。在文本生成中,数据中不一致的语法或语气可能导致内容生硬或脱节。
缺失的数据可以是缺失向量或元数据的形式。例如,从不完整的数据集生成视觉设计的GenAI可能会输出缺少某些特征的产品。
如果矢量存储中为RAG管道中的提示提供相关上下文的文档过时,GenAI系统可能会产生不相关的输出。例如,启用GenAI的聊天机器人如果依据过时的政策文档回答与政策相关的问题,可能会提供不准确且具有误导性的回复。
三、智能Agent内存
虽然上述方法对于将对话存储(和检索)为问答对效果良好,但对于管理智能AgentAI系统复制/改进人类执行的操作所需的其他内存类型来说是不够的,尤其是以下几种:
- 语义记忆:包含事实、概念、含义等的一般知识。
- 情景记忆:关于过去特定事件和情况的个人记忆。
- 程序记忆:如驾驶汽车等运动技能,以及完成任务的相应程序。
- 情感记忆:与经历相关的感觉。
(一)人类记忆理解
在本节中,我们首先尝试了解人脑在短期和长期记忆方面的工作机制,如图6所示。
一切始于感觉系统,来自环境的信息进入我们的感官记忆。这个初始记忆阶段以原始形式保存感官信息,但持续时间极短,通常仅几百毫秒。随后,我们关注的信息会被转移到短期记忆(STM)。短期记忆的容量有限,大约能容纳7个信息块,持续时间约20 - 30秒。这里是思考、解决问题和决策等有意识心理过程发生的地方。
要使信息从短期记忆转移到长期记忆(LTM),需要经过编码过程,将其转化为更持久、更有意义的表示形式。编码通过重复、细化或与现有知识建立关联等机制实现。信息成功编码后,便进入长期记忆。长期记忆容量巨大,可以长时间存储信息,从数小时到终生不等。
检索系统基于与上下文信息的关联进行运作。外部和内部的检索线索通过重现编码上下文,帮助访问特定记忆。回忆是在没有外部线索的情况下主动重建信息;识别则是在多个选项中识别先前遇到过的信息。最后,启动、助记技术、分块和复述等检索策略可以增强检索过程。
(二)映射到智能Agent内存
基于我们对人脑的理解以及AIAgent/应用程序的需求,我们需要考虑以下几种内存类型,如图7所示:
- 语义知识:来源于外部(如维基百科)和内部系统(如Sharepoint、Confluence、文档、消息传递平台等)的信息。
- 情景记忆:关于特定过去事件和情况的记忆。这些见解是AIAgent在运行过程中获得的。
- 程序记忆:类似于人类记住游泳或驾驶汽车等运动技能的方式。它包括概述AIAgent如何完成特定任务的工作流程和程序。
- 情感记忆:对与经历相关的感受进行分类。它深入研究用户关系、偏好、反应和数据,使AI在用户交互中更具人性化且更契合。
语义记忆可能是目前通过预训练和嵌入在LLM中可用的唯一记忆类型,其他记忆类型仍在开发中。在后续内容中,我们将展示如何为智能AgentAI系统实现一个全面的内存管理模块,如图7所示。(在本节中,我们仅关注内存方面。如需深入了解其他组件,请参考我之前关于有状态和负责任的AIAgent的文章。)
默认情况下,内存路由器总是将请求路由到长期内存(LTM)模块,查看是否存在现有模式以响应给定的用户提示。如果有,它会检索并立即响应,并根据需要进行个性化设置。如果LTM无法响应,内存路由器会将请求路由到短期内存(STM)模块。STM模块随后会使用其检索过程(函数调用、API等),借助适用的数据服务,将相关上下文导入STM(工作内存)。
STM - LTM转换器模块始终处于活动状态,不断检索上下文并从中提取方案(例如,参考AutoGen中可教Agent和方案的概念),并存储在语义层(通过Vector DB实现)。同时,它还会收集其他相关属性(例如,令牌数量、执行响应的成本、系统状态、执行的任务/生成的响应),创建一个事件记录,然后将其存储在知识图谱中,而底层过程则存储在有限状态机(FSM)中。
四、结论
总之,内存管理对于长时间运行的AIAgent的应用至关重要。虽然矢量数据库对于对话Agent性能良好,但我们已表明,它们不足以满足复杂智能AgentAI任务的多样化内存需求,尤其是情景记忆和程序记忆。
在本文中,我们提出了智能Agent内存架构的初稿,其中内存路由器在STM和LTM模块之间路由请求。关键的贡献在于提出了STM - LTM转换器模块,该模块能够分别在知识图谱和FSM中抽象和存储情景记忆和程序记忆。我们正在积极致力于优化智能AgentAI系统长期内存(LTM)的存储和检索(包括探索其他形式)。
本文由mdnice多平台发布
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)