目前,ChatGPT、Llama 2、文心一言等主流大語(yǔ)言模型,因技術(shù)架構(gòu)的問(wèn)題上下文輸入一直受到限制,即便是Claude 最多只支持10萬(wàn)token輸入,這對(duì)于解讀上百頁(yè)報(bào)告、書籍、論文來(lái)說(shuō)非常不方便。
為了解決這一難題,加州伯克利分校受操作系統(tǒng)的內(nèi)存管理機(jī)制啟發(fā),提出了MemGPT。該模型的最大創(chuàng)新是模仿操作系統(tǒng)的多級(jí)內(nèi)存管理機(jī)制,通過(guò)數(shù)據(jù)在不同的內(nèi)存層級(jí)之間的傳輸,來(lái)打破大語(yǔ)言模型固定上下文的限定。
開(kāi)源地址:https://Github.com/cpacker/MemGPT
論文:https://arxiv.org/abs/2310.08560
MemGPT主要包含主上下文和外部上下文兩大內(nèi)存類型。主上下文相當(dāng)于操作系統(tǒng)的主內(nèi)存,是大語(yǔ)言模型可以直接訪問(wèn)的固定長(zhǎng)度上下文窗口。
外部上下文則相當(dāng)于磁盤存儲(chǔ),保存了主上下文之外的額外信息。MemGPT還提供了豐富的功能調(diào)用,允許大語(yǔ)言模型主動(dòng)管理自己的內(nèi)存而無(wú)需人工干預(yù)。
這些功能調(diào)用可以將信息在主上下文和外部上下文之間進(jìn)行導(dǎo)入導(dǎo)出。大語(yǔ)言模型可以根據(jù)當(dāng)前任務(wù)目標(biāo),自主決定何時(shí)移動(dòng)上下文信息以更好利用有限的主上下文資源。
研究人員在多個(gè)測(cè)試環(huán)境中進(jìn)行了評(píng)估,結(jié)果表明,MemGPT可以有效處理遠(yuǎn)超大語(yǔ)言模型上下文長(zhǎng)度限制的文本內(nèi)容,例如,MemGPT可以處理長(zhǎng)度遠(yuǎn)超過(guò)GPT-3.5和GPT-4上下文限制的文檔。
當(dāng)取回的文檔數(shù)增加時(shí),固定上下文模型的性能受限于取回器的質(zhì)量,而MemGPT可以通過(guò)調(diào)用分頁(yè)機(jī)制取回更多文檔,其問(wèn)答準(zhǔn)確率也獲得提升。
在新提出的多步嵌套關(guān)鍵詞提取任務(wù)中,MemGPT通過(guò)多次調(diào)用外部上下文,成功完成了需要跨文檔進(jìn)行多跳查詢才能得出解的任務(wù),而GPT-3.5和GPT-4的準(zhǔn)確率在嵌套層數(shù)增加時(shí)急劇下降到0。
主上下文
MemGPT中的主上下文相當(dāng)于操作系統(tǒng)中的“主內(nèi)存”,是大語(yǔ)言模型可以直接訪問(wèn)的固定長(zhǎng)度上下文窗口。研究人員將主上下文分為三個(gè)部分:
系統(tǒng)指令:這部分保存了MemGPT的基本控制邏輯,例如,函數(shù)調(diào)用模式等,長(zhǎng)度固定且只讀。
對(duì)話上下文:這是一個(gè)先入先出的隊(duì)列,保存了最近的用戶交互歷史,只讀且會(huì)在長(zhǎng)度超限時(shí)裁剪前段對(duì)話。
工作上下文:這是一個(gè)讀寫臨時(shí)存儲(chǔ),大語(yǔ)言模型可以通過(guò)功能調(diào)用自主向其中寫入信息。
需要注意的是,這三個(gè)部分合起來(lái),不能超過(guò)底層大語(yǔ)言模型的最大上下文長(zhǎng)度。
外部上下文
外部上下文保存了主上下文之外的額外信息,相當(dāng)于操作系統(tǒng)中的“磁盤存儲(chǔ)”。外部上下文需要明確的函數(shù)調(diào)用才能將信息導(dǎo)入主上下文供模型訪問(wèn),包括以下兩種類型:
回溯存儲(chǔ):保存完整的歷史事件信息,相當(dāng)于對(duì)話上下文的無(wú)壓縮版本。
歸檔存儲(chǔ):通用的讀寫數(shù)據(jù)庫(kù),可以作為主上下文的溢出空間保存額外信息。在對(duì)話應(yīng)用中,歸檔存儲(chǔ)可以保存有關(guān)用戶或系統(tǒng)角色的事實(shí)、喜好等額外信息。
回溯存儲(chǔ)允許檢索特定時(shí)間段的歷史交互。在文檔分析中,歸檔存儲(chǔ)可以支持更大的文檔集搜索。
自主編輯與檢索
MemGPT通過(guò)大語(yǔ)言模型產(chǎn)生的函數(shù)調(diào)用在內(nèi)存層級(jí)之間主動(dòng)移動(dòng)數(shù)據(jù),實(shí)現(xiàn)自主的編輯與檢索。例如,可以自主決定何時(shí)在上下文之間移動(dòng)信息,以適應(yīng)當(dāng)前任務(wù)目標(biāo),無(wú)需人工參與。
創(chuàng)新點(diǎn)在于系統(tǒng)指令中詳細(xì)描述了內(nèi)存體系結(jié)構(gòu)和功能調(diào)用方法,指導(dǎo)大語(yǔ)言模型學(xué)習(xí)使用這些工具管理內(nèi)存。
大語(yǔ)言模型可以根據(jù)反饋調(diào)整調(diào)用策略。同時(shí),當(dāng)主上下文空間不足時(shí),系統(tǒng)會(huì)提醒大語(yǔ)言模型及時(shí)保存重要信息,引導(dǎo)其管理內(nèi)存。
鏈?zhǔn)秸{(diào)用
在MemGPT中,各種外部事件會(huì)觸發(fā)大語(yǔ)言模型進(jìn)行推理,這包括用戶消息、系統(tǒng)內(nèi)存警告、用戶交互事件等。
功能調(diào)用可以請(qǐng)求獲取控制權(quán),從而實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用。例如,檢索結(jié)果分頁(yè)瀏覽時(shí),連續(xù)調(diào)用可以將不同頁(yè)面的數(shù)據(jù)收集到主上下文中。
而Yield調(diào)用則會(huì)暫停大語(yǔ)言模型,直到下一個(gè)外部事件觸發(fā)才再啟動(dòng)推理。這種基于事件的控制流協(xié)調(diào)了內(nèi)存管理、模型推理和用戶交互之間的順暢溝通。
解析器與優(yōu)化
MemGPT使用解析器驗(yàn)證大語(yǔ)言模型生成的函數(shù)調(diào)用,檢查參數(shù)等是否正確。調(diào)用后會(huì)將結(jié)果反饋給模型,這樣可以學(xué)習(xí)調(diào)整策略,減少錯(cuò)誤。
此外,MemGPT的系統(tǒng)指令可以進(jìn)行實(shí)時(shí)更新,以便在不同任務(wù)上給模型加入定制化的內(nèi)存管理指導(dǎo),實(shí)現(xiàn)持續(xù)優(yōu)化。
本文素材來(lái)源加州伯克利分校MemGPT論文,如有侵權(quán)請(qǐng)聯(lián)系刪除