给大模型无限上下文

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由三部分组成:

  1. System Instructions,系统指令。简单理解就是每次我们在system message里写的“you are a helpful assistant”。这部分只读,并且每次都会被调用,因为它是底层设定。
  2. Conversational Context,对话上下文。采用“先进先出”(FIFO)规则——超过一定长度后,最旧的对话会被抛弃。
  3. Working Context,工作上下文。简单理解就是大模型的笔记本,上边记录着当前的注意事项。

下图就充分说明了Working Context是怎么一回事。

当用户提到了“今天生日”和“最爱的巧克力熔岩蛋糕”两个关键信息时,大模型迅速在笔记本上写下这两点,然后在回复中应用起来。

二、External Context:就是存储在外部的上下文信息,比如存在硬盘里。External Context由两部分组成:

  1. Recall Storage,可以简单理解为是已发生事件的记忆,并且是无压缩的、全程的记忆。
  2. Archival Storage,可以简单理解为就是事实(Facts)的记录。

按结构分好之后,MemGPT就可以自主对上下文进行操作了。

自主 + 觉知

MemGPT对上下文相关信息进行两类操作:

  1. Retrieval,检索。这个不用解释了,都懂。
  2. Editing,编辑。比如,用户给到的最新信息和之前存储的信息有冲突,那么就编辑、更新。

于是,上下文信息就在Main Context和External Context两个层级之间进进出出、流动起来。

MemGPT的内存管理行为都是自主进行的。开发团队事先准备好了一系列Prompt,不同的情况会触发对应的Prompt。而MemGPT能成功管理,一个很重要的前置设定是:

觉知。

它知道自己(大模型)存在上下文限制,所以才能根据限制(比如16K或32K)给出对策。

你看,如果AI是硅基生命的话,那么它起手就比人类这种碳基生命强得多,因为它对自己有清醒的觉知、觉察,而99.99999%的人类是“无明”。

在后续漫长的进化过程中,自我觉知、觉察的优势会被指数级放大。最终,两个物种将是云泥之别。扯远了。

使用 + 整合

想体验一下MemGPT很容易,打开终端:

  1. pip install pymemgpt安装。
  2. memgpt quickstart设置。不想折腾的话,通过memgpt quickstart –backend openai调用OpenAI API,会让你输入key。
  3. memgpt run启动。如果之前有创建过agent的话,会让你选择。要退出的话,记得先/save再/exit,就像打游戏一样,退出前保存。

MemGPT支持多种后端,除了OpenAI API之外,还支持开源大模型的各种调用。

最重要的是,可以将MemGPT与AutoGen整合。Multi-Agent System大概是上下文长度扩充的最直接受益者。关于如何实现,官方文档中有详细的代码,我就不展示了。

MemGPT是那种让我眼前一亮的项目,很有启发。后续有更多发现,我再分享给大家。