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 un turno dell'utente:
user - Token per indicare un 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|> |
Indica gli incorporamenti delle immagini |
<|audio> <audio|> |
Indica 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"""
Audio
Utilizza le seguenti strutture di prompt per l'elaborazione audio:
- Riconoscimento vocale audio (ASR)
Transcribe the following speech segment in {LANGUAGE} into {LANGUAGE} text.
Follow these specific instructions for formatting the answer:
* Only output the transcription, with no newlines.
* When transcribing numbers, write the digits, i.e. write 1.7 and not one point seven, and write 3 instead of three.
- Traduzione vocale automatica (AST)
Transcribe the following speech segment in {SOURCE_LANGUAGE}, then translate it into {TARGET_LANGUAGE}.
When formatting the answer, first output the transcription in {SOURCE_LANGUAGE}, then one newline, then output the string '{TARGET_LANGUAGE}: ', then the translation in {TARGET_LANGUAGE}.
Token di controllo agentici e di ragionamento
Per supportare i flussi di lavoro agentici, 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.
- Finalità: 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 utilizzando questo token (ad es.
key:<|"|>string value<|"|>).
Modalità di pensiero
Per attivare la modalità di pensiero, includi il <|think|> token di controllo nell'
istruzione di sistema.
| Token di controllo | Finalità |
|---|---|
<|think|> |
Attiva la modalità di pensiero |
<|channel> <channel|> |
Indica un processo interno di un 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 abilitata a livello di conversazione. Questi elementi devono essere consolidati in un unico turno di sistema insieme alle altre istruzioni di sistema, ad esempio le definizioni degli strumenti.
Esempio di ragionamento e chiamata di funzione
In un turno agentico, il modello può "pensare" in privato 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 di pensiero.
- Richiesta di strumento: il modello interrompe la generazione per richiedere una chiamata di 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>
L'applicazione deve analizzare la risposta del modello per estrarre il nome e gli argomenti della funzione, 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."
}
]
Gestire il contesto di pensiero tra i turni
La corretta gestione dei pensieri generati dal modello è fondamentale per mantenere le prestazioni nelle conversazioni multi-turno.
- Conversazioni multi-turno standard: devi rimuovere (eliminare) i pensieri generati dal modello dal 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 funzione o di strumento, i pensieri NON devono essere rimossi tra le chiamate di funzione.
Flussi di lavoro agentici e attività a lunga esecuzione
Poiché i pensieri non elaborati vengono eliminati tra i turni standard, gli sviluppatori che creano agenti a lunga esecuzione potrebbero voler conservare il contesto di ragionamento per impedire al modello di entrare in loop di ragionamento ciclici.
- Riassumere i pensieri: una tecnica di inferenza altamente consigliata consiste nell'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 non elaborati inclusi nel prompt (al di fuori dello scenario specifico di chiamata di strumento menzionato sopra), non esiste un formato rigoroso o specifico previsto dal modello per questi pensieri inseriti. Puoi formattare il ragionamento riassunto 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 della chain-of-thought (CoT). Nelle applicazioni standard rivolte agli utenti, questi contenuti sono in genere nascosti all'utente finale. - Loop dello strumento: i token
tool_calletool_responsefacilitano un "handshake" tra il modello e l'ambiente dell'applicazione. L'applicazione intercettatool_call, esegue il codice sottostante e reinserisce il risultato nel 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 è disattivata in modo esplicito. 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 pensiero
Quando ottimizzi i 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 il "pensiero" in Gemma 4 sia ufficialmente supportato come funzionalità booleana ON o OFF, il modello ha funzionalità di follow-up delle istruzioni eccezionalmente solide che ti consentono di modulare il suo comportamento di pensiero in modo dinamico.
Anziché fare affidamento su un parametro del framework con codifica hardcoded per il pensiero "alto" o "basso", puoi utilizzare le istruzioni di sistema (SI) per guidare il modello in una modalità di pensiero ridotta. Istruendo in modo esplicito il modello a pensare in modo efficiente o a una profondità inferiore (un concetto che chiamiamo istruzione di pensiero "LOW"), puoi ottenere un'efficienza del pensiero adattiva.
- Costo ridotto: i test hanno dimostrato che l'applicazione di un'istruzione di sistema di pensiero "LOW" può ridurre il numero di token di pensiero generati di circa il 20%.
- Proof of concept: poiché questo comportamento è un sottoprodotto della capacità di istruzione del modello anziché di un addestramento specifico, non esiste un singolo prompt "perfetto". L'istruzione "LOW" è una proof of concept.
- Personalizzazione: consigliamo vivamente agli sviluppatori di sperimentare con 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, costo e qualità dell'output per i tuoi casi d'uso specifici.