「我們的模型在 HumanEval 上達到 X%!」——這類聲明在 AI 實驗室的技術報告中屢見不鮮。然而,隨著越來越多的研究者深入剖析這些基準測試的構建方式,一個令人不安的現實正在浮現:現有代碼生成評測框架可能系統性地高估了 AI 模型的實際軟件工程能力。
HumanEval 的方法論問題
HumanEval 自 2021 年由 OpenAI 發布以來,已成為衡量代碼生成能力的事實標準之一。然而,其設計存在若干根本性問題:
數據污染(Data Contamination)風險
HumanEval 的 164 道題目在發布後被廣泛引用和討論,其中許多已出現在各類技術博客、討論區和教學材料中。現代大型語言模型的預訓練語料庫幾乎必然包含這些題目的解答,使得評測分數在很大程度上衡量的是「記憶」而非「推理」。
任務設計的簡化性
HumanEval 的題目主要針對獨立的算法函數,缺乏真實軟件工程場景中的複雜性:無跨文件依賴、無外部庫調用、無並發和狀態管理、無錯誤處理和邊界情形。
測試覆蓋率問題
每道題目平均只有 7.7 個測試用例,遠低於工業軟件測試的標準。高分模型有時依靠「通過測試用例但解題思路錯誤」的實現獲得分數。
SWE-bench:更貼近現實的嘗試
SWE-bench 通過收集真實 GitHub 倉庫的 issue 和對應的 pull request,構建了一個更接近真實軟件工程任務的評測集。然而,其自身也存在值得關注的問題:
環境重現的不可靠性:由於軟件依賴的版本差異,部分測試案例在不同環境下無法穩定重現,影響評測結果的可比性。
評分指標的粗糙性:SWE-bench 以「測試用例是否全部通過」作為二元評分標準,無法區分「幾乎正確」和「完全錯誤」的解決方案,也不能衡量解決方案的代碼質量。
任務選擇偏差:現有 SWE-bench 任務集中於少數幾個熱門開源倉庫,可能無法代表真實軟件工程任務的多樣性。
下一代評測框架的設計方向
研究社群正在探索多個方向,以構建更可靠的代碼生成評測框架:
動態基準測試(Dynamic Benchmarking)
由於靜態基準測試面臨不可避免的數據污染問題,一些研究者建議採用動態生成的評測題目,在每次評測時根據特定模板和參數生成新的題目,確保每次評測都面對模型從未見過的問題。
多維度能力評估
下一代框架應分別測量代碼的功能正確性、效率、可讀性、安全性和可維護性,而非僅以「是否通過測試」作為唯一標準。
長程任務評估
針對現實中需要多步驟思考和迭代修改的複雜編程任務設計評測,衡量模型在「完成一個完整的小型項目」等長程任務上的能力。
代碼生成評測框架的完善,是確保 AI 軟件工程能力真實可測的必要前提。這一領域的方法論進步,最終將使整個 AI 研究社群受益。