詳細解釋
在 LLM 的上下文窗口中填充盡可能多的相關信息,以提高輸出質量的技術。與「僅使用最相關的 Top-K 片段」的傳統 RAG 策略相對。
核心假設:
- LLM 擅長從大量文本中「篩選」相關信息
- 人工選擇的「Top-K」可能遺漏重要上下文
- 更多上下文 = 更少信息損失(只要不超窗口限制)
實現方式:
- 重排序:先用輕量模型召回大量候選(如 1000 片段),再用重排序模型選最重要的填充上下文
- 分層檢索:文檔級 → 段落級 → 句子級,多粒度填充
- 壓縮:用 LLM 縮短文檔(「用一句話總結這段」)以塞入更多
- 摘要鏈:對長文檔先摘要,摘要進入上下文
與傳統 RAG 的對比:
- 傳統:精確檢索,僅提供最相關片段(3-5 個)
- Stuffing:「把可能相關的都塞進去,讓模型自己挑」
適用場景:
- 上下文窗口大的模型(128K、200K、甚至 1M)
- 複雜推理需要多文檔關聯(「比較合同 A 和 B 的第 3 條款」)
- 代碼理解:整個代碼庫塞入,讓模型跨文件關聯
挑戰:
- 成本:長上下文 = 更多 tokens = 更貴
- 干擾:無關信息可能「分散注意力」降低輸出質量
- 位置偏見:模型可能更關注上下文開頭和結尾(「迷失在中間」問題)
這是「長上下文軍備競賽」的實踐—— 隨著 Gemini 1.5 Pro(2M 上下文)等模型出現,「塞入一切」變得可行。