Roles are not just decoration
Most chat APIs distinguish system, user, and assistant messages. The system message carries the most authority and is the natural home for the spine. User messages carry tasks. Assistant messages carry replies. Mixing them — putting tool schemas in a user message, putting rules in an assistant message, dumping a long history into a single user message — diffuses authority and confuses cache.
Multi-turn fidelity
When you replay history across turns, preserve role assignments faithfully. Squashing the entire conversation into one giant user message saves no money and breaks the model's ability to track who said what. Modern APIs charge per token, not per message, so the only cost of preserving roles is structural cleanliness.
One role per concept
System for rules. User for tasks. Assistant for replies. Tool messages for tool results. If a 'role' field exists in the API, it is doing work — use it as designed.