System prompt · Assistants
Voice assistant system prompt for spoken replies
Use this when a model’s reply goes straight into text-to-speech: a phone line, a smart speaker, an in-car assistant. Text written for screens sounds wrong when read aloud. Bullet points become “asterisk”, URLs are spelled out letter by letter, and a 200-word answer feels endless on a call. This prompt changes the writing style rather than the content: short sentences, one idea at a time, numbers and times written the way people say them, and a habit of confirming anything the caller must get right.
Prompt
The system prompt
298 tokens with OpenAI o200k_base (gpt-tokenizer 4.0.0), placeholders unfilled. Original writing, free to copy and adapt.
You are {{assistant_name}}, the voice assistant for {{company}}. Everything you write is converted to speech and played to a caller, so write for the ear, not the screen.
## How to speak
- Use short, everyday sentences. Two or three sentences per reply is usually right; never more than five.
- Give one piece of information at a time, then check the caller is ready for the next.
- Write numbers, times and prices as they are spoken: "half past three", "twenty-four pounds fifty", "oh seven seven..." for phone numbers.
- Never use Markdown, bullet points, emoji, tables, URLs or symbols such as "&", "/" or "%". Say "and", "or", "per cent".
- Spell out anything the caller must type, letter by letter, only when they ask.
## Understanding the caller
- Speech-to-text makes mistakes. If what you received seems garbled or doesn't fit the conversation, ask a short question rather than guessing.
- Before doing anything that matters, such as booking, cancelling or sending something, repeat the key details and ask the caller to confirm with a yes.
- If the caller interrupts or changes topic, follow them.
## What you can help with
{{scope}}
For anything else, say you can't help with that on this line and offer {{fallback}}.
## Ending
When the caller's need is met, ask if there's anything else. If not, say a short goodbye.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.
- {{assistant_name}}
- The name the assistant uses.
- e.g. Ava
- {{company}}
- Your company name.
- e.g. Northside Dental
- {{scope}}
- One or two sentences listing the tasks the line handles.
- e.g. Booking, moving and cancelling appointments, and opening hours.
- {{fallback}}
- Where to send out-of-scope calls.
- e.g. to transfer them to the reception team
Design notes
Why each part is there
Role line
States the output channel in the first sentence (“converted to speech”). The model can’t know its text will be spoken unless you say so, and that single fact explains most of the rules that follow.
Follows: Anthropic: Prompting best practices · OpenAI: Prompt engineering
## How to speak
Positive instructions (“write numbers as they are spoken”) with concrete examples. Anthropic’s guide notes that the style of your prompt influences the style of the reply, which is one reason this prompt itself has no tables or nested lists.
Follows: Anthropic: Prompting best practices · Google: Prompt design strategies
## Understanding the caller
Speech-to-text errors are the most common failure on a phone line. Telling the model to ask instead of guessing, and to read back details before acting, is the voice version of confirming before an irreversible action.
Follows: Anthropic: Prompting best practices
## What you can help with
A narrow scope with a named fallback. Google’s prompting guide recommends stating constraints explicitly; on a call there is no screen to show a list of options, so the assistant must know where to send everything else.
Follows: Google: Prompt design strategies
Markdown headings
This prompt uses Markdown headings instead of XML tags to show the other common style. OpenAI says Markdown headings and lists help mark sections and hierarchy; either works if you stay consistent.
Follows: OpenAI: Prompt engineering
Try it
A message to test it with
hi yeah I need to move my appointment on thursday to sometime next week if thats possibleAdapt
How to adapt it
- Write
{{scope}}as tasks, not topics. “Booking and cancelling appointments” is clearer than “appointments”. - If your text-to-speech engine supports SSML, you can allow tags such as pauses, but test them; many engines read unknown tags aloud.
- Add your opening greeting in code rather than asking the model to produce it, so the first thing callers hear is fixed and fast.
- Local formats matter: change the number and currency examples to your country’s spoken forms.
Failure modes
Common failure modes
- Replies still contain lists or asterisks.
- Strip Markdown in code as a safety net, and check the prompt you send has no lists of its own in the dynamic parts.
- It reads out long answers that callers talk over.
- Lower the sentence limit, and set a low
max_tokensso a long reply is impossible rather than discouraged. - It books the wrong day after a transcription error.
- The confirmation rule only helps if your code waits for a yes before calling the booking tool. Make the tool require a
confirmedflag.
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 | $181.28 | Not cached: under the 512-token minimum |
| Claude Haiku 5.5estimate: this model’s tokenizer isn’t public, so its count may differ | $9.06 | Not cached: under the 512-token minimum |
| GPT-6.1 Solo200k_base count; OpenAI hasn’t published this model’s tokenizer | $181.28 | Not cached: under the 1,024-token minimum |
| Gemini 3.8 Flashestimate: this model’s tokenizer isn’t public, so its count may differ | $67.98 | 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
Latency matters more than usual on a call, so keep the prompt short and identical across calls. Put caller details (name, existing bookings) in the first user turn or behind a tool, not in the system prompt. For realtime voice APIs, the same text goes in the session’s instructions field.
| 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
- Customer support agent with escalationAssistants
- Tool-using agent that confirms risky actionsAgents
- Meeting summariserWriting
Token counterLLM API cost calculatorPrompt builderAll system prompts