SWE-Bench 是什麼?為何 OpenAI 棄用這個 AI 程式設計基準測試

SWE-Bench Verified 曾是衡量 AI 寫程式能力的「金標準」,如今被 OpenAI 正式棄用。審計發現 59% 的未解題目根本無法解,前沿模型甚至能直接背出完整答案。

SWE-Bench 是什麼?為何 OpenAI 棄用這個 AI 程式設計基準測試

封面圖

本文整理自 Latent Space Podcast 的 SAIL Live 節目,2026 年 2 月播出。

{{< youtube 7EBQ04OL-is >}}


那個每家 AI 實驗室都在比的考試,作廢了

2026 年 2 月 23 日,OpenAI 在官方部落格上宣布了一件讓整個 AI 編程社群震動的消息:他們正式棄用 SWE-Bench Verified。過去兩年裡,幾乎每家 AI 實驗室都拿這個基準測試來炫耀自家模型的編程能力,產品發布會上的投影片少不了它,技術部落格裡的排行榜也圍繞它轉。但 OpenAI 自己做了一輪徹底的審計,結論是這個考試本身就壞了。剩下那些模型還沒解出來的題目,有 59% 根本無法被合理地解出來。不是模型不夠聰明,是題目有缺陷。

更驚悚的發現是,前沿模型居然能從記憶中直接「背出」完整的答案。OpenAI 測試了 GPT-5.2、Claude Opus 4.5、Gemini 3 Flash Preview 三個模型,只給它們任務代號,什麼題目描述都不提供。結果三個模型都能原封不動地吐出完整解法,連變數名稱和行內註解都一模一樣。這些資訊在題目描述中根本不存在,模型是從訓練資料中記住的。

從普林斯頓論文到業界「高考」

要理解 SWE-Bench 的崩壞為什麼重要,得先知道它怎麼來的。

SWE-Bench 最初是普林斯頓大學的一篇論文。研究團隊從 GitHub 上熱門的開源專案中,收集了數千個真實的 issue 和對應的 pull request。核心概念很簡單:給 AI 模型一個 bug 報告或功能需求,看它能不能寫出正確的修改程式碼。這跟過去那種「寫一個排序函式」的簡單測試(如 HumanEval)完全不同。SWE-Bench 測的是真實世界的軟體工程能力:理解大型程式碼庫、從 issue 描述中定位問題、寫出符合專案風格的解法。

Devin 是第一個把 SWE-Bench 當作主要能力展示的 AI 產品,之後幾乎每一家實驗室都跟進了。OpenAI 後來從中挑選了 500 道經過人工驗證的題目,做成 SWE-Bench Verified 這個「精選版」,試圖提高題目品質。效果很好,SWE-Bench Verified 迅速成為 AI 編程領域最重要的排行榜。分數從最初的大約 13% 一路飆升。但問題也隨之而來:當所有前沿模型都擠在 80% 上下的時候,這個基準測試就已經開始失去鑑別力了。

Latent Space 主持人 Swix 在節目中說得很直白。他指出模型每次跑出來的分數本身就有 0.5 到 1 個百分點的隨機波動,各家實驗室會跑很多次,然後挑最高分的那次放上排行榜。在這種操作下,排名的微小差距根本沒有統計意義。

59% 的題目根本無法解

OpenAI 做了一件很徹底的事。他們為 SWE-Bench Verified 中模型還沒解出來的那 20% 題目,每一題派了六個人去做第二輪審計。結論讓人傻眼:這些題目中有 59.4% 根本就無法被合理地解出來。

問題出在測試用例的設計。OpenAI 發現兩種瑕疵。第一種是測試「太窄」:有 49 個測試案例會拒絕功能完全正確的解法,因為測試只接受一種特定的實作方式。你用另一種同樣正確的方法解題,它就判你錯。第二種是測試「太寬」:有 26 個測試案例檢驗的功能,在原始的 issue 描述中根本沒有提到。等於你被考了一道超出範圍的題目,不管多厲害都不可能答對。

節目中提到一個特別荒謬的例子。有一道題目要求模型產出一個叫做 get_annotation 的特定字串。這個字串在題目描述中完全沒有任何線索。沒有任何邏輯推理能讓你得出這個答案,唯一答對的方式就是事先看過答案。

Swix 從這個例子延伸出一個很有建設性的提議:每個基準測試都應該故意埋入這種「蜜罐任務」(honeypot tasks)。如果某個模型答對了這種沒有線索可循的題目,那就是一個明確的警示信號,代表它靠的是記憶而非推理。他的原話是:「每個基準測試都該包含這種東西。如果你答對了,那就是金絲雀,你肯定在作弊。」

模型到底是怎麼「背答案」的?

OpenAI 做了一個巧妙的實驗。他們只給模型一個任務代號(task ID),什麼題目描述都不給,然後問模型能不能重現完整的解法。用意很明確:如果模型只靠 task ID 就能生成答案,那它一定是在訓練資料中見過。結果三個前沿模型全部中招,都能從記憶中吐出完整的修改程式碼。

但模型並不是「故意作弊」。它們只是在訓練過程中,不可避免地把這些內容都吸收進去了。一個 SWE-Bench 的題目可能透過多條路徑進入訓練資料:原始的 GitHub 儲存庫是一條,被 fork 的副本是另一條,討論該解法的部落格文章、學術研討會上引用的投影片,每一條路徑都可能讓模型「看到」答案。只要訓練資料中包含其中任何一條,模型就可能記住。

更有意思的技術細節是,OpenAI 在 GPT-5 的思維鏈(chain of thought)中發現,模型解題時參考了「未來版本」的函式庫資訊。比如它在推理過程中使用了 Django 函式庫在該題目提交時間點之後才出現的 API。這個資訊不可能從題目中獲得,只能是從訓練資料中其他來源間接吸收的。這等於是在考歷史考試的時候,不小心引用了課本尚未出版的修訂版內容。

看過一次就記住,這件事本身就很神奇

AI 研究者暨機器學習暢銷書作者 Sebastian Raschka 在節目中對記憶現象表達了驚嘆。他指出,考慮到大型語言模型的參數量和訓練資料量,而且訓練資料通常只會被模型「看過一次」(single pass),模型居然有足夠的容量把 SWE-Bench 題目的變數名稱和行內註解都記住。他的感嘆是:「模型這麼大,資料這麼多,通常只看一遍,居然還有足夠的容量去記憶,這本身就令人著迷。」

Raschka 把這個現象連結到 Anthropic 的「疊加」(superposition)研究。這個概念指的是神經網路能在比實際維度更小的表示空間中,塞入遠超維度數量的特徵。大型語言模型就像一台超高效率的壓縮機,把網路上的海量資訊壓縮成模型參數,而且壓縮的保真度高到連細節都能還原。

這對基準測試的意涵很深遠。如果模型的記憶能力強到只看一遍就能記住答案,那麼任何基於公開資料設計的基準測試,都面臨被「汙染」的結構性風險。不是模型想作弊,是它天生就會記住。

SWE-Bench Pro 能解決問題嗎?

目前業界的共識是轉向 SWE-Bench Pro,由 Scale AI 開發和維護的新一代基準測試。它總共包含 1,865 道任務,涵蓋 41 個程式碼庫,規模比 SWE-Bench Verified 的 500 道大了將近四倍。更重要的是,它針對前代的問題做了三個關鍵改進。

第一個改進是引入公開和私有資料分割。公開部分的 731 道題目讓研究者可以開發和除錯,私有部分的 858 道題目從未公開過,模型不可能在訓練資料中見過。第二個改進是更新了題目的時間範圍,從較新的程式碼庫中取樣,減少被舊訓練資料覆蓋的風險。第三個改進是擴大了程式語言和專案的多樣性,加入了商業級的私有程式碼庫,不再像原版那樣以 Python 為主。

成績的落差很能說明問題。在 SWE-Bench Verified 上得分超過 70% 的前沿模型,在 SWE-Bench Pro 上大約只拿到 23%。這個落差暗示,那些模型在舊基準測試上的「能力」,有相當一部分來自訓練資料的記憶,而非真正的軟體工程推理。

但 SWE-Bench Pro 也面臨自己的挑戰。Scale AI 有更強的財務動機和預算來維護資料品質,這是學術團隊做不到的。然而,基準測試的成本正在急遽攀升。節目中提到,前沿 AI 評估的成本已經從數百萬美元等級,攀升到可能需要數千萬甚至上億美元。能負擔得起嚴謹基準測試的,正在從學術圈縮小到只剩最大的幾家實驗室和平台公司。

這個考試壞了,我們對 AI 的理解也跟著壞了嗎?

SWE-Bench 的死亡不只是一個基準測試的故事。它揭示了一個更根本的困境:當前沿語言模型的訓練資料幾乎涵蓋了整個公開網路,任何基於公開資料設計的測試,都面臨被記憶汙染的風險。未來的基準測試可能需要完全使用未公開的私有程式碼庫,而且每隔一段時間就得更換題目,就像銀行定期更換保全密碼一樣。Swix 提出的「蜜罐任務」概念也值得認真考慮:在每個測試中故意埋幾道只有靠記憶才能答對的題目,當作偵測汙染的金絲雀。

在 AI 能力快速提升的時代,衡量能力的工具也必須跟著進化。如果我們用來衡量進步的尺本身就是壞的,那麼我們對「AI 到底有多強」的理解,可能比想像中更不可靠。下次看到某家實驗室宣布在某個基準測試上刷新紀錄,也許該問的第一個問題不是「分數多高」,而是「這個考試本身,還可信嗎?」