~/tools / File di modello e chat template / Hugging Face Chat Template Tester

Hugging Face Chat Template Tester — Rendi un chat template di Hugging Face e vedi il prompt esatto

Incolla un chat template di Hugging Face (Jinja) o l'intero tokenizer_config.json di un modello, aggiungi messages e tools, e vedi il testo esatto del prompt che produce apply_chat_template(..., tokenize=False) di transformers. Lo strumento esegue Jinja2 con le stesse impostazioni di sandbox di transformers, quindi il testo, gli errori e i loro numeri di riga sono gli stessi di Python. Niente esce dal tuo browser.

Esempi (scritti per questo strumento)

Incolla il template Jinja (chat_template.jinja), oppure l'intero tokenizer_config.json o chat_template.json dai file del modello su Hugging Face.

Una lista JSON di messaggi, la stessa lista che passi a apply_chat_template.

Una lista JSON di definizioni di strumenti (JSON Schema). Lasciala vuota per non usare strumenti.

Aggiunge in fondo l'inizio di un turno dell'assistente, così il modello scrive una risposta (se il template lo supporta).

Lascia aperto l'ultimo messaggio perché il modello lo continui (prefill). Non si può usare insieme a add_generation_prompt.

Altri valori passati a apply_chat_template come argomenti con nome, sotto forma di oggetto JSON, come {"enable_thinking": false}. Le variabili che il template legge sono elencate sotto l'output.

Altre opzioni
Token speciali

transformers passa al template i token speciali del tokenizer. Vengono compilati quando incolli tokenizer_config.json.

Per i template che supportano documents (RAG): una lista JSON di oggetti come {"title": "…", "text": "…"}.

L'ora che restituisce strftime_now(). Lascia vuoto per usare l'ora attuale.

Testo del prompt

<|im_start|>system
You are a helpful assistant.

# Tools

You can call these functions:
<tools>
{"type": "function", "function": {"name": "get_weather", "description": "Get the current weather in a city.", "parameters": {"type": "object", "properties": {"city": {"type": "string", "description": "City name"}}, "required": ["city"]}}}
</tools>

To call one, reply with JSON inside <tool_call></tool_call>.<|im_end|>
<|im_start|>user
What's the weather in Paris?<|im_end|>
<|im_start|>assistant

<tool_call>
{"name": "get_weather", "arguments": {"city": "Paris"}}
</tool_call><|im_end|>
<|im_start|>user
<tool_response>
{"temperature": 22}
</tool_response><|im_end|>
<|im_start|>assistant
688 caratteri

Informazioni su questo template

Variabili che legge
Impostate da apply_chat_template: add_generation_prompt, messages, tools
Token speciali: nessuna
Altre: nessuna
Usa {% generation %}
No

Controllalo in Python

Esegui questo per confrontare con transformers. Sostituisci MODEL_ID con il modello, oppure passa il tuo template come chat_template=.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("MODEL_ID")
messages = [
    {'role': 'system', 'content': 'You are a helpful assistant.'},
    {'role': 'user', 'content': "What's the weather in Paris?"},
    {'role': 'assistant', 'content': '', 'tool_calls': [{'type': 'function', 'function': {'name': 'get_weather', 'arguments': {'city': 'Paris'}}}]},
    {'role': 'tool', 'name': 'get_weather', 'content': '{"temperature": 22}'},
]
tools = [
    {'type': 'function', 'function': {'name': 'get_weather', 'description': 'Get the current weather in a city.', 'parameters': {'type': 'object', 'properties': {'city': {'type': 'string', 'description': 'City name'}}, 'required': ['city']}}},
]
text = tokenizer.apply_chat_template(
    messages,
    tools=tools,
    add_generation_prompt=True,
    tokenize=False,
)
print(text)

L'output è il testo prima della tokenizzazione. transformers lo tokenizza poi con add_special_tokens=False, quindi i token speciali compaiono solo dove il template li scrive.

Quando vengono dati tools e il modello ha un template chiamato tool_use, transformers usa quello. Puoi anche scegliere un template per nome.

messages, tools e documents vengono letti come il modulo json di Python: i numeri interi diventano int e i numeri con la virgola diventano float, il che può cambiare il modo in cui il template li stampa.

Controllato il 2026-11-09 con transformers 5.22.2 e Jinja2 3.1.6 (Python 3.14). transformers: chat template · Codice sorgente di transformers

Tutto viene eseguito nel tuo browser. Niente di ciò che incolli viene inviato o salvato.

La maggior parte dei modelli aperti su Hugging Face include un chat template: un piccolo programma Jinja che trasforma una lista di messaggi nel testo che il modello legge davvero. Uno spazio mancante, un BOS doppio o un prompt di generazione sbagliato cambia ciò che vede il modello, e il template è difficile da leggere senza eseguirlo. Questo strumento lo esegue come fa transformers. Abbiamo portato Jinja2 3.1.6 in JavaScript: il suo lexer, il parser, le regole su quali variabili sono visibili e dove, il constant folding, la sandbox che usa transformers e tutti i filtri e i test integrati, insieme al comportamento proprio di Python per stringhe, numeri, ordinamento e messaggi di errore. Sopra questo segue apply_chat_template di transformers 5.22.2: token speciali come bos_token, il template tool_use quando vengono dati tools, add_generation_prompt, continue_final_message, documents, reasoning_content e i tratti {% generation %}. Abbiamo reso i chat template di 39 modelli aperti (Qwen, Llama, Mistral, Gemma, Phi, DeepSeek, gpt-oss e altri) con 15 tipi di conversazioni, e tutti i 585 risultati coincidevano con transformers. Anche più di 20.000 altri template di prova coincidevano, compresi errori e numeri di riga, tranne alcuni che usano il filtro random, il cui risultato è casuale anche in Python.

Casi d'uso

  • Vedere il prompt esatto che riceve un modello prima di fare il fine-tuning o di servirlo: token BOS ed EOS, spazi, a capo e il prompt di generazione
  • Trovare gli interruttori che un template legge, come enable_thinking, e vedere che cosa cambiano
  • Fare il debug di un chat template che stai scrivendo, con errori e numeri di riga, tools, documents e continue_final_message

Utilizzo

  1. Incolla un chat template, oppure l'intero tokenizer_config.json o chat_template.json di un modello, oppure scegli un esempio.
  2. Modifica messages e tools (le stesse liste JSON che passi in Python) e imposta add_generation_prompt e le altre opzioni.
  3. Leggi il testo del prompt e le variabili che il template usa, e copia il codice Python per controllare lo stesso input in transformers.

FAQ

Il risultato è lo stesso di apply_chat_template?

È lo stesso di apply_chat_template(..., tokenize=False), il testo prima della tokenizzazione. I token speciali, add_generation_prompt, continue_final_message, tools e documents sono gestiti come in transformers 5.22.2. Lo strumento non trasforma il testo in token IDs.

Da dove vengono bos_token ed eos_token?

In Python vengono dal tokenizer. Quando incolli tokenizer_config.json, lo strumento li legge da lì. Altrimenti, inseriscili in Altre opzioni.

Che cosa fa {% generation %}?

Alcuni template racchiudono le risposte dell'assistente in {% generation %} … {% endgeneration %}. transformers usa questi tratti per return_assistant_tokens_mask, per esempio per addestrare solo sui token dell'assistente. Lo strumento li evidenzia nell'output.

vLLM, llama.cpp o altri server daranno lo stesso testo?

Altri programmi possono rendere lo stesso template con un altro motore o con altre impostazioni, quindi il loro output può differire. Questo strumento segue transformers.

Perché una variabile come enable_thinking è elencata sotto Altre?

Il template la legge, ma apply_chat_template non la imposta. Passala come variabile extra (per esempio {"enable_thinking": false}) per cambiare l'output, come passeresti enable_thinking=False in Python.

Il mio template viene inviato da qualche parte?

No. Tutto viene eseguito nel tuo browser.

Correlati