
提升ai代理的长期记忆能力:实现智能任务管理的关键技术与应用
图. 代理AI 内存管理
1. 代理AI系统介绍
AI代理是当前的热门话题。我已经对此进行了写作,其他人也在讨论它们。然而,总的来说,这意味着关于什么是代理AI系统存在很多混淆。它们与生成AI(Gen AI)或大型语言模型(LLM)代理有何不同?
在本节中,我们试图通过强调代理AI系统在实施实际用例时的功能/非功能需求来澄清这一辩论——如图1所示。
图1:代理AI执行用例(作者提供的图像)
给定用户任务,代理平台的目标是识别能够执行该任务的代理(代理组)。因此,我们需要的第一个组件是一个编排层,能够将任务分解为子任务,并由编排引擎协调相应代理的执行。
截至目前,我们提示一个LLM进行任务分解。因此,这与生成AI存在重叠。不幸的是,这也意味着如今的代理AI受限于大型语言模型(LLMs)的推理能力。
例如,GPT4对以下提示的任务分解
Generate a tailored email campaign to achieve sales of USD 1 Million in 1 month, The applicable products and their performance metrics are available at [url]. Connect to CRM system [integration] for customer names, email addresses, and demographic details.
在图1中详细说明:(分析产品)—(识别目标受众)—(创建定制的电子邮件活动)。
然后,它监控执行/环境并自主适应。在这种情况下,代理意识到它无法达到销售目标,并自主地增加了任务:(寻找替代产品)—(利用客户数据)—(进行A/B测试)。
还需要提到的是,针对大多数用例,需要与企业系统(例如,在此案例中的CRM)集成。例如,请参考Anthropic最近提出的模型上下文协议(MCP),以将AI代理连接到企业数据所在的外部系统。
鉴于此类复杂任务的长期性质,内存管理对于代理AI系统至关重要。一旦初始电子邮件活动启动,代理需要监控该活动1个月。
这涉及任务之间的上下文共享以及在长时间内保持执行上下文。
当前的解决方案是使用向量数据库(Vector DBs)将代理内存外部存储——根据需要访问数据项。在后续部分中,我们深入探讨
- 如何使用向量数据库管理代理内存,
- 其对应的数据质量问题。
然后,我们展示向量数据库(虽然对对话记忆——问答对而言足够)对于代理任务而言是不够的,因为它们需要管理额外的内存类型:
- 语义记忆(一般知识),
- 事件记忆(个人经历),和
- 程序记忆(技能和任务程序);
并强调需要替代形式(例如,知识图谱,有限状态机)来有效管理这些。
2. 使用向量数据库的对话内存管理
向量数据库(DBs)专门设计用于存储向量并处理基于向量相似性的查询。它们目前是存储和检索与对话代理相对应的数据(内存)的主要媒介。基于向量数据库的编码/内存管理在图 2 中进行了说明。
图 2:基于向量数据库的大型语言模型编码(图片由作者提供)
这涉及选择一个编码器模型,该模型作为单独的过程执行离线数据编码,将文本、音频和视频等各种形式的原始数据转换为向量。相似的原始对话数据项被映射到编码空间中相互靠近的向量。
例如,文本需要转换为数值向量,以便计算机进行处理,这通过分词器完成。一个标记可以是字节、字符、一组字符、单词,甚至完整的句子。字节对编码(BPE)是今天最常用的分词器,它使用一对相邻的字节作为标记。
选择正确的“标记”是关键,因为它会影响神经网络能够掌握的标记间关系,以及训练该网络的计算复杂性。
这些编码数据保存在向量数据库中,然后可以在推理过程中使用相同的编码器模型根据向量相似性进行检索。在聊天期间,对话代理可以选择通过编码查询并在向量数据库中搜索相关信息来查询长期内存系统。检索到的信息随后用于根据存储的信息回答查询。
2.1 向量数据库的数据质量问题
虽然每个人都同意数据质量对AI的重要性,但目前企业的数据质量倡议主要集中在结构化/SQL数据上。它们没有考虑到非结构化数据,例如文本、图像、音频和视频,这些数据占企业数据的近80%,与生成AI的应用场景相关。因此,我们在本节中探讨以下问题:
对于存储在向量数据库中的非结构化数据,数据质量意味着什么?尤其是在检索增强生成(RAG)上下文中。
结合微调,RAG形成了“适应”预训练大型语言模型(LLM)与企业数据的主要机制之一,使其更具上下文性——在此过程中减少幻觉(如图3所示的生成AI生命周期阶段)。
图3:生成AI生命周期阶段(作者提供的图像)
给定用户查询,RAG管道实际上由以下三个阶段组成(图4):
- 检索:将用户查询转换为嵌入(向量格式),以比较其与其他内容的相似性评分(搜索)。
- 增强:使用从向量存储中检索的搜索结果/上下文,这些结果与底层文档库保持最新和同步。
- 生成:通过将检索到的片段作为提示模板的一部分来生成上下文化的响应,为LLM提供有关如何回答查询的额外上下文。
我们首先查看今天结构化/SQL数据世界中的常见数据质量维度:
- 准确性:数据与现实场景的吻合程度如何?
- 完整性:关于缺失值、空值等的数据。
- 一致性:相同的信息在不同地方以不同方式存储。
- 及时性:以时间戳的形式捕获数据的新鲜程度。
然后尝试将它们映射到非结构化数据世界/向量数据库中——如图4所示。
图4:RAG — 向量数据库数据质量问题(作者提供的图像)
在向量数据库世界中,一个集合对应于一个SQL表,每个集合项可以包括:ID、向量(实际数据,以浮点数数组的形式捕获)、元数据(例如,时间戳)。
准确性:在向量存储中捕获的数据。想象一下,一个AI基于不准确的信息撰写新闻文章——它可能最终生成错误的信息,而不是有价值的见解。我们依赖以下两个指标来捕获这一点:
- 正确性:指LLM响应的事实准确性,
- 可靠性:指LLM响应与其底层知识库之间的关系。
研究表明,响应可能是正确的,但仍然未正确基于事实。
不正确和/或不一致的向量:由于嵌入过程中的问题,一些向量可能会损坏、不完整,或以不同的维度生成。这可能导致混淆或不连贯的输出。例如,如果一个AI基于不同质量的录音生成音频,结果可能会明显不均匀。在文本生成中,数据中的不一致语法或语调可能导致内容尴尬或不连贯。
缺失的数据可能以缺失向量或元数据的形式存在。例如,一个生成AI从不完整数据集中生成视觉设计,可能会输出缺少特征的产品。
及时性:如果您向量存储中的文档,提供与RAG管道中的提示相关的上下文,已经过时,那么生成AI系统可能会产生不相关的输出。如果一个生成AI启用的聊天机器人回答与政策相关的问题,而其所依据的政策文档已经过时,它可能会对问题提供不准确和误导性的回答。
3. 代理内存
虽然上述方法在存储(和检索)对话作为问答对方面效果良好,但对于管理代理AI系统所需的其他内存类型以复制/改善人类所执行的行为来说是不够的,尤其是:
- 语义记忆 — 包含事实、概念、意义等的一般知识。
- 事件记忆 — 关于过去特定事件和情况的个人记忆。
- 程序记忆 — 驾驶汽车等运动技能,以及实现该任务的相应程序。
- 情感记忆 — 与经历相关的感受。
3.1 人类记忆理解
在这一部分,我们首先尝试理解人脑在短期和长期记忆方面的工作原理 — 如图5所示。
图5:人脑的内存管理(图片由作者提供)
这一切始于感官系统,环境中的信息进入我们的感官记忆。这个初始记忆阶段以原始形式保存感官信息,但仅持续短暂的时间,通常为几百毫秒。
从那里,我们关注的信息被转移到短期记忆(STM)。这个工作记忆的容量有限,能够保存大约7个信息块,持续约20至30秒。在这里,意识的心理过程如思考、解决问题和决策发生。
为了使信息从短期记忆转移到长期记忆(LTM),它需要经过编码,将其转化为更持久和有意义的表现形式。
编码通过重复、详细阐述或与现有知识建立关联等机制进行。
一旦成功编码,信息便进入长期记忆,长期记忆具有广泛的容量,可以存储信息的时间从几个小时到一生。
检索系统基于与上下文信息的关联进行操作。检索线索,无论是外部还是内部,帮助通过重建编码上下文来访问特定的记忆。
- 回忆涉及在没有外部线索的情况下主动重构信息。
- 识别涉及在替代选项中识别先前遇到的信息。
- 最后,检索策略如启动、记忆技巧、分块和复述,增强了检索过程。
3.2 映射到代理内存
基于我们对人脑的理解以及AI代理/应用的需求,我们需要考虑以下内存类型——如图6所示:
- 语义知识:来自外部(例如维基百科)和内部系统(例如Sharepoint、Confluence、文档、消息平台等)的信息。
- 事件记忆:特定过去事件和情况的记忆。这些洞察是在AI代理操作过程中获得的。
- 程序性记忆:可与人类记忆游泳或驾驶汽车等运动技能相比较。它包括工作流程和程序,概述了AI代理如何完成特定任务。
- 情感记忆:记录与体验相关的情感。它深入探讨用户关系、偏好、反应以及使AI在用户交互中更具人性化和一致性的数据。
语义记忆可能是今天在大型语言模型中通过预训练和嵌入可用的唯一类型的记忆——其他类型的记忆仍在开发中。
接下来,我们将展示如何为代理AI系统实现一个全面的内存管理模块——如图6所示。
图6:代理AI内存管理(作者提供的图像)
内存路由器始终默认路由到长期内存(LTM)模块,以查看是否存在现有模式来响应给定的用户提示。如果是,它会检索并立即响应,并根据需要进行个性化处理。
如果LTM失败,内存路由器将其路由到短期内存(STM)模块,STM模块然后使用其检索过程(函数调用、API等)将相关上下文引入STM(工作内存)——利用适用的数据服务。
STM-LTM转换模块始终处于活动状态,不断获取检索的上下文并从中提取配方(例如,参见AutoGen中的可教代理和配方的概念),并存储在语义层中(通过向量数据库实现)。同时,它还收集其他相关属性(例如,标记数量、执行响应的成本、系统状态、执行的任务/生成的响应)并
- 创建一个情节,然后将其存储在知识图谱中
- 其底层程序存储在**有限状态机(FSM)**中。
4. 结论
总的来说,内存管理对于长期运行的AI代理的采用至关重要。虽然向量数据库对于对话代理的性能相当出色,但我们展示了它们对于复杂的代理AI任务的多样化内存需求是不够的,尤其是情节记忆和程序记忆。
我们在本文中提出了一个代理内存架构的初步草案,采用内存路由器在STM和LTM模块之间路由请求。关键贡献是提出了一个STM到LTM的转换模块,能够在知识图谱和有限状态机中抽象和存储情节记忆和程序记忆。我们正在积极致力于优化代理AI系统的LTM存储和检索(包括探索其他形式化方法)。