目前,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論文,如有侵權請聯系刪除