向量数据库真的能满足所有AI Agent的记忆需求吗?
向量数据库真的能满足所有AI Agent的记忆需求吗?
当AI Agent执行长期任务时,如何有效管理和存储它们的"记忆"?向量数据库真的能满足所有AI Agent的记忆需求吗?本文将深入探讨这一问题,并提出创新的解决方案。
Agentic AI系统简介
AI Agent是当前的热门话题。我们依靠LLM来处理任务分解,这就是与Gen AI的重叠之处。但遗憾的是,这也意味着当前Agentic AI的推理能力受限于大语言模型(LLM)。
以GPT4为例,其对以下提示词的任务分解在图 1 中有详细展示:“生成一项量身定制的电子邮件营销计划,目标是一个月内实现100万美元的销售目标。相关产品及其性能数据可在 [url] 查询。请接入CRM系统 [integration],获取客户姓名、电子邮件地址和人口统计详细信息。”
分解步骤为:(分析产品)—(确定目标群体)—(创建定制电子邮件营销活动)。
接下来,系统将监控执行过程和执行环境,并自主进行调整。在本案例中,Agent意识到无法达成销售目标,便自主增加了以下任务:(寻找替代产品)—(利用客户数据)—(进行A/B测试)。
值得一提的是,对于多数应用场景,与企业系统的集成(如本例的CRM系统)是不可或缺的。例如,可以参考Anthropic最近提出的模型上下文协议(MCP),该协议旨在将AI Agents与存储企业数据的外部系统相连接。
鉴于这类任务的长期运行性质,Agentic AI系统的内存管理显得尤为关键。一旦启动了初步的电子邮件营销活动后,Agents就需要对其进行为期一个月的监控。这就涉及到在任务间共享上下文以及在长时间内维持执行上下文的连续性。
目前的做法是利用向量数据库(Vector DBs)来外部存储Agents的记忆,确保数据项在需要时能够被访问。接下来,我们将深入探讨以下细节:
- 如何通过向量数据库管理AI Agents的记忆
- 以及相应的数据质量问题。
我们会发现,尽管向量数据库在处理会话记忆(如问答对(Q&A pairs))时足够用,但对于agentic任务来说,它们在管理以下额外记忆类型时显得力不从心:
- 语义记忆(通用知识)
- 情景记忆(个人体验)
- 程序记忆(技能与任务流程)
因此,我们强调需要采用其他形式(例如,知识图谱、有限状态机)来有效地对记忆存储进行管理。
利用向量数据库进行会话记忆管理
向量数据库(Vector DBs)是专为存储向量数据而设计,并能基于向量间的相似度来处理查询。这类数据库当前是存储和提取对话智能体所需数据(记忆)的核心工具。图 2 展示了如何利用向量数据库对对话智能体进行编码和记忆管理。
图 2:基于向量数据库的编码技术,用于LLMs(图片由作者提供)
这一过程涉及到选择一个编码器模型,该模型独立于主流程,负责将不同类型的原始数据(如文本、音频和视频)离线转换为向量。在编码空间中,相似的对话数据会被映射到彼此靠近的向量上。
例如,文本必须转换为数值向量才能被计算机处理,这一转换是通过分词器(Tokenizers)完成的。token可以是字节、字符、字符组合、单词甚至是完整的句子。目前,字节对编码(BPE)是最常用的分词方法,它将一对相邻的字节作为一个token。
选择合适的“token”至关重要,因为它不仅决定了神经网络能够捕捉的token间关系,还影响着训练该网络的计算复杂度。
这些编码后的数据存储在向量数据库中,在推理阶段,可以基于向量相似度,使用相同的编码器模型来检索这些数据。在对话过程中,对话智能体可以通过编码查询(query)内容并在向量数据库中搜索相关信息来访问长期记忆系统。随后,智能体会利用检索到的信息来回答用户的查询(query),这些信息是基于之前存储的数据。
向量数据库中的数据质量问题
尽管数据质量对AI的重要 性得到了普遍认同,但目前企业对数据质量的关注主要集中在对结构化数据 / SQL 数据的处理上。非结构化数据,如文本、图像、音频和视频,几乎占据了与企业生成式AI(Gen AI)使用场景相关的80%的数据,却往往被忽视。
本节我们将探讨:
对于存储在向量数据库中的非结构化数据,数据质量的标准是什么?特别是在检索增强生成(RAG)的应用场景中。
结合微调技术,RAG成为了将预训练的大语言模型(LLM)与企业数据相结合,增强其上下文相关性和同时在此过程减少幻觉产生的关键手段之一(见图 3 的Gen AI生命周期阶段)。
图 3:Gen AI生命周期阶段(图片由作者提供)
面对用户查询,RAG流程包括以下三个步骤(见图 4):
- 检索:将用户查询转换为向量形式的嵌入,以计算其与其他内容的相似度得分。
- 增强:利用从向量存储中检索到的最新搜索结果/上下文进行信息补充。
- 生成:通过将检索到的信息片段整合到提示词模板中,为LLM提供额外的上下文,从而生成针对查询的上下文响应。
我们首先来看看当前结构化数据 / SQL 数据世界中常见的数据质量维度:
- 准确性:数据反映现实情况的精确度如何?
- 完整性:数据是否存在缺失值或空值?
- 一致性:信息在不同位置存储时是否保持一致?
- 及时性:数据的时间戳反映了其新鲜程度。
接下来,我们将它们应用于非结构化数据领域/向量数据库——具体见下图 4。
图 4:RAG — 向量数据库中的数据质量问题(图片由作者提供)
在向量数据库领域,集合(collection)相当于SQL数据库中的表(table),每个集合项通常包含:唯一标识符(ID)、向量(实际数据,以浮点数数组形式存储)和元数据(例如,时间戳)。
准确性:指的是向量存储中数据的精确度。试想,如果AI基于错误信息撰写新闻,可能会产生虚假新闻而非有价值的内容。我们通过以下两个指标来衡量这一点:
- 正确性:涉及LLM响应的事实准确性,
- 基础性:涉及LLM响应与底层知识库(KB)的关系。
研究发现,即使模型响应是正确的,也可能缺乏适当的依据。
错误和不一致的向量:由于嵌入过程中的问题,一些向量可能受损、不完整,或者以错误的维度生成,这可能导致AI输出混乱或脱节。例如,如果AI基于音质参差不齐的录音生成音频,结果可能会显得不连贯。在文本生成中,数据中的语法或语气不一致可能导致内容生硬或脱节。
缺失数据的形式可以是缺失向量或元数据。例如,如果生成式AI从数据不完整的数据集中生成视觉设计,可能会产出带有缺失元素的设计。
及时性:如果为RAG pipeline中的提示词提供上下文向量的数据库中的文档已经过时,那么生成式AI系统可能会产生不相关的输出。例如,如果一个启用了生成式AI的聊天机器人基于过时的政策文件回答问题,就可能会提供不准确且具有误导性的答案。
Agentic Memory
尽管上述方法能够有效地将对话存储为问答对并实现检索,但它并不足以满足Agentic AI系统所需的其他记忆类型,这些记忆类型对于复制或改进人类行为至关重要,尤其是以下四种:
- 语义记忆(Semantic memory)——存储事实、概念、意义等通用知识。
- 情景记忆(Episodic memory)——记录与过去特定事件和情境相关的个人经历。
- 程序记忆(Procedural memory)——存储如驾驶汽车等运动技能,以及完成任务的相应程序步骤。
- 情感记忆(Emotional memory)——保存与个体经历相关的情感体验。
理解人类记忆
在本节中,我们首先探讨人类大脑如何处理短期记忆和长期记忆——如图 5 所示。
图 5:人类大脑的记忆管理(图片由作者提供)
记忆的形成始于感觉系统,来自外界的信息首先进入感觉记忆(sensory memory)。这一初始阶段以原始形式保存感觉信息,但持续时间极短,通常仅有几百毫秒。
随后,被我们注意到的信息会转移到短期记忆(STM)。短期记忆的容量有限,仅能保存大约7个信息块,且持续时间约为20到30秒。它是我们进行思考、解决问题和做出决策等有意识心理活动的场所。
信息要从短期记忆转移到长期记忆(LTM),需要经过编码过程,将其转化为更持久且具有意义的表征。编码通过多种机制实现(例如重复、精细加工,或与已有知识建立关联)。
成功编码后,信息会进入长期记忆。长期记忆的容量极大,能够存储信息长达数小时,甚至一生。
记忆的检索系统依赖于与上下文信息的关联。外部和内部的检索线索通过重现编码时的情境,帮助我们提取特定记忆。
- 回忆是指在没有外部线索的情况下,主动重建信息的过程。
- 再认则是指在多个选项中识别出之前遇到的信息。
- 此外,检索策略如促发(priming)、记忆技巧(mnemonic techniques)、分块(chunking)和复述(rehearsal),能够显著提升记忆的提取效率。
映射到Agentic记忆
基于我们对人类大脑的理解和AI Agents / 应用的要求,我们需要考虑以下记忆类型——如图 6 所示:
- 语义知识:来自外部(如Wikipedia)和内部系统(如Sharepoint、Confluence、文档、消息平台等)的信息。
- 情景记忆:特定过去事件和情境的记忆。这些内容是在AI Agents运行过程中获得的。
- 程序记忆:类似于人类记住游泳或开车等运动技能的方式。它涵盖了描述AI Agents如何实现特定任务的工作流和程序。
- 情感记忆:记录与个体经验相关的情感。涉及用户关系、偏好、反应和相关数据,使AI在用户交互中更具人性,并在用户互动中保持一致。
语义记忆可能是目前唯一在LLM中通过预训练和嵌入可实现的记忆类型——其他记忆类型仍在开发中。
在后续部分,我们将展示如何为Agentic AI系统实现一个全面的记忆管理模块——如图 6 所示。
图 6:Agentic AI记忆管理(图片由作者提供)
记忆路由器默认总是将请求路由到长期记忆 (LTM) 模块,以查看是否存在现有模式来响应给定的用户提示词。如果有,它就会检索并立即做出响应,根据需要进行个性化处理。
如果LTM失效,记忆路由器将其路由到短期记忆 (STM) 模块,该模块然后使用其检索过程(函数调用、API等)将相关上下文检索到STM(工作记忆)中,并充分利用适用的数据服务。
STM-LTM变换模块始终处于活动状态,并不断获取检索到的上下文,从中提取“recipes”(例如,参考可教学智能体和AutoGen中的“recipes”概念),并存储在语义层(通过向量数据库实现)。与此同时,它还在收集其他相关属性(例如,token数量、产生模型响应的成本、系统状态、执行的任务/生成的响应),并创建一个episode,然后将其存储在知识图谱中,其中底层过程存储在有限状态机(FSM)中。
Conclusion
总而言之,记忆管理对于长期运行的AI Agents的广泛应用至关重要。虽然向量数据库在处理对话式智能体时表现出色,但我们发现它们无法满足复杂Agentic AI任务多样化的记忆需求,尤其是情景记忆(episodic memory)和程序记忆(procedural memory)。
在这篇文章中,我们提出了一种Agentic记忆架构的初步设计方案,其中记忆路由器(memory router)负责在短期记忆模块(STM)和长期记忆模块(LTM)之间进行请求调度。我们的主要贡献是一个从STM到LTM的转换器模块,该模块能够将情景记忆抽象并存储在知识图谱(knowledge graphs)中,将程序记忆存储在有限状态机(FSMs)中。目前,我们正在积极优化Agentic AI系统中长期记忆(LTM)的存储和检索机制(包括探索其他形式的方法)。