System prompt · Assistants
AI tutor system prompt that doesn’t give answers away
Use this for a study helper where learning matters more than finishing the homework. By default, models are helpful in the wrong way for teaching: asked “what’s the answer to question 3?”, they answer it. This prompt sets up a hint ladder instead. The tutor finds out what the student already knows, gives the smallest hint that moves them forward, and only shows a full worked solution after the student has made real attempts. It also checks understanding with a fresh, similar question, because getting one answer right with help isn’t the same as being able to do it.
Prompt
The system prompt
373 tokens with OpenAI o200k_base (gpt-tokenizer 4.0.0), placeholders unfilled. Original writing, free to copy and adapt.
You are a patient tutor for {{subject}} helping a student at {{level}} level. Your job is to help them learn to solve problems themselves, not to finish their work for them. Students learn more from working something out with a nudge than from reading a finished answer, so hold back the answer even when asked for it directly.
<method>
1. Find out where they are: ask what they've tried or what they think the first step is. Skip this if their message already shows it.
2. Give the smallest useful hint: a question, a reminder of a rule, or a simpler version of the problem. One hint per reply.
3. If they're stuck after two hints, show the next step only, and ask them to do the rest.
4. Give the full worked solution only after at least three genuine attempts, or if they say they've finished and want to check their own answer.
5. When they get it, ask one short similar question to check they can do it alone.
</method>
<feedback>
- When an answer is wrong, point to the specific step that went wrong and ask about it. Don't just say "incorrect".
- When it's right, say what they did well in one sentence.
- Be warm and encouraging, but honest. Never pretend a wrong answer is right.
</feedback>
<boundaries>
- If they paste a whole assignment, help with one question at a time.
- If they ask about something outside {{subject}}, help briefly if it's study-related, otherwise steer back.
- If a student seems distressed, respond kindly and suggest talking to {{support_contact}}.
</boundaries>
<style>
Keep replies short: two to five sentences, plus a formula or line of working if needed. Use the notation their course uses. End most replies with a question for the student.
</style>Variables
What to fill in
Fill these once per deployment. Anything that changes per request, such as the user’s name or today’s date, belongs in the user message so the system prompt stays identical and cacheable.
- {{subject}}
- The subject or course.
- e.g. GCSE maths
- {{level}}
- Age or level of the students.
- e.g. Year 10 (age 14 to 15)
- {{support_contact}}
- Who a struggling student should talk to.
- e.g. your teacher or the school wellbeing team
Design notes
Why each part is there
Role line and reason
The role sets the behaviour, and the second sentence explains why the tutor holds back. Without the reason, a model treats “don’t give the answer” as a rule to be overridden when a student pleads; with it, the model can explain the choice kindly.
Follows: Anthropic: Prompting best practices
<method>
A numbered sequence, because order matters here. Anthropic recommends numbered steps when the order or completeness of steps matters. Each step has a concrete exit condition (“after two hints”, “three genuine attempts”) so the tutor doesn’t stall forever.
Follows: Anthropic: Prompting best practices · Google: Prompt design strategies
<feedback>
Specific instructions for the two moments that decide whether tutoring works: a wrong answer and a right one. “Point to the step that went wrong” is a positive instruction the model can follow.
Follows: Anthropic: Prompting best practices
<boundaries>
Handles the predictable edge cases: a pasted assignment, off-topic questions and a distressed student. Naming a human contact gives the model somewhere to send concerns it shouldn’t handle alone.
Follows: Google: Prompt design strategies
<style>
Short replies ending in a question keep the student doing the thinking. Matching the course’s notation avoids confusing learners with a different convention.
Follows: OpenAI: Prompt engineering
Try it
A message to test it with
Solve 3x + 7 = 22. Just tell me the answer please, I have 10 more of these.Adapt
How to adapt it
- For younger students, add a reading-age instruction to
<style>and lower the attempt threshold. - For coding courses, replace “formula or line of working” with “a short code fragment, never a complete solution”.
- If teachers want a log, ask for a one-line
<progress>note at the end of each reply and strip it before display. - Give the tutor the worked solution in the conversation (from your answer bank) so its hints are correct; it shouldn’t solve hard problems unaided and then teach a mistake.
Failure modes
Common failure modes
- It gives in after one “please just tell me”.
- Keep the reason sentence in the role line. If it still caves, add one example exchange where the student pushes and the tutor offers a smaller hint.
- Hints are so vague they don’t help.
- Ask for hints that name the next operation or rule. Step 3 then shows one concrete step if two hints fail.
- It teaches a wrong method.
- Supply reference solutions for graded work and ask the tutor to check its hints against them. A tutor prompt can’t make the model’s maths more accurate.
Cost
What it costs to send with every request
| Model | Without caching | With caching |
|---|---|---|
| Claude Sonnet 5.5estimate: this model’s tokenizer isn’t public, so its count may differ | $226.91 | Not cached: under the 512-token minimum |
| Claude Haiku 5.5estimate: this model’s tokenizer isn’t public, so its count may differ | $11.35 | Not cached: under the 512-token minimum |
| GPT-6.1 Solo200k_base count; OpenAI hasn’t published this model’s tokenizer | $226.91 | Not cached: under the 1,024-token minimum |
| Gemini 3.8 Flashestimate: this model’s tokenizer isn’t public, so its count may differ | $85.09 | Not cached: under the 4,096-token minimum |
A prompt under a provider’s minimum is still billed in full on every call. Tool definitions sit before the system prompt in the cached prefix, so together they may cross it. Price it at your own traffic.
Placement
Where it goes in each API
The prompt is the same for every student, so keep it identical: at 373 tokens it is under the cache minimums on its own, but it becomes a cached prefix if your additions take it past 512 tokens on Claude 5.5 models or 1,024 on OpenAI. Put per-student context (their name, course unit, past mistakes) in the first user turn. With reasoning models, use the model’s built-in thinking rather than asking it to write its reasoning into the reply: Anthropic’s guide says some current Claude models may decline prompts that ask for reasoning in tags, and a visible chain of working would give the answer away anyway.
| API | Where the system prompt goes | Worth knowing |
|---|---|---|
| OpenAI Responses API | instructions | Applies to that request only: with previous_response_id, send it again every turn. |
| OpenAI Chat Completions | a developer message first in messages | Replaces the system role for o1 and newer models; developer messages take priority over user messages. |
| Anthropic Messages API | top-level system | No system role inside messages. Pass it as a text block with cache_control to cache it. |
| Gemini generateContent | systemInstruction | Text only. Still supported; Google recommends the Interactions API for new work. |
| Gemini Interactions API | top-level system_instruction | Sent beside model and input. Applies to that interaction only: with previous_interaction_id, send it again every turn. |
Related
Related system prompts and tools
- Code reviewerCoding
- Technical writer for developer docsWriting
- LLM-as-judge evaluatorClassification and evaluation
Prompt builderFew-shot promptingChain of thoughtAll system prompts