实测 Claude Sonnet 5 vs GPT-5.4:API 调用、JSON 输出和生产接入建议
实测 Claude Sonnet 5 vs GPT-5.4:API 调用、JSON 输出和生产接入建议
摘要
本文记录一次 claude-sonnet-5 和 gpt-5.4 的 API 实测对比,重点不是做大模型排行榜,而是从开发者接入角度看几个更实际的问题:
- 模型是否已经出现在生产环境模型列表里
- Chat Completions 是否能正常返回可见内容
- 严格 JSON 输出是否适合程序直接解析
- usage / latency / finish_reason 是否需要额外监控
- 上生产时应该怎么做 fallback 和校验
测试时间:2026-07-02。
测试接口:Crazyrouter OpenAI-compatible API。
结论先说:这次小样本测试里,
claude-sonnet-5和gpt-5.4都能正常调用。gpt-5.4在严格 JSON 输出上更干净,claude-sonnet-5返回内容有效,但 JSON 外层带了 markdown code fence。GPT-5.4 有一次异常高 prompt token 计数,需要继续重复验证。
一、测试背景
很多模型对比文章喜欢直接比较“谁更强”。但真正接入生产环境时,开发者首先关心的通常不是抽象能力排名,而是下面这些问题:
- 这个模型 ID 在我的 API endpoint 里是否真的存在?
- 请求是否能返回 HTTP 200?
- HTTP 200 之后,内容是否真的可用?
- 如果要求 JSON,返回内容能不能直接
json.loads()? - usage 字段是否正常?
- 失败时能不能定位和回滚?
所以这次测试更偏“生产可用性探活”,而不是官方 benchmark。
二、测试环境
Base URL:
https://cn.crazyrouter.com/v1
测试 endpoint:
GET /v1/models
POST /v1/chat/completions
测试模型:
claude-sonnet-5
gpt-5.4
测试任务:
- 模型列表检查
- smoke test,验证模型能否返回指定文本
- 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 测试要求模型返回包含 risk、fix、test 三个字段的 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_reason是length - 或者 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. 线上默认模型
不建议直接一刀切。
推荐流程:
- 内部测试
- 小流量 canary
- 监控 p50 / p95 latency
- 监控 parse failure rate
- 监控 token usage
- 保留 fallback
- 异常自动回滚
十一、推荐的生产路由策略
一个比较稳的路由方式是:
严格 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-5和gpt-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 跑一组最小评估。
模型发布是新闻,模型可用性是工程事实。
两者之间,最好隔一层自己的测试脚本。
更多推荐

所有评论(0)