昨天那篇最後,我說紀錄表多了一欄:「由什麼產生」。
今天想再加一欄。
而且這一欄很麻煩,因為你只看最後成品,幾乎不可能看得出來。
第幾次。
我們常常會看到有人貼一張截圖,說某個模型成功做出了什麼。你照著做,結果做不出來。
原因當然很多。可能版本不同、提示詞不同、環境不同,也可能工具本身就不是同一套。
但今天我只想談一個很容易被忽略的問題:
那張成功的截圖,到底是第幾次跑出來的?
我目前把它寫成這樣:
測試結果只能直接支持已測條件;要把結果推到其他題目、其他執行,甚至其他環境,就必須另外交代假設。
這句話有一個前提:你是從有限幾次觀察,往更大的範圍推。
如果本來就有完整的形式保證,那當然是另一回事。
它也不是在說「模型一定會飄」。
如果一個系統在固定條件下本來就是確定性的,那同一題重跑二十次,二十次完全一樣,一點也不奇怪。這時候真正該變的,可能不是執行次數,而是題目或環境。
所以沒有變異,不代表這條律錯了;但反過來,也不能因為同一題跑很多次都一樣,就說這個系統在所有事情上都可靠。
還有一個更基本的限制:沒有真的跑過的實驗,就不能寫得像已經有結果。幾個模型、幾個題目的小樣本,也不能直接說成普遍現象。
今晚一開始,我不是做現在這個實驗。
我先挑了三題統計計算,兩個介面各跑五次,所以總共三十次。
結果二十九次答對。
當時看起來有一次錯了。
但我往下追才發現,那次其實不是模型錯,是我自己的題目有問題。
題幹寫的是:兩位評分者評了 60 個案例。
可是我附的矩陣裡,九個數字加起來只有 58。
模型選擇相信題目文字裡寫的 60。
換句話說,它其實沒有算錯。
所以那三十次做到最後,我才發現:什麼也沒量到。
有趣的是,反而是這個失敗把問題弄清楚了。
後來我又找了六個候選題來試。
有分母為零的樣本標準差、有埋反向計分的信度係數、有七條規格的字串函式,而且我還刻意把同一組規格分成條列版跟散文版;另外還有組合機率,以及從一段文字裡把所有年份找出來。
這些加起來,又跑了三十次。
結果全部答對。
一次都沒飄。
我後來才注意到,這些題目其實都有同一個特徵:
我要的不是一段「表現」,而是一段程式,或一個唯一答案的數字。
只要模型願意寫程式,很多難題其實可以直接暴力算。
難度被交給程式了。
而程式跑出來之後,至少不會因為「今天剛好手滑」就少算一個。
算式也是一樣。
所以我那時候開始覺得,也許我要找的變異根本不在「算不算得出來」。
最後我換成一個很人工的題目。
而且我直接規定:不能寫程式。
要求是寫三句中文,說明「為什麼一次成功不能證明一個方法可靠」。
同時要符合六個條件:
這題跟前面的差別很大。
它沒有唯一答案。
也沒有一個直譯器可以幫模型檢查。
六個條件只能靠它一邊寫,一邊自己記著。
我的判準則另外寫成程式。
六條全部符合才算通過,只要掉一條就是失敗。不看文筆好不好,也沒有部分分數。
提示詞、判準跟判分器,我都在第一次正式呼叫之前就提交到版本控制裡。正式開始之後沒有再改。
我也先寫好否證條件:如果二十次全部通過,或者二十次全部失敗,那我就不寫「有變異」,而是改寫成「這次沒有測到」。
模型是 Claude Haiku 4.5。
二十次獨立呼叫。
每一次提示詞完全相同。
有幾條其實很穩。
句數二十次全部正確。
第三句用問號結尾,二十次也全部正確。
「不能出現我」同樣二十次全中。
真正出問題的只有三條:
| 掉在哪一條 | 次數 |
|---|---|
| 漢字超過 60 到 80 個 | 8 |
| 出現中文數字「一」 | 6 |
| 把「觀測」寫成簡體「观测」 | 2 |
因為有些回答一次犯兩條,所以加起來會超過十一。
字數那八次有一個很一致的方向:
全部都是太長。
沒有任何一次低於 60。
最長寫到 96 個字。
二十次整體的字數範圍是 64 到 96。
「一」也很有意思。
六次大多數都不是亂跑出來的,而是出現在同一個詞:
「一次成功」。
偏偏我叫它回答的問題,就是「為什麼一次成功不能證明可靠」。
也就是說,題目本身把一個非常自然的表達放到了它面前,但規則又禁止它使用那個字。
這種錯不像「不會」,比較像它在生成過程裡沒有一直把所有條件都抓在手上。
假設現在有人問:
「這個模型到底會不會做這件事?」
我手上有這二十次。
如果只看第一次,你會得到:
| 你怎麼看 | 你會說 |
|---|---|
| 只看第一次 | 不會,我試過了 |
| 只看最好的一次 | 會,你看,它做得到 |
| 二十次全部看 | 二十次裡有九次通過 |
這三句其實都沒有造假。
問題是,它們呈現的是完全不同的東西。
而且很剛好,第一次就是失敗的。
那次有 89 個字,而且用了「一」。
所以如果我當時只跑一次就停,今天這篇文章的方向可能會完全相反。
正式跑二十次以前,我為了確認這題值得用,先試了六次。
那六次裡面,有五次通過。
然後正式二十次,只有九次通過。
同一個模型。
同一個提示詞。
同一個晚上。
前一批是六分之五,後一批是二十分之九。
我不覺得這件事本身有什麼神祕。
六次本來就是很小的樣本,晃很大完全正常。
但也正因為如此,它剛好變成一個很好的例子。
如果我當時覺得「喔,五次都可以耶」,然後直接拿那六次當結果,整篇文章裡看到的成功比例,會漂亮非常多。
差不多快一倍。
第一,這題是我挑出來的。
這很重要。
前面那些題目就是因為太穩,我才沒有拿來做正式實驗。
所以現在的結果只能說:我找到了一種會出現執行變異的題目。
它不能直接推出「這個模型普遍都很不穩」。
第二,我不知道實際取樣溫度。
這二十次是透過命令列工具的代理呼叫跑的,我看不到,也不能設定後面的 sampling temperature。
聊天視窗是不是同樣設定,我不知道。
所以這裡的九比十一,不能直接搬去當成你在聊天介面裡的成功率。
第三,這六個條件本來就不等難。
句數很穩。
問號也很穩。
字數和「不能出現一」明顯難很多。
所以最後那個二十分之九,不是一個什麼抽象的「模型可靠率」。
它只是這個模型,在這一題、這六條規則、這個執行環境裡的結果。
條件一換,比例就會跟著換。
如果要讓它可以被否定,我目前會這樣寫。
找一組有明確對錯的題目,每一題都重複執行。
如果每一題最後不是永遠全對,就是永遠全錯,而且:
「只看第一次」
「只看最好的一次」
「看全部執行」
三種看法最後得到的資訊都一樣,那麼至少對這組題目而言,重複執行就沒有增加資訊。
今晚前面的那批計算題,其實就很接近這個情況。
後面這二十次不是。
我覺得這兩個結果放在一起,反而比只留下會飄的那組更重要。
因為差別不一定在模型。
也可能在題目。
不是「你的 prompt 是什麼?」
也不一定先問「你用哪個版本?」
我現在會先想問:
這是第幾次跑的?
還有:
你總共跑了幾次?
其實只差這兩個數字。
但如果沒有它們,一張「第一次就成功」的截圖,和一張「跑了二十次挑最好的一次」的截圖,在畫面上完全沒有差別。
這就是為什麼,我的紀錄表今天又多了一欄:
第幾次。
耗時看得見。
最後結果看得見。
模型名稱通常也看得到。
但第幾次,往往只有執行的人知道。
而且一旦沒有記下來,事後幾乎不可能從成品裡推回去。
本文的協作紀錄是:提示詞、判準與判分器都在第一次正式呼叫之前提交,之後沒有修改;二十次原始輸出逐字保留,判定由程式執行,作者沒有逐條人工核對。今晚最早那三十次,以及後來被淘汰的六個候選題,也都留在實驗目錄裡,沒有刪掉。
文章由 Claude 根據作者整理的寫作規則起草。
這篇沒有做 Day 2 那種六個審查者的檢查。
下一篇想談另一個問題:
字數對了、格式也對了,為什麼文章還是沒有幫上忙。