~/tools / Pliki modeli i szablony czatu / Hugging Face Chat Template Tester
Hugging Face Chat Template Tester — Wyrenderuj szablon czatu Hugging Face i zobacz dokładny prompt
Wklej szablon czatu Hugging Face (Jinja) albo cały plik tokenizer_config.json modelu, dodaj messages i tools i zobacz dokładny tekst promptu, który tworzy apply_chat_template(..., tokenize=False) z transformers. Narzędzie uruchamia Jinja2 z tymi samymi ustawieniami piaskownicy co transformers, więc tekst, błędy i numery ich wierszy są takie same jak w Pythonie. Nic nie opuszcza Twojej przeglądarki.
Wklej szablon Jinja (chat_template.jinja) albo cały plik tokenizer_config.json lub chat_template.json z plików modelu na Hugging Face.
Lista wiadomości w JSON, ta sama lista, którą przekazujesz do apply_chat_template.
Lista definicji narzędzi w JSON (JSON Schema). Zostaw puste, jeśli nie ma narzędzi.
Dodaje na końcu początek tury asystenta, aby model napisał odpowiedź (jeśli szablon to obsługuje).
Zostawia ostatnią wiadomość otwartą, aby model ją kontynuował (prefill). Nie można tego użyć razem z add_generation_prompt.
Inne wartości przekazywane do apply_chat_template jako argumenty nazwane, w postaci obiektu JSON, takiego jak {"enable_thinking": false}. Zmienne czytane przez szablon są wypisane pod wynikiem.
Więcej opcji
transformers przekazuje szablonowi tokeny specjalne tokenizera. Są wypełniane, gdy wkleisz tokenizer_config.json.
Dla szablonów obsługujących documents (RAG): lista obiektów JSON takich jak {"title": "…", "text": "…"}.
Czas zwracany przez strftime_now(). Zostaw puste, aby użyć bieżącego czasu.
Tekst promptu
<|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
O tym szablonie
- Zmienne, które czyta
- Ustawiane przez apply_chat_template: add_generation_prompt, messages, toolsTokeny specjalne: brakInne: brak
- Używa {% generation %}
- Nie
Sprawdź w Pythonie
Uruchom to, aby porównać z transformers. Zastąp MODEL_ID modelem albo przekaż swój szablon jako 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)Wynik to tekst przed tokenizacją. transformers tokenizuje go potem z add_special_tokens=False, więc tokeny specjalne pojawiają się tylko tam, gdzie zapisuje je szablon.
Gdy podano tools, a model ma szablon o nazwie tool_use, transformers używa właśnie jego. Szablon można też wybrać po nazwie.
messages, tools i documents są czytane tak jak przez moduł json Pythona: liczby całkowite stają się int, a liczby z kropką dziesiętną float, co może zmienić sposób, w jaki szablon je wypisuje.
Sprawdzono 2026-11-09 względem transformers 5.22.2 z Jinja2 3.1.6 (Python 3.14). transformers: szablony czatu · Kod źródłowy transformers
Wszystko działa w Twojej przeglądarce. Nic, co wkleisz, nie jest wysyłane ani zapisywane.
Większość otwartych modeli na Hugging Face ma w komplecie szablon czatu: mały program w Jinja, który zamienia listę wiadomości w tekst, jaki model faktycznie czyta. Brakująca spacja, podwójny token BOS albo błędny prompt generowania zmienia to, co widzi model, a szablon trudno czytać bez uruchomienia. To narzędzie uruchamia go tak, jak robi to transformers. Przeportowaliśmy Jinja2 3.1.6 do JavaScriptu: jego lekser, parser, reguły określające, które zmienne są gdzie widoczne, constant folding, piaskownicę używaną przez transformers oraz wszystkie wbudowane filtry i testy, razem z zachowaniem samego Pythona dla ciągów znaków, liczb, sortowania i komunikatów o błędach. Na tej podstawie narzędzie podąża za apply_chat_template w transformers 5.22.2: tokeny specjalne takie jak bos_token, szablon tool_use, gdy podano tools, add_generation_prompt, continue_final_message, documents, reasoning_content i fragmenty {% generation %}. Wyrenderowaliśmy szablony czatu 39 otwartych modeli (Qwen, Llama, Mistral, Gemma, Phi, DeepSeek, gpt-oss i innych) w 15 rodzajach rozmów i wszystkie 585 wyników zgadzało się z transformers. Ponad 20 000 innych szablonów testowych też się zgadzało, wraz z błędami i numerami wierszy, z wyjątkiem kilku, które używają filtra random, którego wynik w Pythonie również jest losowy.
Zastosowania
- Zobaczyć dokładny prompt, który dostaje model, zanim go dostroisz lub uruchomisz: tokeny BOS i EOS, spacje, podziały wierszy i prompt generowania
- Znaleźć przełączniki, które czyta szablon, takie jak enable_thinking, i zobaczyć, co zmieniają
- Debugować szablon czatu, który piszesz, z błędami i numerami wierszy, tools, documents i continue_final_message
Jak używać
- Wklej szablon czatu albo cały plik tokenizer_config.json lub chat_template.json modelu, albo wybierz przykład.
- Edytuj messages i tools (te same listy JSON, które przekazujesz w Pythonie) i ustaw add_generation_prompt oraz pozostałe opcje.
- Przeczytaj tekst promptu i zmienne używane przez szablon oraz skopiuj kod w Pythonie, aby sprawdzić te same dane w transformers.
FAQ
Czy wynik jest taki sam jak z apply_chat_template?
Jest taki sam jak z apply_chat_template(..., tokenize=False), czyli tekst przed tokenizacją. Tokeny specjalne, add_generation_prompt, continue_final_message, tools i documents są obsługiwane tak jak w transformers 5.22.2. Narzędzie nie zamienia tekstu na token IDs.
Skąd biorą się bos_token i eos_token?
W Pythonie pochodzą z tokenizera. Gdy wkleisz tokenizer_config.json, narzędzie odczytuje je z niego. W przeciwnym razie wpisz je w sekcji Więcej opcji.
Do czego służy {% generation %}?
Niektóre szablony otaczają odpowiedzi asystenta znacznikami {% generation %} … {% endgeneration %}. transformers używa tych fragmentów dla return_assistant_tokens_mask, na przykład by trenować tylko na tokenach asystenta. Narzędzie podświetla je w wyniku.
Czy vLLM, llama.cpp lub inne serwery dadzą ten sam tekst?
Inne oprogramowanie może renderować ten sam szablon innym silnikiem lub z innymi ustawieniami, więc jego wynik może się różnić. To narzędzie podąża za transformers.
Dlaczego zmienna taka jak enable_thinking jest wymieniona w sekcji Inne?
Szablon ją czyta, ale apply_chat_template jej nie ustawia. Przekaż ją jako dodatkową zmienną (na przykład {"enable_thinking": false}), aby zmienić wynik, tak jak w Pythonie przekazałbyś enable_thinking=False.
Czy mój szablon jest dokądś wysyłany?
Nie. Wszystko działa w Twojej przeglądarce.