MedGPT:解决遗忘 + 永久记忆 + 无限上下文
- 问题:如何提升语言模型在长对话中的记忆和处理能力?
- 子问题1:有限上下文窗口的限制
- 子问题2:复杂文档处理的挑战
- 子问题3:长期记忆的维护
- 子问题4:即时信息检索的需求
- MemGPT 结构图
论文:https://arxiv.org/abs/2310.08560
代码:https://github.com/cpacker/MemGPT#loading-local-files-into-archival-memory
MemGPT是为了解决“信息处理和记忆管理”的问题类别提出的。
具体问题是,在长期对话或处理大量文档时,传统聊天机器人无法记住所有信息,需要一种系统来扩展其记忆和处理能力。
是模仿了计算机操作系统中的内存管理,通过“分页”技术来扩展其记忆能力。
当机器人需要回忆旧信息时,它可以从外部记忆中提取这些信息,就像人们从书架上取下一本旧书一样。
这使得MemGPT可以处理非常长的对话(无限上下文),同时记住用户的所有偏好和历史,使交流更加个性化和连贯。
对话开始时,MemGPT(聊天机器人)和用户进行问候,并表现出对用户的兴趣,提到了F1赛车和帆船。
用户回复,表达了他对速度、刺激和肾上腺素的热爱。
系统随后发出警告,指出对话历史即将达到其最大长度并且将被修剪,提示MemGPT保存任何重要信息。
为响应这一警告,MemGPT使用了一个命令 working_context.append()
,将用户的个性特征——享受高速、肾上腺素激增活动如F1赛车和CSGO游戏——添加到了工作上下文中。
这是MemGPT的一种记忆保存机制,可以在对话历史被修剪之前,将用户提供的关键信息保存下来。
这段对话体现了MemGPT如何动态管理对话内容,以确保即使在达到记忆容量上限时,也不会丢失对未来对话可能重要的用户信息。
通过这样的管理,MemGPT保持了对话的连贯性,并能够在未来的交互中利用这些信息,提供更个性化和相关的响应。
这张图展示了MemGPT在对话中的应用,具体是如何把对话中的重要信息保存到工作上下文中。
首先,MemGPT向用户Chad表示欢迎,并表现出对Chad的研究兴趣。这展示了MemGPT可以自然地开始对话,并表明了它对用户信息的兴趣。
用户回复说他今天休息,并提到了他妈妈为他做了生日蛋糕,是他最喜欢的巧克力熔岩蛋糕。
接下来,MemGPT使用命令working_context.append()
将用户的生日(10月11日)和喜欢的蛋糕类型(由妈妈做的巧克力熔岩蛋糕)添加到它的工作上下文中。这是MemGPT记忆管理的一个例子,它能够抓住对话中的关键信息并保存下来。
然后,MemGPT使用这些信息来继续对话,祝Chad生日快乐,并询问Chad的年龄,同时表达希望让当天的聊天成为Chad的美好记忆。
图中的描述说明了MemGPT如何有效地在没有系统记忆警告的情况下,积极记录并利用对话中的信息。
这种能力对于创建能够维持连续对话并在多次互动中保持个性化交流的聊天机器人至关重要。
通过这种方式,MemGPT能够记住对用户重要的日期和细节,这有助于在未来的对话中创建更有深度和连贯性的体验。
这张图展示 MemGPT 如何更正并更新关于用户的信息,以维护对话的准确性和连贯性。
首先,MemGPT问用户是否想聊关于恐怖电影的话题,并询问是否有最近看的电影给他留下了深刻印象。
用户回答说他实际上并不喜欢恐怖电影,而是更喜欢浪漫喜剧。
接着,MemGPT使用了一个命令 working_context.replace('I watch horror movies.','I like romantic comedies.')
来更正之前的信息。这意味着MemGPT在其工作上下文中替换了关于用户喜好的错误信息。
MemGPT随后用一条更新后的信息回应用户,不仅纠正了之前的错误,还询问用户是否有喜欢的浪漫喜剧电影,这表明MemGPT能够根据新的输入动态调整它的对话策略。
这个过程说明了MemGPT不仅能记忆用户提供的信息,还能在发现错误或更新的信息时进行自我修正。
这种能力对于创建能够与用户进行连续且个性化对话的聊天机器人是非常重要的。
通过这样的动态记忆更新,MemGPT能够维护对话的一致性,即使在长期的交互中也能保持个性化和相关性。
这张图是MemGPT中的“深度记忆检索任务”(Deep Memory Retrieval Task)的示例。
演示了如何使用MemGPT来回忆并检索与用户先前会话相关的信息。
具体来说:
对话框显示用户问了一个问题,提到了之前的一个对话,询问:“你之前提到的你可能会喜欢的艺术家是谁?” 这表明用户希望MemGPT能记住他们以前讨论过的内容。
在用户的对话框旁边,有一段描述,解释说用户正在回忆过去的对话,并且MemGPT将搜索其“回忆存储”以找到艺术家的名字。
接下来,MemGPT使用命令search_recall_storage('music')
来执行这一操作,这显示了MemGPT的能力,可以检索其存储的记忆以找到具体的信息。
展示的搜索结果是先前对话的一部分,这些对话提到了Taylor Swift,表明这可能是用户想起的艺术家。
最后,MemGPT确认了从对话历史中检索到的信息,并向用户确认艺术家是不是Taylor Swift。
即使某些信息不再处于当前上下文中,MemGPT也可以访问其记忆库中存储的过去对话,从而在必要时提供相关信息。
这种功能对于构建能够进行长期和深层次交互的对话代理至关重要,因为它使得代理能够记住用户的兴趣和历史,使对话更加个性化和连贯。
MemGPT通过外部存储扩展上下文窗口、分页长文档记忆检索、动态记忆更新和快速信息检索等多种方法,解决了传统语言模型在长对话和复杂任务处理中的限制。
这些方法的共同目标是使模型能够存储更多信息,更加智能地管理这些信息,并在需要时快速检索相关内容,从而使对话更加连贯和个性化。
将固定上下文的语言模型与包括主上下文、外部上下文和记忆管理功能的记忆系统整合在一起。
通过事件、解析、语言模型处理和功能执行的数据流动。