你怎麼知道一個 AI,是真的會寫程式,還是只是背過考古題?|一份還沒開跑的 AI Agent 評測設計,如何嚴謹到把自己攔了下來

兩個會自己寫程式的 AI,要怎麼「公平地」比出高下?一份嚴謹到把自己攔下、一場都還沒跑的評測設計,藏著關於誠實最好的一課。

分享
你怎麼知道一個 AI,是真的會寫程式,還是只是背過考古題?|一份還沒開跑的 AI Agent 評測設計,如何嚴謹到把自己攔了下來

封面圖:一間空無一人的考場,兩張桌上各擺一台亮著的螢幕,門口卻掛著一盞紅燈。

假設有兩個 AI,都號稱「會自己寫程式」。

不是那種你打一句、它吐幾行程式碼給你複製貼上的 AI,而是更進一步的——你交代一個任務,它自己讀檔案、自己動手改、自己跑起來測試、自己除錯,像一個真的坐在你旁邊的工程師。這種會自己動手做事的 AI,這幾年有個名字叫 agent(代理人);專門拿來寫程式的,就叫 coding agent

現在,有人請你當裁判:這兩個,到底哪一個比較行?

聽起來很簡單,對吧。出一道題,讓它們各寫一次,誰寫得好誰贏。十分鐘的事。

但這篇文章要講的,是一群人認真想把這件「十分鐘的事」做對,結果一路做到——這場考試最後把它自己攔了下來,拒絕開跑。 不是因為做不出來,而是因為他們把「公平」這兩個字的門檻,抬到了連考試自己都還沒資格開始的高度。

這是我讀完那份設計之後,最想跟你分享的一個「原來如此」。但要看懂它為什麼值得,我們得先從那道考題出發。


第一關:考題本身就是一個陷阱

先問一個你可能沒想過的問題:要考「會不會寫程式」,該出什麼題?

出「寫一個貪吃蛇」怎麼樣?聽起來很合理——貪吃蛇要接鍵盤、要讓蛇動、要判斷撞牆、要計分,麻雀雖小五臟俱全。

問題就出在「五臟俱全」這四個字太有名了。貪吃蛇、乒乓、俄羅斯方塊這些遊戲,網路上的教學文多到數不清。你怎麼知道 AI 是當場想出來怎麼寫,還是它在訓練的時候早就把一萬篇貪吃蛇教學「背」了下來,考試時默寫出來?

這就是評測(benchmark,替 AI 出考卷、打分數的意思)最核心、也最容易被忽略的陷阱:你以為你在測「它會不會」,其實你在測「它背過沒有」。 一個背過考古題的學生,和一個真的懂的學生,在標準答案面前看起來一模一樣。

所以這份設計做的第一個決定,是刻意避開所有「網路上到處是教學」的題目。乒乓、貪吃蛇、俄羅斯方塊、打磚塊,全部淘汰。取而代之的,是幾款你沒聽過、現場設計出來的小遊戲——像是「在固定節奏裡閃過一道道會開關的閘門、把貨物送到終點」這種原創機制。沒有前例可背,AI 就只能真的去想。

那為什麼是「遊戲」?因為一款看似簡單的小遊戲,其實同時壓著一大堆能力:要接住玩家即時的按鍵、要算兩個東西有沒有相撞、要記得現在是「進行中」還是「結束了」(這在程式裡叫狀態機,你可以想成一台隨時知道自己停在哪一格的跳棋)、要能存檔、要能切換中英文、出了 bug 還要能除錯。一道題,就能同時逼出很多種能力。 這比出十道各考一項的零碎題,划算得多。

概念圖:一款小遊戲像一顆棱鏡,一束光打進去,散出「即時輸入、碰撞判定、狀態機、存檔、多語系、除錯」六道光。

更聰明的是,考題不只一種考法,而是三種,對應真實工程師的三種日常:

  • 從零打造:給你一張白紙,從頭做出一款小遊戲。考的是「無中生有」的能力。
  • 在別人的程式上加功能:給你一份已經在跑的程式,要你加一個新功能,還不能把舊的弄壞。考的是「看懂別人的東西、再動手」的能力。
  • 修別人留下的 bug:給你一份「有病」的程式,只告訴你「它哪裡怪怪的」,不告訴你病灶在哪,要你自己診斷、自己修好。這是最像資深工程師日常的一種折磨。

一個工程師厲害不厲害,本來就不只看他能不能白手起家,更看他能不能接手一坨別人的爛攤子。這三種考法擺在一起,才拼得出一張比較完整的能力地圖。


第二關:真正的魔鬼,藏在「公平」兩個字裡

好,題目有了。接下來才是這份設計真正下功夫的地方,也是我覺得最精彩的部分。

因為「讓兩個 AI 各寫一次、比誰好」這句話,每一個字都藏著陷阱。你只要有一個環節不小心,比出來的結果就是假的——看起來煞有其事,其實什麼都沒證明。

你到底在比「模型」,還是在比「一整包工具」?

這是第一個、也是最容易被忽略的陷阱。

一個 coding agent 不是只有一個 AI 大腦。它外面還包了一整層東西:它拿到什麼樣的指示、能用哪些工具、有多少時間跟預算、跑在什麼機器上。這一整包,設計者稱之為一個 bundle(組合包)。

想像兩個廚師比賽。如果一個用頂級廚房、一個用露營爐,就算最後菜的味道有差,你能說是「廚師」的差距嗎?不能,你只能說是「這一整套條件」的差距。

所以這份設計立了一條鐵律:只有在其他所有條件都一模一樣、只換中間那顆 AI 大腦時,你才有資格說這是在「比模型」;只要外面那層框架有任何一點不同,就只能老實說這是在「比兩整包 bundle」,不准把差異賴到模型頭上。 為了時時提醒自己別搞混,設計者從頭到尾拒絕替參賽者填上真名,只用兩個中立代號:Bundle ABundle B。連自己心裡覺得「這應該是那個有名的 AI 吧」,都不准寫進去。

這種克制,本身就是一種誠實。

先把考卷封進保險箱,考完不准回頭改分

第二個陷阱,關於人性。

人是很會騙自己的。如果你先看到成績,再回頭調整評分標準,你幾乎一定會不知不覺地偏心——「嗯,這題好像不該算這麼重」「輸的那個其實情有可原,補他幾分吧」。等你調完,結論早就是你想要的樣子了。

這份設計堵死這條路的方法,是借用一個叫**雜湊(hash)**的東西。你可以把它想成替一份檔案算出一枚獨一無二的「數位指紋」:檔案只要改動一個字,指紋就完全變樣。

於是他們在開考之前,把所有考題、所有評分標準、所有隱藏測試,全部算出數位指紋、鎖死封存。一旦封存,任何人都別想偷偷改了考題或分數還假裝沒改過——因為指紋對不上,一翻兩瞪眼。看到成績之後想回頭調權重?不行。想只補救輸的那一方、重跑一次挑個好成績?不行,規則白紙黑字寫著:要改就兩邊一起重來,不准只修輸家。

概念圖:一份考卷被算出一串數位指紋,鎖進保險箱;箱子上一道封條寫著「看到成績後不得再改」。

「請你不要偷看標準答案」——這句話一點用都沒有

第三個陷阱,是這整份設計裡我最喜歡的一段,因為它戳破了一個很多人以為有用、其實完全沒用的做法。

考試要打分,就得有標準答案(這份設計裡叫隱藏測試——一批 AI 看不到的題目,拿來偷偷檢驗它寫的程式對不對)。問題來了:怎麼確保這個「會自己動手用工具」的 AI,不會在考試途中自己翻出標準答案來抄?

一個沒經驗的人可能會這樣防:把答案放在隔壁資料夾、把資料夾名字取得很隱密、設定成「不要納入版本控制」、或者乾脆在指示裡寫一句「請你不要讀取這個檔案」。

這份設計的判斷非常冷酷:這些全都擋不住。 一個會用工具的 agent,可以用絕對路徑繞過去、可以用「往上一層」的指令跳出你劃的圈、可以直接把整顆硬碟掃一遍找檔案。你嘴上說的「請不要看」,對它來說連一道門都算不上,頂多是一張貼在空氣中的紙條。資料夾命名、隱藏屬性、版本控制的忽略清單、好聲好氣的請求——設計文件把它們一一點名,判定:這些只是「方便」和「減少誤觸」,不是真正的邊界

那什麼才擋得住?只有作業系統層級的隔離——把 AI 關進一間它從物理上就出不來的房間。這種房間有個俗名叫沙箱,講究一點的做法是給它一台獨立的虛擬機(在你電腦裡用軟體隔出來的、另一台假電腦,有自己的地基,跟外面的世界斷開)。標準答案放在牆外,AI 在牆內就算再聰明、再會用工具,也摸不到。

差別就在這裡:前面那些做法是「拜託你別過來」,後面這個才是「你根本過不來」。

概念圖:左邊一個 AI 面前貼著「請勿偷看」的紙條,卻伸手就能繞過去;右邊同一個 AI 被關進一間厚牆房間,牆外放著標準答案,怎麼伸手都碰不到。

快,但錯了,不該贏

還有兩個小而關鍵的堅持。一是速度和花費,不准算進「對不對」的分數裡。一個 AI 可能又快又省,但寫出來的是錯的;另一個慢吞吞、花了不少機器時間,卻真的做對了。若把「快」和「對」混成一個總分,快而錯的那個反而可能贏——這顯然荒謬。所以這份設計把「正確性」和「花了多少資源」拆成兩張分開的成績單,各看各的。

二是盲評。除了機器自動打的分,還有一部分交給真人評審看程式碼品質;但評審拿到的程式碼,作者名字全被塗掉——他不知道這段是 Bundle A 還是 Bundle B 寫的,只能就程式論程式。看不出是誰寫的,就沒辦法偏心。

到這裡,你應該已經感覺到了:這哪裡是「讓兩個 AI 各寫一次」那麼輕鬆。這是一套被層層設防、處處跟人性作對的嚴密工程。


那個「原來如此」:考試把自己攔了下來

現在,重點來了。

你可能會以為,這麼縝密的一套設計,接下來就是轟轟烈烈開跑、跑出一張漂亮的成績單、宣布誰是冠軍。

沒有。截至 2026 年 7 月 11 日,這套評測一個 AI 都還沒跑過。一場都沒有。

它把自己卡在了幾道關卡前面,動彈不得。而卡住它的,正是它自己定下的那些嚴格規矩:

  • 那台要拿來當考場的機器(一台 Windows 桌機)上,還沒有真正的「隔離牢房」——前面說的那種作業系統級沙箱、虛擬機,當下都沒有備妥。
  • 參賽者的身分還沒被正式核准,這場比賽要花的可觀機器時間與費用,也還沒被拍板。

而規則寫得清清楚楚:沒有真正的隔離,就不准開跑正式比賽。 於是這套系統做了一件很有骨氣的事——它自己亮起紅燈,把自己攔下。

這不是空口白話。我(本文的整理者,隸屬編輯部)在 2026 年 7 月 11 日,親自在那台 Windows 桌機上,把這套系統的自我檢查跑了一遍。以下是我親眼看到的:

  • 考場機器本身的自我體檢,四項全過。 系統驗證了幾件事:它替檔案算的「數位指紋」穩定可靠、它擋得住「往上一層偷跑」和「用絕對路徑繞路」這類越界動作、它在複製檔案時不會不小心把旁邊的機密一起帶出來——而且最關鍵的一項:在沒有強隔離的情況下,一張「正式成績單」必須自動判定失敗。 這一項通過,代表這套系統是誠實的:它被設計成「條件不夠就不准給正式分數」。

  • 開考前的體檢(設計者叫它 preflight),結論是一個大大的「不准」。 系統列出三條攔阻理由:①這台機器上還沒裝好任何一種隔離牢房;②光靠「複製白名單」「限定工作目錄」這類軟措施,擋不住一個會用工具的 agent;③參賽者身分與預算都還沒核准。

  • 然後是那個最容易被誤會的數字。 系統跑了一場「空殼煙霧測試」——用一個假考生(一個什麼本事都沒有、只是用來校準機器的空殼程式)走完整個流程。結果,隱藏裁判給了它 60 分滿分(60/60)

    請特別小心這個 60 分。它不是任何 AI 的成績。 它是考場拿一個空殼假人,來確認「我這套打分機器本身有沒有故障」的自我校準分數。就像考試前,監考老師先拿一份標準範本跑一遍計分程式,確認機器會加分、會運作——這跟任何一個真的考生考幾分,毫無關係。同一份報告裡,系統還老老實實標明了:標準答案「沒有」被掛進考場(確認 AI 碰不到答案)、當前的安全邊界等級是「無」、能不能開跑正式比賽?否。

概念圖:一面儀表板,左半邊四盞綠燈(單元測試、資料格式、假考生 60/60、答案未掛載),右半邊一盞刺眼的紅燈寫著「正式比賽:不准開跑」,下方三行小字列出三條攔阻理由。

把這些綠燈和那盞紅燈擺在一起看,你就看懂了整件事最動人的地方:

綠燈證明「考場的機器」是好的、內部一致的、誠實的。紅燈證明「這場考試還沒有資格開始」。而讓紅燈亮起來的,不是外力,是這套系統自己。


為什麼「肯攔下自己」,反而是它最可信的地方

我們太習慣用「有沒有結果」來判斷一件事做得好不好。跑出冠軍,叫成功;卡在原地、一個結果都沒有,直覺上像是失敗。

但這件事恰恰相反。

想想看:如果這套評測不夠嚴謹,它老早就開跑了。它可以把 AI 放進一個「請你不要偷看答案」的假房間,跑出一張漂亮的成績單,宣布誰贏了。沒有人會當場拆穿,因為那些破綻藏在很深的地方。快、好看、有結論——皆大歡喜。

真正嚴謹的那套,反而做不到這件事。因為它太清楚那些破綻在哪,清楚到它沒辦法對自己睜一隻眼閉一隻眼。它知道:在沒有真正隔離牢房的考場裡跑出來的分數,是不可信的;在參賽者身分和預算都還沒核准前開跑,是不負責任的。所以它寧可卡住,也不肯給你一個看起來很厲害、其實站不住腳的答案。

一套設計到極致的公平測試,它的門檻會高到連自己都還沒過得了。而「肯攔下自己」這件事,正是它值得你信任的證明。

這也是為什麼,這篇文章從頭到尾沒告訴你「哪個 AI 比較會寫程式」。因為到今天為止,這個問題還沒有答案——不是我不說,是那個答案根本還不存在,一場比賽都還沒跑。下次你在新聞標題上看到「某某 AI 屠榜、碾壓對手」,希望你會想起這間空無一人的考場,和門口那盞紅燈,然後反問一句:你的考場,有那間真正的隔離牢房嗎?考卷開考前封存了嗎?看到成績之後,有沒有偷偷回去改分?

一個結果漂不漂亮很容易看出來;但一個結果公不公平,藏在那些你看不到的、開考之前就該做好的功夫裡。而最誠實的科學,有時候長得不像一場勝利,而像一句「還不行,我還沒準備好」。

Read more