AP2O-Coder 讓大模型擁有「錯題本」,像人類一樣按題型高效刷題

AP2O-Coder 讓大模型擁有「錯題本」,像人類一樣按題型高效刷題

文章圖片

AP2O-Coder 讓大模型擁有「錯題本」,像人類一樣按題型高效刷題

文章圖片

AP2O-Coder 讓大模型擁有「錯題本」,像人類一樣按題型高效刷題

文章圖片

AP2O-Coder 讓大模型擁有「錯題本」,像人類一樣按題型高效刷題

文章圖片

AP2O-Coder 讓大模型擁有「錯題本」,像人類一樣按題型高效刷題

文章圖片



作者:上交博士 , 在騰訊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)采用「低頻錯誤 -高頻錯誤」的優化順序更具優勢 , 這一策略可避免模型因能力有限而陷入高頻常見錯誤的學習困境 , 而讓小模型一開始能看到不同種類的錯誤 , 跳出局部最優;
【AP2O-Coder 讓大模型擁有「錯題本」,像人類一樣按題型高效刷題】大參數模型(≥ 7B)采用「高頻錯誤 -低頻錯誤」的順序效果更優 , 能夠充分發揮其強學習能力 , 快速實現整體錯誤率的下降 。 這一發現為不同規模 LLM 的代碼優化提供了針對性參考 。

    推薦閱讀