~/tools / Model dosyaları ve sohbet şablonları / Hugging Face Chat Template Tester
Hugging Face Chat Template Tester — Bir Hugging Face sohbet şablonunu işleyin, istemi olduğu gibi görün
Bir Hugging Face sohbet şablonunu (Jinja) ya da bir modelin tokenizer_config.json dosyasının tamamını yapıştırın, messages ve tools ekleyin ve transformers'ın apply_chat_template(..., tokenize=False) çağrısının ürettiği istem metnini olduğu gibi görün. Araç, Jinja2'yi transformers ile aynı korumalı ortam (sandbox) ayarlarıyla çalıştırır; böylece metin, hatalar ve satır numaraları Python'dakiyle aynıdır. Hiçbir şey tarayıcınızdan çıkmaz.
Jinja şablonunu (chat_template.jinja) ya da Hugging Face'teki modelin dosyalarından tokenizer_config.json veya chat_template.json dosyasının tamamını yapıştırın.
Bir JSON mesaj listesi; apply_chat_template'e verdiğiniz listenin aynısı.
Araç tanımlarının JSON listesi (JSON Schema). Araç yoksa boş bırakın.
Modelin bir yanıt yazması için sonuna asistan turunun başlangıcını ekler (şablon destekliyorsa).
Modelin devam ettirmesi için son mesajı açık bırakır (prefill). add_generation_prompt ile birlikte kullanılamaz.
apply_chat_template'e anahtar sözcük bağımsız değişkenleri olarak verilen diğer değerler; {"enable_thinking": false} gibi bir JSON nesnesi olarak. Şablonun okuduğu değişkenler çıktının altında listelenir.
Daha fazla seçenek
transformers, belirteç ayırıcının özel belirteçlerini şablona verir. tokenizer_config.json yapıştırdığınızda doldurulurlar.
documents destekleyen şablonlar için (RAG): {"title": "…", "text": "…"} gibi nesnelerin JSON listesi.
strftime_now() işlevinin döndürdüğü zaman. Geçerli zamanı kullanmak için boş bırakın.
İstem metni
<|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
Bu şablon hakkında
- Okuduğu değişkenler
- apply_chat_template tarafından ayarlananlar: add_generation_prompt, messages, toolsÖzel belirteçler: yokDiğer: yok
- {% generation %} kullanır
- Hayır
Python'da deneyin
transformers ile karşılaştırmak için bunu çalıştırın. MODEL_ID yerine modeli yazın ya da şablonunuzu chat_template= ile verin.
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)Çıktı, belirteçlere ayırmadan önceki metindir. transformers onu sonra add_special_tokens=False ile belirteçlere ayırır; bu yüzden özel belirteçler yalnızca şablonun yazdığı yerlerde görünür.
tools verildiğinde ve modelin tool_use adlı bir şablonu olduğunda transformers onu kullanır. Şablonu adıyla da seçebilirsiniz.
messages, tools ve documents, Python'un json modülü gibi okunur: tam sayılar int, ondalık noktalı sayılar float olur; bu da şablonun onları nasıl yazdırdığını değiştirebilir.
2026-11-09 tarihinde transformers 5.22.2 ve Jinja2 3.1.6 ile karşılaştırılarak denetlendi (Python 3.14). transformers: sohbet şablonları · transformers kaynak kodu
Her şey tarayıcınızda çalışır. Yapıştırdığınız hiçbir şey gönderilmez ya da kaydedilmez.
Hugging Face üzerindeki açık modellerin çoğu bir sohbet şablonuyla gelir: bir mesaj listesini modelin gerçekten okuduğu metne çeviren küçük bir Jinja programı. Eksik bir boşluk, iki kez yazılmış bir BOS belirteci ya da yanlış bir üretim istemi (generation prompt) modelin gördüğünü değiştirir; şablon da çalıştırılmadan okunması zor bir şeydir. Bu araç onu transformers'ın yaptığı gibi çalıştırır. Jinja2 3.1.6'yı JavaScript'e taşıdık: sözcük çözümleyicisini (lexer), ayrıştırıcısını (parser), hangi değişkenin nerede görünür olduğuna dair kuralları, constant folding'i, transformers'ın kullandığı korumalı ortamı ve tüm yerleşik filtre ve testleri; bunlarla birlikte Python'un dizgiler, sayılar, sıralama ve hata iletileri konusundaki kendi davranışını da. Bunun üzerine apply_chat_template'i transformers 5.22.2'deki gibi izler: bos_token gibi özel belirteçler, tools verildiğinde tool_use şablonu, add_generation_prompt, continue_final_message, documents, reasoning_content ve {% generation %} aralıkları. 39 açık modelin sohbet şablonlarını 15 tür konuşmayla işledik ve 585 sonucun hepsi transformers ile eşleşti. 20.000'den fazla başka test şablonu da hatalar ve satır numaraları dahil eşleşti; yalnızca random filtresini kullanan birkaçı hariç, çünkü onun sonucu Python'da da rastgeledir.
Kullanım örnekleri
- Bir modeli ince ayarlamadan ya da sunmadan önce aldığı istemi tam olarak görmek: BOS ve EOS belirteçleri, boşluklar, satır sonları ve üretim istemi
- Bir şablonun okuduğu enable_thinking gibi anahtarları bulmak ve neyi değiştirdiklerini görmek
- Yazdığınız bir sohbet şablonunda hata ayıklamak: hatalar ve satır numaraları, tools, documents ve continue_final_message ile
Nasıl kullanılır
- Bir sohbet şablonunu ya da bir modelin tokenizer_config.json veya chat_template.json dosyasının tamamını yapıştırın ya da bir örnek seçin.
- messages ve tools'u düzenleyin (Python'da verdiğiniz JSON listelerinin aynısı) ve add_generation_prompt ile diğer seçenekleri ayarlayın.
- İstem metnini ve şablonun kullandığı değişkenleri okuyun, aynı girdiyi transformers'ta denemek için Python kodunu kopyalayın.
SSS
Sonuç apply_chat_template ile aynı mı?
apply_chat_template(..., tokenize=False) ile, yani belirteçlere ayırmadan önceki metinle aynıdır. Özel belirteçler, add_generation_prompt, continue_final_message, tools ve documents transformers 5.22.2'deki gibi ele alınır. Araç metni token IDs'e çevirmez.
bos_token ve eos_token nereden gelir?
Python'da belirteç ayırıcıdan (tokenizer) gelir. tokenizer_config.json yapıştırdığınızda araç onları oradan okur. Aksi halde Daha fazla seçenek altına girin.
{% generation %} ne yapar?
Bazı şablonlar asistanın yanıtlarını {% generation %} … {% endgeneration %} ile sarar. transformers bu aralıkları return_assistant_tokens_mask için kullanır; örneğin yalnızca asistanın belirteçleri üzerinde eğitmek için. Araç bunları çıktıda vurgular.
vLLM, llama.cpp ya da başka sunucular aynı metni verir mi?
Diğer yazılımlar aynı şablonu farklı bir motorla ya da farklı ayarlarla işleyebilir, bu yüzden çıktıları farklı olabilir. Bu araç transformers'ı izler.
enable_thinking gibi bir değişken neden Diğer altında listeleniyor?
Şablon onu okur ama apply_chat_template onu ayarlamaz. Çıktıyı değiştirmek için ek bir değişken olarak verin (örneğin {"enable_thinking": false}); Python'da enable_thinking=False verdiğiniz gibi.
Şablonum bir yere gönderiliyor mu?
Hayır. Her şey tarayıcınızda çalışır.