详细对照 Claude 与 OpenAI 最新 SDK 在客户端、API 调用、系统提示、用户内容、输出限制、结构化输出、工具定义与执行等字段的对应关系,帮开发者快速完成模型迁移。
你的应用基于 Claude 构建。现在你也需要它能在 OpenAI 上运行——也许是为了成本,也许是为了稳定性,也许是因为客户要求。好消息是:如果你的提示词构建得足够好,迁移主要就是机械的字段重命名,而不是重写。下面是逐字段的完整对照表,以及两个真正需要改变的地方。
Ref : https://ai.studybydoing.in/oap9-prompting-migration
一切从单次 API 调用开始。下面是同一个请求在两个 SDK 上的实现:
from anthropic import Anthropic
client = Anthropic()
resp = client.messages.create(
model="claude-opus-4-8",
max_tokens=512,
system="You are terse.",
messages=[{"role": "user", "content": "Define idempotency."}],
)
text = next(b.text for b in resp.content if b.type == "text")
OpenAI(Responses API):
from openai import OpenAI
client = OpenAI()
resp = client.responses.create(
model="gpt-5.5",
max_output_tokens=512,
instructions="You are terse.",
input="Define idempotency.",
)
text = resp.output_text
两个实现完成相同的功能。所有变更都是字段重命名——读取回复时从 content-block 循环简化为单一的 resp.output_text。
- **Client:** `Anthropic()` → `OpenAI()`
调用方式:client.messages.create(...) → client.responses.create(...)
系统提示词:system= → instructions=
用户内容:messages=[{role, content}] → input=(字符串或列表)
输出上限:max_tokens → max_output_tokens
读取文本:循环遍历 resp.content 文本块 → resp.output_text
结构化输出:messages.parse(output_format=…) → responses.parse(text_format=…)
工具定义:{name, input_schema} → {"type": "function", name, parameters}
工具请求:tool_use 块 + tool_use_id → function_call 项 + call_id
工具结果返回:用户消息中的 tool_result → function_call_output 项
循环控制:stop_reason == "tool_use" → resp.output 中存在任何 function_call
推理:thinking + output_config.effort → reasoning={"effort": …}
异常:anthropic.APIError → openai.APIError
文本调用 5 分钟就能改完。真正有结构性差异的地方是工具调用:Claude 通过 stop_reason 分支并用 tool_use_id 匹配 tool_use 块;OpenAI 没有 stop_reason,所以要循环检查 resp.output 中是否还有 function_call 项并用 call_id 匹配。
在旧模型上,"let's think step by step" 对困难问题确实有帮助。但在现代推理模型上,这通常是多余的——模型已经在内部进行推理,你通过一个旋钮而不是魔法短语来控制推理量:
# OpenAI
resp = client.responses.create(
model="gpt-5.5",
reasoning={"effort": "high"},
input=prompt
)
所以迁移完成后,不要只是简单移植你的思维链咒语——为困难任务提高 effort,保持提示词简洁。
这是人们常跳过的一步。不同的模型行为不同,所以在 Claude 上调优的提示词在 GPT 上可能需要调整。正确的流程:
使用上面的表格交换客户端 + 调用层。
将 system 迁移到 instructions,重构工具循环。
把模型 ID 放入一个配置值中。
用 OpenAI 版本重新运行评估套件——最好加个标志位,这样可以在切过去之前同时运行两者并比较。
把模型选择放在配置中并通过接口隔离,"Claude vs OpenAI vs 两者"就变成了一个配置决策,而不是代码重写。
这是来自一门免费的、无需注册的 AI 工程课程的一个经验教训,每个代码示例都同时展示 Claude 和 OpenAI 两个版本,带切换开关——这样你可以在任一 SDK 中学习,或在两者之间迁移。本章的完整版本(包含可在浏览器中运行的示例)在这里:
👉 Prompting GPT & Migrating from Claude — ai.studybydoing.in
该课程涵盖从 Python 基础到生产级 LLM 系统的完整路径——RAG、agent、评估,以及现在与 Claude 版本并行的完整 OpenAI 版本。