
要 AI 寫東西,不滿意就再跑一次:這是所有人都會做的動作。跑五次,挑最好的那份,聽起來很合理:反正生成便宜。
今天不做新實驗,把前二十八天累積的產物重新排一次,回答這個問題。
答案是彆扭的那種:兩邊都不順著直覺。
三次獨立生成,盲區開在完全相同的位置。
這批跟昨天那十份不同。更早那一輪要 AI 照規格寫具體的測試(寫死期望值那種,不是蛻變關係),同樣是兩臺模型各跑五次,三份通過門檻的拿去跑十四個變異體:
單獨變異分數 85.7% 85.7% 85.7%
存活的變異體 M11、M14 M11、M14 M11、M14
不只分數一樣,活下來的是同一批。跟人寫的那套漏的不是同一對(人漏 M09、M14),但三份 AI 產物彼此一模一樣。當時的紀錄寫了一句:盲區不是隨機的。
第二筆更誇張。第一幕驗屍的時候發現,年報酬率直接除以 12 當成月利率這個寫法,出現在三個獨立生成的檔案裡、總共七次。每一次要 AI 做月複利,它就給這個寫法。
這不是打錯字,是穩定行為。
第三筆是前幾天量到的:十份產物,全部寫了同一條在受測實作上永遠不會紅的斷言。十次獨立生成,十票投給同一個判斷。
三筆裡一筆是它產的程式、兩筆是它產的測試,放在一起指向同一件事:不管產的是哪一種,它錯的地方不是抽籤決定的。
換個角度看同一批產物,畫面完全不同。分界先講清楚:上一節是它看不見的地方,不管怎麼生成都看不見;這一節是它有得選的地方,這次這樣、下次那樣。
十份裡只有一份寫了金額負值的校驗測試。而那一份,剛好補上了人寫的測試套組漏掉的一格:那一格漏了是因為二十三組案例沒有一組餵過負值。
一份寫了,九份沒寫。而提示詞對這件事根本沒有要求。
第二筆在第一幕。當時解剖的是一支有缺陷的計算機,但同一個模型還生成過另一支:
同一個模型,另一次生成,用一個更簡單的架構完全繞過了整個問題。
它會寫。它只是在功能變多的時候,選了一條會分岔的路。
同一臺模型、同樣的任務,一次踩進去了,一次繞過去了。
兩條推論,各打一半。
一、想靠多跑幾次補洞,行不通。
因為它犯的錯很一致。跑五次,得到五份在同一個位置開洞的產物。這不是說五份完全一樣(它們各自多殺掉的變異體並不相同),而是說那個洞,五份都有。你把五份疊在一起,那個洞還在。挑「最好的那份」也沒用:在盲區這件事上,它們沒有好壞之分,它們一樣。
這也回答了一個更早的問題:為什麼前面那些天要花力氣造尺。因為你沒辦法靠抽樣繞過它:抽再多次,抽到的是同一個洞。
二、但也不能只驗一份,就當每份都這樣。
因為它多補的東西每次不同。這一份寫了負值校驗,下一份可能沒寫。你驗收過的那一份不代表下一份,尤其當「這一份多做了什麼」剛好就是它的價值所在。
合起來是個不太舒服的結論:
重複生成救不了你,但你也不能只看一份。
一、不要用「再生成一次」當作修 bug 的手段。
如果第一份有結構性的問題(兩段程式對不起來、某個欄位從來沒被檢查),第二份很可能一樣。值得重跑的是「這次它剛好寫得比較亂」那種,不是「這次它算錯了」那種。
分辨方法:看那個問題是「它沒做」還是「它做錯」。 沒做的(沒餵負值、沒寫校驗),換一份可能就有;做錯的(/12、恆綠斷言),換幾份都在。
二、把「這一份多做了什麼」記下來。
九份沒寫負值校驗,一份寫了。如果你只留了沒寫的那份,你會永遠不知道還有這一格。生成多份的價值不在挑最好的,在看它們的差集:哪一份做了別份沒做的事。
三、驗收要驗你手上這一份。
不是「這個模型可不可靠」,是「這一份產出長什麼形狀」。前者問不出答案,後者查得出來。
寫這篇之前我對這件事的想法是反的。
原本的骨架是「同一個模型、不同次生成,危險程度差很多,所以要逐份看」。寫到一半去翻資料,翻出那三個 85.7%,存活集合還完全相同。我的命題被自己一週前記下來的東西推翻了。
而且那份紀錄裡本來就寫了「盲區不是隨機的」這句話。我當時寫下它,然後忘了。
這大概是做這種長系列最奇怪的體驗:你的主要資料來源是幾週前的自己,而那個人記下來的東西比你現在記得的多。留 manifest 的理由本來是怕數字抄錯,實際救到的是結論。
這些數字不能拿來做什麼
/12、十份的 10/10:樣本都很小,而且都來自同一家的模型、同一個題目逐輪的原始輸出在各天的 manifest.yaml。
只帶走一件事
生成多份的價值不在挑最好的那份,在看它們的差集。
相同的部分是盲區,不同的部分才是資訊。
三十天走到這裡,方法都建好了,尺也都造了。
剩下的是把它們整理成一張可以帶走的清單,以及回去修那支程式。
今天的 repo:https://github.com/eyelash500/2026_ironman_test_ai/tree/day29