如果你正在使用 OpenAI GPT-5 API 构建应用,你可能已经听说了 Anthropic Claude 4 系列(Opus 4.7 / Sonnet 4.6 / Haiku 4.5)在多项基准测试中取得领先。根据最新的评测数据,Claude 4 系列在代码生成、长文本理解和复杂推理方面均表现优异,价格还比 GPT-5 更亲民。本文将带你完成从 GPT-5 到 Claude 4 的完整迁移流程,包括代码改写、提示词适配和成本优化。

为什么要从 GPT-5 迁移到 Claude 4?

先看核心差异:价格。GPT-5 每百万输入 Token 收费 15 美元,Claude Opus 4.7 只需要 10 美元——便宜了 33%。输出 Token 的差距更大:GPT-5 收 60 美元/百万 Token,Opus 只要 40 美元。

再看能力:

  • 代码生成:Claude 4 系列在 SWE-bench、HumanEval 等编程基准中领先,尤其擅长复杂工程任务。
  • 长文本理解:Claude 原生支持 200K Token 上下文窗口,且长文本质量衰减比 GPT-5 更慢。
  • 工具调用:Claude 的 Tool Use 支持更灵活的 JSON Schema 定义,并行调用也更成熟。
  • Prompt Caching:Claude 的缓存机制让重复上下文的成本降低 90%,GPT-5 虽然也有类似功能,但限制更多。

如果你的应用涉及大量代码分析、长文档处理或多轮复杂对话,迁移带来的性价比提升非常明显。

API 设计差异:你需要注意的关键点

两者都是标准的 REST API,但细节不同。最大的差异在请求格式和 Token 处理。

认证方式:OpenAI 用 Authorization: Bearer,Anthropic 用 x-api-key。如果你在用 LangChain 或 LiteLLM,切换只是一行配置。但如果你直接调 HTTP,以下是核心差异:

特性GPT-5 (OpenAI)Claude 4 (Anthropic)
API 端点/v1/chat/completions/v1/messages
认证头Authorization: Bearer sk-xxxx-api-key: sk-ant-xxx
模型参数model: "gpt-5"model: "claude-opus-4-7"
角色名system, user, assistantuser, assistant(system 单独放顶层)
最大 Tokenmax_completion_tokensmax_tokens
温度temperature: 0-2temperature: 0-1

消息格式是最容易踩坑的地方。OpenAI 的格式是:

1
2
3
4
5
6
7
{
"model": "gpt-5",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
]
}

Claude 的格式稍有不同——system 提到顶层:

1
2
3
4
5
6
7
8
{
"model": "claude-opus-4-7",
"system": "You are a helpful assistant.",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello!"}
]
}

代码迁移实操:一步步改

下面是一个典型的 Python + OpenAI SDK 迁移示例。我们会把它逐步改成 Anthropic SDK 版本。

迁移前 — OpenAI 版本

1
2
3
4
5
6
7
8
9
10
11
12
13
from openai import OpenAI

client = OpenAI(api_key="sk-xxx")
response = client.chat.completions.create(
model="gpt-5",
messages=[
{"role": "system", "content": "你是一个 Python 专家"},
{"role": "user", "content": "写一个快速排序函数"},
],
max_completion_tokens=1024,
temperature=0.7,
)
print(response.choices[0].message.content)

迁移后 — Anthropic 版本

1
2
3
4
5
6
7
8
9
10
11
12
import anthropic

client = anthropic.Anthropic(api_key="sk-ant-xxx")
response = client.messages.create(
model="claude-sonnet-4-6",
system="你是一个 Python 专家", # 注意:system 提到顶层
max_tokens=1024,
messages=[
{"role": "user", "content": "写一个快速排序函数"},
],
)
print(response.content[0].text)

关键改动:max_completion_tokens 变成 max_tokenssystem 从 messages 数组中移到顶层参数,输出从 choices[0].message.content 变成 content[0].text

流式输出也需要适配。OpenAI 用 stream=True,Anthropic 也一样,但事件格式不同:

1
2
3
4
5
6
7
8
9
10
11
12
13
# OpenAI 流式
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")

# Anthropic 流式
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "..."}],
) as stream:
for text in stream.text_stream:
print(text, end="")

Anthropic 的 stream.text_stream 更简洁,不用手动检查 delta 是否存在。

提示词适配:GPT-5 的 Prompt 在 Claude 上不一定好用

同样一句话,在不同模型上效果差异可能很大。迁移后最常见的抱怨是「同样的 prompt,Claude 输出质量反而更差」——通常是 prompt 没适配

GPT-5 偏好的 prompt 风格:详细指令、角色设定、输出格式约束。GPT-5 需要你「把话说清楚」。

Claude 4 偏好的 prompt 风格

  • 结构化:Claude 对 Markdown 格式、标签分隔、分步指令响应更好。
  • 示例优先:给 1-2 个 Few-shot 示例,Claude 的遵循度大幅提升。
  • 不要过度约束:GPT-5 需要「禁止…」「不要…」这类负面约束,Claude 更吃正向引导。

实际对比

GPT-5 版 prompt:

1
2
3
你是一个代码审查专家。审查以下 Python 代码,找出所有潜在问题。
输出要求:1. 问题描述 2. 严重程度 3. 修复建议
不要输出无关信息,不要改写代码,不要添加主观评价。

Claude 4 版 prompt(效果更好):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Role
Code review specialist focusing on Python.

# Task
Analyze the following code and identify issues.

# Output Format
- **[Severity]** Issue description
→ Fix: suggested change

# Example
- **[Medium]** Unhandled NoneType in line 12
→ Fix: Add `if value is not None:` guard

# Code to Review
```
(paste code here)
```

Claude 对结构化 Markdown prompt 的理解深度远超 GPT-5。如果你已经掌握了 Prompt 工程实战指南 里的技巧,迁移后更容易发挥 Claude 的优势。

成本对比与优化策略

理论成本对比(每百万 Token):

维度GPT-5Claude Opus 4.7节省
输入$15.00$10.0033%
输出$60.00$40.0033%
缓存输入$3.75$0.2593%

实际项目中,Prompt Caching 是最大的省钱点。如果你的应用有大量固定系统 prompt(比如角色设定、工具定义、示例对话),Claude 的缓存读取价格只有正常输入的 1/40。

三种实际场景的成本对比

  1. 短对话客服(每轮 2000 Token 上下文,100 Token 输出):成本差异不明显,用谁都差不多。
  2. 长文档分析(50K Token 上下文,2000 Token 输出):Claude 省 30%-50%。
  3. 多轮 Agent 对话(20K 固定系统 prompt + 5K 动态对话):Claude 的 Prompt Caching 让固定部分成本降至几乎为零,实际省 60%-80%

如果你在用 One API 做多模型路由,可以通过自动负载均衡在不同模型间切换——详见我之前的 One API 使用指南

常见迁移陷阱和解决方案

陷阱 1:System Prompt 丢了

最常犯的错误——把 system 留在 messages 数组里。Claude API 会把它当成普通 user 消息处理,效果大打折扣。解决方案:确保 system 是请求体的顶层字段。

陷阱 2:temperature 范围不兼容

GPT-5 的 temperature 是 0-2,Claude 是 0-1。如果你传了 1.5,Claude API 会报错。解决方案:映射转换——temperature_anthropic = temperature_openai / 2,或直接设 0.7 作为默认值。

陷阱 3:Token 截断行为不同

GPT-5 到达 max_tokens 后直接在中间截断。Claude 有一个 stop_reason 字段,当值为 "max_tokens" 时表示被截断,值为 "end_turn" 时表示正常结束。解决方案:检查 response.stop_reason,如果被截断,用更大的 max_tokens 重新请求。

陷阱 4:没有 Thinking 模式的下位替代

GPT-5 没有 Claude 的 Extended Thinking 功能。如果你依赖 GPT-5 做复杂推理,迁移到 Claude 后建议开启 Thinking(Opus 4.7 支持),让模型在生成前进行内部推理。Sonnet 4.6 也有轻量级 Thinking。

陷阱 5:忽视 MCP 生态

Claude 的一大差异化优势是 MCP(Model Context Protocol)协议。它让 Claude 能直接调用外部工具和数据源,而这些集成对 GPT-5 需要手动搭建。如果你已经在开发 MCP Server,迁移后直接将 MCP 配置接入 Claude API 即可使用。不了解 MCP?可以先看我这篇 MCP 协议入门教程

迁移检查清单

在正式上线前,按这个清单逐项确认:

  1. 所有 API 调用已从 OpenAI SDK 改为 Anthropic SDK(或通过 LiteLLM 适配)
  2. System prompt 已从 messages 数组移到顶层 system 字段
  3. max_completion_tokens 已改为 max_tokens
  4. temperature 值已映射到 0-1 范围
  5. 流式事件处理已适配 Anthropic 格式
  6. Tool Use 的 JSON Schema 已按 Anthropic 格式调整
  7. 关键 prompt 已按 Claude 的风格重写(结构化、示例前置)
  8. 确认 Prompt Caching 已对固定系统 prompt 启用
  9. 监控 stop_reason 字段处理截断情况
  10. 在 staging 环境用 Claude Sonnet 4.6 跑通全流程后再升级到 Opus 4.7

迁移本身并不复杂,核心工作量在 prompt 适配和边界情况处理。投入 1-2 天做好适配,长期的成本和性能回报非常可观。