![]()
作者:上交博士,在騰訊codebuddy 實習,發表一作頂會頂刊論文10篇(含best paper 等),開源PFLlib等明星項目,獲得社區贊譽。主要研究AI強化學習、AI合成數據、Agent 記憶等。
在 AI 輔助 Coding 技術快速發展的背景下,大語言模型(LLMs)雖顯著提升了軟件開發效率,但開源的 LLMs 生成的代碼依舊存在運行時錯誤,增加了開發者調試成本。
現有基于偏好優化的改進方法,多依賴「通過 / 失敗」二元信號構建訓練數據,難以知曉「錯在哪」,也忽視了模型能力在訓練時的動態變化特性。
針對此缺口,在騰訊 CodeBuddy 實習期間,我們提出自適應漸進式偏好優化方法(AP2O),并構建 AP2O-Coder 框架。該方法借鑒人類的「按題型高效刷題」經驗出發,通過「考試 - 分析 - 糾錯 - 小測」的系統性流程提升模型代碼糾錯能力,在多款主流開源模型上實現最高 3% 的 pass@k 性能提升,同時降低訓練數據需求量。
![]()
- 論文標題:AP2O-Coder: Adaptively Progressive Preference Optimization for Reducing Compilation and Runtime Errors in LLM-Generated Code
- 論文鏈接:https://arxiv.org/pdf/2510.02393
- 開源代碼:https://github.com/TsingZ0/AP2O
一、現有方法的核心挑戰
與 AP2O-Coder 的針對性設計
當前離線偏好優化方法(如 DPO 等)在 LLM 代碼糾錯任務中面臨三大核心挑戰:
- 錯誤類型感知缺失:僅依賴單元測試的二元反饋信號,無法知曉類型錯誤(如 KeyError、ValueError 等),導致模型難以定位錯誤原因;
- 訓練聚焦性不足:訓練數據采用隨機打亂的方式批量輸入,模型需在多種錯誤類型間頻繁切換適應,糾錯學習的針對性不強;
- 動態適配能力薄弱:靜態構建的訓練集無法匹配模型訓練過程中不斷變化的能力短板,易引發災難性遺忘或訓練資源浪費。
為應對上述挑戰,AP2O-Coder 借鑒人類按題型進行的「錯題整理 - 專題突破 - 定期復盤」的學習模式,構建了包含四大核心模塊的優化框架,旨在實現錯誤信息的深度利用與模型能力的動態適配。
二、AP2O-Coder 的
核心技術框架與工作機制
AP2O-Coder 的核心設計思路是通過系統化流程實現錯誤類型的精準捕捉、漸進式優化與動態適配,其整體框架包含四個關鍵步驟(如圖 1 所示):
![]()
圖 1:AP2O-Coder 框架流程圖
代碼生成評估(Exam)
為全面掌握目標模型的初始能力邊界,該模塊讓 LLM 在 M 個編程任務上生成 N 個候選答案(采用溫度系數 1.0 的設置以充分探索能力范圍),通過配套的單元測試獲取每個答案的「通過 / 失敗」標簽,形成初始訓練數據集,為后續錯誤分析提供基礎。
錯誤診斷分析(Analysis)
借助編程語言專用分析工具(如 Python 解釋器)對所有失敗答案進行結構化解析,標注具體錯誤類型并統計各類錯誤的出現頻率,按錯誤題型構建結構化的「錯題本」。該過程實現了從二元反饋到精細化錯誤信息的轉化,為針對性優化提供數據支撐。
漸進式偏好優化(Correction)
![]()
自適應錯誤回放(Quiz)
為適配模型訓練過程中的能力變化,該模塊定期在一個小驗證集上評估模型性能,實時捕捉當前階段的高頻錯誤類型,找出模型依舊犯錯的題型,將其對應的失敗答案重新納入訓練流程。通過動態調整訓練數據分布,確保模型始終聚焦于當前的能力短板,有效緩解災難性遺忘問題。
三、實驗驗證與結果分析
研究團隊在 6 款主流 LLM(含代碼專用模型 CodeLlama、DeepSeek-Coder、Qwen2.5-Coder 與通用模型 Llama3、Qwen2.5、Qwen3)上開展了系統驗證,參數規模覆蓋 0.5B - 34B,實驗基準包括 EvalPlus(HumanEval/MBPP)與 LiveCodeBench v6,主要取得以下研究發現:
性能提升的有效性
在不同類型與參數規模的模型上,AP2O-Coder 均展現出穩定的性能改進。如下表所示,在 EvalPlus(HumanEval)基準上,AP2O-Coder (H2L) 即使對于 30B+ 的大參數模型,也能實現 2.8% - 3.4% 的性能優化,且未出現現有后訓練方法中性能退化現象。
![]()
表 1:各種類型和規模代碼的 LLM 在 Pass@1 on EvalPlus (HumanEval) 上的表現。
錯誤抑制效果與泛化能力
![]()
圖 2:使用 Qwen2.5-Coder-7B 在測試基準上出現錯誤的統計數據。
![]()
圖 3:使用 Qwen2.5-Coder-7B 在測驗階段對驗證集上的錯誤統計結果。我們的 AP2O-Coder 能夠逐步減少錯誤。
如圖 2 所示,相較于 SFT、DPO 等基線方法,AP2O-Coder 能夠有效降低各類錯誤的發生頻率,且未引入新的錯誤類型。如圖 3,在 Qwen2.5-Coder-7B 的實驗中,高頻錯誤「WrongResult」的發生率顯著下降,IndexError 等小眾錯誤在訓練后期實現清零。同時,該方法在 pass@5、pass@10 等指標上的穩定提升(如圖 4),表明其增強了模型代碼生成的泛化能力。
![]()
圖 4:在不同模型規模下,使用 DeepSeek-Coder 在 EvalPlus (HumanEval) 基準上的 pass@5 和 pass@10 表現。
樣本效率的優化
![]()
圖 5:用于在 MBPP 訓練集上對不同規模的 Qwen2.5-Coder 進行訓練并達到最優性能的偏好數據對需求。
AP2O-Coder 通過錯誤類型的精準聚焦,顯著提升了訓練數據的利用效率。實驗結果顯示,該方法僅需 4% - 60% 的偏好數據即可達到傳統 DPO 方法的最優性能,在 32B 參數規模的模型上,數據需求量減少更為明顯(如圖 5),這就和班上刷題時,優等生所需刷題量更少類似,為低資源場景下的 LLM 代碼優化提供了可行路徑。
通用 LLM 適配性
![]()
圖 6:在將通用 LLM(如 Qwen2.5、Qwen3 和 Llama3)適配到代碼領域時,其在 EvalPlus (MBPP) 上的 pass@1 表現。
AP2O-Coder 不僅適用于代碼專用 LLM,也能有效支持通用 LLM 向代碼領域的適配。在 Qwen3、Llama3 等通用模型的實驗中,經過該方法優化后,模型在 MBPP 基準上的 pass@1 分數顯著提升,驗證了其跨模型類型的適配能力(如圖 6)。
四、研究發現與方法特性
實驗過程中,團隊發現了優化策略與模型規模的適配規律:
對于Qwen2.5-Coder,小參數模型(≤ 3B)采用「低頻錯誤 -> 高頻錯誤」的優化順序更具優勢,這一策略可避免模型因能力有限而陷入高頻常見錯誤的學習困境,而讓小模型一開始能看到不同種類的錯誤,跳出局部最優;
大參數模型(≥ 7B)采用「高頻錯誤 -> 低頻錯誤」的順序效果更優,能夠充分發揮其強學習能力,快速實現整體錯誤率的下降。這一發現為不同規模 LLM 的代碼優化提供了針對性參考。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.