【大模型上下文长度扩展】MedGPT:解决遗忘 + 永久记忆 + 无限上下文

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可以处理非常长的对话(无限上下文),同时记住用户的所有偏好和历史,使交流更加个性化和连贯。

 

子问题1:有限上下文窗口的限制

  • 背景: 现有语言模型因为上下文窗口大小有限,不能持续记住长对话中的所有信息。
  • 子解法1: 外部存储上下文窗口扩展
    • 特征: 使用外部存储来模拟无限上下文,让模型可以在需要时检索之前的对话内容。
    • 例子: 就像玩具箱,当你的房间(主记忆)满了,你就把一些玩具放到玩具箱里(外部记忆),需要时再拿出来。

在这里插入图片描述

  • 对话开始时,MemGPT(聊天机器人)和用户进行问候,并表现出对用户的兴趣,提到了F1赛车和帆船。

  • 用户回复,表达了他对速度、刺激和肾上腺素的热爱。

  • 系统随后发出警告,指出对话历史即将达到其最大长度并且将被修剪,提示MemGPT保存任何重要信息。

  • 为响应这一警告,MemGPT使用了一个命令 working_context.append(),将用户的个性特征——享受高速、肾上腺素激增活动如F1赛车和CSGO游戏——添加到了工作上下文中。

这是MemGPT的一种记忆保存机制,可以在对话历史被修剪之前,将用户提供的关键信息保存下来。

这段对话体现了MemGPT如何动态管理对话内容,以确保即使在达到记忆容量上限时,也不会丢失对未来对话可能重要的用户信息。

通过这样的管理,MemGPT保持了对话的连贯性,并能够在未来的交互中利用这些信息,提供更个性化和相关的响应。

 

子问题2:复杂文档处理的挑战

  • 背景: 当文档超出模型直接处理的长度时,模型难以理解整个文档内容。
  • 子解法2: 分页长文档记忆检索
    • 特征: 将长文档分成可管理的段落,逐段加载进行处理。
    • 例子: 如果有一本很厚的故事书,你可能一次只能读几页,MemGPT可以通过“翻页”来继续阅读整个故事。

在这里插入图片描述

这张图展示了MemGPT在对话中的应用,具体是如何把对话中的重要信息保存到工作上下文中。

  • 首先,MemGPT向用户Chad表示欢迎,并表现出对Chad的研究兴趣。这展示了MemGPT可以自然地开始对话,并表明了它对用户信息的兴趣。

  • 用户回复说他今天休息,并提到了他妈妈为他做了生日蛋糕,是他最喜欢的巧克力熔岩蛋糕。

  • 接下来,MemGPT使用命令working_context.append()将用户的生日(10月11日)和喜欢的蛋糕类型(由妈妈做的巧克力熔岩蛋糕)添加到它的工作上下文中。这是MemGPT记忆管理的一个例子,它能够抓住对话中的关键信息并保存下来。

  • 然后,MemGPT使用这些信息来继续对话,祝Chad生日快乐,并询问Chad的年龄,同时表达希望让当天的聊天成为Chad的美好记忆。

图中的描述说明了MemGPT如何有效地在没有系统记忆警告的情况下,积极记录并利用对话中的信息。

这种能力对于创建能够维持连续对话并在多次互动中保持个性化交流的聊天机器人至关重要。

通过这种方式,MemGPT能够记住对用户重要的日期和细节,这有助于在未来的对话中创建更有深度和连贯性的体验。

 

子问题3:长期记忆的维护

  • 背景: 对话代理在长时间的互动中需要保持信息的连贯性和个性化。
  • 子解法3: 动态记忆更新
    • 特征: 允许模型实时更新其记忆库,以包含新信息或修正旧信息。
    • 例子: 如果你告诉MemGPT你换了新工作,它会更新它的记忆,下次对话时会询问你的新工作情况。

在这里插入图片描述
这张图展示 MemGPT 如何更正并更新关于用户的信息,以维护对话的准确性和连贯性。

  • 首先,MemGPT问用户是否想聊关于恐怖电影的话题,并询问是否有最近看的电影给他留下了深刻印象。

  • 用户回答说他实际上并不喜欢恐怖电影,而是更喜欢浪漫喜剧。

  • 接着,MemGPT使用了一个命令 working_context.replace('I watch horror movies.','I like romantic comedies.') 来更正之前的信息。这意味着MemGPT在其工作上下文中替换了关于用户喜好的错误信息。

  • MemGPT随后用一条更新后的信息回应用户,不仅纠正了之前的错误,还询问用户是否有喜欢的浪漫喜剧电影,这表明MemGPT能够根据新的输入动态调整它的对话策略。

这个过程说明了MemGPT不仅能记忆用户提供的信息,还能在发现错误或更新的信息时进行自我修正。

这种能力对于创建能够与用户进行连续且个性化对话的聊天机器人是非常重要的。

通过这样的动态记忆更新,MemGPT能够维护对话的一致性,即使在长期的交互中也能保持个性化和相关性。

 

子问题4:即时信息检索的需求

  • 背景: 用户可能会询问与过去对话相关的问题,模型需要快速提供准确回答。
  • 子解法4: 快速信息检索
  • 会在放东西的地方做个标记,这样下次就能快速找到。
    • 特征: 模型能够迅速访问存储的信息,以回答用户的提问。
    • 例子: 类似于谷歌搜索,当用户问到之前的话题,比如之前提过的喜欢的书,MemGPT能快速找到那次对话的内容。

在这里插入图片描述
这张图是MemGPT中的“深度记忆检索任务”(Deep Memory Retrieval Task)的示例。

演示了如何使用MemGPT来回忆并检索与用户先前会话相关的信息。

具体来说:

  • 对话框显示用户问了一个问题,提到了之前的一个对话,询问:“你之前提到的你可能会喜欢的艺术家是谁?” 这表明用户希望MemGPT能记住他们以前讨论过的内容。

  • 在用户的对话框旁边,有一段描述,解释说用户正在回忆过去的对话,并且MemGPT将搜索其“回忆存储”以找到艺术家的名字。

  • 接下来,MemGPT使用命令search_recall_storage('music')来执行这一操作,这显示了MemGPT的能力,可以检索其存储的记忆以找到具体的信息。

  • 展示的搜索结果是先前对话的一部分,这些对话提到了Taylor Swift,表明这可能是用户想起的艺术家。

  • 最后,MemGPT确认了从对话历史中检索到的信息,并向用户确认艺术家是不是Taylor Swift。

即使某些信息不再处于当前上下文中,MemGPT也可以访问其记忆库中存储的过去对话,从而在必要时提供相关信息。

这种功能对于构建能够进行长期和深层次交互的对话代理至关重要,因为它使得代理能够记住用户的兴趣和历史,使对话更加个性化和连贯。

 
MemGPT通过外部存储扩展上下文窗口、分页长文档记忆检索、动态记忆更新和快速信息检索等多种方法,解决了传统语言模型在长对话和复杂任务处理中的限制。

这些方法的共同目标是使模型能够存储更多信息,更加智能地管理这些信息,并在需要时快速检索相关内容,从而使对话更加连贯和个性化。

 


MemGPT 结构图

在这里插入图片描述
将固定上下文的语言模型与包括主上下文、外部上下文和记忆管理功能的记忆系统整合在一起。

通过事件、解析、语言模型处理和功能执行的数据流动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/378165.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pytorch训练指标记录之tensoboard,wandb

详解Tensorboard及使用教程_tensorboard怎么用-CSDN博客文章浏览阅读5.1w次,点赞109次,收藏456次。目录一、什么是Tensorboard二、配置Tensorboard环境要求安装三、Tensorboard的使用使用各种add方法记录数据单条曲线(scalar)多条曲线(scalars)直方图(hi…

借助宁盾身份目录实现信创、Windows混合终端统一身份认证及网络准入控制

背景: 近期有基金、保险行业的IT负责人反馈,公司要求IT建设必须紧跟政策,在2024年内必须要上国产信创操作系统终端,个别应用如OA系统、虚拟化桌面、邮箱等都不能再继续用国外的产品了,要完成国产化替代指标。跟着国产…

【动态规划】【前缀和】【C++算法】LCP 57. 打地鼠

作者推荐 视频算法专题 本文涉及知识点 动态规划汇总 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LCP 57. 打地鼠 勇者面前有一个大小为3*3 的打地鼠游戏机,地鼠将随机出现在各个位置,moles[i] [t,x,y] 表…

踩坑实录(Third Day)

临近年关,同事们该回家的也都回家了,所以我对工作的欲望不是很强烈,所以就主要是自己学习了一下,在 B 站看看视频,自己敲代码,所以今天没遇到什么坑,但是可以分享一下之前踩到的两个坑。 此为第…

Flutter开发模仿百度云盘创建文件夹功能Draggable和DragTarget的混合使用

使用LongPressDraggable和DragTarget写了个类似于百度云盘管理文件和文件夹的功能(为了避免和列表的滑动手势冲突,所以采用LongPressDraggable而不是Draggable): 1、拖拽文件到文件夹中 2、拖拽两个文件可以合并成一个新的文件夹…

flask+pyinstaller实现mock接口,并打包到exe运行使用postman验证

flask代码 from flask import Flask, request, jsonifyapp Flask(__name__)app.route("/login", methods[POST]) def login():username request.json.get("username").strip() # 用户名password request.json.get("password").strip() # 密…

Git介绍和常用命令说明

目录 一、Git概述 1.1 Git是什么 1.2 Git有什么用 1.3 Git仓库介绍 二、Git下载与安装 三、Git代码托管服务(远程仓库) 四、Git常用命令 4.1 设置用户信息 4.2 获取Git仓库 4.2.1 本地初始化Git仓库 4.2.2 从远程仓库克隆 4.3 本地仓库操作 …

【Spring源码解读!底层原理进阶】【下】探寻Spring内部:BeanFactory和ApplicationContext实现原理揭秘✨

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:底层原理高级进阶》 &#x1f680…

Mongodb启动为Windows服务开机自启动

注意:mongodb的安装目录不应有中文,如果有,服务启动的路径会出现乱码,导致找不到对应的文件 1.安装好mongoDB 2.创建data目录,并在其中创建db目录和log目录 3.在log目录中创建mongodb.log文件 4.打开cmd(用…

创建本地yum源并安装tree命令(openEuler-20.03-LTS-SP3)

步骤 1:下载ISO镜像 首先,您需要从提供的URL下载ISO镜像文件: cd /opt wget https://mirrors.dotsrc.org/openeuler/openEuler-20.03-LTS-SP3/ISO/x86_64/openEuler-20.03-LTS-SP3-x86_64-dvd.iso步骤 2:挂载ISO镜像 接下来&am…

简易计算器的制作(函数指针数组的实践)

个人主页(找往期文章包括但不限于本期文章中不懂的知识点): 我要学编程(ಥ_ಥ)-CSDN博客 前期思路(菜单的制作等):利用C语言的分支循环少量的函数知识写一个猜数字的小游戏-CSDN博客 计算器的制作其实与游…

vuecli3 执行 npm run build 打包命令报错:TypeError: file.split is not a function

问题 今天有个项目在打包的时候遇到了一个问题,就是执行 npm run build 命令的时候报错了,如下: 解决 我排查了一下,模拟代码如下:在打包的时候用了 MinChunkSizePlugin const webpack require("webpack"…

2024阿里云GPU服务器租用价格表(包月/按小时/学生价)

阿里云GPU服务器租用价格表包括包年包月价格、一个小时收费以及学生GPU服务器租用费用,阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡,GPU云服务器gn6i可享受3折优惠,阿里云百科aliyunbaike.com分享阿里云GPU服务器…

Docker容器监控-CIG

目录 一、CIG说明 1. CAdvisor 2. InfluxDB 3. Grafana 二、环境搭建 1. 创建目录 2. 编写 docker-compose.yml 3. 检查并运行容器 三、进行测试 1. 查看 influxdb 存储服务 是否能正常访问 2. 查看 cAdvisor 收集服务能否正常访问 3. 查看 grafana 展现服务&#…

波纹扩散效果

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>波纹扩散</title><style>body {disp…

学习 Redis 基础数据结构,不讲虚的。

学习 Redis 基础数据结构&#xff0c;不讲虚的。 一个群友给我发消息&#xff0c;“该学的都学了&#xff0c;怎么就找不到心意的工作&#xff0c;太难了”。 很多在近期找过工作的同学一定都知道了&#xff0c;背诵八股文已经不是找工作的绝对王牌。企业最终要的是可以创造价…

DePIN+GameFi+顶级电竞团队,GAIMIN如何颠覆Web3游戏赛道

DePIN带动互联网进入去中心化时代 自从智能合约和去中心化应用DApp普及之后&#xff0c;越来越多的从业者开始将目光放在区块链对互联网的升级和改造之上&#xff0c;这里主要进行了三类&#xff0c;第一类是通过节点的去中心化来实现的&#xff0c;这样确保了基础设施的分散&a…

双指针专题2 数组元素的目标和

数组元素的目标和 C代码实现: #include<iostream> using namespace std; const int N1000000;int a[N],b[N]; int main(){int n,m,x;cin>>n>>m;cin>>x;for(int i0;i<n;i){cin>>a[i];}for(int j0;j<m;j){cin>>b[j];}for(int i0,jm-1…

Java利用阿里云OSS/本地存储实现文件上传功能

目录 1、简介 2、本地存储 3、阿里云OSS 3.1、准备 3.2、入门 3.3、项目实施 3.4、注意 4、图片删除 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和…

零基础学编程系列,从入门到精通,中文编程开发语言工具下载,编程构件容器件之控制面板构件用法

零基础学编程系列&#xff0c;从入门到精通&#xff0c;中文编程开发语言工具下载&#xff0c;编程构件容器件之控制面板构件用法 一、前言 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载…
最新文章