Torna al blog

AI per principiantiGuida

System prompt e temperature: cosa fanno e come impostarli

Cosa fanno il messaggio di sistema e la temperature in una richiesta compatibile OpenAI, con esempi Python e curl che puoi inviare a un modello CheapTokens.

Di CheapTokens TeamPubblicato il Aggiornato il 6 min di lettura

Diagramma di una richiesta chat: un messaggio di sistema con le regole, un messaggio utente con il compito e una manopola della temperature
In questa pagina
  1. Cos'è un system prompt?
  2. Come scrivere un system prompt utile
  3. Cosa fa la temperature?
  4. Invia una richiesta con entrambi
  5. Guarda la temperature in azione
  6. Su quale modello provarlo
  7. Se non funziona
  8. Prossimo passo

Un system prompt è un messaggio con ruolo system che indica al modello come comportarsi in ogni risposta: chi è, quale formato usare, cosa evitare. La temperature è un numero, di solito tra 0 e 2 (l'intervallo dipende dal modello), che stabilisce quanto può variare la formulazione: valori bassi danno risposte concentrate e ripetibili, valori alti risposte più varie. Entrambi vanno nella stessa richiesta Chat Completions, che invii a https://api.cheaptokens.dev/v1.

Qui sotto: cosa sono, con quali valori iniziare e una richiesta che puoi eseguire in Python o curl. Se non hai ancora inviato una richiesta, inizia da la tua prima richiesta API con CheapTokens.

Cos'è un system prompt?#

Una richiesta chat è una lista di messaggi, e ogni messaggio ha un ruolo. La reference di Chat Completions ne elenca quattro: system, user, assistant e tool (DeepSeek API reference, verificata il 22 ottobre 2026). Per una prima richiesta te ne servono tre:

  • system — istruzioni permanenti da parte tua, lo sviluppatore. Il modello le tratta come le regole della conversazione.
  • user — ciò che la persona chiede o fornisce in questo turno.
  • assistant — le risposte precedenti del modello. Le aggiungi tu quando continui una conversazione.

Un messaggio di sistema richiede role impostato a system e content come stringa. Il campo name è opzionale.

json
"messages": [
  {"role": "system", "content": "You are an editor. Rewrite the user's text to be shorter and friendlier. Return only the rewritten text."},
  {"role": "user", "content": "Send me the report by tonight or I will be upset."}
]

Il messaggio di sistema va per primo. Il messaggio utente è il compito vero e proprio.

Come scrivere un system prompt utile#

  • Di' cosa fa il modello in una frase: "Sei un editor", "Classifichi i ticket di supporto".
  • Indica il formato di output: "Restituisci solo il testo riscritto", "Rispondi in due frasi", "Rispondi con JSON valido".
  • Dai le regole come frasi brevi e dirette. Diverse righe chiare funzionano meglio di un lungo paragrafo.
  • Tienilo corto. Il system prompt viene inviato con ogni richiesta e conteggiato come token di input, quindi uno lungo si paga ogni volta. Come vengono fatturati input e output è in token di input vs output.

Cosa fa la temperature?#

Un modello sceglie ogni token successivo da un insieme di candidati probabili. La temperature controlla quanto strettamente si attiene a quello più probabile. Secondo la DeepSeek API reference (verificata il 22 ottobre 2026), temperature accetta valori da 0 a 2 con default 1: valori più alti danno output più casuale, valori più bassi output più concentrato e deterministico. Gli intervalli variano tra i modelli: DeepSeek documenta 0-2, Z.ai documenta 0-1 per GLM-5.3 (entrambe verificate il 22 ottobre 2026), quindi i valori da 0 a 1 sono sicuri su entrambi. Controlla l'intervallo del tuo modello nella documentazione.

Punti di partenza che funzionano per la maggior parte dei compiti. Sono regole empiriche, non garanzie:

Compito Inizia con
Estrazione, classificazione, codice, formati rigidi 0 a 0.3
Q&A, riassunti, riscrittura 0.3 a 0.7
Brainstorming, nomi, testo creativo 0.8 a 1

Tre cose da sapere:

  1. Una temperature bassa è più ripetibile, non identica. Non fare affidamento su risposte identiche byte per byte.
  2. Cambia temperature o top_p, non entrambi. È la raccomandazione di DeepSeek; top_p è un secondo parametro di campionamento con default 1. Lascialo stare finché stai imparando.
  3. Alcune modalità ignorano la temperature. La reference di DeepSeek dice che la temperature non ha effetto in thinking mode e che top_p è fissato a 1.0 in non-thinking mode. Se cambi un valore e non vedi differenze, controlla prima la modalità del modello.

Invia una richiesta con entrambi#

Imposta la chiave come variabile d'ambiente, così non finisce mai nel codice (vedi cos'è una API key e come conservarla in modo sicuro). Prendi l'id esatto del modello dalla documentazione CheapTokens: provider diversi chiamano lo stesso modello in modi diversi. Questo esempio usa MiniMax-M2.7.

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

response = client.chat.completions.create(
    model="MiniMaxAI/MiniMax-M2.7",
    messages=[
        {"role": "system", "content": "You are an editor. Rewrite the user's text to be shorter and friendlier. Return only the rewritten text."},
        {"role": "user", "content": "Send me the report by tonight or I will be upset."},
    ],
    temperature=0.3,
    max_tokens=1000,
)

print(response.choices[0].message.content)
print(response.choices[0].finish_reason)

La stessa richiesta con curl:

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MiniMaxAI/MiniMax-M2.7",
    "messages": [
      {"role": "system", "content": "You are an editor. Rewrite the user'\''s text to be shorter and friendlier. Return only the rewritten text."},
      {"role": "user", "content": "Send me the report by tonight or I will be upset."}
    ],
    "temperature": 0.3,
    "max_tokens": 1000
  }'

Cosa dovresti vedere: una versione breve e più amichevole della frase e stop come finish_reason. Se finish_reason è length, la risposta ha raggiunto il limite max_tokens; vedi perché una risposta AI si interrompe a metà frase.

Guarda la temperature in azione#

Il modo migliore per capire la temperature è porre la stessa domanda più volte. Questo ciclo invia una breve richiesta tre volte a 0 e tre volte a 1, usando client dell'esempio sopra:

python
for temp in (0, 1):
    print("temperature", temp)
    for _ in range(3):
        r = client.chat.completions.create(
            model="MiniMaxAI/MiniMax-M2.7",
            messages=[
                {"role": "system", "content": "Answer with one word."},
                {"role": "user", "content": "Name a fruit."},
            ],
            temperature=temp,
            max_tokens=500,
        )
        print(" ", r.choices[0].message.content)

A 0 le tre righe sono di solito la stessa parola; a 1 vedrai di solito parole più diverse. I modelli che ragionano prima di rispondere possono spendere parte di max_tokens in quel ragionamento, quindi tieni il limite generoso anche per una risposta di una sola parola. Poi cambia solo il system prompt (per esempio, "Rispondi con una parola, in francese") ed eseguilo di nuovo: le regole nel messaggio di sistema si applicano a ogni temperature.

Questi esperimenti sono piccoli. Per un'idea approssimativa, ecco il costo di 100 richieste da circa 120 token di input e 80 di output ciascuna (un carico di esempio; i conteggi dei token dipendono dai tuoi prompt):

Modello Per richiesta 100 richieste OpenRouter, 100 richieste
GLM-5.3-Flash $0.0000056 $0.00056 $0.0011
DeepSeek-V4-Flash $0.0000098 $0.00098 $0.0018
MiniMax-M2.7 $0.000018 $0.0018 $0.0132

120 token di input e 80 token di output per richiesta. I prezzi per 1M di token sono attuali e cambiano insieme alle nostre tariffe; la colonna OpenRouter mostra i prezzi di riferimento per lo stesso carico di lavoro.

Su quale modello provarlo#

  • MiniMax-M2.7 è una buona prima scelta per molte richieste di test brevi, e puoi riutilizzare lo stesso system prompt per confrontare le risposte: contesto 180K, fino a 8.192 token di output, più economico del prezzo di riferimento di OpenRouter su entrambi i lati. Prezzo attuale: input $0.05, output $0.15 per 1M token.

Un solo saldo copre tutti, quindi cambiare modello è una modifica di una riga a model. Tutti i prezzi attuali sono nella pagina dei prezzi.

Se non funziona#

  • 401 o errore di autenticazione: la chiave manca, è scritta male o la variabile d'ambiente non è impostata in questo terminale. Controlla echo $CHEAPTOKENS_API_KEY.
  • Model not found: copia l'id del modello dalla documentazione esattamente, incluso il prefisso.
  • Un errore su un parametro non valido: tieni temperature nell'intervallo supportato dal tuo modello (0 a 1 è sicuro) e passa numeri, non stringhe.
  • Il modello ignora la tua regola: rendila una frase breve e diretta, spostala in cima al messaggio di sistema e ripeti il formato esatto che vuoi.
  • Cambiare la temperature non cambia nulla: potresti usare una modalità che la ignora (vedi sopra), oppure la risposta è così vincolata ("una parola", "JSON valido") che esistono poche varianti.
  • La risposta è troncata: aumenta max_tokens; la guida a max_tokens spiega come.

Prossimo passo#

Metti una regola chiara nel messaggio di sistema, scegli una temperature dalla tabella ed esegui il ciclo sopra sul tuo compito. Quando il risultato è quello che vuoi, tieni il system prompt corto e riutilizzalo. Ottieni una chiave e controlla i prezzi attuali nella documentazione.