
今天,字節跳動豆包大模型團隊開源 FullStack Bench,一個專注於全棧程式設計和多語言程式設計的程式碼評估資料集。
該資料集在業界首次囊括程式設計全棧技術中超 11 類真實場景,覆蓋了 16 種程式語言,包含 3374 個問題,相比此前基準,可以更有效地評估大模型在現實世界中的程式碼開發能力。同時,高效的程式碼沙盒執行工具 SandboxFusion 也一起開源,用於評估來自不同語言的不同程式設計任務。
綜合實驗結果表明,FullStack Bench 能夠真實反映大模型在多種實際程式碼開發場景中的表現,有助於推動程式碼智慧領域的進一步發展。
程式碼大型語言模型(code LLMs)在程式碼智慧方面取得了顯著的進步,為了揭示現有程式碼 LLMs 的侷限性並推動程式碼智慧的進一步發展,多個程式碼評估基準資料集相繼被提出,如 HumanEval、MBPP、DS-1000、McEval、MDEval 和 xCodeEval 等。
然而,當前的評測基準覆蓋的程式語言和應用型別較為有限,難以全面反映真實世界中程式碼開發場景所涉及的各種程式設計能力。如 HumanEval 和 MBPP 中大部分資料(近 80%)只聚焦於基礎程式設計問題和高階程式設計問題。
為了解決上述限制,字節跳動豆包大模型團隊與 M-A-P 開源社群聯合提出 FullStack Bench,一個涵蓋多個真實應用領域和程式語言的評估集,旨在評估大型模型在各種真實世界程式碼開發場景中的能力。
為了支援 FullStack Bench 對多領域多語言程式設計的評測需求,團隊開發了一個新的沙盒執行環境——SandboxFusion,該環境支援 23 種常用程式語言,能夠滿足不同應用場景(如前端開發、後端開發和機器學習訓練等)的需求。
綜合實驗結果表明,FullStack Bench 能夠真實反映大型語言模型(LLMs)在多種實際程式碼開發場景中的表現,為程式碼智慧領域的進一步發展提供推動力量。

目前論文成果、資料集、沙盒體驗入口均已對外公開。
FullStack Bench: Evaluating LLMs as Full Stack Coders 論文連結: https://arxiv.org/abs/2412.00535 資料集開源地址: https://huggingface.co/datasets/ByteDance/FullStackBench 沙盒開源地址: https://github.com/bytedance/SandboxFusion 沙盒體驗入口: https://bytedance.github.io/SandboxFusion/playground/datasets
在程式碼大語言模型發展的過程中,程式碼評估基準扮演了至關重要的角色。它們不僅是衡量模型能力的標準工具,也是推動模型最佳化和完善的關鍵驅動力。
儘管程式碼評估基準在研究和應用大語言模型中起著核心作用,但此前業界基準仍然存在明顯的侷限,尤其是在反映真實世界程式碼開發場景的多樣性和複雜性方面。
例如,HumanEval 和 MBPP 中大部分資料(近 80%)只聚焦於基礎程式設計問題和高階程式設計問題;DS-1000 大部分資料(超過 95%)集中於資料分析和機器學習任務,且僅對 Python 語言進行評測;xCodeEval 雖覆蓋多項任務,但基本侷限於高階程式設計和數學領域;McEval 和 MDEval 分別擴充套件了支援的程式語言,涵蓋了 40 種和近 20 種語言,但其應用領域仍然侷限於基礎程式設計問題和高階程式設計問題,未能涉及更廣泛的應用場景。
此外,自動化評估一個多工多語言的程式碼基準仍然面臨諸多挑戰。儘管出現了一些沙盒執行環境,如 DifySandbox、MultiPL-E 和 MPLSandbox,但它們仍存在顯著侷限性,如不支援前端瀏覽器和深度學習包,且支援的程式語言數量有限。
為模擬全棧開發的實際應用場景,研究團隊分析了全球最大的程式設計師技術問答社群 Stack Overflow 上的問題分佈,從中提煉出常見的真實程式設計應用領域。如圖所示,團隊從 Stack Overflow 上隨機抽取了 50 萬個問題,並使用大模型為每個問題標註其所屬的應用領域型別。
研究團隊篩選出佔總問題數前 88.1% 的主要應用領域,其餘領域統一歸類為“其他”。基於此,團隊完成了問題領域型別的標註,再透過對分佈做適當調整來保證每個領域的魯棒性,最終形成了 FullStack Bench 關注的超過 11 種應用場景及分佈比例。具體領域型別的詳細介紹可參見原文。

FullStack Bench 包含 3374 個問題(中文及英文問題各佔一半),每個問題均包括題目描述、參考解決方案、單元測試用例及標籤。為保證評估準確性,每個問題內容均由相關領域的程式設計專家設計,並經 AI 和人工驗證進行質量複核。例如,資料分析相關問題,由資料工程專家提出並把關配套內容。
FullStack Bench 的構建採用了一套全面且系統的人工標註流程,用於生成不同應用領域的程式碼樣本。研究團隊從 GitHub 和程式碼相關文件中收集多種程式語言的程式碼片段,結合大語言模型(LLM)和人工驗證生成指令、單元測試用例及參考解決方案。

在初始資料集構建後,標註者依據問題難度、模糊性和可解性評估資料質量,並透過交叉複核減少主觀偏差。分歧透過共識或高階標註者介入解決,以確保資料準確性。
在完成 FullStack Bench 的構建後,研究人員對其進行了統計分析,結果如圖所示。研究人員使用 LLaMA3 分詞器計算了題目和正確程式碼的標記長度,其中題目平均長度為 210.2 個 tokens。為確保評估的準確性,資料集包含總計 15168 個單元測試,平均每個問題配備 4.5 個單元測試用例。

為方便開發者對大模型程式碼能力進行系統性測試,豆包大模型團隊還開源了一款高效的程式碼沙盒執行工具——SandboxFusion,用於評估來自不同語言的不同程式設計任務。除了 FullStack Bench,SandboxFusion 還相容超過 10 種廣泛使用的程式碼評估資料集,支援 23 種程式語言。開發者在單伺服器上即可輕鬆部署 SandboxFusion,也可直接在 GitHub 上進行體驗。
SandboxFusion 主要包含兩個模組:資料集模組和沙箱執行模組。資料集模組負責實現各種資料集,並提取出可重用的公共元件。沙箱執行模組則專注於在不同語言中執行程式碼,控制資源使用,並確保執行的安全性。

如圖所示,SandboxFusion 的評估流程包括以下步驟:
提示生成:根據原始資料和測試模式(如少樣本、零樣本)生成不同提示。
模型推理:使用者需要獨立使用生成的提示進行模型補全,沙盒未內建推理模組。
程式碼提取:系統從模型輸出中提取可執行程式碼段,主要關注 markdown 中包含的程式碼。
測試程式碼合成:系統將提取的程式碼與預定義的測試用例結合,建立可執行的測試程式。此過程處理語言相關的特性,如在 Java 中將類拆分到檔案或為單元測試調整入口函式。
程式碼執行:系統執行合成的程式碼及所有依賴檔案,並捕獲程式輸出。
結果判斷:系統基於執行結果評估模型輸出的正確性,通常透過標準單元測試框架,其中零返回值表示執行成功。
指標計算:在沙盒外部聚合計算評估指標,以透過率為主。
釋出評測基準及沙盒的同時,研究團隊也基於 FullStack Bench 對全球 20餘 款程式碼大模型及語言大模型的程式設計表現進行了評測。這些模型包括 Qwen2.5-Coder、DeepSeek-Coder-v2、CodeLlama 等開源模型,以及 GPT-4o、OpenAI-o1、Doubao-Coder-Preview 等閉源模型。對於開源模型,根據模型大小,分為五個組別:1B+、6B+、13B+、20B+ 和 70B+。更多實驗配置和測試細節,請參閱完整論文。
-
跨領域表現:數學程式設計領域差異最大
得益於強大的推理能力,OpenAI o1-preview 不出所料地領先。不過,一些開源模型也有不錯的表現。如 DeepSeekCoderv2-Instruct,在 AP(高階程式設計)、OS(作業系統)和其他類別中得到高分,拉開了與其他開源模型的差距。OpenCoder-1.5B-Instruct、Qwen2.5-Coder-7B-Instruct、Qwen2.5-Coder-14B-Instruct 在其各自的開源組別中拔得頭籌,並超越了一些更高參數級別的模型。

為了全面評估現有大語言模型在不同場景下的表現,研究團隊可視化了模型在 FullStack Bench 各領域的表現。在 BP(基礎程式設計)、AP(高階程式設計)、MA(數學程式設計)、ML(機器學習)和 MM(多媒體)等領域中,模型表現差異顯著,其中以 MA 領域的差距最大。最佳表現者為 OpenAI o1-preview(得分 80.42),而最差的是 CodeLlama-34B-Instruct(得分 14.34)。數學程式設計要求模型同時具備數學和程式設計能力,那些在高度專業化程式碼語料庫上訓練的模型,在 MA 領域往往表現較差。這一結果進一步證明,FullStack Bench 能夠更全面地評估模型的綜合程式設計能力。

-
跨語言表現:C++、C 和 Ruby 上存較大差異
研究團隊對不同模型在多種程式語言上的效能表現進行了分析,結果如圖所示。大多數模型在 Bash 程式設計任務中表現良好。然而,在 C++、C 和 Ruby 的表現上存在較大差異,這表明模型設計者可能在訓練語料庫中對這些語言進行了選擇性取樣。部分 1B+ 的小型模型在 D、R 和 Scala 語言上的表現較差,其透過率低於10%,這表明它們的多語言處理能力都較弱。

由於 SandboxFusion 提供了來自編譯器的反饋,研究人員評估了模型在部分程式語言上的編譯透過率。實驗結果表明,編譯透過率與測試透過率之間存在正相關關係,但編譯透過並不意味著測試一定透過。同時,研究人員還探討了中英文表達對模型效能的影響。
-
解決難題,閉源模型普遍優於開源模型
不同模型在不同難度問題上的表現存在明顯差異。總體而言,1B+ 模型和 CodeLlama 系列在所有難度級別上的表現均不盡如人意。其餘模型在解決簡單問題時表現相似,但在中等難度問題上存在一定差距。對於難度較大的問題,閉源模型普遍優於開源模型。

-
使用 SandboxFusion,可提升模型表現
使用 SandboxFusion 進行反饋能夠顯著改善模型表現。研究人員對比了 “Reflection” 和 “BoN” 兩種策略。在 “Reflection” 策略中,透過利用 SandboxFusion 的反饋上下文對答案進行 N 次精煉,復現了自我精煉策略 [Madaan et al., 2024]。而在 “BoN” 策略中,僅進行 N 次推斷以獲得結果。結果如圖所示,“Reflection” 策略明顯優於 “BoN”,這表明 SandboxFusion 提供的反饋上下文具有較高的有效性。

我們提出的全新程式碼大模型評估基準 FullStack Bench,以及沙盒執行工具 SandboxFusion,旨在為 AI 在真實程式設計場景中的表現潛力提供快速評估參考,從而推動程式碼大模型的發展。如果你也對豆包大模型團隊的工作感興趣,歡迎關注「豆包大模型團隊」微信公眾號,或點選閱讀原文前往官網,瞭解更多資訊。

更多內容,點選下方關注:

未經「AI科技評論」授權,嚴禁以任何方式在網頁、論壇、社群進行轉載!
公眾號轉載請先在「AI科技評論」後臺留言取得授權,轉載時需標註來源並插入本公眾號名片
未經「AI科技評論」授權,嚴禁以任何方式在網頁、論壇、社群進行轉載!
公眾號轉載請先在「AI科技評論」後臺留言取得授權,轉載時需標註來源並插入本公眾號名片