~/tools / Arquivos de modelo e templates de chat / Hugging Face Chat Template Tester
Hugging Face Chat Template Tester — Renderize um template de chat da Hugging Face e veja o prompt exato
Cole um template de chat da Hugging Face (Jinja) ou o tokenizer_config.json inteiro de um modelo, adicione messages e tools, e veja o texto exato do prompt que apply_chat_template(..., tokenize=False) do transformers produz. A ferramenta executa o Jinja2 com as mesmas configurações de sandbox do transformers, então o texto, os erros e os números de linha são os mesmos do Python. Nada sai do seu navegador.
Cole o template Jinja (chat_template.jinja), ou o tokenizer_config.json ou chat_template.json inteiro dos arquivos do modelo na Hugging Face.
Uma lista JSON de mensagens, a mesma lista que você passa para apply_chat_template.
Uma lista JSON de definições de ferramentas (JSON Schema). Deixe vazia para não usar ferramentas.
Adiciona o início de um turno do assistente no final, para que o modelo escreva uma resposta (se o template permitir).
Deixa a última mensagem aberta para que o modelo a continue (prefill). Não pode ser usado junto com add_generation_prompt.
Outros valores passados para apply_chat_template como argumentos nomeados, em forma de objeto JSON, como {"enable_thinking": false}. As variáveis que o template lê são listadas abaixo da saída.
Mais opções
O transformers passa ao template os tokens especiais do tokenizador. Eles são preenchidos quando você cola tokenizer_config.json.
Para templates que aceitam documents (RAG): uma lista JSON de objetos como {"title": "…", "text": "…"}.
A hora que strftime_now() retorna. Deixe vazio para usar a hora atual.
Texto do 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
Sobre este template
- Variáveis que ele lê
- Definidas por apply_chat_template: add_generation_prompt, messages, toolsTokens especiais: nenhumaOutras: nenhuma
- Usa {% generation %}
- Não
Confira no Python
Execute isto para comparar com o transformers. Substitua MODEL_ID pelo modelo, ou passe seu template como 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)A saída é o texto antes da tokenização. O transformers então o tokeniza com add_special_tokens=False, então os tokens especiais aparecem apenas onde o template os escreve.
Quando tools são fornecidas e o modelo tem um template chamado tool_use, o transformers usa esse. Você também pode escolher um template pelo nome.
messages, tools e documents são lidos como o módulo json do Python: números inteiros viram int e números com ponto decimal viram float, o que pode mudar como o template os imprime.
Verificado em 2026-11-09 com transformers 5.22.2 e Jinja2 3.1.6 (Python 3.14). transformers: templates de chat · Código-fonte do transformers
Tudo é executado no seu navegador. Nada do que você cola é enviado nem salvo.
A maioria dos modelos abertos da Hugging Face traz um template de chat: um pequeno programa Jinja que transforma uma lista de mensagens no texto que o modelo realmente lê. Um espaço faltando, um BOS duplicado ou um prompt de geração errado muda o que o modelo vê, e o template é difícil de ler sem executá-lo. Esta ferramenta o executa como o transformers faz. Portamos o Jinja2 3.1.6 para JavaScript: seu analisador léxico, seu analisador sintático, as regras de quais variáveis são visíveis e onde, a dobra de constantes, o sandbox que o transformers usa e todos os filtros e testes embutidos, junto com o comportamento próprio do Python para strings, números, ordenação e mensagens de erro. Por cima disso, ela segue o apply_chat_template do transformers 5.22.2: tokens especiais como bos_token, o template tool_use quando tools são fornecidas, add_generation_prompt, continue_final_message, documents, reasoning_content e os trechos {% generation %}. Renderizamos os templates de chat de 39 modelos abertos (Qwen, Llama, Mistral, Gemma, Phi, DeepSeek, gpt-oss e outros) com 15 tipos de conversas, e os 585 resultados coincidiram com o transformers. Mais de 20.000 outros templates de teste também coincidiram, incluindo erros e números de linha, exceto alguns que usam o filtro random, cujo resultado também é aleatório no Python.
Casos de uso
- Ver o prompt exato que um modelo recebe antes de fazer fine-tuning ou de servi-lo: tokens BOS e EOS, espaços, quebras de linha e o prompt de geração
- Encontrar as chaves que um template lê, como enable_thinking, e ver o que elas mudam
- Depurar um template de chat que você está escrevendo, com erros e números de linha, tools, documents e continue_final_message
Como usar
- Cole um template de chat, ou o tokenizer_config.json ou chat_template.json inteiro de um modelo, ou escolha um exemplo.
- Edite messages e tools (as mesmas listas JSON que você passa no Python) e defina add_generation_prompt e as outras opções.
- Leia o texto do prompt e as variáveis que o template usa, e copie o código Python para conferir a mesma entrada no transformers.
FAQ
O resultado é o mesmo de apply_chat_template?
É o mesmo de apply_chat_template(..., tokenize=False), o texto antes da tokenização. Tokens especiais, add_generation_prompt, continue_final_message, tools e documents são tratados como no transformers 5.22.2. A ferramenta não converte o texto em token IDs.
De onde vêm bos_token e eos_token?
No Python eles vêm do tokenizador. Quando você cola tokenizer_config.json, a ferramenta os lê dele. Caso contrário, informe-os em Mais opções.
O que faz {% generation %}?
Alguns templates envolvem as respostas do assistente em {% generation %} … {% endgeneration %}. O transformers usa esses trechos para return_assistant_tokens_mask, por exemplo para treinar apenas nos tokens do assistente. A ferramenta os destaca na saída.
vLLM, llama.cpp ou outros servidores vão gerar o mesmo texto?
Outros programas podem renderizar o mesmo template com outro motor ou outras configurações, então a saída deles pode ser diferente. Esta ferramenta segue o transformers.
Por que uma variável como enable_thinking aparece em Outras?
O template a lê, mas apply_chat_template não a define. Passe-a como variável extra (por exemplo {"enable_thinking": false}) para mudar a saída, como você passaria enable_thinking=False no Python.
Meu template é enviado para algum lugar?
Não. Tudo é executado no seu navegador.