别急着给 Claude Fable 5 排名:我更建议先查 returned model 字段

Claude Fable 5 重新开放之后,很多讨论都集中在两个问题上:

Fable 5 是不是比 Opus 4.8 更强?
Fable 5 和 Sonnet 5 到底怎么选?

但如果你是 API 用户,我建议先别急着给模型排座次。更值得先确认的是另一个细节:

你请求的是 claude-fable-5,最终 API 响应里的 model 字段,是否真的还是 claude-fable-5

这次我用 Crazyrouter 的 OpenAI-compatible API 做了一组小样本验证。结果里最有价值的不是某个回答写得多好,而是 requested_modelreturned_model 出现了不一致。

测试时间:2026-07-03
Base URL:https://cn.crazyrouter.com/v1

对比模型:

claude-fable-5
claude-opus-4-8
claude-sonnet-5

先给出核心结论:

  • claude-fable-5 能调用,本轮 5 次请求全部 HTTP 200。
  • claude-fable-5 本轮 5 次 content 都非空。
  • 但请求 claude-fable-5 的 5 次里,只有 2 次返回模型仍是 claude-fable-5
  • 另外 3 次响应字段里的 modelclaude-opus-4-8
  • 本轮没有足够证据说明 Fable 5 稳定强于 Opus 4.8。
  • claude-sonnet-5 本轮有一次 HTTP 200 但 content 为空。

所以这篇不讨论“Fable 5 是否封神”。我更想把它当成一次 API 路由字段审计:新模型上线或解禁后,开发者应该记录哪些字段,才不容易测偏。

Claude 模型对比


1. 为什么 returned model 比正文更重要

很多人测模型时,会直接看输出正文:

print(response.choices[0].message.content)

这样当然能看出模型有没有回答,但它不能告诉你一个关键事实:

这次真正返回的模型是谁?

对于普通聊天,这个细节可能没那么敏感。
但对于新模型评测、成本核算、路由排查、SLA 统计,它非常重要。

原因很简单:如果你请求 claude-fable-5,但响应里的 modelclaude-opus-4-8,那么这次输出还能不能算作 Fable 5 的能力样本?至少不能简单算。

所以这次我把日志拆成两层:

requested_model:请求里写的模型
returned_model:API 响应里返回的模型

然后再看:

response_id
finish_reason
content_empty
usage
elapsed_ms

2. 测试设计:15 条请求,不做大 benchmark

这次不是严格 benchmark,只是一次针对“可调用性”和“返回模型一致性”的小样本检查。

测试接口:

GET /v1/models
POST /v1/chat/completions

测试任务如下:

任务 主要观察点
smoke 能否返回指定文本
reasoning 简单推理是否正确,输出是否完整
code_review 能否发现代码中的真实 bug
creative_control 中文生成是否遵守约束
identity_route_probe 是否能从模型正文判断路由或降级证据

每个模型各跑 5 次,总共 15 条请求。

我没有把这轮测试设计成“能力榜单”,因为样本太小,而且部分任务受 max_tokens 设置影响明显。它更适合回答下面这些工程问题:

  • 模型是否可见?
  • 请求是否能成功?
  • content 是否为空?
  • 返回模型是否与请求模型一致?
  • finish_reason 是否暴露了截断或工具调用问题?

3. 模型列表:Fable 5、Opus 4.8、Sonnet 5 都可见

GET /v1/models 中,三个模型都能看到:

模型 是否可见 endpoint types
claude-fable-5 anthropic, openai
claude-opus-4-8 anthropic, openai
claude-sonnet-5 anthropic, openai

这说明第一步没问题:从模型列表看,三者都是可选项。

但模型列表只能证明“入口存在”。真正的运行行为要看 chat completion 的返回。


4. 汇总结果:Fable 5 的一致性最值得关注

总表如下:

请求模型 请求数 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

如果只看 HTTP 200,三者都正常。

如果看 content 非空,Fable 5 和 Opus 4.8 都是 5/5,Sonnet 5 是 4/5。

但如果看 returned model,一下就不一样了:

请求 claude-fable-5:5 次
返回 claude-fable-5:2 次
返回 claude-opus-4-8:3 次

这说明 Fable 5 本轮最值得关注的问题不是“文本写得好不好”,而是“返回模型字段不稳定”。

Claude API 行为测试


5. Fable 5 明细:5 次请求有 3 次 returned model 是 Opus 4.8

下面是请求 claude-fable-5 的明细:

任务 请求模型 响应 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

这张表比截图回答正文更有用。

因为它直接说明:同样请求 claude-fable-5,返回模型并不总是 claude-fable-5


6. 这是不是“Fable 5 降级到 Opus”?

不能这么直接下结论。

从客户端能看到的只有响应字段。它可以证明:

本轮请求 claude-fable-5 时,有 3/5 的响应 model 字段是 claude-opus-4-8。

但它不能直接证明服务端内部发生了哪一种调度:

  • 可能是 Fable 5 的部分请求被路由到 Opus 4.8;
  • 可能是上游返回的实际模型名就是 Opus 4.8;
  • 可能是网关或供应商侧存在别名映射;
  • 可能是 fallback、灰度或模型归一化逻辑;
  • 也可能是 Fable 5 当前阶段把 Opus 4.8 作为部分后备能力。

所以我不建议写“Fable 5 主动降智”。更严谨的说法是:

API 层出现了 requested model 与 returned model 不一致的可观察现象。

对开发者来说,这个结论已经足够重要。


7. 让模型自己解释有没有降级,靠谱吗?

不靠谱。

我专门设计了一条探测任务:

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.

这条请求的关键字段是:

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。让模型自己说“我有没有被降级”,不是可靠方法。

要查这种问题,应该看:

  • API 响应里的 model
  • 网关路由日志
  • channel 日志
  • 计费日志
  • 上游返回原始 envelope

8. 代码审查任务:Fable 5 能抓 bug,但 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]
}

题目说明输入可以包含负数。

核心 bug 很明确:ab 初始化为 0。如果输入是全负数,比如 [-5, -2, -9],结果会错。

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 有能力抓住关键 bug,但本轮输出完整性不如 Opus 4.8。


9. 推理题:答案都对,但 max_tokens 偏小

推理题是:

A 7-step machine starts at 3.
On odd steps it doubles the current value and adds 1.
On even steps it subtracts 4.
What is the final value after step 7?
Return JSON with keys answer and steps.

正确答案是 7。

三者都答出了 7,但 finish_reason 都是 length

请求模型 响应 model 答案 finish_reason 耗时
claude-fable-5 claude-opus-4-8 7 length 11857 ms
claude-opus-4-8 claude-opus-4-8 7 length 23414 ms
claude-sonnet-5 claude-sonnet-5 7 length 36726 ms

这说明 max_tokens=260 对这条任务偏小。

所以这条不适合做速度排名,也不适合做输出质量排名。它更适合提醒我们:评测模型时,finish_reason 必须纳入结果表。


10. Sonnet 5 的问题:HTTP 200 但正文不可用

本轮 Sonnet 5 最大的问题不是“弱”,而是有一次正文不可用:

HTTP: 200
Response ID: msg_01VVQjZ5dy2LLRkp3CAYE8wt
Returned model: claude-sonnet-5
Finish reason: tool_calls
Content empty: true

这类情况在业务里很麻烦。

因为从 HTTP 层看,它成功了;但从用户体验看,它没有给出可用正文。

所以我建议无论用 Sonnet、Opus 还是 Fable,都不要把 HTTP 200 当成最终成功。至少还要检查:

content 是否为空
finish_reason 是否可接受
是否触发 tool_calls
是否需要重试或 fallback

11. 建议的日志字段

如果你要测 Fable 5,我建议最少记录这些字段:

requested_model
returned_model
response_id
finish_reason
content_empty
usage
elapsed_ms

Python 示例:

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")

Claude production routing

这段代码里最重要的是:

print("returned_model:", resp.model)

如果没有这一行,模型评测很容易变成“看起来像测了 Fable 5,实际上混入了其他 returned model 的结果”。


12. 这轮测试的边界

这轮测试能说明:

  • Fable 5 当前可以通过 API 调用。
  • Fable 5 本轮 5 次 content 都非空。
  • Fable 5 本轮 5 次里有 3 次 returned model 是 Opus 4.8。
  • 本轮没有看到 Fable 5 稳定超过 Opus 4.8 的证据。
  • Sonnet 5 本轮出现一次 HTTP 200 但 content 为空。

这轮测试不能说明:

  • Fable 5 永远会返回 Opus 4.8。
  • Fable 5 一定没有任何场景强于 Opus 4.8。
  • returned model 不一致一定等于供应商内部主动降级。
  • 15 条请求足够代表长期性能。

如果要继续测,下一轮应该增加:

  • 每个任务多次重复;
  • 更难的代码和长上下文任务;
  • OpenAI-compatible 与 Anthropic-native endpoint 分开测;
  • returned model 分布统计;
  • 服务端路由日志、channel 日志、计费日志对齐;
  • Fable 5 返回 Opus 4.8 的比例追踪。

13. 结论:Fable 5 可用,但先别急着下排名结论

我的判断是:

Fable 5 可用,但本轮不能证明它稳定强于 Opus 4.8。

更重要的是:

请求 claude-fable-5 时,部分响应的 returned model 是 claude-opus-4-8。

对于普通用户,这可能只是“模型能不能用”的问题。
对于 API 用户,这就是一个需要进日志、进监控、进评测表的问题。

做 Claude Fable 5 测试时,建议同时看三件事:

请求的模型是谁
API 返回的模型是谁
计费和日志里记录的模型是谁

三者一致,模型能力对比才更有意义。


参考链接

  • Crazyrouter 模型列表与 API 入口:https://crazyrouter.com/models?utm_source=csdn&utm_medium=article&utm_campaign=claude_fable_returned_model_audit_20260704&utm_content=csdn_model_list
  • 原始站内实测文章:https://crazyrouter.com/blog/claude-fable-5-vs-claude-sonnet-5-api-test-2026?utm_source=csdn&utm_medium=article&utm_campaign=claude_fable_returned_model_audit_20260704&utm_content=csdn_original_article
  • Anthropic Claude Fable 5 / Mythos 5 公告:https://www.anthropic.com/news/claude-fable-5-mythos-5
  • Anthropic Claude Sonnet 5 公告:https://www.anthropic.com/news/claude-sonnet-5

更多推荐