How to Move Claude Prompts to ChatGPT Message Format
Moving prompts from Claude to ChatGPT is the reverse of the more common direction: you take the Anthropic top-level system parameter and move it back into the messages array as a system role message. The conversation content stays the same.
The structural conversion
Anthropic format with a system parameter:
{
"model": "claude-3-5-sonnet-20241022",
"system": "You are a helpful assistant that summarises documents concisely.",
"messages": [
{"role": "user", "content": "Summarise this: ..."},
{"role": "assistant", "content": "Here is the summary: ..."},
{"role": "user", "content": "Make it shorter."}
]
}
OpenAI format with the same content:
{
"model": "gpt-4o",
"messages": [
{"role": "system", "content": "You are a helpful assistant that summarises documents concisely."},
{"role": "user", "content": "Summarise this: ..."},
{"role": "assistant", "content": "Here is the summary: ..."},
{"role": "user", "content": "Make it shorter."}
]
}
The system content moves from a top-level field into the messages array as the first message with "role": "system". The conversation messages are identical — only the container changes.
What doesn't change
User and assistant message content transfers directly. Both APIs use the same user and assistant role names. Content as a plain string works in both. Multi-turn conversation structure is the same in both formats.
What to adjust beyond the structure
The model name changes (from a Claude model to a GPT model). The max_tokens parameter in Anthropic becomes max_tokens in OpenAI — both use the same parameter name. Anthropic's temperature and top_p work the same way in OpenAI.
Tool/function calling syntax differs significantly between providers — if your prompt uses tools, this requires separate handling beyond the message format conversion.