System Prompts vs User Prompts: What's the Difference?
Two different jobs, often confused for one
If you've used the API for Claude, GPT-4o, or Gemini directly (rather than just a chat interface), you've run into the split between a "system" message and a "user" message. Mixing up what belongs in each is one of the most common reasons prompts behave inconsistently across a session.
What each one is for
| System prompt | User prompt |
|---|---|
| Sets persistent behavior for the whole conversation — role, tone, rules, output format | The specific request or question for this turn |
| Set once, applies to every response | Changes with every message |
| Example: "You are a concise technical writer. Never use bullet points unless asked." | Example: "Explain how OAuth token refresh works." |
Why the split matters
If you put persistent instructions in the user prompt instead of the system prompt, you have to repeat them every single message, and the model may weight them less consistently over a long conversation. If you put a one-off task in the system prompt, it can bleed into every future response even when it's no longer relevant.
A practical example
System prompt (set once):
User prompt (changes each time):
With this split, you can paste a new paragraph every message and get consistent, explanation-free edits without restating the rules — because they live in the system prompt, not the user prompt.
What if there's no system prompt field?
Some interfaces (like a basic chat window) only expose one input box. In that case, the common workaround is to put your "system-style" instructions at the very start of the first message, clearly separated from the actual request — something PromptLab's auto-engineer does automatically when you're working against a model or interface that doesn't separate the two.
Common mistake: re-litigating the system prompt mid-conversation
If your system prompt says "always respond in bullet points" and three messages later you ask for prose "just this once," some models will revert back to bullets on the next message because the system instruction is still anchoring behavior. Being explicit about scope — "for this response only, use prose" — helps.
BUILD A SYSTEM PROMPT →