
Claude Fable 5 重新開放後,外界關注的焦點通常是它是否比 Opus 4.8 更強、是否明顯領先 Sonnet 5。不過,對 API 開發者而言,更值得確認的是另一個問題:請求 claude-fable-5 時,API 回應中的 model 欄位是否仍然是 claude-fable-5。
一組基於 Crazyrouter OpenAI-compatible API 的小樣本測試顯示,claude-fable-5 目前可以正常呼叫,5 次測試均返回 HTTP 200 且 content 非空;但在這 5 次請求中,有 3 次回應欄位中的 model 顯示為 claude-opus-4-8。
這代表在評測 Fable 5 時,不能只記錄請求模型或輸出正文,還需要同時記錄 API 回應中的 returned model。
本次測試對比三個模型:
claude-fable-5
claude-opus-4-8
claude-sonnet-5
測試時間:2026-07-03
Base URL:https://cn.crazyrouter.com/v1
測試接口:
GET /v1/models
POST /v1/chat/completions
測試任務包括:
| 任務 | 目的 |
|---|---|
| smoke | 確認模型能否返回指定文字 |
| reasoning | 簡單推理題,觀察答案與輸出完整性 |
| code_review | 檢查程式碼 bug 定位與修復能力 |
| creative_control | 檢查中文創作和約束遵守 |
| identity_route_probe | 檢查模型是否能看到日誌、隱藏思考過程或降級證據 |
每個模型各執行 5 次,共 15 條請求。
GET /v1/models 回傳結果中,三款模型都可見:
| 模型 | 是否可見 | endpoint types |
|---|---|---|
claude-fable-5 |
是 | anthropic, openai |
claude-opus-4-8 |
是 | anthropic, openai |
claude-sonnet-5 |
是 | anthropic, openai |
不過,模型可見只代表可以進入候選路由。真正需要檢查的是 chat completion 回應中的:
id
model
finish_reason
message.content
usage
請求耗時
其中 model 欄位尤其容易被忽略。
本輪結果如下:
| 請求模型 | 請求數 | HTTP 200 | content 非空 | 返回模型與請求模型一致 | finish_reason=stop |
平均耗時 |
|---|---|---|---|---|---|---|
claude-fable-5 |
5 | 5 | 5 | 2 | 3 | 13695 ms |
claude-opus-4-8 |
5 | 5 | 5 | 5 | 4 | 13858 ms |
claude-sonnet-5 |
5 | 5 | 4 | 5 | 2 | 15256 ms |
從可見輸出看,Fable 5 表現穩定,5 次均有內容。但從 returned model 看,Fable 5 的 5 次請求中:
返回 claude-fable-5:2 次
返回 claude-opus-4-8:3 次
這不是模型正文中的自我聲明,而是 API 回應欄位中的 model。

| 任務 | 請求模型 | 回應 model | response id | finish_reason | 耗時 |
|---|---|---|---|---|---|
| smoke | claude-fable-5 |
claude-fable-5 |
msg_015Wqx2LE1AemAdGYpDmkAw1 |
stop |
15343 ms |
| reasoning | claude-fable-5 |
claude-opus-4-8 |
msg_01LhtDxG3rGPbSH79HsCGnuy |
length |
11857 ms |
| code_review | claude-fable-5 |
claude-fable-5 |
msg_01RJqbZnKv5vm6vn3Ybx45ez |
length |
15017 ms |
| creative_control | claude-fable-5 |
claude-opus-4-8 |
msg_01Qbr9evb9CGFLhk2uxgDmHw |
stop |
15041 ms |
| identity_route_probe | claude-fable-5 |
claude-opus-4-8 |
msg_013vwMf74gNMis5egogfMpic |
stop |
11218 ms |
若 API 回應中的 model 欄位可信,則本輪測試至少可以說明:部分 claude-fable-5 請求並不是以 claude-fable-5 這一 returned model 結束。
目前不能直接下此結論。
僅憑客戶端 chat completion 回應,無法判斷供應商或網關內部路由邏輯。可能原因包括:
不過,對開發者來說,這已經足以影響評測方式:若未記錄 returned model,Fable 5 的測試結論可能混入 Opus 4.8 結果。
測試中包含一條探測任務:
Return compact JSON with keys visible_model_claim, can_access_provider_logs,
can_access_hidden_chain_of_thought, downgrade_evidence.
Only state what is visible to you in this chat response. Do not speculate.
該請求的 API 欄位如下:
Requested model: claude-fable-5
Returned model: claude-opus-4-8
Response ID: msg_013vwMf74gNMis5egogfMpic
Finish reason: stop
模型正文返回:
{
"visible_model_claim": null,
"can_access_provider_logs": false,
"can_access_hidden_chain_of_thought": false,
"downgrade_evidence": null
}
這是合理結果。普通 chat completion 無法讀取 provider logs,也無法讀取 hidden chain-of-thought。驗證路由狀態仍應依賴:
model
本輪測試尚未看到 Fable 5 穩定超越 Opus 4.8 的證據。
以程式碼審查任務為例,原始程式如下:
function topTwo(nums){
let a=0,b=0;
for(const n of nums){
if(n>a){b=a;a=n}
else if(n>b){b=n}
}
return [a,b]
}
題目說明輸入可能包含負數。核心問題是 a、b 初始化為 0,會導致全負數陣列返回錯誤結果。
Fable 5 抓到了該問題:
{
"bug": "Initializing a and b to 0 fails when all numbers are negative...",
"fix": "let a=-Infinity,b=-Infinity",
"test": "topTwo([-5,-2,-9])..."
}
Opus 4.8 也抓到同一問題,並補充了全負數、重複最大值、陣列長度不足 2 等邊界。
| 模型 | 是否抓到核心 bug | finish_reason | 輸出完整性 |
|---|---|---|---|
claude-fable-5 |
是 | length |
被截斷 |
claude-opus-4-8 |
是 | stop |
更完整 |
claude-sonnet-5 |
否,可見內容為空 | tool_calls |
不可用 |
因此本輪不能得出 Fable 5 明顯強於 Opus 4.8 的結論。
Fable 5 與 Sonnet 5 並非同一定位。只看本輪結果,Sonnet 5 的可見內容穩定性較弱:
| 指標 | Fable 5 | Sonnet 5 |
|---|---|---|
| HTTP 200 | 5/5 | 5/5 |
| content 非空 | 5/5 | 4/5 |
| finish_reason=stop | 3/5 | 2/5 |
| 平均耗時 | 13695 ms | 15256 ms |
Sonnet 5 在程式碼審查任務中出現:
HTTP: 200
Response ID: msg_01VVQjZ5dy2LLRkp3CAYE8wt
Returned model: claude-sonnet-5
Finish reason: tool_calls
Content empty: true
對 API 使用者而言,這類結果代表請求看似成功,但正文不可用。
若要自行測試 Fable 5,建議至少記錄以下欄位:
from openai import OpenAI
import time
client = OpenAI(
api_key="YOUR_CRAZYROUTER_API_KEY",
base_url="https://cn.crazyrouter.com/v1",
)
requested_model = "claude-fable-5"
started = time.perf_counter()
resp = client.chat.completions.create(
model=requested_model,
messages=[
{
"role": "user",
"content": "Return compact JSON with keys answer and reason."
}
],
max_tokens=300,
temperature=0.2,
)
elapsed_ms = int((time.perf_counter() - started) * 1000)
choice = resp.choices[0]
content = choice.message.content or ""
print("requested_model:", requested_model)
print("returned_model:", resp.model)
print("response_id:", resp.id)
print("finish_reason:", choice.finish_reason)
print("content_empty:", not bool(content.strip()))
print("elapsed_ms:", elapsed_ms)
print("usage:", resp.usage)
if resp.model != requested_model:
print("WARNING: returned model differs from requested model")

本輪可以說明:
本輪不能說明:
後續若要做更嚴謹測試,應增加更難的程式碼、數學與長上下文任務,分別測試 OpenAI-compatible 與 Anthropic-native endpoint,並對齊服務端路由日誌、channel 日誌與計費日誌。
Claude Fable 5 解禁後確實可用,但本輪測試沒有證明它已穩定超越 Opus 4.8。
更值得注意的是:請求 claude-fable-5 時,部分回應中的 model 欄位返回 claude-opus-4-8。對開發者來說,評測 Fable 5 時必須同時關注三個欄位:
請求的模型
API 返回的模型
計費與日誌中記錄的模型
三者一致時,模型能力對比才更有意義。
參考連結: