Um modelo de linguagem não lê letras nem palavras. Ele lê tokens — pedaços de texto que podem ser uma palavra inteira, um fragmento de palavra, um sinal de pontuação ou um espaço. Token é a unidade real de tudo o que acontece num LLM: é nela que o modelo processa o texto, é por ela que a API cobra, e é o limite de quantos tokens cabem de uma vez que define a janela de contexto.
A janela de contexto é o total de tokens que o modelo consegue considerar numa única passagem — prompt, histórico da conversa, documentos anexados e a resposta que ele vai gerar, tudo somado. Quando esse teto é atingido, alguma coisa precisa sair. É por isso que uma conversa longa parece 'esquecer' o que foi dito no começo.
Este guia explica os dois conceitos do zero, mostra como contar tokens no seu próprio texto, quanto o português custa a mais que o inglês (com números que medimos aqui) e onde essa mecânica falha na prática.
O que é um token, na prática
A documentação da OpenAI descreve tokens como fragmentos que, em inglês, variam de um caractere a uma palavra inteira — algo como "t" ou " great" (com o espaço incluído no token). Não existe regra fixa de uma palavra igual a um token.
Rodando o tokenizador o200k_base, usado pelos modelos mais recentes da OpenAI, a frase "Tokens não são palavras." vira exatamente cinco tokens:
"Tokens" | " não" | " são" | " palavras" | "."Repare em dois detalhes que confundem quem está começando: o espaço em branco viaja grudado na palavra seguinte, e a pontuação ocupa um token próprio. Por isso a conta de "quantas palavras cabem" nunca fecha redondo.
Palavras longas ou pouco frequentes são quebradas em pedaços. Estas são quebras reais, medidas com o o200k_base:
"software" -> 1 token ["software"]
"development" -> 1 token ["development"]
"intelligence" -> 2 tokens ["int", "elligence"]
"tokenização" -> 2 tokens ["token", "ização"]
"inteligência" -> 3 tokens ["int", "elig", "ência"]
"desenvolvimento" -> 3 tokens ["des", "envol", "vimento"]
"estabelecimento" -> 3 tokens ["est", "abele", "cimento"]"development" custa 1 token. "desenvolvimento", que significa a mesma coisa, custa 3. Essa assimetria não é acidente — é consequência direta de como o vocabulário do tokenizador foi construído.
Por que o modelo lê pedaços e não palavras
O algoritmo por trás disso chama-se BPE (Byte Pair Encoding). Ele parte de um corpus gigante de texto e vai, repetidamente, fundindo os pares de caracteres mais frequentes num símbolo único, até formar um vocabulário de tamanho fixo. O que aparece muito no corpus ganha um token dedicado; o que aparece pouco é remontado a partir de pedaços menores.
Isso resolve um problema prático: com um vocabulário fechado de palavras inteiras, qualquer termo novo — um nome próprio, um erro de digitação, uma gíria — seria impossível de representar. Com subpalavras, o modelo consegue escrever qualquer coisa, inclusive palavras que nunca viu, montando-as peça por peça.
O preço é que a eficiência depende de qual língua dominou o corpus de treino. Segundo a documentação do tiktoken, a biblioteca oficial da OpenAI para essa tarefa, cada token corresponde em média a cerca de 4 bytes do texto original — mas essa média foi medida em inglês.
Vocabulários maiores comprimem melhor. O cl100k_base, dos modelos GPT-4 e GPT-3.5, tem cerca de 100 mil entradas; o o200k_base, adotado a partir do GPT-4o, dobrou para cerca de 200 mil. Segundo relatos técnicos independentes, o ganho é mais visível justamente fora do inglês.
Quanto o português custa a mais: medimos
Circula muita estimativa solta sobre isso, então rodamos o teste. Pegamos cinco pares de frases equivalentes em português e inglês — mesmo conteúdo, redação natural nas duas línguas — e contamos os tokens com os vocabulários oficiais do tiktoken.
- o200k_base (GPT-4o e posteriores): 75 tokens em português contra 58 em inglês — cerca de 29% a mais.
- cl100k_base (GPT-4 e GPT-3.5): 102 tokens em português contra 59 em inglês — cerca de 73% a mais.
- Num segundo texto, mais longo e técnico, a diferença ficou em 16% no o200k_base e 48% no cl100k_base.
Medição do Bytezine com amostra pequena (cinco pares de frases). Serve para dar ordem de grandeza, não como benchmark estatístico. O número exato varia muito com o assunto e o estilo do texto — meça o seu próprio conteúdo antes de projetar custo.
Duas conclusões práticas saem daí. A primeira: escrever em português custa mais caro por API, e sempre custou — o que mudou é o tamanho da penalidade. A troca do cl100k_base pelo o200k_base reduziu a diferença de dois dígitos altos para algo bem mais modesto na nossa amostra. Quem calculou orçamento na régua do GPT-3.5 está trabalhando com um número desatualizado.
A segunda: se você tem um system prompt longo e fixo, que o usuário final nunca lê, escrevê-lo em inglês é uma economia real e legítima. Isso não vale para o conteúdo do usuário nem para a resposta — aí o idioma é requisito do produto, não escolha de engenharia.
O que é a janela de contexto
A janela de contexto é o número máximo de tokens que o modelo consegue ter 'à vista' numa única chamada. Ela não guarda só a sua última pergunta. Dentro dela cabem, somados:
- as instruções de sistema (o system prompt);
- todo o histórico da conversa que você quer que ele lembre;
- documentos, trechos de código ou dados que você colou ou anexou;
- resultados de ferramentas e buscas, quando o modelo usa alguma;
- e a resposta que ele ainda vai gerar.
Esse último item é o que mais pega gente de surpresa. A resposta ocupa espaço na mesma janela. Se você encher o contexto até quase o teto com um documento enorme, pode não sobrar lugar para o modelo responder — e o resultado é uma saída cortada no meio da frase, ou um erro da API.
Modelo sem memória permanente: cada chamada à API é independente. A sensação de que o assistente 'lembra' da conversa vem do fato de o histórico inteiro ser reenviado a cada mensagem. Por isso conversas longas ficam progressivamente mais caras — você paga de novo por tudo que já foi dito.
Por que a janela não é infinita
O limite não é comercial, é arquitetural. O mecanismo de self-attention do Transformer faz cada token olhar para todos os outros tokens da sequência. Com n tokens, isso significa da ordem de n² comparações — comportamento amplamente documentado na literatura técnica como o gargalo de escalabilidade dos Transformers.
A consequência é brutalmente não linear: dobrar o tamanho da entrada não dobra o custo, quadruplica. Um contexto dez vezes maior tende a custar cem vezes mais em computação de atenção.
Some a isso o KV cache — a memória onde o modelo guarda as chaves e valores já calculados para não recomputar tudo a cada token gerado. Esse cache cresce de forma linear com o comprimento do contexto, com o número de camadas e com o tamanho do lote, e ocupa memória de GPU que é finita e cara.
É por isso que janelas maiores chegaram devagar e por que provedores cobram mais, ou aplicam faixas de preço diferentes, quando o contexto passa de certo tamanho. Não é arbitrário: é a conta de hardware aparecendo na fatura.
Contexto grande não é o mesmo que contexto bem usado
Aqui está a limitação que mais gente ignora. Caber na janela não garante que o modelo vá usar bem aquela informação.
O estudo "Lost in the Middle: How Language Models Use Long Contexts", de Liu e colegas, publicado na revista TACL (Transactions of the Association for Computational Linguistics), testou modelos em perguntas sobre múltiplos documentos variando a posição da informação relevante. O achado: o desempenho é mais alto quando a informação está no começo ou no fim do contexto, e cai de forma significativa quando ela está no meio — inclusive em modelos anunciados como especializados em contexto longo.
O padrão ficou conhecido como curva em U. Ele tem uma implicação de engenharia bem concreta: a ordem em que você monta o prompt importa. Instrução crítica no meio de um bloco de dez documentos é instrução com chance real de ser ignorada.
Encher a janela até o topo é quase sempre pior que selecionar bem. Mais contexto custa mais caro, aumenta a latência e pode reduzir a precisão. Recuperar os cinco trechos certos vence enviar cinquenta trechos por garantia.
Como contar tokens no seu texto
Estimar por regra de bolso funciona mal em português, pelos motivos acima. O jeito correto é usar o próprio tokenizador do modelo. Em Python, com a biblioteca tiktoken:
import tiktoken
# carrega o tokenizador do modelo que voce vai usar
encoding = tiktoken.encoding_for_model("gpt-4o-mini")
texto = "Tokens nao sao palavras."
tokens = encoding.encode(texto)
print(len(tokens)) # quantidade de tokens
print(encoding.decode(tokens)) # volta ao texto originalUma função reutilizável, seguindo o padrão do cookbook oficial da OpenAI:
def contar_tokens(texto: str, encoding_name: str = "o200k_base") -> int:
encoding = tiktoken.get_encoding(encoding_name)
return len(encoding.encode(texto))
# custo estimado de uma chamada, em tokens de entrada
prompt_sistema = open("system.txt").read()
print(contar_tokens(prompt_sistema))Se o seu stack é JavaScript ou TypeScript, existe uma porta da biblioteca que roda no Node e no navegador, com os mesmos vocabulários. A escolha entre as duas linguagens para projetos de IA é um assunto por si só — tratamos disso em [Python ou TypeScript: qual usar em projetos de IA?](/artigo/python-ou-typescript-para-ia).
Segundo a documentação do tiktoken, o mapeamento entre vocabulário e família de modelos é este:
- o200k_base — gpt-4o, gpt-4o-mini e modelos posteriores;
- cl100k_base — gpt-4-turbo, gpt-4, gpt-3.5-turbo e os modelos de embedding;
- p50k_base — modelos Codex e a geração text-davinci.
Cada família de modelos tem seu próprio tokenizador. Contar com o vocabulário da OpenAI e aplicar o número a um modelo de outro fornecedor dá resultado errado. Sempre use o tokenizador correspondente ao modelo que você realmente vai chamar.
Erros comuns e onde essa mecânica falha
- Estimar tokens dividindo caracteres por quatro. Essa média vale para inglês; na nossa medição, o português ficou em torno de 6,3 caracteres por token no o200k_base, mas o número oscila bastante conforme o vocabulário e o assunto.
- Esquecer que a resposta ocupa a mesma janela. Reserve espaço para a saída antes de encher o contexto com documentos.
- Contar tokens só do conteúdo e ignorar o overhead. Formatação de mensagens, definições de ferramentas e schemas de saída estruturada consomem tokens que não aparecem no seu texto visível.
- Assumir que JSON é barato. Chaves, aspas e vírgulas viram tokens. Na nossa medição, um objeto JSON de 51 caracteres consumiu 19 tokens — bem mais denso que prosa equivalente.
- Tratar janela grande como memória. O modelo não retém nada entre chamadas: o histórico é reenviado inteiro, e você paga por ele de novo a cada mensagem.
- Confiar que tudo que entrou será usado. O efeito lost in the middle mostra que informação enterrada no meio de um contexto longo tem chance real de ser ignorada.
- Contar tokens de texto e aplicar a imagens ou áudio. Modelos multimodais convertem esses formatos em tokens por regras próprias, que não têm relação com contagem de caracteres.
Como isso se conecta ao resto do stack de IA
Token e contexto não são curiosidade teórica — são a restrição que explica boa parte das decisões de arquitetura em aplicações de IA.
O limite de janela é a razão de existir do chunking, a prática de quebrar documentos em pedaços antes de indexá-los. Cada pedaço precisa caber no contexto junto com a pergunta e a resposta. E é também a razão de existir do RAG: em vez de despejar a base inteira no prompt, você recupera só os trechos relevantes. Explicamos o pipeline completo em [O que é RAG (Retrieval-Augmented Generation)?](/artigo/rag-retrieval-augmented-generation-o-que-e-como-funciona).
A busca por esses trechos, por sua vez, depende de [embeddings](/artigo/embeddings-o-que-sao-como-funcionam-ia) — vetores que representam significado e permitem encontrar o que é semanticamente parecido com a pergunta. Vale notar que embedding e token são coisas diferentes: o token é a unidade de texto; o embedding é o vetor que representa sentido. Os modelos de embedding também têm limite de tokens por entrada.
E tudo isso se apoia no funcionamento do próprio modelo, que cobrimos em [O que é um LLM?](/artigo/o-que-e-um-llm-guia-modelos-linguagem). Se você está chegando agora ao assunto, o ponto de partida é [O que é Inteligência Artificial? Guia para iniciantes](/artigo/o-que-e-inteligencia-artificial-guia-completo-iniciantes).
O que levar disso
Token é a unidade de conta de um LLM: nela o modelo lê, por ela você paga, e o teto dela define o que ele consegue considerar de uma vez. A janela de contexto é esse teto, e ele existe porque a atenção do Transformer escala com o quadrado do número de tokens — um limite de física computacional, não de política comercial.
Os números específicos vão envelhecer. Janelas crescem, vocabulários mudam, preços caem. O que não muda é a mecânica: subpalavras, custo quadrático de atenção, e o fato de que informação bem posicionada vale mais que informação abundante. Quem entende isso projeta sistemas que continuam funcionando quando o modelo por baixo é trocado.
O próximo passo prático é simples: rode o contador de tokens no seu prompt de produção hoje. A conta costuma surpreender.
Perguntas frequentes
Não existe número fixo. Em inglês, a média fica perto de uma palavra por token para termos comuns. Em português, palavras longas costumam ser quebradas em dois ou três pedaços: medimos 'inteligência' em 3 tokens e 'desenvolvimento' em 3 tokens com o vocabulário o200k_base, enquanto 'software' e 'development' custam 1 token cada. A única forma confiável de saber é rodar o tokenizador do modelo que você vai usar.