Qwen-Agent:將 LLM 從 8k 通用化至 1M 上下文
Qwen 推出了一種方法,使得上下文窗口僅有 8k 的大型語言模型(LLM)能夠理解與處理多達 100 萬個 token 的文件。透過構建多層代理架構,Qwen 能夠合成高品質的長上下文訓練資料,最終微調出原生支援 1M 上下文的聊天模型。
三層代理架構
為克服短上下文窗口的限制,Qwen 開發了一套代理系統,隨著層級提升而增加複雜度,共分為三個層級,每個層級針對長上下文處理的特定失效模式進行處理。
第 1 級:基於關鍵字的檢索增強生成(RAG)
第 1 級採用傳統的 RAG 方法,將相關資訊塞入 8k token 的窗口。為提升檢索精確度,代理遵循三步驟流程:
- Query Decomposition(查詢分解):模型將使用者指令(例如「回覆英文」)與實際資訊查詢(例如「自行車是何時發明的」)分開。
- Keyword Extraction(關鍵字抽取):模型從資訊查詢中推導出多語言關鍵字。
- BM25 Retrieval(BM25 檢索):代理使用 BM25 演算法,根據這些關鍵字定位最相關的文字片段。
Qwen 指出,基於向量的檢索未能提供足夠顯著的改進,無法證明部署額外嵌入模型的複雜性是合理的。
第 2 級:逐塊閱讀
為防止出現「找不到針」的問題,即相關片段與查詢之間缺乏關鍵字重疊,第 2 級採用暴力平行處理策略:
- Relevance Assessment(相關性評估):每個 512 token 的片段皆平行處理。模型評估每個片段,並輸出「None」或抽取相關句子。
- Refined Retrieval(精緻檢索):抽取出的相關句子作為新的搜尋查詢,透過 BM25 檢索最相關的片段。
- Final Generation(最終生成):根據這些精緻檢索出的片段生成最終答案。
第 3 級:逐步推理
為處理多跳推理——即答案需要串聯多個不同事實——第 3 級將第 2 級代理作為工具,嵌入於 ReAct 風格的工具呼叫代理中。
當面對複雜問題時,第 3 級代理會將問題分解為子問題。它會迭代地向第 2 級代理查詢,將每次回應加入記憶,直至累積足夠資訊以給出最終答案。例如,要找出與貝多芬第五交響曲同世紀發明的交通工具,代理首先確定交響曲的世紀,然後搜尋在該世紀發明的交通工具。
效能基準測試
Qwen 使用 7B 聊天模型(即「32k-Model」)測試了該代理,並與標準 RAG 實作(「4k-RAG」)以及完整的代理策略(「4k-Agent」)進行比較。測試在 NeedleBench 與 LV-Eval 基準上,以 256k 上下文進行。
主要發現:
- 短上下文:由於模型在處理短上下文的多個部分上具備更佳能力,32k-Model 可能優於 4k-RAG。
- 長上下文:隨著文件長度增加,4k-RAG 通常優於 32k-Model,顯示 32k-Model 在長上下文上的訓練並非最佳化。
- 代理優勢:4k-Agent 在所有基準測試中持續優於 32k-Model 與 4k-RAG。
此外,該代理在 100 萬 token 的「大海撈針」壓力測試中成功通過,儘管 Qwen 指出目前缺乏針對 1M token 真實應用的可靠量化基準。
對模型訓練的啟示
此代理框架充當資料生成引擎。透過記錄志願者與代理的互動,或利用代理對其他合成資料進行交叉驗證,Qwen 能夠製作高品質、長上下文的微調資料集。此過程可將代理層級的能力蒸餾至原生支援 1M 上下文的聊天模型,實質上以「弱」的 8k 上下文模型訓練出「強」的長上下文模型。