Fundamentals
These are starting points, not model guarantees. Keep what improves your own evaluation set.- Disfluency by design. If natural fillers suit the application, list a small approved vocabulary and evaluate how often the LLM uses it.
- Short sentences. Prefer concise turns for spoken conversations.
- End action-oriented turns clearly. Ask one question or state the next action when a response is needed.
- Persona and scope. State the agent’s role and allowed tasks explicitly. Treat prompt instructions as behavior guidance, not a security boundary.
- No
!unless you want shouting. The model treats!, ALL-CAPS, and?!as prosody cues. Same for emoji. - Choose your voice deliberately. Test candidate voices with representative text — see voices.
- Include examples. Cover at least the happy path, an edge case, and recovery behavior.
- Pin the language. Set
language="de"(or the appropriate code) and tell the LLM which language to use. - Markdown headers for the model, never in the output. Use
#to structure the prompt — but**asterisks**and- bulletsget read aloud literally. - Keep a regression set. Replay representative turns after prompt changes because LLM behavior is probabilistic.
Drop-in snippets
Personality presets
Disfluency
Give the LLM a short approved filler list and verify the result in evaluation:
Drop this block into your prompt as-is and swap the filler list for your persona:
Tool descriptions
- Atomic, capability-named —
get_available_slots, notappointments_v2_endpoint. - Format hint in every parameter — the model uses them as few-shot.
- Refer to tools by capability in prose, never by resource ID. IDs leak into spoken output.
- Use request-start messages for noticeable tool waits so the caller gets immediate acknowledgement.
- Incremental capture — send the whole CRM record on every field update (empty string for unknowns) so a mid-call drop doesn’t lose state.
Workflow scaffold
Examples block (few-shot)
Include at least one happy path, one edge case, and one recovery example:What NOT to do
- Prefer positive instructions. State the desired behavior directly and test refusal cases separately.
- No multiple questions per turn. “Name and date of birth?” → split into two turns.
- No markdown in output. The agent reads
**bold**aloud as “asterisk asterisk bold asterisk asterisk”. - No long monologues. Five options spoken in a row is unusable. Offer 2 max.
- No vague tool names.
do_thing→ the model picks the wrong tool. - No emotional spam. Laughter / “oh wow” / “that’s great” → at most one turn in four, never two in a row.
Full template — copy this
Drop in your personality preset, filler list, tool descriptions, workflow, and examples from the snippets above:Related
- Turn lifecycle — one session per turn, flush at end
- Latency — pre-warm at startup, set
language, measure TTFA correctly - Prompting (TTS-level) —
<spell>and<break>tags for shaping speech output