上交大與史丹佛提出「長程式碼壓縮神器」:暴力瘦身 5.6 倍且效能不減

當 LLM 面對上萬行祖傳程式碼,窗口越大反而越「近視」——API 費用暴漲、推論延遲飆升,關鍵依賴還常被淹沒。

面對這些挑戰,來自上海交通大學、史丹佛大學以及重慶大學的研究團隊提出了一個創新的程式碼壓縮框架——LongCodeZip。它像一位精明的外科醫生,能精準地「切除」冗餘程式碼,只留下最核心的上下文資訊。最關鍵的是,這是一個無需訓練(training-free)、模型無關(model-agnostic)且隨插即用(plug-and-play)的框架。

圖片

論文已被 CCF-A 頂會 ASE 2025 接收,並登上當日 Hugging Face Daily Papers 榜首。

核心思想:保留能降低「不確定性」的程式碼

AMI與傳統相似度匹配方法對比

AMI與傳統相似度匹配方法對比

LongCodeZip 的理念既簡單又深刻:一個程式碼片段是否有用,取決於它能否幫助模型更好地理解使用者的指令

研究人員使用了名為近似互資訊(Approximated Mutual Information, AMI)的指標來衡量這一點。具體來說,他們計算當模型看到某段程式碼後,其在預測使用者指令(prompt)時的困惑度(perplexity)降低了多少。困惑度越低,意味著模型對指令的「不確定性」越小,也就說明這段程式碼與指令的關聯性越強。這種方法遠比單純的文本相似度更能捕捉到深層的邏輯依賴。

基於此,LongCodeZip 設計了一個兩階段壓縮流程:

LongCodeZip 兩階段程式碼壓縮過程

LongCodeZip 兩階段程式碼壓縮過程

第一階段:粗粒度壓縮 (Coarse-grained Compression)

首先,框架將整個程式碼庫按函式或類別的邊界進行切分,以保證每個程式碼塊在語義上的完整性和語法上的有效性。接著,它利用上面提到的 AMI 指標,為每個程式碼塊相對於使用者指令的相關性打分並排序。

最後,在一個預設的「粗略預算」下,貪心地選取排名最高的函式和類別。那些未被選中的程式碼則被替換為簡短的占位符(如註解或省略號),這樣做既大幅減少了上下文長度,又保留了程式碼的整體結構。

第二階段:細粒度壓縮 (Fine-grained Compression)

細粒度壓縮過程示例

細粒度壓縮過程示例

在篩選出的關鍵函式內部,LongCodeZip 會進行更精細的「修剪」。

1. 基於困惑度的塊切分:函式內部的程式碼行被視為原子單元。當某一行程式碼的困惑度相對於其鄰近行出現一個劇烈的峰值時,這通常標誌著一個新的語義塊的開始(例如,一段新的邏輯、一個重要的條件判斷或外部 API 呼叫)。

2. 自適應預算分配:並非所有被選中的函式都同等重要。框架會根據每個函式在第一階段的 AMI 得分,為其分配一個自適應的 token 預算——越重要的函式,能保留的細節就越多。

3. 背包演算法實現最佳選擇:在每個函式的預算限制內,選擇哪些語義塊能最大化保留資訊,就成了一個經典的 0/1 背包問題。透過動態規劃求解,LongCodeZip 可以確保在有限的預算內,組合出資訊密度最高的壓縮後程式碼。

實驗效果:壓縮 5.6 倍,效率與效能齊飛

研究團隊在程式碼補全、模組摘要和程式碼倉庫問答(RepoQA)三個典型任務上,對 LongCodeZip 進行了全面評估,測試模型涵蓋了主流的開源模型(如 DeepSeek-Coder-6.7B、Qwen2.5-Coder-7B、Seed-Coder-8B)和閉源模型(GPT-4o、Claude-3.7-Sonnet)。

LongCodeZip 壓縮效果

LongCodeZip 壓縮效果

結果非常亮眼:

  • 最高實現 5.6 倍壓縮,效能不降反升:由於過濾掉了大量雜訊資訊,模型在處理壓縮後的上下文時,表現甚至優於處理完整上下文。
  • 顯著降低成本和延遲:以 Qwen2.5-Coder-7B 為例,在程式碼補全任務中,生成時間從 15.7 秒縮短到 6.6 秒,輸入 token 成本降低了約 77%。而壓縮過程本身僅需 2.6 秒
  • 驚人的跨模型泛化能力:實驗證明,即使使用一個僅 0.5B 參數的小模型來執行壓縮任務,再將壓縮後的上下文交給強大的主模型,最終的效能也幾乎沒有損失。這意味著使用者可以在不犧牲品質的前提下,極大地節省壓縮過程的計算資源。

應用場景

LongCodeZip 的隨插即用特性使其應用前景十分廣闊:

  • 跨檔案程式碼補全:當開發者的意圖涉及多個檔案,而模型上下文窗口又無法容納整個專案時,LongCodeZip 可以高效地建構一個「黃金上下文」。
  • 程式碼倉庫級程式碼問答:快速定位並理解一個龐大程式碼庫中的特定實作,而無需手動載入和閱讀成千上萬行程式碼。
  • 大型模組摘要與程式碼審查:為程式碼審查者(無論是人還是 AI)準備一份高度濃縮的上下文,幫助其快速把握模組核心邏輯。

總而言之,LongCodeZip 透過一種新穎的、基於資訊論的方法,巧妙地解決了大型語言模型在處理長程式碼上下文時的核心痛點,為其實際落地於大規模軟體工程專案掃清了一大障礙。

論文連結:https://arxiv.org/abs/2510.00446

專案地址:https://github.com/YerbaPage/LongCodeZip

主標籤:程式碼壓縮

次標籤:大型語言模型上下文視窗AI研究軟體工程


上一篇:「零和學習」理論橫空出世,揭示大型語言模型縮放定律的真相!

下一篇:細胞世界的「高速公路」:揭密微小紋路如何讓混亂的細胞群自發排隊,走向有序

分享短網址