Claude Haiku 5.5 發布的隔天,我們用同一個模型評估了兩個產品。
其中一個,當天就把正式站的回答換成了它。另一個跑完評估,決定不換;隔天我們用更嚴格的規則重跑一次,還是不換。
這不是兩個產品意見不同,而是同一個模型、同一套評測紀律,量出了相反的結果。值得寫下來的有兩件事:結論為什麼會相反,以及我們怎麼讓這兩個相反的結論都站得住腳。後者更重要,因為模型評測有個老毛病:看到數字之後,規則會悄悄往想要的方向挪。
兩份成績單
Twinchat 是官網上的檢索式問答機器人(它的檢索怎麼出過錯,寫在 RAG 那篇)。每則回答都由撈回來的幾段知識庫文字寫成,並以串流送出。上線門檻有 13 項;我們讓原本的 Gemini 3.5 Flash-Lite 與 Claude Haiku 5.5 在同一份題目、同一版提示詞上各跑三次:
| Gemini(原本) | Haiku 5.5 | |
|---|---|---|
| 13 項上線門檻 | 沒過(1 個關鍵案例) | 全過 |
| 答案正確率 | 98.2% | 100% |
| 忠實度 | 100% | 100% |
| 拒答準確率 | 100% | 96.9% |
| 延遲 p50/p95 | 2.03/3.18 秒 | 1.57/2.24 秒 |
| 這輪評測的答案花費 | 1 | 約 0.47 |
更準、更快、答案花費約一半,只輸在拒答準確率。(這一版提示詞改過:原本只在拒答時才要求模型宣告,改成每則回覆都要宣告,兩個模型都用同一版重跑。第一輪 Claude 在這件事上掉了分,那是另一個故事。)當天,正式站的回答換成了 Haiku,Gemini 退成挑戰者,繼續用同一份題目量測。
同一天,Twinco 做了第一輪評估。Twinco 是 LINE 上的助理:一則訊息進來,模型要決定直接回,還是叫工具(日曆、記帳、天氣……);選了工具還要填日期與參數;結果再寫成一則幾十個字的短訊。111 題,每題三次,三次全過才算通過:
| Gemini(現行) | Haiku 關思考 | Haiku 開思考 | |
|---|---|---|---|
| 通過題數(/111) | 108 | 93 | 105 |
| 單次呼叫 p95 | 約 1.5 秒 | 約 2.7 秒 | 約 3.4 秒 |
| 含 Markdown 的回覆 | 0 | 13 | 11 |
三項指標,Haiku 沒有一項贏。關掉思考,它會把「請問標題是什麼」問回給已經講過標題的人;打開思考,準確率追到 105,延遲卻更慢。
同一個模型,同一天,為什麼?
| Twinchat | Twinco | |
|---|---|---|
| 工作 | 從給定的段落寫出答案 | 選工具、填參數,再把結果寫成短訊 |
| 一輪的輸入 | 約 3,200 tokens | 約 2,000~2,700 tokens(含工具宣告) |
| 輸出 | 串流的長回答 | 很短(選工具那輪不到 100 tokens) |
| 思考 | 關掉,正確率仍是 100% | 關掉少 15 題,開著變慢 |
| 時間花在哪 | 生成速度(Haiku 較快) | 讀提示詞、網路往返、思考 |
差別不在模型,在工作的形狀。這句話容易說,難的是:你得在看到數字之前,就決定哪一種形狀的證據算數。
第一份結果,我們自己就不信
那份評估的結論是「不做」,而它自己就寫下了重測之前該先做的三件事:開思考、補上「不要用 Markdown」的規則、把「先追問」類的規則改成說明契約。換句話說,我們量到的是用它最弱的設定,在一套為另一個模型磨了兩個月的流程裡上場的 Haiku。
這樣的結論不夠格當成決定。所以隔天我們重做,而這次的重點不是跑得更多,是在跑任何一題之前,先把規則寫下來並提交。
規則長這樣:
- 一、淘汰(任何一條不過就出局)
- 錯誤、逾時、拒答合計不超過 1%。
- 整輪 p95 對同場基準的倍數,bootstrap 95% 區間的上界不超過 1.5;p99 不超過 10 秒。
- 品質題的輸出:Markdown 至多 1/90,英文或推理外洩、簡體字都是 0。
- 二、不比現在差
- 路由題的嚴格通過數(三次全過才算)不低於基準減 3,且 McNemar 檢定沒有顯著變差。
- 日曆寫入、記帳金額、天氣縣市等類別,沒有新的穩定失敗。
- 三、值得換(跨供應商)
- 兩位評審都判同一邊,或整輪 p95 不超過基準的 0.8 倍;另外要有人明確接受固定成本。
- 都沒過:維持現行,並寫下重測條件。
這幾條裡有四個設計值得拆開講。
打平就不換。 換的代價不對稱:同一家換版幾乎零工程;跨供應商要先拆出供應商介面(估計 11~20 個工作天)、重做額度換算,還要改隱私權政策並讓會員重新同意。所以規則寫的是「打平=不換,跨供應商要明確勝出」。這條在看到任何數字之前就寫得出來,因為它只取決於成本結構,不取決於結果。
先淘汰,後比品質。 延遲不需要評審,幾分鐘就量得出來;品質要請兩位評審正反兩種順序各判一次,再加人工盲評,貴很多。把便宜的關卡排前面,淘汰的模型就不進評審——這次三個挑戰者都在第一關出局,省下了預估花費的一半以上。代價要寫明:沒跑評審,回覆好壞沒有結論,表上只看得到格式與有沒有亂加數字。
題目也要先寫好。 路由題是既有的 114 題加 25 道新題。新題在跑任何挑戰者之前寫好,因為既有題目是一題一題照現行模型的失敗長出來的——只用它們,等於讓考卷站在現行模型那一邊。整個實驗只送合成資料,沒有任何會員的訊息、行程或帳目。
意外照時間記,不回頭改。 正式跑之前的冒煙與試跑,發現兩處跟登記不同:Gemini 3.8 Flash 對最低的思考層級一律回 400,那個變體只好取消;回覆品質那個階段改成五個變體全跑,緊接在路由階段後面、同一個尖峰,因為整輪延遲要用它的第二輪延遲去組,分開時段會把排隊差異混進倍數。這兩件事照時間記在文件末尾,登記的內容原樣不動;第二件還多補一條——送評審的設定照第一階段決定,不看這一階段的結果來挑。
結果:第一關就出局
基準用的是補了格式規則的那一版提示詞(P1,原因在後面)。Haiku 的 low、medium 是思考的 effort 設定。
| 現行 | Haiku low | Haiku medium | Gemini 3.8 Flash | |
|---|---|---|---|---|
| 錯誤/逾時/拒答 | 0 | 0 | 0 | 0 |
| 整輪 p95 | 1.75 秒 | 3.33 秒 | 3.81 秒 | 7.86 秒 |
| 對基準的倍數(95% 區間) | — | 1.90(1.74~2.05) | 2.17(1.98~2.53) | 4.49(3.91~5.76) |
規則要求區間的上界不超過 1.5。三個挑戰者連下界都超過了,這不是邊界案例。
怎麼知道這不是抖動?我們多量了一組 A/A 對照:同一顆模型,只差一份提示詞。它對基準的倍數是 1.13(區間 1.04~1.29)。同一個模型也量得出 13%,代表區間低估了同時段的波動——但 1.9 與 4.5 遠在這個範圍之外,夜間的試跑(每個變體 30 筆)方向也一致。
準確率這一欄,反而是打平:
| 嚴格通過(139 題) | 比基準差/好(題數) | McNemar p | |
|---|---|---|---|
| 現行(原提示詞) | 136 | 3/1 | 0.63 |
| 現行(P1,基準) | 138 | — | — |
| Haiku(low) | 136 | 3/1 | 0.63 |
| Haiku(medium) | 135 | 4/1 | 0.38 |
| Gemini 3.8 Flash | 134 | 5/1 | 0.22 |
沒有一個顯著變差。「Haiku 比較笨」不是這張表能支持的結論,它輸在時間。Gemini 3.8 Flash 則連第二關也沒過:134 低於基準減 3 的 135。同家升級幾乎零工程,卻是三個裡面最慢的一個。
時間花在哪
整輪 p95 只告訴你慢,不告訴你慢在哪。所以另外量了地板延遲:極短的請求各送 20 次,把網路與排隊,從思考與輸出裡拆出來。
| 地板 p50(尖峰) | 第一輪 p50/p95 | 第一輪輸出 token(其中思考) | |
|---|---|---|---|
| 現行(基準) | 0.63 秒 | 0.78/1.14 秒 | 45(0) |
| Haiku(low) | 0.94 秒 | 1.25/3.04 秒 | 183(79) |
| Gemini 3.8 Flash | 2.41 秒 | 2.29/6.65 秒 | 94(32) |
Haiku 的網路與排隊只多了 0.3 秒。p95 的差距來自思考與較長的輸出:同樣一次工具選擇,輸出 token 是 4 倍。Gemini 3.8 Flash 則是另一個故事:極短的請求在尖峰就要 2.4 秒,那是服務端的排隊,跟我們的請求大小無關,沒有任何提示詞改寫救得了它。
這也解釋了 Twinchat 為什麼相反。那邊的答案是長的、串流的、不需要思考,生成速度是主要成分,Haiku 的優勢剛好用得上;Twinco 的主呼叫只輸出幾十個 token,生成速度幾乎不是成本,剩下的是讀提示詞、往返網路,還有 Haiku 非開不可的思考。每多一次模型往返,就多一份這樣的延遲——這也是按鈕那篇索性讓按鈕跳過模型的原因。
現行模型有看不見的主場優勢
第一輪評估裡最有價值的觀察,不是 Haiku 哪裡弱,而是我們的提示詞與流程哪裡在替現行模型補洞。
- 工具描述裡到處是「缺少標題就先追問,不要自行猜測」。那是衝著 Gemini 愛自己補資訊寫的。Haiku 的傾向剛好相反、又更照字面聽話,同一句話把它推向多問:「刪掉明天的會議」被判成沒有標題。
- 流程刻意讓模型「資訊不全也先叫工具」,再由程式掛按鈕追問;修改行程則是模型直接叫修改工具,由程式用使用者講的名詞去找行程。挑戰者共同的失敗都出在修改行程:Haiku 先問「原本幾點」,Haiku 開 medium 與 Gemini 3.8 Flash 則先去查行程。它們的選擇本身說得通,只是不符合這套流程的契約,而題目的期望值也是照這個契約寫的。
要分清兩種東西:契約是流程對下游的承諾(資訊不全也先叫工具,程式會追問);補丁是衝著某個模型的毛病寫的(不要自行猜測)。公平的比較要先把補丁改寫成契約的語言,而且——這一點最容易漏——同一份改寫也要套在基準上。
我們把這份改寫叫 P1:主提示詞補上回覆格式的規則與「資訊夠就叫工具」的規則,三份行程工具描述裡的「先追問」改寫成與實際行為一致的契約。套在基準上之後,現行模型也變好了:
| 現行模型 | 原提示詞 | P1 |
|---|---|---|
| 路由題嚴格通過(/139) | 136 | 138 |
| 品質題含 Markdown 的回覆(30 題各三次) | 7 | 0 |
| 回覆裡的數字不在工具結果裡 | 12 | 1 |
| 回覆字數中位數 | 111 | 59 |
「新增行程沒講時刻」那一類從 0/3 變成 3/3。原本的提示詞對現行模型也有疏漏,只是它剛好沒踩到。主場優勢有一部分,是沒有人替它寫下來的規則。
我們沒有把 P1 帶進正式提示詞:字數中位數從 111 掉到 59,是精簡還是過短,要評審或盲評才知道,而這一輪沒有跑評審。
token 是供應商自己的尺
Claude 數同一段繁體中文,token 是 Gemini 的 1.58 倍(Twinchat 用兩家各自的免費計數端點,對四份知識庫文件量出來,每份落在 1.54 到 1.63 之間);Twinco 帶著工具宣告的請求量出來是 1.63 到 1.67。每個 token 的單價便宜 3 到 5 倍,被這個倍數吃掉大半,每輪成本只便宜約四成。Gemini 3.8 Flash 則是現行的 2.6 倍,供應商宣布的調價生效之後是 5.2 倍。
成本倒是其次。更麻煩的是所有拿 token 當單位的東西,換了供應商就換了一把尺:
- Twinco 的會員額度以 token 計。不處理的話,同一則對話扣得多 58% 以上,會員實際用得到的則數掉到約六成,畫面上寫的「約 N 則」卻不變。真要換,額度得改扣「Gemini 等價 token」:每個模型一個係數,扣額度時用原始 token 乘上它。代價是係數只是近似值,每換一次模型都要重量。
- Twinchat 的 token 計數器用在文件分段與上下文預算。照 Claude 的尺重校,放得進預算的段落會掉到現在的約 63%,每份文件下次重建索引都要重切——那已經是另一個系統,不是通過評測的那一個。所以它刻意不動計數器,成本改由供應商回報的實際用量來算。
兩個產品對同一件事做了不同的處理,共同點是:這個決定是換之前就寫下來的,不是換了之後才發現額度悄悄縮水。
退回只是改設定
Twinchat 換上 Claude 的同時,把退路也寫好了:把兩行環境設定對調(回答模型與挑戰者模型),再重新建立容器。不需要發版。有一個坑要寫進手冊:restart 會保留舊的環境變數,要用 up -d 讓它重建。
輸入框上方有一行揭露,說明答案由哪家 AI 產生。供應商名稱是依設定的模型在每次回應時帶入,不是寫死在版面上,所以退回時揭露跟著走,不必為此發版。
跨供應商的自動備援,我們刻意不做。同一家降級幾乎是零成本:同一份工具定義、同一把金鑰、同一套 token 計價單位。換供應商,這三樣都得平行維護一套,而且 tokenizer 不同會動到計費語義。供應商全面故障時,回答會失敗,補救是上面那個手動退回。
否決也要附重測條件
不換不等於永遠不換。Twinco 的文件末尾寫下了什麼時候再量:
- Haiku:整輪 p95 要回到基準的 1.5 倍以內,現在是 1.9 倍。關思考會掉準確率,所以要等更快的模型,或供應商的延遲改善;就算過了,修改行程的契約與簡體字也要先處理。
- Gemini 3.8 Flash:要支援最低思考層級,或尖峰的地板延遲回到 1 秒內;價格是現行的 2.6 到 5.2 倍,品質要明顯勝出才划算。
- 形狀改變時:出現不在乎延遲的長文字工作(例如批次產生的內容),那種形狀才接近 Twinchat 量到 Haiku 佔優的情境。
重測用的是同一份題目與同一套規則,所以下一次的數字可以直接跟這一次比。
可以帶走的原則
- 決策規則(淘汰、勝出、重測條件)在跑任何一題之前就提交,跑完不改。執行中發現與登記不同的地方,照時間附在後面,不回頭改原文。
- 換的代價不對稱時,打平就是不換:同一家換版可以輕一點,跨供應商要明確勝出。這條只取決於成本結構,所以能在看到數字之前寫下。
- 便宜的關卡排前面。淘汰的不進昂貴的評審,但要把「品質沒有結論」寫下來,不要把沒輸當成贏。
- 題目集也有主場優勢。另寫一批不是從現行模型失敗長出來的新題,並在跑任何挑戰者之前凍結。
- 先量 A/A 對照:同一顆模型只差一份提示詞,倍數是多少,那就是你的噪音底線。
- 分清契約與補丁。補丁改寫成契約的語言之後,同一份改寫也要套在基準上,否則量到的是「誰比較不需要補丁」。
- 延遲要拆開量:地板(網路與排隊)、思考、輸出長度。工作的形狀——串流的長回答,還是幾十個 token 的工具選擇——決定哪一項占大宗,也決定誰佔優。
- token 是供應商自己的尺。額度、分段預算、成本,凡是用 token 當單位的東西,換供應商之前先決定要不要換算、怎麼換算。
- 退回要是改設定,不是發版;揭露要跟著設定走。跨供應商的自動備援會牽動計費與揭露,不做是刻意的。
- 否決要附重測條件。「什麼時候再看」寫下來,才不會變成永遠不看,也不會變成每次新模型一出就重吵一次。