API chat của LLM nhận một danh sách message, mỗi message có role và content:
- system — chỉ dẫn nền, đặt hành vi/persona/ràng buộc cho cả cuộc hội thoại. Thường đặt một lần ở đầu, ưu tiên cao.
- user — đầu vào của người dùng ở mỗi lượt.
- assistant — câu trả lời của model. Khi gửi lại lịch sử, các message assistant cũ giúp model có ngữ cảnh multi-turn.
- tool (hoặc
function) — kết quả trả về từ tool mà model đã gọi.
Chat template là bước biến danh sách message có cấu trúc này thành một chuỗi token phẳng đúng định dạng mà model đã được train. Model open-source lưu template (Jinja) trong tokenizer; nó chèn các control token như <|system|>, <|user|>, <|assistant|>, <|end|>. Dùng sai template (sai token đặc biệt, sai thứ tự) → model hiểu sai ranh giới lượt và trả lời kém. Với API (OpenAI/Anthropic) việc format này được xử lý phía server; khi self-host thì phải apply_chat_template đúng.