给大模型无限上下文
Key Takeaway
- 上下文长度是大模型应用的关键限制,提升其难度高。
- MemGPT将大模型视为操作系统,通过分级内存管理(Main Context + External Context)来解决上下文限制问题。
- Main Context包含系统指令、对话上下文和工作上下文,External Context包含事件记忆和事实记录。
- MemGPT能够自主进行上下文信息的检索和编辑,并具备“觉知”能力。
- MemGPT支持多种后端模型,并可与AutoGen等Agent系统整合,对Multi-Agent System有重要意义。
Full Content
上下文长度是大模型要跨过的第一道槛。
长度太短,就无法开启很多领域的应用,比如医疗GPT。想象一下,医患20轮对话之后,医生就不记得病人的基本情况了,这怎么搞?
所以,上下文长度约等于大模型的内存,是衡量大模型能力的基本指标之一。
但是要提升大模型的上下文长度,难度很高。
一是训练方面。需要更高的算力和显存,还需要更多的长序列数据。
二是推理方面。Transformer模型的自注意力机制(Self-Attention)要求对序列中的每个元素去计算它与其它元素的相关性。这种机制天然决定了上下文长度不可能太长。于是大家又提出了一系列处理长序列的解决方案,这是另一个超大话题,此处不展开。
MemGPT找到了一个天才解法。
LLM = OS
大模型是什么?
MemGPT认为,大模型本质上就是操作系统。所以,上下文就是内存,上下文长度管理就是内存管理。
操作系统是怎么管理内存的?
等级制。CPU缓存(L1、L2和L3)离核心最近,速度最快,但容量最小。按这个逻辑往外推,其次是内存,最后是硬盘。
根据需要,操作系统会在这三个层级之间调配数据:最着急用的,放CPU缓存;暂时用不着的,放硬盘。
既然大模型是操作系统,那采用相同的内存管理方法,没毛病。
MemGPT就是这么干的。
Main Context + External Context
这是MemGPT的运行逻辑:
当有事件发生时,事件信息通过解析器(Parser)进入虚拟“内存”(Virtual Context)。
大模型作为处理器(Processor),对内存中的数据进行调用、确认,然后再通过解析器输出,变成一个行为。
关键点就在Virtual Context上。它分为两个部分:
一、Main Context:就是有原本有长度限制的上下文。Main Context由三部分组成:
- System Instructions,系统指令。简单理解就是每次我们在system message里写的“you are a helpful assistant”。这部分只读,并且每次都会被调用,因为它是底层设定。
- Conversational Context,对话上下文。采用“先进先出”(FIFO)规则——超过一定长度后,最旧的对话会被抛弃。
- Working Context,工作上下文。简单理解就是大模型的笔记本,上边记录着当前的注意事项。
下图就充分说明了Working Context是怎么一回事。
当用户提到了“今天生日”和“最爱的巧克力熔岩蛋糕”两个关键信息时,大模型迅速在笔记本上写下这两点,然后在回复中应用起来。
二、External Context:就是存储在外部的上下文信息,比如存在硬盘里。External Context由两部分组成:
- Recall Storage,可以简单理解为是已发生事件的记忆,并且是无压缩的、全程的记忆。
- Archival Storage,可以简单理解为就是事实(Facts)的记录。
按结构分好之后,MemGPT就可以自主对上下文进行操作了。
自主 + 觉知
MemGPT对上下文相关信息进行两类操作:
- Retrieval,检索。这个不用解释了,都懂。
- Editing,编辑。比如,用户给到的最新信息和之前存储的信息有冲突,那么就编辑、更新。
于是,上下文信息就在Main Context和External Context两个层级之间进进出出、流动起来。
MemGPT的内存管理行为都是自主进行的。开发团队事先准备好了一系列Prompt,不同的情况会触发对应的Prompt。而MemGPT能成功管理,一个很重要的前置设定是:
觉知。
它知道自己(大模型)存在上下文限制,所以才能根据限制(比如16K或32K)给出对策。
你看,如果AI是硅基生命的话,那么它起手就比人类这种碳基生命强得多,因为它对自己有清醒的觉知、觉察,而99.99999%的人类是“无明”。
在后续漫长的进化过程中,自我觉知、觉察的优势会被指数级放大。最终,两个物种将是云泥之别。扯远了。
使用 + 整合
想体验一下MemGPT很容易,打开终端:
- pip install pymemgpt安装。
- memgpt quickstart设置。不想折腾的话,通过memgpt quickstart –backend openai调用OpenAI API,会让你输入key。
- memgpt run启动。如果之前有创建过agent的话,会让你选择。要退出的话,记得先/save再/exit,就像打游戏一样,退出前保存。
MemGPT支持多种后端,除了OpenAI API之外,还支持开源大模型的各种调用。
最重要的是,可以将MemGPT与AutoGen整合。Multi-Agent System大概是上下文长度扩充的最直接受益者。关于如何实现,官方文档中有详细的代码,我就不展示了。
MemGPT是那种让我眼前一亮的项目,很有启发。后续有更多发现,我再分享给大家。