max_tokens 可能影響評測結論7 月 6 日消息,在一次針對 claude-fable-5 與 gpt-5.5 的小樣本模型對比測試中,兩個模型在數學期望題與物理綜合題上均給出正確答案,但在一題「生成完整 Canvas 動畫 HTML」的長程式任務中,第一次測試出現了明顯差異。
不過,後續復測顯示,這個差異並不能簡單理解為「Claude Fable 5 不會寫動畫」。第一次截斷的主要原因,是測試時設定的 max_tokens=3200 不足以容納完整 HTML 輸出。
本輪測試使用 Crazyrouter 的 OpenAI-compatible API:
Base URL: https://cn.crazyrouter.com/v1
Endpoint: POST /v1/chat/completions
模型 1:claude-fable-5
模型 2:gpt-5.5
temperature:0.2
測試日期:2026-07-06
復現入口:
https://crazyrouter.com/register
測試題目分為三類:
| 題目 | 類型 | 主要觀察點 |
|---|---|---|
| 連續擲硬幣直到 HH | 數學期望 | 是否能建立狀態方程 |
| 子彈嵌入木塊後壓縮彈簧 | 物理綜合 | 是否能區分動量守恆、能量關係與機械能不守恆 |
| Canvas 軌道動畫 | 前端長程式 | 是否能輸出完整 HTML 並在瀏覽器執行 |
第一題是經典期望問題:
連續擲一枚公平硬幣,直到第一次出現連續兩個正面 HH 為止。
求停止時所需擲硬幣次數的期望值。
正確做法是設兩個狀態:
E0:目前沒有 H 前綴時,到第一次出現 HH 還需要的期望次數
E1:目前已經有一個 H 前綴時,到第一次出現 HH 還需要的期望次數
狀態方程為:
E0 = 1 + 1/2 E1 + 1/2 E0
E1 = 1 + 1/2 * 0 + 1/2 E0
解得:
E0 = 6
測試中,claude-fable-5 與 gpt-5.5 均得到正確答案。
第二題為物理綜合題:子彈射入木塊並嵌入,木塊連接彈簧,桌面存在動摩擦,需要計算碰撞後共同速度與彈簧最大壓縮量。
題目參數如下:
子彈質量 m = 0.02 kg
子彈速度 v = 300 m/s
木塊質量 M = 1.98 kg
彈簧勁度係數 k = 800 N/m
動摩擦因數 μ = 0.10
g = 9.8 m/s^2
標準解法為分階段處理:
碰撞瞬間:使用動量守恆
mv = (M + m)V
V = 3.0 m/s
碰撞後壓縮彈簧:使用能量關係,並計入摩擦做功
1/2(M+m)V^2 = 1/2kx^2 + μ(M+m)gx
x ≈ 0.148 m
兩個模型同樣都給出正確計算。差異主要在表述風格,而非答案正確性。
第三題要求模型直接輸出一個完整 HTML 文件,實現「太陽系風格的模型對比軌道儀表板」Canvas 動畫。
要求包括:
1. 使用原生 HTML / CSS / JavaScript
2. 不依賴外部函式庫、外部圖片或網路資源
3. 頁面包含 800x500 canvas
4. 中心恆星 + 至少 5 個繞行粒子
5. 粒子具有不同半徑、速度、顏色與軌道
6. 使用 requestAnimationFrame
7. 粒子留下半透明軌跡
8. 具備暫停 / 繼續、重置、速度滑桿
9. 左上角顯示 FPS 與速度倍率
10. 至少包含 init、update、draw、animate 四個函式
這類題目不只測試模型是否會寫邏輯,還會測試輸出完整性、HTML / JS 是否閉合、瀏覽器是否報錯,以及動畫是否真的在執行。
在原始測試中,gpt-5.5 一次輸出完整 HTML。靜態檢查結果包括:
包含 <!DOCTYPE html>
包含 </html>
包含 requestAnimationFrame
包含 init / update / draw / animate
包含暫停、重置、速度滑桿
canvas 為 800x500
瀏覽器驗證結果:
控制台錯誤:無
canvas 尺寸:800x500
控制項:存在
700ms 後 changedPixels = 37512
hasAnimation = true
測試截圖如下:

其中 changedPixels 代表測試腳本對兩個時間點的 canvas 像素進行比較,用於確認畫面確實在變化,而不是靜態圖片。
claude-fable-5 第一次輸出的方向基本正確,已包含 HTML 結構、canvas、控制區、粒子配置、軌道繪製、恆星繪製、HUD,以及部分 init、update、draw 邏輯。
但第一次輸出並未完成。關鍵 API 元資料如下:
max_tokens = 3200
finish_reason = length
completion_tokens = 3200
HTML 沒有 </html>
這意味著輸出並非自然結束,而是剛好打滿 max_tokens=3200 的輸出上限。
當時生成的 HTML 末尾停在類似以下位置:
ctx.beginPath();
後續繪製邏輯、事件綁定、animate 收尾、</script>、</body>、</html> 均未完整輸出。若只看生成文件,這份 HTML 確實不可直接使用;但從 API 元資料看,該結果更像是輸出預算不足,而不是模型完全無法完成任務。
為確認原因,測試方又單獨復測 claude-fable-5,題目保持不變,但提高 max_tokens。
復測結果如下:
| 測試 | max_tokens | finish_reason | completion_tokens | HTML 是否完整 |
|---|---|---|---|---|
| 同參數復測 | 3200 | length | 3200 | 否 |
| 提高輸出預算 | 8000 | stop | 3975 | 是 |
結果顯示,max_tokens=3200 不足以完成該完整 HTML;提高到 max_tokens=8000 後,claude-fable-5 實際使用 3975 個 completion tokens,正常結束,HTML 完整閉合。
瀏覽器驗證結果如下:
控制台錯誤:無
canvas 尺寸:800x500
控制項:暫停、重置、速度滑桿均存在
700ms 後 changedPixels = 15795
hasAnimation = true
復測截圖如下:

因此,較準確的結論是:claude-fable-5 在 max_tokens=3200 下無法完整輸出該動畫頁面;提高到 max_tokens=8000 後,可以完成並通過瀏覽器驗證。
若只看原始同參數測試,gpt-5.5 表現更穩定,因為它在 max_tokens=3200 下完成了整個 HTML,而 claude-fable-5 被截斷。
但若討論模型能力本身,不能簡單得出「Claude Fable 5 不會寫該動畫」的結論。更合理的說法是:
GPT-5.5 在較低輸出預算下更容易一次完成長程式輸出。
Claude Fable 5 對輸出預算更敏感;預算足夠時,也能完成可執行產物。
這類差異更接近工程問題,而非單純能力排名。
本次測試最關鍵的欄位是:
finish_reason = length
它表示模型不是自然完成,而是因長度限制停止。如果評測文章只展示最終輸出,不展示 API 元資料,讀者可能會把一個輸出預算問題誤判為模型能力問題。
對於長程式生成,建議至少記錄:
requested_model
returned_model
max_tokens
completion_tokens
finish_reason
elapsed_ms
HTTP 狀態
本地或瀏覽器驗證結果
不同任務也應給不同輸出預算:
| 任務類型 | 建議 max_tokens |
|---|---|
| 數學 / 物理短推導 | 1000-2000 |
| 簡單函式實作 | 1500-3000 |
| 完整 HTML 頁面 | 6000-10000 |
| 帶 CSS、JS、互動與動畫的頁面 | 從 8000 起步 |
若返回 finish_reason=length,優先考慮提高 max_tokens、拆分任務,或要求模型分段輸出,而不是直接改寫結論。
本輪測試顯示:
claude-fable-5 與 gpt-5.5 都表現穩定。gpt-5.5 在較低輸出預算下更容易一次完整輸出。claude-fable-5 第一次被截斷,主要原因是 max_tokens=3200 不足;提高到 max_tokens=8000 後可輸出完整可執行 HTML。因此,長程式生成評測不能只看「最終文件是否完整」,還要同時查看輸出上限、完成原因與實際運行驗證結果。
復現入口:
https://crazyrouter.com/register