LLM 記憶系統深度解析:從上下文窗口到多層架構的突破與演進
在與大型語言模型(LLMs)交互時,我們常常會產生一種它們具備智能和記憶能力的錯覺。然而,這種直覺掩蓋了一個基本的工程現實:從核心來看,LLMs是無狀態的,每個輸入都是被獨立處理的。如果想要構建一個能夠進行連貫對話或調用公司知識庫的LLM應用程序,就必須圍繞模型設計一個復雜的記憶系統。本文將詳細闡述這一架構——從LLM有限的工作記憶,到能讓其獲取海量、持久且最新知識的先進系統。核心觀點很簡單:構建強大的LLM應用程序,首要任務是打造一個穩健的記憶系統。
LLM的工作記憶:上下文窗口
LLM維持即時上下文最直接的方式是通過其上下文窗口。這是一個定義好的輸入大小,以 tokens(子詞單元)為計量單位,模型可以在一次調用中處理這些輸入。在多輪對話中,系統會將之前的對話歷史添加到用戶當前的查詢前面。然后,LLM 對這個拼接后的輸入進行處理,從而生成與當前討論上下文相關的回應。
例如,谷歌的 Gemini 2.5 Pro 提供了 100 萬個 tokens 的上下文窗口,不久后還將支持 200 萬個 tokens。這一容量可以容納海量信息,相當于多部小說或龐大的代碼庫,使模型能夠在單一輸入中進行復雜的長程推理。
然而,這種機制雖為基礎,卻存在一些關鍵限制,使其不足以支撐生產級別的應用程序。
首先是有限的容量與信息淘汰問題。隨著對話歷史的不斷擴展,系統必須采用淘汰策略來丟棄較舊的 tokens,這不可避免地會導致信息丟失,阻礙長時間的交互。就像我們的短期記憶容量有限,當新的信息不斷涌入,舊的信息就會被擠出去,無法再被完整回憶起來。在LLM的交互中也是如此,長時間的對話會讓早期重要的信息因為tokens數量的限制而被舍棄,影響對話的連貫性和準確性。
其次是計算復雜性與成本問題。標準 Transformer 模型中注意力機制的計算成本以 O(N2) 的規模增長。因此,隨著工作記憶容量的增大,推理的運營成本和延遲會高到令人望而卻步。這意味著如果我們想要讓LLM處理更多的信息,就需要投入更多的計算資源,不僅會增加經濟成本,還會讓用戶等待更長的時間才能得到回應,嚴重影響用戶體驗。
再者是位置偏差(“迷失在中間”)問題。實證研究表明,對于位于極長上下文窗口正中間的信息,LLMs的性能會顯著下降。這種現象通常被稱為“迷失在中間”問題,它揭示了一種“U 形”性能曲線,即模型往往更關注輸入序列開頭和結尾的信息。這意味著僅僅向大的上下文窗口中添加更多數據,并不能保證模型能有效利用所有相關信息。這是 Nelson F. Liu 等人在 2023 年發表的題為《迷失在中間:語言模型如何使用長上下文》的論文中的一個關鍵發現。比如在一份冗長的報告中,中間部分的關鍵數據可能會被LLM忽略,導致生成的回應遺漏重要信息。
最后是靜態知識與動態現實不匹配問題。LLM 的內在知識來源于其靜態的訓練數據集。上下文窗口可以攜帶一些新信息,但無法用實時數據、公司特定信息或個人歷史更新模型的核心知識庫。在這個信息快速更新的時代,LLM的訓練數據一旦固定,就無法及時反映最新的事件、政策變化等,這極大地限制了LLM在需要實時信息場景中的應用。
這些限制使得我們必須構建一個分層的記憶架構,為LLM提供持久的長期記憶。
用于持久高效記憶的先進架構
要構建一個穩健的LLM應用程序,需要實施一些架構模式來管理LLM即時上下文窗口之外的記憶。這些系統提供持久的長期記憶,并優化有限工作記憶的使用。
通過檢索增強生成(RAG)實現長期記憶
如果說上下文窗口是LLM的工作記憶,那么檢索增強生成(RAG)就是它的長期記憶。RAG通過從外部不斷更新的知識庫中檢索相關信息,增強LLM的生成能力。這使得LLM應用程序能夠訪問公司維基、實時數據或個人歷史,而無需記住所有這些內容。
這個過程通常包括以下幾個步驟。第一步是數據攝入和嵌入。專有數據被分割成塊,并轉換為數值嵌入。就像我們把書本中的知識分門別類地存儲在大腦中,方便以后提取一樣,將數據分割成塊并進行嵌入處理,能讓LLM更高效地檢索和利用信息。
第二步是向量數據庫存儲。這些嵌入被存儲在專門的向量數據庫中。向量數據庫就像一個高效的圖書館,將各種信息按照特定的規則進行存儲,便于快速查找。
第三步是檢索過程。用戶的查詢被嵌入,然后通過相似性搜索從數據庫中檢索出最相關的數據塊。當我們向LLM提問時,它就像在圖書館中根據關鍵詞查找相關書籍一樣,從向量數據庫中找到與問題最相關的信息。
第四步是上下文增強和生成。只有這些高度相關的片段會被附加到提示中,使LLM的回應基于具體、實時且可驗證的信息。這確保了LLM生成的內容更加準確、可靠,有堅實的信息支撐。
RAG提高了事實準確性,提供了獲取最新信息的途徑,為大型知識庫提供了可擴展性,并通過引用提高了透明度。在很多領域,如客服、醫療咨詢等,準確性至關重要,RAG的應用能有效減少錯誤信息的輸出。
提示壓縮:優化工作記憶
即使有了RAG,上下文窗口仍然是一種有限的資源。提示壓縮是一種在提示(包括指令、檢索到的上下文和對話歷史)到達LLM之前,智能地減少其token數量的技術。
其核心思想是從輸入中識別并移除冗余或信息量較少的tokens,同時保留基本含義和意圖。蔣等人的論文《LLMLingua:為大型語言模型的加速推理壓縮提示》可能是第一篇專門探討大型語言模型提示壓縮的研究論文。LLMLingua使用一個較小的、訓練良好的語言模型(如GPT-2或LLaMA)來識別并移除對更大模型理解來說語義不太重要的tokens。這種方法引入了使用困惑度來過濾tokens的概念,并已顯示出令人印象深刻的結果,在實現高達20倍壓縮的同時,保留了原始提示在推理和上下文學習等任務中的能力。
簡單來說,困惑度是衡量語言模型對一系列單詞的“驚訝”或“困惑”程度的指標。一個高度可預測的token(低困惑度)添加的新信息很少;一個令人驚訝的token(高困惑度)則添加了很多新信息。本質上,困惑度是一個token為序列提供多少信息的代理指標。這種方法通過減少token使用量和成本、提高推理速度,并確保關鍵信息在可用限制內,直接解決了上下文窗口的局限性。就像我們在寫文章時會精簡語言,去掉不必要的修飾詞,只保留核心內容一樣,提示壓縮能讓LLM在有限的上下文窗口內處理更多關鍵信息。
多層記憶系統:結合短期和長期記憶
對于最復雜的應用程序,結合短期和長期記憶的架構至關重要。這是一種分層記憶形式,其中上下文窗口作為工作記憶,容納即時對話和最關鍵的檢索信息;向量數據庫(RAG)作為長期記憶,提供龐大、可搜索且持久的知識存儲;還有一個系統組件負責協調流程,決定哪些信息需要主動保存在工作記憶中,哪些可以被分頁到長期記憶中,只在需要時才檢索。
這種多層方法使LLM應用程序既能具備豐富的知識,又能保持對話的連貫性,克服了任何單一記憶系統的局限性。多層記憶系統的靈感來源于人類記憶的組織方式,人類有用于短期、長期和工作記憶的不同但相互關聯的系統。Joon Sung Park等人的研究論文《生成代理:人類行為的交互式模擬》引用了人類認知心理學,作為他們創建具有觀察、反思和長期存儲不同層次系統的靈感來源。人類在處理信息時,會將短期記憶中的重要信息轉化為長期記憶,在需要時再提取出來,多層記憶系統正是借鑒了這一原理,讓LLM能更高效地管理和利用信息。
綜上所述,LLM的記憶系統并非單一的機制,而是由上下文窗口作為工作記憶,結合RAG實現長期記憶,通過提示壓縮優化工作記憶,并借助多層記憶系統整合短期和長期記憶的復雜架構。這些組件相互協作,共同支撐起LLM應用程序的強大功能,使其能夠在各種場景中提供準確、連貫且及時的回應。隨著技術的不斷發展,相信LLM的記憶系統會更加完善,為我們帶來更多的便利和可能。