~/tools / Modelldateien und Chat-Templates / Hugging Face Chat Template Tester

Hugging Face Chat Template Tester — Ein Hugging Face Chat-Template rendern und den genauen Prompt sehen

Fügen Sie ein Hugging Face Chat-Template (Jinja) oder die komplette tokenizer_config.json eines Modells ein, ergänzen Sie messages und tools und sehen Sie genau den Prompt-Text, den apply_chat_template(..., tokenize=False) von transformers erzeugt. Das Tool führt Jinja2 mit denselben Sandbox-Einstellungen aus wie transformers, sodass Text, Fehler und deren Zeilennummern mit Python übereinstimmen. Nichts verlässt Ihren Browser.

Beispiele (für dieses Tool geschrieben)

Fügen Sie das Jinja-Template (chat_template.jinja) oder die komplette tokenizer_config.json oder chat_template.json aus den Dateien des Modells auf Hugging Face ein.

Eine JSON-Liste von Nachrichten, dieselbe Liste, die Sie an apply_chat_template übergeben.

Eine JSON-Liste von Tool-Definitionen (JSON Schema). Lassen Sie sie leer, wenn es keine tools gibt.

Fügt am Ende den Beginn eines Assistant-Turns an, damit das Modell eine Antwort schreibt (wenn das Template es unterstützt).

Lässt die letzte Nachricht offen, damit das Modell sie fortsetzt (Prefill). Es kann nicht zusammen mit add_generation_prompt verwendet werden.

Weitere Werte, die als Schlüsselwortargumente an apply_chat_template übergeben werden, als JSON-Objekt, etwa {"enable_thinking": false}. Die Variablen, die das Template liest, stehen unter der Ausgabe.

Weitere Optionen
Spezial-Tokens

transformers übergibt die Spezial-Tokens des Tokenizers an das Template. Sie werden ausgefüllt, wenn Sie tokenizer_config.json einfügen.

Für Templates, die documents unterstützen (RAG): eine JSON-Liste von Objekten wie {"title": "…", "text": "…"}.

Die Zeit, die strftime_now() zurückgibt. Lassen Sie das Feld leer, um die aktuelle Zeit zu verwenden.

Prompt-Text

<|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 Zeichen

Über dieses Template

Variablen, die es liest
Von apply_chat_template gesetzt: add_generation_prompt, messages, tools
Spezial-Tokens: keine
Sonstige: keine
Verwendet {% generation %}
Nein

In Python prüfen

Führen Sie dies aus, um mit transformers zu vergleichen. Ersetzen Sie MODEL_ID durch das Modell oder übergeben Sie Ihr Template als 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)

Die Ausgabe ist der Text vor der Tokenisierung. transformers tokenisiert ihn anschließend mit add_special_tokens=False, sodass Spezial-Tokens nur dort erscheinen, wo das Template sie schreibt.

Wenn tools angegeben sind und das Modell ein Template namens tool_use hat, verwendet transformers dieses. Sie können ein Template auch nach Namen wählen.

messages, tools und documents werden wie vom json-Modul von Python gelesen: Ganze Zahlen werden zu int und Zahlen mit Dezimalpunkt zu float, was ändern kann, wie das Template sie ausgibt.

Geprüft am 2026-11-09 gegen transformers 5.22.2 mit Jinja2 3.1.6 (Python 3.14). transformers: Chat-Templates · transformers-Quellcode

Alles läuft in Ihrem Browser. Nichts, was Sie einfügen, wird gesendet oder gespeichert.

Die meisten offenen Modelle auf Hugging Face liefern ein Chat-Template mit: ein kleines Jinja-Programm, das eine Liste von Nachrichten in den Text umwandelt, den das Modell tatsächlich liest. Ein fehlendes Leerzeichen, ein doppeltes BOS-Token oder ein falscher Generation-Prompt verändert, was das Modell sieht, und das Template ist ohne Ausführen schwer zu lesen. Dieses Tool führt es so aus wie transformers. Wir haben Jinja2 3.1.6 nach JavaScript portiert: den Lexer, den Parser, die Regeln dafür, welche Variablen wo sichtbar sind, das Constant Folding, die Sandbox, die transformers verwendet, und alle eingebauten Filter und Tests, zusammen mit dem Verhalten von Python selbst bei Zeichenketten, Zahlen, Sortierung und Fehlermeldungen. Darauf aufbauend folgt es apply_chat_template in transformers 5.22.2: Spezial-Tokens wie bos_token, das Template tool_use, wenn tools angegeben sind, add_generation_prompt, continue_final_message, documents, reasoning_content und die {% generation %}-Abschnitte. Wir haben die Chat-Templates von 39 offenen Modellen (Qwen, Llama, Mistral, Gemma, Phi, DeepSeek, gpt-oss und weiteren) mit 15 Arten von Gesprächen gerendert, und alle 585 Ergebnisse stimmten mit transformers überein. Mehr als 20.000 weitere Test-Templates stimmten ebenfalls überein, einschließlich Fehlern und Zeilennummern, bis auf wenige, die den Filter random verwenden, dessen Ergebnis auch in Python zufällig ist.

Anwendungsfälle

  • Den genauen Prompt sehen, den ein Modell erhält, bevor Sie es feinabstimmen oder bereitstellen: BOS- und EOS-Tokens, Leerzeichen, Zeilenumbrüche und den Generation-Prompt
  • Die Schalter finden, die ein Template liest, etwa enable_thinking, und sehen, was sie ändern
  • Ein Chat-Template, das Sie schreiben, debuggen, mit Fehlern und Zeilennummern, tools, documents und continue_final_message

Verwendung

  1. Fügen Sie ein Chat-Template oder die komplette tokenizer_config.json oder chat_template.json eines Modells ein oder wählen Sie ein Beispiel.
  2. Bearbeiten Sie messages und tools (dieselben JSON-Listen, die Sie in Python übergeben) und setzen Sie add_generation_prompt und die anderen Optionen.
  3. Lesen Sie den Prompt-Text und die Variablen, die das Template verwendet, und kopieren Sie den Python-Code, um dieselbe Eingabe in transformers zu prüfen.

FAQ

Ist das Ergebnis dasselbe wie bei apply_chat_template?

Es entspricht apply_chat_template(..., tokenize=False), also dem Text vor der Tokenisierung. Spezial-Tokens, add_generation_prompt, continue_final_message, tools und documents werden wie in transformers 5.22.2 behandelt. Das Tool wandelt den Text nicht in Token-IDs um.

Woher kommen bos_token und eos_token?

In Python kommen sie vom Tokenizer. Wenn Sie tokenizer_config.json einfügen, liest das Tool sie daraus. Andernfalls geben Sie sie unter Weitere Optionen ein.

Was bewirkt {% generation %}?

Manche Templates fassen die Antworten des Assistenten in {% generation %} … {% endgeneration %} ein. transformers verwendet diese Abschnitte für return_assistant_tokens_mask, zum Beispiel um nur auf den Tokens des Assistenten zu trainieren. Das Tool hebt sie in der Ausgabe hervor.

Liefern vLLM, llama.cpp oder andere Server denselben Text?

Andere Software kann dasselbe Template mit einer anderen Engine oder anderen Einstellungen rendern, sodass ihre Ausgabe abweichen kann. Dieses Tool folgt transformers.

Warum steht eine Variable wie enable_thinking unter Sonstige?

Das Template liest sie, aber apply_chat_template setzt sie nicht. Übergeben Sie sie als zusätzliche Variable (zum Beispiel {"enable_thinking": false}), um die Ausgabe zu ändern, so wie Sie in Python enable_thinking=False übergeben würden.

Wird mein Template irgendwohin gesendet?

Nein. Alles läuft in Ihrem Browser.

Ähnliche Tools