# System, User and Assistant Messages — Prompt Engineering

Source: https://www.geekswithgeeks.com/en/prompt-engineering/f-roles

> Use the message roles of chat APIs correctly.

## Standing rules versus the current request

Chat-style APIs take a list of messages with roles. The **system** message sets durable behaviour: persona, rules, format, safety limits. **User** messages carry the request and data. **Assistant** messages are the model's earlier replies (and can be pre-filled to demonstrate a style). Put stable instructions in the system message and variable content in user messages. Remember that the model does not have a hidden memory: each call must include whatever earlier turns it needs. Never put secrets in prompts, and do not assume the system prompt can be kept confidential from a determined user.

## A messages array

The shape used by most chat APIs; exact field names vary by provider. Illustrative; not run here.

```json
[
  {"role": "system", "content": "You are a concise support assistant. Answer in at most 3 sentences."},
  {"role": "user", "content": "How do I reset my password?"},
  {"role": "assistant", "content": "Open Settings > Security and choose Reset password."},
  {"role": "user", "content": "And if I no longer have access to my email?"}
]
```

## Rebuild history each call

Because the model keeps no memory, send the earlier turns you still need with every request and drop what you do not.

**Quiz:** Where should stable rules and persona go?

- [ ] Only in the last user message
- [x] In the system message
- [ ] In a comment
- [ ] Nowhere

*Answer:* In the system message. The system message carries instructions that apply to the whole conversation.
