Chattare con Gemma: conversazioni di base e multi-turno

I modelli Gemma con ottimizzazione delle istruzioni (IT) sono progettati per gestire interazioni conversazionali, dagli scambi di domande e risposte singoli ai dialoghi estesi a più turni. Questa guida spiega come formattare i prompt per la chat con Gemma e come creare conversazioni multi-turno.

Formato del prompt

I modelli Gemma IT utilizzano token di controllo speciali per delimitare i turni di conversazione. Questi token sono necessari quando gli input vengono inviati direttamente al tokenizer, ma in genere vengono applicati automaticamente dai framework che supportano le chat.

Prompt a turno singolo

Un prompt a un solo turno è costituito da un messaggio dell'utente e da un marcatore di risposta del modello:

<start_of_turn>user
What is the speed of light?<end_of_turn>
<start_of_turn>model

Prompt in più passaggi

Le conversazioni multi-turno concatenano più scambi. Ogni turno è racchiuso negli stessi token di controllo:

<start_of_turn>user
What is the speed of light?<end_of_turn>
<start_of_turn>model
The speed of light in a vacuum is approximately 299,792,458 meters per second.<end_of_turn>
<start_of_turn>user
How long does it take light to reach Earth from the Sun?<end_of_turn>
<start_of_turn>model

Il modello genera una risposta per il turno finale <start_of_turn>model.

Istruzioni di sistema

I modelli ottimizzati per le istruzioni di Gemma sono progettati per funzionare solo con due ruoli: user e model. Pertanto, il ruolo system o un turno di sistema non è supportato.

Anziché utilizzare un ruolo di sistema separato, fornisci istruzioni a livello di sistema direttamente nel prompt utente iniziale. Le funzionalità di esecuzione delle istruzioni del modello consentono a Gemma di interpretare le istruzioni in modo efficace. Ad esempio:

Gemma 3 e i modelli successivi supportano le istruzioni di sistema che definiscono il comportamento, il ruolo o i vincoli del modello per l'intera conversazione. Inserisci l'istruzione di sistema prima del primo turno dell'utente:

<start_of_turn>user
Only reply like a pirate.

What is the answer to life the universe and everything?<end_of_turn>
<start_of_turn>model
Arrr, 'tis 42,<end_of_turn>

Per maggiori dettagli, vedi Prompt e istruzioni di sistema.

Supporto dei framework

La maggior parte dei framework gestisce automaticamente la formattazione della chat tramite il modello di chat o l'API Conversation:

Hugging Face Transformers

from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("google/gemma-3-1b-it")
model = AutoModelForCausalLM.from_pretrained("google/gemma-3-1b-it")

messages = [
    {"role": "user", "content": "What is machine learning?"},
]

inputs = tokenizer.apply_chat_template(
    messages,
    return_tensors="pt",
    add_generation_prompt=True,
)

outputs = model.generate(**inputs, max_new_tokens=256)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

Ollama

ollama run gemma3:1b "What is machine learning?"

Per la chat multi-turno, utilizza la modalità interattiva:

ollama run gemma3:1b
>>> What is machine learning?
...
>>> How is it different from deep learning?

API compatibili con OpenAI

Quando utilizzi framework che espongono un'API compatibile con OpenAI (come vLLM, llama.cpp o LM Studio), trasmetti i messaggi utilizzando il formato messages standard:

from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused")

response = client.chat.completions.create(
    model="google/gemma-3-1b-it",
    messages=[
        {"role": "user", "content": "What is machine learning?"},
    ],
)
print(response.choices[0].message.content)

Passaggi successivi