实测 Claude Sonnet 5 vs GPT-5.4:API 调用、JSON 输出和生产接入建议

摘要

本文记录一次 claude-sonnet-5gpt-5.4 的 API 实测对比,重点不是做大模型排行榜,而是从开发者接入角度看几个更实际的问题:

  • 模型是否已经出现在生产环境模型列表里
  • Chat Completions 是否能正常返回可见内容
  • 严格 JSON 输出是否适合程序直接解析
  • usage / latency / finish_reason 是否需要额外监控
  • 上生产时应该怎么做 fallback 和校验

测试时间:2026-07-02。
测试接口:Crazyrouter OpenAI-compatible API。

结论先说:这次小样本测试里,claude-sonnet-5gpt-5.4 都能正常调用。gpt-5.4 在严格 JSON 输出上更干净,claude-sonnet-5 返回内容有效,但 JSON 外层带了 markdown code fence。GPT-5.4 有一次异常高 prompt token 计数,需要继续重复验证。


一、测试背景

很多模型对比文章喜欢直接比较“谁更强”。但真正接入生产环境时,开发者首先关心的通常不是抽象能力排名,而是下面这些问题:

  1. 这个模型 ID 在我的 API endpoint 里是否真的存在?
  2. 请求是否能返回 HTTP 200?
  3. HTTP 200 之后,内容是否真的可用?
  4. 如果要求 JSON,返回内容能不能直接 json.loads()
  5. usage 字段是否正常?
  6. 失败时能不能定位和回滚?

所以这次测试更偏“生产可用性探活”,而不是官方 benchmark。


二、测试环境

Base URL:

https://cn.crazyrouter.com/v1

测试 endpoint:

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

测试模型:

claude-sonnet-5
gpt-5.4

测试任务:

  1. 模型列表检查
  2. smoke test,验证模型能否返回指定文本
  3. structured JSON test,验证模型是否能返回紧凑 JSON

三、先确认 claude-sonnet-5 是否真的可用

新模型上线后,第一步不要直接写业务逻辑,应该先查模型列表。

本次检查结果:

GET https://cn.crazyrouter.com/v1/models
model_count: 164
exact claude-sonnet-5 count: 1

说明在这次测试窗口里,claude-sonnet-5 已经出现在生产环境模型列表中。

随后跑了一个最小 chat completion:

Endpoint: POST https://cn.crazyrouter.com/v1/chat/completions
Model: claude-sonnet-5
Response ID: msg_017YD3jbWcgqZNcjLgMVR98J
Returned model: claude-sonnet-5
Finish reason: stop
Output: claude-sonnet-5 prod verification OK
Total tokens: 98

这一步很关键。因为“模型列表里能看到”和“真实请求能返回可见内容”不是同一件事。


四、Python 调用示例

如果使用 OpenAI SDK 风格调用,可以这样写:

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_CRAZYROUTER_API_KEY",
    base_url="https://cn.crazyrouter.com/v1",
)

response = client.chat.completions.create(
    model="claude-sonnet-5",
    messages=[
        {
            "role": "user",
            "content": "Return exactly: claude-sonnet-5 prod verification OK",
        }
    ],
    max_tokens=40,
)

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

生产环境里不要只打印 content,建议至少记录:

  • response id
  • returned model
  • finish_reason
  • prompt_tokens
  • completion_tokens
  • total_tokens
  • latency
  • parse success / failure

五、测试结果汇总

任务 模型 HTTP 延迟 Response ID Prompt tokens Completion tokens Total tokens 输出行为
smoke claude-sonnet-5 200 7506 ms msg_01H56cadFzA3yaNTrSHJRT52 82 10 92 返回预期文本
smoke gpt-5.4 200 3985 ms resp_0f5e3dee4d3373bf016a45e195b7188197b66b001bab27dd43 5069 12 5081 返回预期文本,但 prompt token 计数异常偏高
structured JSON claude-sonnet-5 200 7424 ms msg_01KZbLYLSXcxmM5PsAh5NAWm 163 117 280 JSON 包在 markdown fence 中
structured JSON gpt-5.4 200 5526 ms resp_0b0a4af04718de7b016a45e1a0d4848198a278218d0f3caa7d 55 74 129 返回 compact raw JSON

从这张表可以看到:

  • 两个模型都能返回 HTTP 200。
  • 两个模型都有可见输出。
  • GPT-5.4 在 structured JSON 任务里更适合程序直接解析。
  • Claude Sonnet 5 返回了有效 JSON 内容,但外层有 markdown code fence。
  • GPT-5.4 smoke test 的 prompt token 计数异常偏高,不适合直接得出成本结论,需要重复测试。

六、严格 JSON 输出对比

这次 structured JSON 测试要求模型返回包含 riskfixtest 三个字段的 compact JSON。

GPT-5.4 输出

GPT-5.4 返回的是 raw JSON:

{"risk":"Clients treat empty 200 responses as success, causing silent failures.","fix":"Detect empty content; return 502 or retry with reduced reasoning tokens.","test":"Simulate reasoning-only output and assert non-empty content or error response."}

这种结果对后端程序比较友好,通常可以直接进入 JSON parser。

Claude Sonnet 5 输出

Claude Sonnet 5 返回的 JSON 内容如下:

{
  "risk": "Max tokens exhausted by hidden reasoning, leaving empty visible output despite HTTP 200 success status.",
  "fix": "Increase max_tokens budget, cap reasoning tokens, or detect empty content and retry/fallback.",
  "test": "Force low max_tokens on complex prompts; assert non-empty content or explicit error, not silent 200."
}

内容本身是有用的,但实际返回时外层带了 markdown code fence。

对人类阅读来说问题不大,但对机器解析来说,如果你的代码直接执行:

json.loads(content)

就可能失败。


七、工程侧应该怎么处理 fenced JSON

如果业务依赖模型输出 JSON,不能只靠 prompt 约束。建议增加一层 normalize。

示例代码:

import json
import re


def normalize_json_content(text: str) -> dict:
    if not text or not text.strip():
        raise ValueError("empty model output")

    cleaned = text.strip()

    fence = re.match(r"^```(?:json)?\s*(.*?)\s*```$", cleaned, re.DOTALL)
    if fence:
        cleaned = fence.group(1).strip()

    return json.loads(cleaned)

同时还应该加:

  • JSON schema 校验
  • parse 失败重试
  • 空内容检测
  • finish_reason 检测
  • fallback model
  • usage 异常告警

八、为什么 HTTP 200 不等于业务成功

很多 AI API 事故不是接口完全挂掉,而是“半成功”:

  • HTTP 返回 200
  • 日志没有明显报错
  • 但 content 为空
  • 或者 JSON 不能 parse
  • 或者 finish_reasonlength
  • 或者 usage 异常膨胀
  • 或者返回格式和业务契约不一致

所以生产环境里不能只判断 HTTP status。

更稳的判断方式是:

message = response.choices[0].message.content
finish_reason = response.choices[0].finish_reason

if not message or not message.strip():
    raise RuntimeError("empty model output")

if finish_reason not in ("stop", "tool_calls"):
    raise RuntimeError(f"unexpected finish_reason: {finish_reason}")

如果业务要求 JSON,再继续执行 JSON parse 和 schema 校验。


九、GPT-5.4 的 token usage 异常

本次测试里,GPT-5.4 的 smoke test prompt 很短,但 usage 返回:

prompt_tokens: 5069
completion_tokens: 12
total_tokens: 5081

这不太像一个普通短 prompt 应有的 token 数。

这里不能直接下结论说 GPT-5.4 成本一定高,也不能说模型有问题。更谨慎的说法是:

这可能是 provider envelope、路由层计数、内部上下文注入或某种暂时性的 usage accounting 差异。

生产接入时建议做重复测试,并把 usage 字段纳入监控。


十、如何选择 Claude Sonnet 5 和 GPT-5.4

1. 严格 JSON / 参数生成 / 工作流节点

优先测试 GPT-5.4。

原因:本次 structured JSON 测试中,GPT-5.4 直接返回 compact raw JSON,更适合后端程序解析。

适合场景:

  • 信息抽取
  • 分类任务
  • agent 参数生成
  • workflow 节点输出
  • 需要直接 parse 的后端任务

2. 解释、分析、代码 review、写作

Claude Sonnet 5 值得进入候选。

原因:本次测试确认 claude-sonnet-5 已经可见且可调用。Claude 系模型在长解释、代码理解、写作风格上通常有自己的优势,但仍然需要用真实业务 prompt 验证。

适合场景:

  • 技术解释
  • 代码 review
  • 架构分析
  • 长文本总结
  • 面向用户的自然语言回复

3. 线上默认模型

不建议直接一刀切。

推荐流程:

  1. 内部测试
  2. 小流量 canary
  3. 监控 p50 / p95 latency
  4. 监控 parse failure rate
  5. 监控 token usage
  6. 保留 fallback
  7. 异常自动回滚

十一、推荐的生产路由策略

一个比较稳的路由方式是:

严格 JSON / 结构化输出  -> 优先 GPT-5.4,失败 fallback 到 Claude Sonnet 5 或其他模型
长解释 / 写作 / 代码分析  -> Claude Sonnet 5 和 GPT-5.4 都进入候选,根据业务样本评估
高频低成本任务          -> 单独测试 token usage 和延迟后再决定

核心原则:

  • 不按模型名信仰路由
  • 按任务契约路由
  • 按真实日志调整权重
  • 失败时要能降级

十二、总结

本次实测结论如下:

  • claude-sonnet-5 已经在 Crazyrouter 生产模型列表中可见。
  • claude-sonnet-5 最小 chat completion 成功返回,response ID 为 msg_017YD3jbWcgqZNcjLgMVR98J
  • claude-sonnet-5gpt-5.4 都能通过 https://cn.crazyrouter.com/v1 调用。
  • GPT-5.4 在 structured JSON 测试中返回 compact raw JSON,更适合程序直接解析。
  • Claude Sonnet 5 返回内容有效,但 JSON 外层带 markdown code fence,需要工程层 normalize。
  • GPT-5.4 有一次异常高 prompt token 计数,不能直接得出成本结论,需要重复测试。
  • HTTP 200 不等于业务成功,必须检查 content、finish_reason、usage 和 parse 结果。

如果只是体验新模型,两者都可以测试。
如果要上生产,建议不要只看发布公告或第三方榜单,而是用自己的真实 prompt 跑一组最小评估。

模型发布是新闻,模型可用性是工程事实。
两者之间,最好隔一层自己的测试脚本。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐