真實世界程式設計基準測試 SWE-bench,評估大型語言模型(LLMs)的黃金標準

更新於 發佈於 閱讀時間約 10 分鐘

來深入解析一下「真實世界程式設計基準測試 SWE-bench」。

簡單來說,SWE-bench 是一個專門用來評估大型語言模型(LLM)解決真實世界軟體工程問題能力的黃金標準。它跳脫了傳統上讓 AI 解答單一、封閉的程式挑戰(例如「寫一個排序函數」),而是直接將 AI 丟入一個模擬真實軟體工程師工作的情境中。

這個基準測試由普林斯頓大學的 NLP 團隊於 2024 年底首次推出,因其高難度和貼近現實的評估方式,迅速成為衡量頂尖 AI 模型程式設計能力的權威指標。

SWE-bench 如何運作?

其評估流程非常貼近一位軟體工程師修復 Bug 的日常:

  1. 分派任務 (Issue): AI 模型會收到一個從真實世界開源專案(例如 Django、matplotlib 等知名 Python 專案)的 GitHub 上複製下來的 Bug 報告(Issue)。這個報告由真人撰寫,可能包含問題描述、重現步驟,但有時也可能模糊不清或缺少關鍵資訊。
  2. 提供程式碼庫 (Codebase): AI 模型會被給予整個專案的完整程式碼庫存取權限。這意味著它需要像人類工程師一樣,在成千上萬行的程式碼中進行導航、閱讀和理解。
  3. 解決問題並提交補丁 (Patch): AI 的目標是分析問題、找出程式碼中的錯誤,並生成一個補丁檔案(Patch File)。這個檔案記錄了需要對原始碼進行的具體修改,以修復該 Bug。
  4. 自動化測試驗證 (Evaluation): 系統會自動將 AI 生成的補丁應用到原始程式碼庫中,然後執行該專案原有的自動化測試套件。評估標準極為嚴格:
    • FAIL_TO_PASS: 原本會導致失敗的測試,在應用補丁後必須通過。
    • PASS_TO_PASS: 原本就能通過的測試,在應用補丁後不能被破壞,以確保修復沒有引入新的問題。

只有當 AI 生成的補丁能夠成功通過所有相關測試,才算作一次「成功的解決」。最終得分以成功解決的問題百分比來呈現。

SWE-bench 為何如此重要且困難?

它之所以被稱為「真實世界」基準,是因為它反映了軟體開發的真正複雜性,這與簡單的程式測驗有天壤之別:

  • 專案級別的複雜度: 問題的解決方案往往需要跨越多個檔案和模組,要求 AI 具備對整個大型程式碼庫的結構性理解能力。
  • 模糊的任務定義: Bug 報告是為人類溝通而寫的,AI 必須從自然語言描述中準確理解開發者的意圖。
  • 上下文依賴性強: 修復一個 Bug 需要理解變數如何傳遞、類別如何繼承、模組之間如何互動,這是孤立的程式測驗無法模擬的。
  • 對精確性的極高要求: 任何微小的語法錯誤、邏輯疏漏或對現有功能的破壞都會導致任務失敗。

最新發展與模型表現

SWE-bench 已成為各大 AI 公司展示其模型實力的重要舞台。隨著模型的進化,這個基準本身也在更新,例如推出了經過人工篩選和改進的 SWE-bench Verified 版本,以更準確地評估模型能力。

  • Claude Opus 4.1: 正如您在先前的問題中提到的,Anthropic 的最新模型在此基準測試上取得了創紀錄的 74.5% 的解決率,這是一個非常驚人的成績,也凸顯了其在程式碼重構和修復方面的重大進步。
  • 其他頂尖模型: 像 OpenAI 的 GPT 系列、Google 的 Gemini 以及其他專門的程式設計 AI(如 Devin)也都在這個基準上進行了測試,但目前 Claude 4.1 處於領先地位。

總結來說,SWE-bench 不再只是測試 AI 能否「寫程式」,而是在測試 AI 能否成為一名合格的「軟體工程師」。它推動著 AI 技術從單純的程式碼生成,邁向能夠理解複雜系統、自主解決工程問題的更高層次。一個模型在 SWE-bench 上的高分,直接意味著它在輔助甚至自動化軟體開發方面具有更強的實用價值。

針對「如何進行 SWE-bench 測試」這個問題,這是一個純粹的技術性操作,主要面向開發者和研究人員。一般使用者無法像使用 ChatGPT 或 Claude 網頁版那樣直接「玩」這個測試。

以下是為技術人員準備的、相對簡化的步驟指南。整個過程的核心是在一個受控的環境中,讓 AI 模型嘗試修復一個真實的程式碼問題

核心概念:為何需要 Docker?

在開始之前,必須理解環境隔離的重要性。SWE-bench 中的每一個問題都來自不同的開源專案(如 Django 3.2, matplotlib 3.5 等)。這些專案依賴特定版本的 Python 和函式庫。為了確保 AI 生成的修補程式能在與原始 Bug 完全相同的環境下被測試,SWE-bench 使用 Docker 來為每個問題創建一個獨立、乾淨且版本正確的運行環境。不使用 Docker 將極難重現評測結果。


技術實作步驟指南

步驟一:前置準備 (Prerequisites)

您需要一個適合開發的環境,通常是 Linux 或 macOS(或 Windows 上的 WSL2)。

  1. 安裝 Git: 用於從 GitHub 下載程式碼。
  2. 安裝 Docker: 這是整個流程的基石,用於創建隔離的測試環境。請確保 Docker 服務已啟動。
  3. 安裝 Python: 建議使用 Python 3.9 或更高版本。
  4. 取得 API 金鑰 (API Keys): 如果您要測試的是像 GPT-4o 或 Claude Opus 這類商業模型,您需要前往 OpenAI 或 Anthropic 的官方網站申請 API 金鑰。

步驟二:安裝與設定 SWE-bench

  1. 從 GitHub 克隆官方儲存庫:
    git clone https://github.com/princeton-nlp/SWE-bench.git
    cd SWE-bench
  2. 安裝 SWE-bench 函式庫:
    pip install -e .
    (-e 表示可編輯模式安裝,方便您查看或修改原始碼)。
  3. 設定 API 金鑰為環境變數: 在您的終端機中,設定您的金鑰。這能讓 SWE-bench 腳本安全地呼叫模型 API。
    • 測試 OpenAI 模型:Bashexport OPENAI_API_KEY="sk-..."
    • 測試 Anthropic 模型:Bashexport ANTHROPIC_API_KEY="sk-ant-..."

步驟三:運行評估腳本

SWE-bench 的核心是一個名為 run.py 的腳本。您可以透過指令行參數來控制要測試哪個模型、解決哪個問題。

一個完整的測試指令範例:

假設我們要使用 Anthropic 的 claude-3-opus-20240229 模型,去嘗試解決 django 專案中的 django-11099 這個 Bug。

Bash

python run.py \ --model_name_or_path "anthropic/claude-3-opus-20240229" \ --instance_filter "django__django-11099" \ --testbed "./testbed" \ --log_dir "./output_logs"

指令參數詳解:

  • --model_name_or_path: 指定您要評測的 AI 模型。SWE-bench 已內建支援多種主流模型,如 gpt-4o, gpt-4-turbo, claude-3-opus-20240229 等。
  • --instance_filter: 指定要測試的問題 ID。SWE-bench 的完整測試集包含數千個問題,直接跑完會非常耗時且昂貴。通常會先用單一問題來測試流程是否正常。django__django-11099 就是一個標準的問題 ID。
  • --testbed: 指定一個資料夾,SWE-bench 會在這裡下載 Django 專案的原始碼。
  • --log_dir: 指定存放結果的資料夾。所有模型的思考過程、生成的程式碼、最終的評測結果都會保存在這裡。

步驟四:解讀結果

執行完畢後,進入您指定的 log 資料夾(此例中為 ./output_logs)。您會找到以模型和問題 ID 命名的子資料夾,裡面包含:

  • *.log 檔案: 記錄了 AI 模型與系統互動的完整過程,包括它收到的指示、它的思考步驟以及最終生成的程式碼。
  • *.patch 檔案: AI 模型生成的最終修補程式。
  • eval.json 檔案: 最重要的結果檔案,裡面會用 JSON 格式記錄這次測試的結果,例如 {"resolved": true}{"resolved": false},明確告知您這個 Bug 是否被成功修復。

總結與建議

  • 從小處著手: 務必先用 --instance_filter 指定單一問題來測試您的環境設定是否正確。
  • 成本考量: 運行完整的 SWE-bench 測試集會進行數千次 API 呼叫,費用可能相當高昂。請先確認您的 API 預算。
  • 測試本地模型: 若要測試本地運行的開源模型(如 Llama 3),流程會更複雜,通常需要額外設定一個與 OpenAI API 格式相容的本地伺服器。這屬於進階用法,建議詳閱官方文件。

總之,進行 SWE-bench 測試是一個嚴謹的學術/工程評估流程,旨在以最接近現實的方式衡量 AI 的程式設計能力。您可以透過其 GitHub 官方儲存庫 獲得最詳盡、最即時的資訊。

留言
avatar-img
留言分享你的想法!
avatar-img
Hank吳的沙龍
0會員
79內容數
這不僅僅是一個 Blog,更是一個交流與分享的空間。 期待在這裡與你相遇,一起探索科技、體驗生活、夢想旅行!💖
Hank吳的沙龍的其他內容
2025/07/31
梅花易數與《周易》使用相同的六十四個卦象,這些卦象是由八個基本卦(經卦)兩兩相疊而成。每個卦象都由一個「上卦」(或稱外卦)和一個「下卦」(或稱內卦)組成,其組合變化揭示了宇宙萬物運行發展的規律。 以下是梅花易數所使用的六十四卦及其卦象結構,依照《周易》的通行順序排列
2025/07/31
梅花易數與《周易》使用相同的六十四個卦象,這些卦象是由八個基本卦(經卦)兩兩相疊而成。每個卦象都由一個「上卦」(或稱外卦)和一個「下卦」(或稱內卦)組成,其組合變化揭示了宇宙萬物運行發展的規律。 以下是梅花易數所使用的六十四卦及其卦象結構,依照《周易》的通行順序排列
2025/07/31
你是不是覺得,現在的AI工具雖然厲害,但還是要你一步步下指令呢?🤔 沒關係,有個超酷的新夥伴出現了,那就是『AI Agent』。 簡單來說,AI Agent 就像是你的「智慧代理人」,你只要給它一個大目標,它就能自己去規劃、執行、甚至找工具來完成任務,整個過程完全不用你操心。
2025/07/31
你是不是覺得,現在的AI工具雖然厲害,但還是要你一步步下指令呢?🤔 沒關係,有個超酷的新夥伴出現了,那就是『AI Agent』。 簡單來說,AI Agent 就像是你的「智慧代理人」,你只要給它一個大目標,它就能自己去規劃、執行、甚至找工具來完成任務,整個過程完全不用你操心。
2025/07/31
梅花易數(也稱「梅花易數占卜」、「梅花心易」)是中國古代一種非常精準的占卜方法,由 北宋易學大師邵雍 所創。它結合了《易經》卦象、數字、陰陽變化、時間與象數,來推算事物的吉凶、發展趨勢。
2025/07/31
梅花易數(也稱「梅花易數占卜」、「梅花心易」)是中國古代一種非常精準的占卜方法,由 北宋易學大師邵雍 所創。它結合了《易經》卦象、數字、陰陽變化、時間與象數,來推算事物的吉凶、發展趨勢。
看更多
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 87 說:Wang 等人 2019 年的論文,提供了合理答案的選擇 (Choice of Plausible Answers, COP
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 87 說:Wang 等人 2019 年的論文,提供了合理答案的選擇 (Choice of Plausible Answers, COP
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 以下陳述任務 (Task)、模型 (Model)、微調 (Fine-Tuning)、GLUE (General Language Understanding Evalu
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 以下陳述任務 (Task)、模型 (Model)、微調 (Fine-Tuning)、GLUE (General Language Understanding Evalu
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 延續 AI說書 - 從0開始 - 86 提及 SuperGLUE 任務清單,當中會包含以下欄位: 名稱 (Name):經過微調的預訓練模型的下游任務的名稱 標識符
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 延續 AI說書 - 從0開始 - 86 提及 SuperGLUE 任務清單,當中會包含以下欄位: 名稱 (Name):經過微調的預訓練模型的下游任務的名稱 標識符
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 從 AI說書 - 從0開始 - 82 到 AI說書 - 從0開始 - 85 的說明,有一個很重要的結論:最適合您的模型不一定是排行榜上最好的模型,您需要學習 NLP 評
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 從 AI說書 - 從0開始 - 82 到 AI說書 - 從0開始 - 85 的說明,有一個很重要的結論:最適合您的模型不一定是排行榜上最好的模型,您需要學習 NLP 評
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 新模型和 Human Baselines 排名將不斷變化,Human Baselines 的位置自從基礎模型出現以來,它就不再具有多大意義了,這些排名只是表明經典 NL
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 新模型和 Human Baselines 排名將不斷變化,Human Baselines 的位置自從基礎模型出現以來,它就不再具有多大意義了,這些排名只是表明經典 NL
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 繼 AI說書 - 從0開始 - 82 與 xxx ,我們談論了衡量 AI 模型的方式,那當你訓練的模型比 State-of-the-Art 還要好並想要進行宣稱時,需要
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 繼 AI說書 - 從0開始 - 82 與 xxx ,我們談論了衡量 AI 模型的方式,那當你訓練的模型比 State-of-the-Art 還要好並想要進行宣稱時,需要
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 延續 xxx 提到,既然提到訓練,就表示要有一套衡量基準供大家遵守,有鑑於此,以下繼續介紹幾類衡量方式: MCC: 首先介紹 True (T) Positive (
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 延續 xxx 提到,既然提到訓練,就表示要有一套衡量基準供大家遵守,有鑑於此,以下繼續介紹幾類衡量方式: MCC: 首先介紹 True (T) Positive (
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News