讓AI替碼農卷複雜任務,賈佳亞團隊提出MoTCoder,準確率刷新SOTA

論文一作李靖瑤,香港中文大學博士生(DV Lab),師從賈佳亞教授。主要研究方向是大語言模型,包括模型預訓練、後訓練、推理優化。作者陳鵬光、夏彬等均為 DV Lab 成員。

大模型寫代碼早就是基操了,但讓它寫算法競賽題或企業級系統代碼,就像讓只會煮泡麵的人去做滿漢全席 —— 生成的代碼要麼是 「鐵板一塊」 毫無章法,要麼是 「一鍋亂燉」 難以維護。

如何讓大模型像工程師一樣思考,用模塊化思維拆解複雜問題?  

近日,賈佳亞團隊提出 MoTCoder(Module-of-Thought Coder),通過創新的模塊化思維指令微調(MoT Instruction Tuning),顯著提升了模型在複雜編程任務中的準確率與可維護性。實驗顯示,在 APPS 和 CodeContests 等權威編程基準上,MoTCoder 的 pass@1 準確率直接刷新記錄,甚至超越 SOTA 6%,讓大模型在 「瘋狂打碼」 時更接近「人類智慧」。

  • 論文標題:MoTCoder: Elevating Large Language Models with Modular of Thought for Challenging Programming Tasks

  • 論文鏈接:https://arxiv.org/abs/2312.15960 

目前,團隊已發出程序員快樂包 —— 代碼、模型與數據集通通開源,歡迎在線體驗:   

  • 代碼庫:https://github.com/dvlab-research/MoTCoder  

  • 32B 模型:https://huggingface.co/JingyaoLi/MoTCoder-32B-V1.5  

  • 7B 模型:https://huggingface.co/JingyaoLi/MoTCoder-7B-v1.5  

  • 350K 訓練數據集:https://huggingface.co/datasets/JingyaoLi/MoT-Code-350K

複雜編程的解耦神器

當前主流代碼生成模型(如 Qwen2.5-Coder)生成的代碼往往就是這種單塊式的結構,雖然在簡單任務上表現良好,但面對複雜場景時難掩缺陷:

  • 拆解複雜任務:不存在的!讓它寫個分佈式系統,輸出代碼堪比災難現場;

  • 維護成本爆炸:生成的代碼註釋比程序員(bu shi)頭髮還少,debug 時被同事懷疑是祖傳咒語。

試想像一下,你讓模型寫個自動駕駛算法,結果它吐出幾千行密密麻麻的代碼,像一團亂麻根本無從下手。這就是傳統模型的單塊式代碼 —— 把所有邏輯塞進一個函數,不講章法地一鍋亂燉。

圖 1a: 傳統模型生成的單塊式代碼圖 1a: 傳統模型生成的單塊式代碼

而 MoTCoder 則能 「遇招拆招」,把複雜任務拆成 「輸入解析」、「核心算法」、「異常處理」 等標準化模塊,像樂高積木般嚴絲合縫組裝,每個模塊還自帶 「說明書」,強迫症患者看完都直呼舒適!

圖 1b: MoTCoder 生成的模塊化代碼圖 1b: MoTCoder 生成的模塊化代碼
圖 2:MoTCoder 的兩階段模塊化設計流程圖 2:MoTCoder 的兩階段模塊化設計流程

MoTCoder 的三大核心突破  

(1)性能開掛:複雜任務準確率刷新 SOTA  

得益於模塊化思維對複雜邏輯的拆解能力,在 APPS 數據集上,MoTCoder-32B 的 pass@1 超越同等規模模型 5.8%;在 CodeContests 數據集上,MoTCoder-32B 更是直接上演「屠榜」戲碼,超越 SOTA 5.9%!

圖 3:MoTCoder 的戰鬥力曲線圖 3:MoTCoder 的戰鬥力曲線

(2)大模型代碼質檢員

MoTCoder 通過多輪自我反思機制,能自動檢測並修正代碼錯誤。實驗顯示:

  • 未修正狀態下,MoTCoder 可達到 SOTA 模型 5 輪人工修正後的效果

  • 開啟自檢後,準確率更進一步提升 4%

(3)代碼質量全面碾壓傳統模型

通過專業的代碼質量分析工具 Radon 對 APPS 和 CodeContests 數據集上的生成代碼進行評估,MoTCoder 在所有難度級別中都保持了明顯更高的可維護性指數(Maintainability Index)。  

實驗數據顯示,相比普通微調模型和基線模型,MoTCoder 生成的代碼具有更低的複雜度、更精簡的代碼量和更合理的註釋比例。

程序員狂喜:簡直好用哭了!

圖 4:MoTCoder 生成的代碼具有更優的可維護性特徵  圖 4:MoTCoder 生成的代碼具有更優的可維護性特徵  

智能調度:簡單題極簡模式,難題樂高模式

這種優勢源於 MoTCoder 的模塊化訓練方法,使生成的代碼結構更清晰、邏輯更簡明。在時間和內存消耗的對比中(圖 5),MoTCoder 生成的代碼展現出顯著優勢。雖然其運行時間與普通微調模型相當,但在內存佔用上始終低於基準模型。這得益於 MoTCoder 對全局變量和函數局部變量的智能區分,能夠及時釋放未使用的內存資源。

圖 5:MoTCoder 生成的代碼具有更低的內存消耗圖 5:MoTCoder 生成的代碼具有更低的內存消耗
圖 6:不同難度的代碼函數數量與準確率關係圖 6:不同難度的代碼函數數量與準確率關係

賈佳亞團隊在開發過程中發現了一個有趣的現象(圖 6): 

– 入門題:函數數量增加,準確率反而下降(簡單問題無需拆解)  

– 面試題:函數數量變化對準確率影響較小(保持穩定)  

– 競賽題:函數數量與準確率呈正相關(複雜問題必須模塊化) 

MoTCoder 自帶智能調度系統,問題複雜度決定了其模塊化策略:面對兩行代碼就能搞掂的題目,啟動極簡模式;而遭遇代碼量堪比畢業論文的變態需求,則秒切樂高模式。而這種思維方式已達到人類工程師的解題路徑。  

這種特性也使得 MoTCoder 可覆蓋從算法競賽到工業級開發多個落地場景:

  • 算法競賽:秒解 Codeforces/LeetCode 難題,生成帶註釋的標準答案;

  • 大型系統設計:自動生成微服務架構代碼,接口清晰、模塊解耦;  

  • 企業級應用開發:生成可長期維護性的代碼庫,降低技術債務累積速度。

MoTCoder 讓代碼生成從 「功能實現」 躍遷至 「工程實踐」,或許是時候重新定義智能編程了 —— 不僅要生成代碼,更要生成好代碼。賈佳亞團隊表示,將繼續深化智能編程的研究,並探索其在更多工業界場景的深度應用。

© THE END