A partire da Gemma 4, introduciamo nuovi token di controllo. Per Gemma 3 e versioni precedenti, consulta il documento precedente.
Le sezioni seguenti specificano i token di controllo utilizzati da Gemma 4 e i relativi casi d'uso. Tieni presente che i token di controllo sono riservati e specifici per il nostro tokenizer.
- Token per indicare un'istruzione di sistema:
system - Token per indicare il turno di un utente:
user - Token per indicare il turno del modello:
model - Token per indicare l'inizio di un turno di dialogo:
<|turn> - Token per indicare la fine di un turno di dialogo:
<turn|>
Ecco un esempio di dialogo:
<|turn>system
You are a helpful assistant.<turn|>
<|turn>user
Hello.<turn|>
Multimodalità
| Token multimodale | Finalità |
|---|---|
<|image> <image|> |
Indicare gli incorporamenti delle immagini |
<|audio> <audio|> |
Indicare gli incorporamenti audio |
<|image|> <|audio|> |
Token segnaposto speciali |
Utilizziamo due token segnaposto speciali (<|image|> e <|audio|>) per specificare
dove devono essere inseriti i token immagine e audio. Dopo la tokenizzazione, questi
token vengono sostituiti dagli incorporamenti soft effettivi all'interno del modello.
Ecco un esempio di dialogo:
prompt = """<|turn>user
Describe this image: <|image|>
And translate these audio:
a. <|audio|>
b. <|audio|><turn|>
<|turn>model"""
Token di controllo di ragionamento e agenti
Per supportare i flussi di lavoro autonomi, Gemma utilizza token di controllo specializzati che delimitano il ragionamento interno (pensiero) dalle azioni esterne (chiamata di funzione). Questi token consentono al modello di elaborare una logica complessa prima di fornire una risposta finale o interagire con strumenti esterni.
Chiamata di funzione
Gemma 4 è addestrato su sei token speciali per gestire il ciclo di vita dell'utilizzo degli strumenti.
| Coppia di token | Finalità |
|---|---|
<|tool> <tool|> |
Definisce uno strumento |
<|tool_call> <tool_call|> |
Indica la richiesta di un modello di utilizzare uno strumento. |
<|tool_response> <tool_response|> |
Fornisce al modello il risultato dell'esecuzione di uno strumento. |
Delimitatore per i valori stringa: <|"|>
Un singolo token, <|"|>, viene utilizzato come delimitatore per tutti i valori stringa
all'interno dei blocchi di dati strutturati.
- Scopo:questo token garantisce che tutti i caratteri speciali (ad esempio
{,},,o virgolette) all'interno di una stringa vengano trattati come testo letterale e non come parte della sintassi sottostante della struttura dei dati. - Utilizzo: tutti i valori letterali stringa nelle dichiarazioni, nelle chiamate e nelle risposte delle funzioni devono essere racchiusi tra questi token (ad es.
key:<|"|>string value<|"|>).
Modalità di pensiero
Per attivare la modalità di pensiero, includi il token di controllo <|think|> all'interno
dell'istruzione di sistema.
| Token di controllo | Finalità |
|---|---|
<|think|> |
Attiva la modalità di pensiero |
<|channel> <channel|> |
Indica un processo interno del modello. |
Ecco un esempio di dialogo:
<|turn>system
<|think|><turn|>
<|turn>user
What is the water formula?<turn|>
<|turn>model
<|channel>thought
...
<channel|>The most common interpretation of "the water formula" refers...<turn|>
La modalità di pensiero è progettata per essere attivata a livello di conversazione. Queste istruzioni devono essere consolidate in un unico turno di sistema insieme alle altre istruzioni di sistema, come le definizioni degli strumenti.
Esempio di ragionamento e chiamata di funzione
In un turno agentico, il modello può "pensare" privatamente prima di decidere di chiamare una funzione. Il ciclo di vita segue questa sequenza:
- Richiesta dell'utente: l'utente pone una domanda.
- Ragionamento interno: il modello pensa in privato nel canale dei pensieri.
- Richiesta dello strumento: il modello interrompe la generazione per richiedere una chiamata allo strumento.
- Esecuzione e inserimento: l'applicazione esegue lo strumento e aggiunge la risposta.
- Risposta finale: il modello legge la risposta e genera la risposta finale.
Il seguente esempio mostra un modello che utilizza uno strumento meteo:
<|turn>system
<|think|>You are a helpful assistant.<|tool>declaration:get_current_temperature{...}<tool|><turn|>
<|turn>user
What's the temperature in London?<turn|>
<|turn>model
<|channel>thought
...
<channel|><|tool_call>call:get_current_temperature{location:<|"|>London<|"|>}<tool_call|><|tool_response>
La tua applicazione deve analizzare la risposta del modello per estrarre il nome della funzione e gli argomenti, eseguire la funzione e poi aggiungere tool_calls e tool_responses alla cronologia chat nel ruolo assistant.
<|turn>model
<|tool_call>call:get_current_weather{location:<|"|>London<|"|>}<tool_call|><|tool_response>response:get_current_weather{temperature:15,weather:<|"|>sunny<|"|>}<tool_response|>
Infine, Gemma legge la risposta dello strumento e risponde all'utente.
The temperature in London is 15 degrees and it is sunny.<turn|>
Ecco la cronologia chat JSON completa per questo esempio:
[
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "What's the temperature in London?"
},
{
"role": "assistant",
"tool_calls": [
{
"function": {
"name": "get_current_weather",
"arguments": {
"location": "London"
}
}
}
],
"tool_responses": [
{
"name": "get_current_weather",
"response": {
"temperature": 15,
"weather": "sunny"
}
}
],
"content": "The temperature in London is 15 degrees and it is sunny."
}
]
Gestione del contesto del pensiero tra i turni
La gestione corretta dei pensieri generati dal modello è fondamentale per mantenere le prestazioni nelle conversazioni multi-turno.
- Conversazioni standard a più turni:devi rimuovere (eliminare) i pensieri generati dal modello nel turno precedente prima di passare la cronologia della conversazione al modello per il turno successivo. Se vuoi disattivare la modalità
di pensiero a metà conversazione, puoi rimuovere il token
<|think|>quando elimini i pensieri precedenti. - Chiamata di funzione (eccezione): se un singolo turno del modello prevede chiamate di funzioni o strumenti, i pensieri NON devono essere rimossi tra le chiamate di funzione.
Flussi di lavoro agentici e attività di lunga durata
Poiché i pensieri grezzi vengono eliminati tra un turno e l'altro, gli sviluppatori che creano agenti a esecuzione prolungata potrebbero voler conservare il contesto del ragionamento per impedire al modello di entrare in cicli di ragionamento.
- Riepilogo dei pensieri: una tecnica di inferenza altamente consigliata è quella di estrarre, riassumere e reinserire i pensieri precedenti del modello nella finestra contestuale come testo standard.
- Vincoli di formattazione:poiché Gemma 4 non è stato addestrato in modo esplicito con i pensieri grezzi inclusi nel prompt (al di fuori dello scenario specifico di chiamata di funzione menzionato in precedenza), non esiste un formato rigoroso o specifico previsto dal modello per questi pensieri inseriti. Hai la flessibilità di formattare il ragionamento riassuntivo nel modo più adatto alla tua architettura agentica specifica.
Note sull'integrazione
- Stato interno:i token
<|channel>e<channel|>vengono in genere utilizzati per l'elaborazione di Chain-of-Thought (CoT). Nelle applicazioni standard rivolte agli utenti, questi contenuti sono in genere nascosti all'utente finale. - Tool Loop:i token
tool_calletool_responsefacilitano un "handshake" tra il modello e l'ambiente dell'applicazione. L'applicazione intercettatool_call, esegue il codice sottostante e restituisce il risultato al modello all'interno dei tokentool_response. - Comportamento del modello: i modelli più grandi (ad es. gemma-4-26B-A4B-it, gemma-4-31B-it) possono occasionalmente generare un canale di pensiero anche quando la modalità di pensiero è esplicitamente disattivata. Per stabilizzare il comportamento del modello in questi casi limite, valuta la possibilità di aggiungere un token di pensiero vuoto al prompt.
Suggerimento: ottimizzare i modelli di grandi dimensioni con set di dati senza ragionamento
Quando metti a punto modelli Gemma più grandi con un set di dati che non include il pensiero, puoi ottenere risultati migliori aggiungendo il canale vuoto ai prompt di addestramento:
<|turn>model
<|channel>thought
<channel|>
Suggerimento: efficienza del pensiero adattivo utilizzando le istruzioni di sistema
Sebbene la "riflessione" in Gemma 4 sia ufficialmente supportata come funzionalità booleana ON o OFF, il modello ha capacità di seguire le istruzioni eccezionalmente forti che ti consentono di modulare il suo comportamento di pensiero in modo dinamico.
Anziché fare affidamento su un parametro del framework hardcoded per il pensiero "alto" o "basso", puoi utilizzare le istruzioni di sistema per guidare il modello in una modalità di pensiero ridotta. Se istruisci esplicitamente il modello a pensare in modo efficiente o a una profondità inferiore (un concetto che chiamiamo istruzione di pensiero "LOW"), puoi ottenere un'efficienza di pensiero adattiva.
- Costo ridotto: i test hanno dimostrato che l'applicazione di un'istruzione di sistema "LOW" può ridurre il numero di token di pensiero generati di circa il 20%.
- Prova di concetto: poiché questo comportamento è un sottoprodotto dell'addestrabilità del modello piuttosto che di un addestramento specifico, non esiste un prompt "perfetto". L'istruzione "LOW" è una proof of concept.
- Personalizzazione:consigliamo vivamente agli sviluppatori di sperimentare le proprie istruzioni di sistema personalizzate. Puoi ottimizzare la profondità, la lunghezza e lo stile del processo di pensiero del modello per bilanciare perfettamente latenza, costi e qualità dell'output per i tuoi casi d'uso specifici.