無限上下文,多層記憶體管理突破ChatGPT等大語言模型上下文限制


原文來源:AIGC開放社區

圖片來源:由無界AI生成

目前,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的系統指令可以進行即時更新,以便在不同任務上給模型加入客製化的記憶體管理指導,實現持續優化。

資訊來源:由0x資訊編譯自8BTC。版權所有,未經許可,不得轉載

Total
0
Shares
Related Posts