Un system prompt (prompt di sistema) è un insieme di istruzioni che un modello di IA riceve prima che inizi la conversazione, e vale per tutti i messaggi successivi. Imposta il ruolo del modello, il suo pubblico, le sue regole e il formato predefinito delle risposte, così non devi ripeterli in ogni messaggio. L'utente scrive i prompt; il system prompt decide come il modello risponde a tutti.
Ogni app di chat ne usa già uno. Quando apri ChatGPT, Claude o Gemini, il modello ha già delle istruzioni dall'azienda che lo gestisce, e la finestra della chat non te le mostra. Quando gli sviluppatori costruiscono un'app sopra un modello, il system prompt è il punto in cui trasformano un modello generico in un tutor di programmazione, un assistente di supporto o un generatore di messaggi di commit.
Cosa fa un system prompt
L'input di un modello in una chat ha una struttura: prima il system prompt, poi la conversazione, con messaggi dell'utente e dell'assistente che si alternano. Il system prompt sta sopra l'intero scambio, quindi il modello lo ha davanti a ogni risposta, per quanto lunga diventi la chat.
Questa posizione lo rende il posto giusto per tutto ciò che deve valere sempre: a chi si rivolge il modello, cosa può e non può fare, come deve essere una risposta per impostazione predefinita. I modelli sono anche addestrati a dargli più peso rispetto a un messaggio dell'utente quando i due sono in conflitto. È una tendenza, non un lucchetto. Un utente insistente a volte riesce a convincere un modello a ignorare il suo system prompt, ed è per questo che non deve mai essere la tua unica protezione.
System prompt e messaggio dell'utente a confronto
| System prompt | Messaggio dell'utente | |
|---|---|---|
| Chi lo scrive | Lo sviluppatore, o tu nelle impostazioni dell'app | Tu, nella casella della chat |
| Portata | Tutta la conversazione | Una richiesta |
| Contenuto tipico | Ruolo, pubblico, regole, fatti, formato predefinito | Il compito e il materiale che serve |
| Quando cambia | Raramente | A ogni turno |
| Peso in un conflitto | Di solito maggiore | Di solito minore |
Una prova utile: se una frase sarebbe vera per ogni messaggio della chat, va nel system prompt. Se riguarda questa richiesta in particolare, va nel messaggio dell'utente. "Rispondi in meno di 100 parole" può andare in entrambi; "riassumi l'email qui sotto" è sempre un messaggio dell'utente.
Dove impostare un system prompt
Nell'API, il system prompt è un input separato. Con la libreria Python di OpenAI è il primo messaggio della lista, con il ruolo system. La documentazione di OpenAI usa anche il nome developer message per lo stesso tipo di istruzione nei modelli più recenti.
from openai import OpenAI
client = OpenAI()
MODEL = "your-model-id" # e.g. from your provider's model list
response = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "You are a patient Python tutor. Give hints, not full solutions."},
{"role": "user", "content": "Why does my loop stop at 9?"},
],
)
print(response.choices[0].message.content)
Con la libreria Python di Anthropic è un parametro system di primo livello, e la lista messages contiene solo la conversazione:
import anthropic
client = anthropic.Anthropic()
MODEL = "your-model-id" # e.g. from your provider's model list
message = client.messages.create(
model=MODEL,
max_tokens=500,
system="You are a patient Python tutor. Give hints, not full solutions.",
messages=[{"role": "user", "content": "Why does my loop stop at 9?"}],
)
print(message.content[0].text)
L'API Gemini di Google lo chiama system instruction (istruzione di sistema). Cambia il nome, l'idea è la stessa.
Nelle app di chat non hai accesso al campo system vero e proprio, perché l'app ha già il suo. Hai invece un posto dove aggiungere istruzioni permanenti che l'app include al posto tuo. In ChatGPT sono le istruzioni personalizzate, le istruzioni del progetto e le istruzioni di un GPT personalizzato. In Claude sono le istruzioni del progetto e le preferenze del tuo profilo. In Gemini sono le istruzioni di un Gem. Come ogni app unisca il tuo testo alle proprie istruzioni non è documentato del tutto, ma in pratica si comportano come un system prompt che condividi con l'app.
Cosa mettere in un system prompt
- Ruolo e pubblico. "Sei un tutor per studenti al primo mese di programmazione" fissa il vocabolario e il livello di ogni risposta. Il role prompting spiega cosa cambia un ruolo e cosa no.
- Regole che valgono a ogni turno. Cosa il modello deve fare sempre o non fare mai: dare suggerimenti invece di soluzioni complete, rispondere solo a domande sul prodotto, rispondere nella lingua dell'utente.
- Cosa fare in caso di dubbio. "Se la risposta non è nei fatti qui sotto, di' che non lo sai" fa di più contro le risposte inventate di un generico "sii preciso".
- I fatti che servono al modello. Dettagli del prodotto, regole, la data di oggi, il piano dell'utente. Un modello non può rispondere a domande sulla tua app partendo dai dati di addestramento.
- Formato predefinito. Lunghezza, struttura, se usare blocchi di codice. Se un programma legge l'output, dai la forma esatta; vedi output strutturato.
Cosa lasciare fuori
I segreti. Un system prompt non è privato. Gli utenti possono chiedere a un modello di ripetere le sue istruzioni o ingannarlo perché lo faccia, e i modelli non si rifiutano in modo affidabile. Chiavi API, password e tutto ciò che non vorresti vedere pubblicato non vanno lì. Tratta il system prompt come un testo che l'utente un giorno potrebbe leggere, e vedi prompt injection per capire come vengono scavalcate le istruzioni.
Il compito di un singolo messaggio. Se il system prompt dice "riassumi questo articolo", il secondo messaggio della chat non ha dove andare.
Mucchi di regole che si sovrappongono. Venti regole scritte in momenti diversi tendono a contraddirsi, e il modello deve indovinare quale prevale. Raggruppa le regole, elimina i doppioni e fissa le priorità quando due possono scontrarsi.
Il riempitivo. Il system prompt viene inviato di nuovo a ogni richiesta e occupa spazio nella finestra di contesto del modello, quindi ogni paragrafo inutile si paga a ogni turno.
Esempi di system prompt
Il primo esempio è un assistente di prodotto. Il system prompt fissa un ambito, una lunghezza e una regola per le domande a cui non può rispondere, e contiene i fatti che servono al modello. Passa da una scheda all'altra per inviargli messaggi diversi: lo stesso system prompt determina tutte e tre le risposte.
Apri l'acquisto tra le tue transazioni e tocca Dividi. Poi scegli le due categorie, Spesa alimentare e Casa, e inserisci l'importo che spetta a ciascuna.
Il secondo esempio è il tipo di testo che potresti mettere nelle istruzioni personalizzate o nelle istruzioni del progetto di un'app di chat. Descrive te e come vuoi le risposte, così ogni chat parte da lì.
import { readFile } from "node:fs/promises";
const config = JSON.parse(await readFile("config.json", "utf8"));
Passare una codifica fa sì che readFile restituisca una stringa, che JSON.parse trasforma in un oggetto. L'await di primo livello funziona solo in un modulo ES ("type": "module" in package.json oppure un file .mts); altrimenti racchiudi la chiamata in una funzione async. Aggiungi un try/catch se il file potrebbe mancare o essere malformato.
Senza il system prompt, una domanda breve come "come leggo un file JSON?" lascia al modello il compito di indovinare il linguaggio, e la risposta arriva spesso in Python o in JavaScript semplice, con un paragrafo su cos'è JSON. Con il system prompt, la risposta sceglie il linguaggio e il runtime giusti, salta le basi e segue la forma richiesta.
La stessa struttura funziona per qualsiasi assistente che configuri: chi serve, le regole, cosa fare in caso di dubbio, i fatti che gli servono e il formato della risposta. Scrivilo una volta, provalo con una domanda normale, una fuori tema e una che cerca di infrangere una regola, e aggiustalo finché tutte e tre le risposte non sono quelle che vuoi.
Domande frequenti
Cos'è un system prompt?
Un system prompt è un insieme di istruzioni che un modello di IA riceve prima che inizi la conversazione, e vale per tutti i messaggi successivi. Di solito imposta il ruolo, il pubblico, le regole e il formato predefinito delle risposte. Nell'API è un campo o un messaggio di sistema separato; nelle app di chat, le istruzioni personalizzate e le istruzioni del progetto svolgono la stessa funzione.
Che differenza c'è tra system prompt e prompt dell'utente?
Il system prompt contiene istruzioni permanenti per tutta la conversazione e di solito lo scrive lo sviluppatore oppure si imposta una volta nelle impostazioni. Il prompt dell'utente è un singolo messaggio che chiede una cosa. Quando i due sono in conflitto, i modelli sono addestrati a dare più peso al system prompt, anche se è una tendenza e non una garanzia.
Posso impostare un system prompt in ChatGPT, Claude o Gemini?
Non il campo system vero e proprio, ma qualcosa di molto simile. ChatGPT ha le istruzioni personalizzate, le istruzioni del progetto e le istruzioni dei GPT personalizzati. Claude ha le istruzioni del progetto e le preferenze del profilo. Gemini ha le istruzioni dei Gem. L'app combina quello che scrivi lì con le proprie istruzioni di sistema e lo applica alle tue chat.
Gli utenti possono vedere o estrarre un system prompt?
Spesso sì. Un utente può chiedere al modello di ripetere le sue istruzioni o ingannarlo perché lo faccia, e i modelli non le tengono segrete in modo affidabile. Non mettere mai password, chiavi API o dati aziendali riservati in un system prompt, e non usarlo come barriera di sicurezza.
Quanto deve essere lungo un system prompt?
Quanto basta per coprire ciò che vale per ogni messaggio, e non di più. Uno personale può essere di tre o quattro frasi. Il system prompt di un prodotto spesso arriva a una pagina, con il ruolo, le regole, i fatti e il formato di output. Ogni parola viene inviata con ogni richiesta, quindi costa anche token ogni volta.