
前兩天在一個交流群里有人發了一張截圖某個號稱接入GPT-4的在線工具回答一道小學數學題時算得離譜。群里有人提醒他“換個測試題驗一下”結果那邊折騰半天只回了一句“應該是模型還沒更新”。這種情況我這兩年見得太多了——套殼平臺、中轉接口、共享Key頁面上按鈕寫著GPT-4背后真正轉發到的是什么模型用戶根本無從分辨。與其相信平臺標注不如自己動手驗明真身。我長期用的方法就是三道精心設計的測試題分別從邏輯推理、反常識設定和代碼質量三個維度去觸發模型的高層能力幾分鐘之內基本能判斷它到底是GPT-4還是GPT-3.5。1. 為什么我靠“三個問題”而不是看模型名稱來判斷1.1 模型名稱從不值得信任先潑一盆冷水你現在打開任何一個聲稱“GPT-4”的網頁、App、API轉發服務界面上顯示的模型名稱都說明不了任何問題。原因很簡單——模型名稱只是一個字符串它是服務端配置的不是客戶端能驗證的。市面上存在大量中轉站他們從官方API拿額度然后以更低的價格轉賣給終端用戶。這些中轉站完全可以做到你請求時發的是“gpt-4”但他在后端配置里悄悄改成了“gpt-3.5-turbo”只要他的代碼沒問題你永遠看不出來頁面上的標識是假的。更常見的情況是共享Key和負載均衡同一個Key背后可能有多個上游渠道高峰期的時候把流量切到便宜的舊模型上對外依然是“GPT-4”。所以我的原則很簡單不看牌子上寫什么只看它產出什么。模型的行為輸出才是唯一的證據。這就跟驗貨一樣包裝盒再好看打開嘗一口就知道是不是正品。1.2 一套好測試題必須滿足的三個條件這些年我在不同場合幫人“驗貨”前前后后試過幾十種題目最后留下的就這三道。它們有一個共同的設計邏輯測推理不測知識測過程不測結果測變體不測原題。測推理不測知識知識性題目比如“法國首都是哪里”會被模型直接背下來不管哪個版本都能答對。推理題要求模型現場做多步驟運算和邏輯判斷這個能力很難偽裝。測過程不測結果一道題的價值不在最終答案而在于模型給出的推理過程。GPT-4經常會在給出結論前先做條件分析甚至主動指出題目本身的歧義這是GPT-3.5極少出現的行為。測變體不測原題網上流傳很廣的“鑒別題”比如“母雞過馬路”之類的大概率已經被兩個模型都背下來了。要做判斷必須把數字、人物、場景全部換掉讓模型無法從訓練數據里直接檢索答案。另外一個容易被忽略的因素是溫度參數。API調用時如果temperature設得高模型輸出會隨機波動同樣一道題可能這次答對、下次答錯。我建議測試時把temperature設為0關閉隨機性這樣得到的回答才是模型確定性最高的表現。2. 問題一那個星期幾的推理題究竟在考什么2.1 題目與標準推導第一道題是這個如果昨天是明天的話就好了這樣今天就周五了。請問今天實際星期幾這道題看著短考的東西一點都不少。它本質上是一個時態邏輯題需要你在“實際時間線”和“假設時間線”之間來回切換。先說關鍵點這道題是有歧義的不同解讀會得到不同答案。一種主流解讀得到的答案是周三。推理過程如下在假設成立的那個世界里“今天”是周五。如果假設世界里今天是周五那假設世界里的昨天就是周四。題中說“昨天是明天”意思就是真實的“明天”等于假設世界里的“昨天”也就是周四。真實的明天是周四那么真實今天就是周三。另一種解讀得到的答案是周日。如果“昨天是明天”理解為“希望昨天趕快過去、明天早點到來”也就是把時間往前提兩天那當假設成立時今天變成了周五此時真實的今天應該是在周五的基礎上往后退兩天也就是周日。兩種答案都有人支持這不是重點。重點是模型怎么處理這個歧義。2.2 兩種模型在行為上的常見差異我拿這道題測試過很多次GPT-3.5和GPT-4的表現輪廓非常清晰。GPT-3.5的典型表現是看到題目立刻給出一個具體答案最常見的是“周日”或“周五”。其中“周五”這個答案是最典型的錯誤——它直接把“這樣今天就周五了”當成事實來用而忽略了題目問的是“實際今天”。更關鍵是它幾乎不會告訴你這道題存在兩種解讀。你問它“確定嗎”它可能換一個答案但依然不會解釋歧義在哪里。GPT-4的表現通常是先指出“這道題在理解上有歧義”然后列出兩種不同解讀分別說明各自會推出什么結論最后再告訴你如果按常見理解是哪一種。整個過程像在做一個結構化的邏輯分析而不是急著給你一個答案。這個差異背后其實反映了一個很重要的事實GPT-4在處理語言歧義時更傾向于先建立“可能世界”的框架再在這個框架里逐一推演而GPT-3.5更傾向于直接識別問題的表層模式然后從訓練數據中匹配一個最像樣的答案。2.3 防背誦變體怎么改才能讓模型“裸考”原題在網絡上傳播太廣我懷疑兩個模型都可能見過。所以真正測試時我從來不發原題而是做變形處理。最簡單的變法是換星期。比如把“周五”換成“周二”如果昨天是明天的話就好了這樣今天就是周二了。請問今天實際星期幾這樣一改模型沒法從記憶里直接檢索“它是周日/周三”必須重新推演。GPT-4依然能列出兩種解讀而GPT-3.5大概率會直接給出一個沒有推導過程的答案。更強的變形是換整個表達結構。比如假設明天變成了昨天那么今天就會是周四。請問真實的今天是星期幾這種繞口令式的問法考察本質和原題相同但表述層面完全不同模型只能靠純邏輯推導來做。測試下來GPT-3.5翻車的概率會明顯提高。3. 問題二用“反常識設定”逼模型展示推理過程3.1 題目與背后的“信息類型重解釋”第二道題大家可能見過1955原版但我測試時從來不用原版數字。我的版本是有個人出生年份和去世年份都是1947年但他去世時已經80歲。這可能嗎請解釋。乍一看這題像是一個數學矛盾題——同一年出生、同一年去世年齡怎么可能是80歲但玩過腦筋急轉彎的人都知道這里的陷阱在于“1947”未必是年份它也可以是房間號、病房號、軍營編號、列車車廂號。比如可以這樣解釋這個人出生于1947號病房也去世于1947號病房享年80歲。這樣一來“1947”和年代沒有任何關系矛盾自然消失了。這道題之所以適合用來鑒別模型是因為它考察的是一種非常重要的能力當信息在常識框架下相互沖突時模型能不能主動嘗試對這個信息進行類型重解釋。換句話說面對矛盾的陳述是死守在默認的“年份”語義里繞圈還是有能力跳出預設框架尋找另外的解釋路徑。3.2 回答差異與打分思路根據我的測試經驗GPT-3.5面對這類題最常見的回復是“這是不可能的因為一個人不可能在同一年出生和去世卻活了80年。”它會把問題當作數學邏輯硬傷來處理。如果繼續追問“你真覺得不可能嗎”它可能會開始編造一些牽強的解釋“也許他出生于1947年1月1日去世于1947年12月31日但是……這依然不可能是80歲?!边@種回復暴露了一個問題模型知道題目有坑但找不到坑在哪里。GPT-4的表現就明顯更有方向。它通常會先承認“如果1947是年份確實矛盾”然后立刻轉折“但如果1947不是年份而是房間號、病房號之類的東西那就可以解釋了。”有的回答還會主動補充一種更巧妙的設定“假設‘1947年’指的是一個養老院或收容所的編號這個人住在1947號房間一生都在那里度過。”我在實際操作中會按下面這個標準給回答打分表現分數直接說“不可能”不給任何變通解釋0分承認矛盾但解釋牽強比如生日和忌日夾在年底年初1分主動提出“編號/房間號”等類型重解釋并邏輯自洽2分給出多種合理解釋并說明哪種最合理3分一般來說得分在2分以下這臺服務基本可以判斷為GPT-3.5級別。3.3 同類型變體兩則這類題的設計核心是“制造語義沖突逼模型重解釋”數字可以隨便換對象也可以變。我常用的兩個變體第一把“人”換成“書”一本書的出版年份是1888年但作者的出生年份也是1888年。這可能嗎答案同樣是重解釋1888可以是版本編號、ISBN編號、印刷廠車間號不一定是年份。模型如果能聯想到這一點說明它理解了題目的機制而不是背誦了某個固定的謎語答案。第二把“年份”換成“軍銜編號”一名老兵墓碑上刻著“生于1920卒于1920享年91歲。”這可能嗎這里“1920”可以理解為公墓的區排編號。這種變體更隱蔽因為墓志銘語境里“1920”確實容易讓人默認是年份模型必須非常敏銳才能想到編號解釋。4. 問題三代碼題的隱藏考點不只是“能跑”4.1 基礎題目與考察點第三題是給技術背景讀者準備的也是我目前判斷力最強的一道題。題目如下寫一個Python函數接收一個字符串列表返回所有以元音字母開頭且長度大于3的字符串按字符串長度升序排列。請考慮空輸入、大小寫不一致、列表中混入非字符串元素的情況。如果只看“代碼能不能跑”GPT-3.5也能寫出來所以這道題的鑒別力不在基礎功能而在以下幾個隱藏考點大小寫處理字符串可能以大寫元音開頭比如“Apple”模型有沒有主動調用lower()做歸一化非字符串元素列表里可能混入數字、None模型有沒有用isinstance過濾排序穩定性題目要求“按字符串長度升序排列”長度相同的字符串要不要保持原始順序這需要模型主動意識到Python的sorted是穩定排序。邊界輸入如果是空列表函數是否直接返回空列表而不是拋異常GPT-3.5給出的代碼我經??吹侥芡ㄟ^測試用例但完全沒有處理非字符串元素或者直接對元素調用了.lower()列表里一旦有數字就會崩。GPT-4的代碼則通常會包含類型注解、isinstance過濾、顯式的keylambda s: len(s)最后還會附帶幾個測試用例。4.2 進階題目內存受限場景基礎代碼題對GPT-4和GPT-3.5的分辨率已經不錯但對更早的模型或某些微調版本可能還是不夠。我偶爾會用一道進階題做交叉驗證在內存只有10MB的服務器上需要統計一個5GB文本文件中出現頻率最高的前100個單詞。請寫出你的思路并給出核心代碼。這道題沒有標準答案考察的是模型能不能想到“流式處理”“分塊讀取”“Counter 最小堆維護Top100”這些工程手段。GPT-3.5很容易直接寫出一個read()讀取全部文件內容的代碼這在5GB文件外加10MB內存的場景下直接爆掉。GPT-4則通常會說出三點不能一次性讀入內存、要按行或按塊遍歷、用大小為100的最小堆來維護高頻詞。4.3 打分標準別只看代碼能不能運行我遇到不少朋友問我“代碼題跑一下不就行了”問題在于這種級別的代碼題兩個模型寫出來都能跑關鍵在于誰考慮得更完整。所以我做了一張簡單的打分表評分項說明分數功能正確性主要功能是否實現、排序是否正確0-2分邊界處理是否處理大小寫、非字符串、空輸入0-2分測試用例與解釋是否主動附測試用例、是否說明復雜度0-2分工程意識是否有類型注解、是否使用穩定的排序方式0-1分總分4分以上更像是GPT-4的表現低于3分大概率是GPT-3.5或者更基礎的模型。這當然不是絕對標準但拿來當快速過濾條件已經夠用了。5. 這套測試法的邊界、反例和提升可靠性的技巧5.1 四個會讓測試結果失靈的常見原因這套方法我在實際使用中成功率不低但絕不是萬能的。以下幾個風險必須說清楚。第一模型本身在進化。GPT-3.5的某些最新版本可能已經加入了大量推理數據邏輯能力比以前強了一截。反過來GPT-4的某些蒸餾版或輕量版表現也可能低于預期。所以這套測試更適合在“某個平臺宣稱自己是GPT-4”時做快速抽檢而不是作為學術論文級別的模型鑒定標準。第二溫度參數會干擾結果。前面提過temperature設太高同一個提示詞每次的輸出都不一樣可能這次碰到正確答案下次就答偏了。一定要在可控環境下測試。第三原題被背熟。任何在網上流傳超過半年的“鑒別題”大概率都進了訓練語料。直接發原題等于開卷考試GPT-3.5也能把答案背出來。所以我前面才反復強調變體測試。第四對話歷史會給模型“遞消息”。如果你在提問之前先來了一句“你是GPT-4對吧”然后才拋測試題模型會因為輸入中的身份暗示而調整回答風格。測試時盡量用干凈的會話不要夾帶預設。5.2 我常用的完整測試流程如果你想復現這套方法我建議按下面的流程操作新開一個會話不發送任何系統提示詞和身份設定。如果是API調用把temperature設為0max_tokens設置得足夠長至少500。三道題分開問不要一次性全部提交避免前一題的推理邏輯影響后一題。不要只看最終答案重點觀察有沒有“指出歧義”“主動追問”“補充邊界條件”這類行為。如果某個回答讓你猶豫把題目換一個變體重測一遍。兩次都糊基本可以斷定不是GPT-4。我見過有人只測一道題就下結論這種做法誤傷率很高。三道題組合判斷任何一道出現明顯的高水平推理特征這臺服務就值得繼續觀察三道題全部像背誦答案那就基本不用抱太大希望。5.3 最后的經驗之談在前幾個版本的模型之間反復橫跳測來測去我發現所謂“驗明真身”其實測的不是模型記住了多少東西而是它面對未知和矛盾時的思維習慣。一個模型在歧義面前是停下來反問還是硬著頭皮給答案在矛盾面前是固守預設還是主動換解釋路徑在工程題上是寫完核心邏輯就收手還是會想邊界、補測試、談復雜度——這些習慣才是GPT-4和GPT-3.5之間最穩定的分野。以后你再遇到哪個平臺說自己跑的是GPT-4不用去翻官方文檔把第一道題的“周五”換成“周二”把第二道題的“1947”換成別的編號把第三道題的列表里塞一個None進去幾分鐘之內它到底有幾斤幾兩其實藏不住。