无限上下文,多级内存管理!突破ChatGPT等大语言模型上下文限制

目前,ChatGPT、Llama 2、文心一言等主流大语言模型,因技术架构的问题上下文输入一直受到限制,即便是Claude 最多只支持10万token输入,这对于解读上百页报告、书籍、论文来说非常不方便。

为了解决这一难题,加州伯克利分校受操作系统的内存管理机制启发,提出了MemGPT。该模型的最大创新是模仿操作系统的多级内存管理机制,通过数据在不同的内存层级之间的传输,来打破大语言模型固定上下文的限定。

开源地址:https://github.com/cpacker/MemGPT

论文:https://arxiv.org/abs/2310.08560

在这里插入图片描述

MemGPT主要包含主上下文和外部上下文两大内存类型。主上下文相当于操作系统的主内存,是大语言模型可以直接访问的固定长度上下文窗口。

外部上下文则相当于磁盘存储,保存了主上下文之外的额外信息。MemGPT还提供了丰富的功能调用,允许大语言模型主动管理自己的内存而无需人工干预。

这些功能调用可以将信息在主上下文和外部上下文之间进行导入导出。大语言模型可以根据当前任务目标,自主决定何时移动上下文信息以更好利用有限的主上下文资源。

在这里插入图片描述

研究人员在多个测试环境中进行了评估,结果表明,MemGPT可以有效处理远超大语言模型上下文长度限制的文本内容,例如,MemGPT可以处理长度远超过GPT-3.5和GPT-4上下文限制的文档。

当取回的文档数增加时,固定上下文模型的性能受限于取回器的质量,而MemGPT可以通过调用分页机制取回更多文档,其问答准确率也获得提升。

在新提出的多步嵌套关键词提取任务中,MemGPT通过多次调用外部上下文,成功完成了需要跨文档进行多跳查询才能得出解的任务,而GPT-3.5和GPT-4的准确率在嵌套层数增加时急剧下降到0。

主上下文

MemGPT中的主上下文相当于操作系统中的“主内存”,是大语言模型可以直接访问的固定长度上下文窗口。研究人员将主上下文分为三个部分:

系统指令:这部分保存了MemGPT的基本控制逻辑,例如,函数调用模式等,长度固定且只读。

对话上下文:这是一个先入先出的队列,保存了最近的用户交互历史,只读且会在长度超限时裁剪前段对话。

工作上下文:这是一个读写临时存储,大语言模型可以通过功能调用自主向其中写入信息。

需要注意的是,这三个部分合起来,不能超过底层大语言模型的最大上下文长度。

外部上下文

外部上下文保存了主上下文之外的额外信息,相当于操作系统中的“磁盘存储”。外部上下文需要明确的函数调用才能将信息导入主上下文供模型访问,包括以下两种类型:

回溯存储:保存完整的历史事件信息,相当于对话上下文的无压缩版本。

归档存储:通用的读写数据库,可以作为主上下文的溢出空间保存额外信息。在对话应用中,归档存储可以保存有关用户或系统角色的事实、喜好等额外信息。

在这里插入图片描述

回溯存储允许检索特定时间段的历史交互。在文档分析中,归档存储可以支持更大的文档集搜索。

自主编辑与检索

MemGPT通过大语言模型产生的函数调用在内存层级之间主动移动数据,实现自主的编辑与检索。例如,可以自主决定何时在上下文之间移动信息,以适应当前任务目标,无需人工参与。

在这里插入图片描述

创新点在于系统指令中详细描述了内存体系结构和功能调用方法,指导大语言模型学习使用这些工具管理内存。

大语言模型可以根据反馈调整调用策略。同时,当主上下文空间不足时,系统会提醒大语言模型及时保存重要信息,引导其管理内存。

链式调用

在MemGPT中,各种外部事件会触发大语言模型进行推理,这包括用户消息、系统内存警告、用户交互事件等。

功能调用可以请求获取控制权,从而实现链式调用。例如,检索结果分页浏览时,连续调用可以将不同页面的数据收集到主上下文中。

在这里插入图片描述

而Yield调用则会暂停大语言模型,直到下一个外部事件触发才再启动推理。这种基于事件的控制流协调了内存管理、模型推理和用户交互之间的顺畅沟通。

解析器与优化

MemGPT使用解析器验证大语言模型生成的函数调用,检查参数等是否正确。调用后会将结果反馈给模型,这样可以学习调整策略,减少错误。

此外,MemGPT的系统指令可以进行实时更新,以便在不同任务上给模型加入定制化的内存管理指导,实现持续优化。

本文素材来源加州伯克利分校MemGPT论文,如有侵权请联系删除

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go基础——指针、结构体

1、指针 Go语言指针与C差不多,取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。 变量是一种使用方便的占位符,用于引用计算机内存地址。一个指针变量可以指向任何一个值的内存地址,它所指向的值的内存地址在 32 …

jenkins实践篇(2)—— 自动打tag的可回滚发布模式

大家好,我是蓝胖子,在上一篇我简单介绍了如何基于特定分支做自动编译和发布,在生产环境中,为了更加安全和快速回滚,我采取的是通过对代码打tag的方式来进行部署,下面我将详细介绍整个发布过程的逻辑。 发布…

IDEA远程调试代码

IDEA->RUN->Edit Configurations 端口随便选一个,选择调试模块,然后用IDEA生成的命令调试 java -agentlib:jdwptransportdt_socket,servery,suspendn,address*:8081 -jar backend-1.18.11.jar &

SteerMouse for mac Mac万能鼠标设置工具 功能介绍

鼠标可谓是用户们在使用电脑时候的必备外接设备呢!适合你自己的鼠标设置也绝对能够优化你的Mac使用体验!想要更好的Mac体验就试试用Steermouse Mac版吧。它通过软件来自由设置你的鼠标操作!在这款万能鼠标设置工具中,用户可以在偏…

MFC String类的初始化学习

之前写过CString的用法; VC CString 编程实例图解_bcbobo21cn, cstring-CSDN博客 下面单独看一下CString的各种初始化方式; void CTest2View::OnDraw(CDC* pDC) {CTest2Doc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for nati…

性能测试知多少---性能分析与调优的原理

最近一直纠结性能分析与调优如何下手,先从硬件开始,还是先从代码或数据库。从操作系统(CPU调度,内存管理,进程调度,磁盘I/O)、网络、协议(HTTP, TCP/IP )&…

Codeforces Round 882 (Div. 2)

目录 A. The Man who became a God 题目分析: B. Hamon Odyssey 题目分析: C. Vampiric Powers, anyone? 题目分析: A. The Man who became a God 题目分析: n个人分成k组,每一组的力量都是这样的,那么如果分成k组那么就会有k-1个力量不被统计…

Android 11 Framework 增加自定义API到系统中

基于 Android 11 源码 根据网上的教程, 自己先捣鼓一波: frameworks\base\services 创建 hzyd文件夹 Android.bp内容: android_library_import {name: "services.hzyd",aars: ["MobileSDK-release.aar"],sdk_version: "current", }修改 fra…

tmux工具

B站学习地址:tmux教程

【深度学习】pytorch——Tensor(张量)详解

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ pytorch——Tensor 简介创建Tensortorch.Tensor( )和torch.tensor( )的区别torch.Tensor( )torch.tensor( ) tensor可以是一个数(标量)、一维数组(向量)、二维数组&…

安全与HTTP协议:为何明文传输数据成为争议焦点?

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 ⭐ 专栏简介 📘 文章引言 一、H…

学习小结,学而时习之,坚持学习之,温顾学习之

学习python一个多月了,之前也有接触过,还花了不少钱报班,看了看入门的头两节课,就止步了。每一种编程语言的入门感觉都差不多,学到现在,我对python的基本数据类型还是没掌握好啊,每次列表字典怎…

2015年亚太杯APMCM数学建模大赛C题识别网络中的错误连接求解全过程文档及程序

2015年亚太杯APMCM数学建模大赛 C题 识别网络中的错误连接 原题再现 网络是描述真实系统结构的强大工具——社交网络描述人与人之间的关系,万维网描述网页之间的超链接关系。随着现代技术的发展,我们积累了越来越多的网络数据,但这些数据部…

最近面试者对接口测试的理解真把我给笑拥了~

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

Hadoop PseudoDistributed Mode 伪分布式

Hadoop PseudoDistributed Mode 伪分布式加粗样式 hadoop101hadoop102hadoop103192.168.171.101192.168.171.102192.168.171.103namenodesecondary namenoderecource managerdatanodedatanodedatanodenodemanagernodemanagernodemanagerjob historyjob logjob logjob log 1. …

从零开始的JSON库教程(一)

本文是学习github大佬miloyip而做的读书笔记,项目点此进入 目录 1、JSON是什么 2、搭建编译环境 3、头文件与API设计 4、JSON的语法子集 5、单元测试 6、宏的编写技巧 7、实现解析器 8、关于断言 1、JSON是什么 JSON(JavaScript Object Notati…

UI设计一定不能错过的4款常用工具

虽然设计审美很重要,但软件只是一种工具,但就像走楼梯和坐电梯到达顶层一样,电梯的效率显然更高,易于使用的设计工具也是如此。让我们了解一下UI设计的主流软件,以及如何选择合适的设计软件。 即时设计 软件介绍 即…

uniapp小程序九宫格抽奖

定义好奖品下标,计时器开始抽奖,请求接口,出现中奖奖品之后,获取中奖商品对应的奖品下标,再次计时器判断当前移动的小标是否为中奖商品的下标,并且是否转到3圈(防止转1圈就停止)&…

Mac -- zsh-最新全网超详细的个性化终端(Terminal)颜色及vim颜色配置(亲测可行)

转自 Mac -- zsh-最新全网超详细的个性化终端(Terminal)颜色及vim颜色配置(亲测可行)_mac zsh-CSDN博客 以下都是苹果 设置,这是简化版的,详细的看我引用的 个性化终端颜色背景设置 显示检查器 打开终端,鼠标在终端中,右击&…

【后端开发】手写一个简单的线程池

半同步半异步线程池 半同步半异步线程池分为三层: 同步服务层 —— 处理来自上层的任务请求,将它们加入到排队层中等待处理。 同步排队层 —— 实际上是一个“同步队列”,允许多线程添加/取出任务,并保证线程安全。 异步服务层…