Ruoli System, User e Assistant
- I tre ruoli da cui è costruita ogni conversazione con un'AI — e a cosa serve ciascuno
- Perché il system prompt è il punto con la leva più alta per orientare il comportamento
- Come la stessa idea si presenta nelle app di chat, in Claude Code e nell'API
- Una trappola comune: nascondere le regole in un turno utente invece che nel messaggio system
Ogni conversazione con un'AI è costruita da messaggi, e ogni messaggio ha un ruolo. Capire i tre ruoli spiega come orientare il modello — e perché alcune istruzioni attecchiscono e altre no.
I tre ruoli
- Impostazione di primo livello per tutta la conversazione: chi deve essere il modello, le regole, il formato dell'output. Si imposta una volta e vale per ogni turno successivo.
- Le tue domande e i tuoi input, un turno alla volta. Tienili focalizzati sul task reale; non reincollare le regole permanenti a ogni turno.
- Le risposte del modello. Puoi anche mettere parole in bocca all'assistant come esempi few-shot (vedi /docs/prompting/few-shot) — il modello li tratta come turni precedenti e continua in quello stile.
Perché il system prompt è la tua leva più potente
Il messaggio system inquadra tutto ciò che segue. È dove imposti il ruolo del modello, gli standard, il tono e le regole ferree — e il modello gli dà molto peso. Se vuoi un comportamento coerente su tutta una conversazione (o app), mettilo qui, non nascosto in un turno utente.
Stessa idea, tre superfici:
| Superficie | Cosa svolge il ruolo di system prompt |
|---|---|
| App di chat (Claude.ai, ChatGPT, Gemini) | Le istruzioni personalizzate del tuo account |
| Claude Code | CLAUDE.md nella root del progetto |
| L'API | Il parametro system sulla richiesta (prima chiamata, System prompt) |
Un esempio prima/dopo
L'errore più comune è mettere le regole permanenti in ogni turno utente invece che nel messaggio system. Guarda cosa cambia.
Prima — regole stipate in un turno utente, ripetute ogni volta:
Regole nel turno utente (fragile)
user: You are a precise financial analyst. Always show your assumptions. Never invent numbers. Now: summarize this 10-K. [10-K text]
Dopo — regole promosse nel messaggio system, i turni utente restano puliti:
Regole nel messaggio system (durevole)
system: You are a precise financial analyst. Always show your assumptions. Never invent numbers. Cite the section of the filing for each claim. user: Summarize this 10-K. [10-K text] user: Now flag the risks.
La versione "dopo" mantiene il comportamento stabile tra i turni, dimezza i token che rispedisci a ogni turno e rende l'app più facile da modificare — modifichi il brief permanente in un solo posto.
Scrivere tu stesso i turni assistant
Puoi scrivere tu i turni assistant — ma dove li metti conta, e le regole sono cambiate.
I turni assistant completi, più indietro nella conversazione, sono un esempio few-shot. Questo funziona ancora dappertutto, ed è il modo robusto per imporre un template: mostra una risposta finita nella forma che vuoi, poi fai la domanda vera.
Un turno d'esempio finito, poi la richiesta vera
system: You are a code reviewer. Answer with exactly these sections: Summary, Risks, Suggested changes. user: Review this pull request. [example diff] assistant: ## Summary Renames the token helper and adds an expiry guard. ## Risks - The guard uses < rather than <=, so a token expiring this second passes. ## Suggested changes - Switch the comparison to <=. user: Review this pull request. [the real diff]
Un turno assistant lasciato a metà proprio alla fine — un "prefill" — è ritirato sui modelli Claude attuali. Era il trucco per forzare il JSON o saltare il preambolo; su Claude 4.6 e successivi, una richiesta il cui ultimo messaggio è un turno assistant prefillato restituisce un errore 400. Metti invece la regola di formato nel messaggio system, oppure vincolala con gli structured output.
Errori comuni
- Regole in ogni turno utente — metti le regole permanenti una volta sola nel messaggio system; usa i turni utente per il task reale.
- Contraddirsi tra i turni — un'istruzione utente successiva ed esplicita può prevalere su una system vaga. Sii coerente.
- Trattare il ruolo assistant come di sola lettura — puoi scrivere turni assistant completi come esempi few-shot. Solo, non lasciarne uno a metà alla fine: quello è un prefill, e su Claude 4.6+ è un 400.
- Sovraccaricare il system prompt di fatti che cambiano — metti i fatti volatili (documenti, dati, stato corrente) nel turno utente o nel contesto di retrieval, non nel messaggio system.
Verifica le tue conoscenze
Verifica le tue conoscenze
0/4- Tre ruoli: system imposta il brief, user chiede turno per turno, assistant risponde — e puoi scrivere tu stesso turni assistant finiti come esempi.
- Il system prompt è la leva con il maggior effetto — metti lì le regole permanenti, una volta sola.
- Istruzioni personalizzate della chat, CLAUDE.md e il campo `system` dell'API sono la stessa idea su tre superfici.
- I fatti volatili appartengono ai turni utente o al retrieval, non al messaggio system.
- Non chiudere una richiesta su un turno assistant lasciato a metà: i prefill restituiscono un 400 su Claude 4.6 e successivi.