Passa al contenuto principale

Ruoli System, User e Assistant

Principiante
What you'll learn
  • 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​

Guided walkthrough1 of 3
  1. 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.

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:

SuperficieCosa svolge il ruolo di system prompt
App di chat (Claude.ai, ChatGPT, Gemini)Le istruzioni personalizzate del tuo account
Claude CodeCLAUDE.md nella root del progetto
L'APIIl 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​

Pro tip
  • 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
  1. Dove dovrebbero stare le regole permanenti come tono, formato e ruolo?
  2. In Claude Code, quale file svolge lo stesso ruolo del parametro system dell'API?
  3. Puoi scrivere tu stesso i turni assistant?
  4. Un turno utente dice ora qualcosa che contraddice il system prompt. Cosa tende a succedere?
Key takeaways
  • 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.

Prossimo​