O que é Tokens e janela de contexto?
Tokens e janela de contexto (Tokens and the context window) é um fundamento de engenharia de IA para quem trabalha com LLMs. Por que tudo custa token, por que o meio do contexto some e como medir isso.
A Júlia montou um chat sobre os manuais internos da empresa. São quarenta.
Por segurança, o código dela cola os quarenta manuais em toda pergunta. Funciona. Mas toda resposta é lenta, e a conta do mês veio dez vezes acima da previsão.
E tem algo pior. Quando a resposta está no manual vinte e três, às vezes o bot diz que não encontrou nada.
Dois conceitos explicam os dois problemas: tokens e janela de contexto.
No fim desta aula, você vai saber fazer a conta de qualquer desenho antes de ir para produção. E vai entender por que caber na janela não é o mesmo que funcionar.
O modelo não lê letras nem palavras. Ele lê tokens, pedaços de texto cortados por um tokenizador. Uma palavra comum em inglês costuma ser um token. Palavras longas, acentuadas ou raras viram vários.
Tokens importam por três motivos. Preço, porque você paga por cada token que entra e cada token que sai. E a saída costuma custar mais.
Tempo, porque o modelo escreve um token de cada vez. Resposta longa é resposta lenta.
E o limite, porque tudo o que entra e sai precisa caber num espaço só, a janela de contexto.
Um detalhe que surpreende. Nem todo texto custa igual. Uma pergunta em português costuma virar mais tokens que a mesma pergunta em inglês. Código cheio de símbolo, XML de nota fiscal e dados com nomes de campo repetidos incham ainda mais. Se o seu produto fala português e cola esses arquivos, a estimativa que você fez de cabeça está baixa.
A janela de contexto é o total de tokens que o modelo vê numa chamada. Vamos ver o que tem lá dentro.
O prompt de sistema entra em toda chamada. Mil tokens a mais aqui são mil tokens a mais em cada mensagem.
Cada ferramenta que você oferece também ocupa espaço, com nome, descrição e schema.
O histórico cresce a cada turno. O modelo não tem memória, então você reenvia tudo.
Documentos e resultados de ferramentas costumam ser a maior parte.
A pergunta do usuário costuma ser a menor.
E a resposta também ocupa a janela, com um limite próprio, separado.
Esses dois limites vivem sendo confundidos. A janela é o teto da chamada inteira. O limite de saída, chamado max tokens, é o teto só da resposta.
Digamos que a janela tem duzentos mil tokens e você já mandou cento e noventa e oito mil de entrada. A resposta fica com uns dois mil, no máximo, mesmo que o limite de saída peça oito mil. A maioria das APIs recusa a chamada quando a soma não cabe. E alguns frameworks, para caber, apagam em silêncio as mensagens mais antigas.
De volta à Júlia, com números ilustrativos. Digamos que cada manual tem uns quatro mil tokens.
Colar os quarenta manda uns cento e sessenta mil tokens de entrada em cada pergunta. A pergunta dela é uma fração minúscula disso. E ela paga tudo, em toda mensagem, mesmo quando a resposta está em três parágrafos.
Agora busque só três trechos relevantes, de quinhentos tokens cada. São uns dois mil tokens, mais o prompt de sistema. A pergunta disputa espaço com muito menos ruído, e o preço cai junto com o tamanho.
Mas isso é só a conta. Lembra do manual 23? As janelas ficaram enormes. Isso não quer dizer que o modelo usa bem tudo o que está nelas.
Tem um artigo de 2023 chamado Lost in the Middle. Ele mostrou que os modelos tendem a usar melhor o que está no começo e no fim da entrada do que o que está no meio. Os modelos mais novos melhoraram nisso. Mas o princípio vale: todo token irrelevante disputa a atenção do modelo com os relevantes.
Por isso o chat da Júlia falhava no manual vinte e três. A informação estava na janela. Só estava afogada entre trinta e nove outros manuais, bem no meio.
Uma pergunta para você. O time da Júlia troca para um modelo com uma janela bem maior, duzentos mil tokens em vez de trinta e dois mil. E cola os quarenta manuais de novo. A conta continua alta, e o manual vinte e três ainda some de vez em quando. O que a janela maior resolveu?
Nenhum dos dois. Você continua pagando por cada token que manda. E o meio da entrada continua em desvantagem. Janela maior é folga, não estratégia. A correção é escolher trechos, não pedir mais espaço.
A armadilha de quem está começando é tratar janela grande como motivo para não escolher. Cabe vira o único critério.
A pergunta certa é outra. O que precisa estar aqui para esta pergunta, e o que só está ocupando espaço?
Aqui vai uma versão que você vai encontrar na vida real. No turno um, alguém cola um documento de vinte páginas no chat. No turno quinze, pergunta o endereço da loja. E o seu código continua reenviando aquele documento, a cada turno, doze turnos depois de alguém precisar dele. Histórico não é arquivo obrigatório. Mande o que a pergunta precisa, e resuma ou descarte o resto.
Agora, o hábito que evita surpresas. Conte os tokens antes de mandar. A API do provedor tem um endpoint só para isso, que não gera resposta e usa o mesmo tokenizador do modelo.
Depois, faça a conta do mês. Tokens de entrada, vezes mensagens por dia, vezes trinta. Some a saída média. Multiplique pelo preço do modelo por milhão de tokens. Esse número costuma assustar. E é muito melhor se assustar antes de produção.
Vamos fazer uma juntos. Você mediu oito mil tokens de entrada por pergunta, dez mil perguntas por dia. O time quer só adicionar a política de férias, mais seis mil tokens, em toda chamada.
Antes, são oitenta milhões de tokens de entrada por dia.
Depois, cento e quarenta milhões. A entrada diária quase dobra, e a política vai de carona em perguntas que não têm nada a ver com férias.
E não estime dividindo caracteres por quatro. Essa regra às vezes funciona para inglês simples. Para português, código e dados estruturados, ela conta a menos. Meça alguns exemplos reais com o contador do provedor.
Então, o que muda nos seus desenhos? Mandar menos e melhor vence mandar tudo. É o que a busca faz, em vez de colar manuais inteiros.
O prompt de sistema precisa de dieta. Quando cresce sem controle, vira um smell chamado prompt bloat.
Conversas longas apodrecem. Histórico velho confunde o modelo e aumenta o custo. Esse se chama context rot.
E as partes fixas do começo da entrada podem ser reaproveitadas entre chamadas com cache de prompt, que corta custo e latência. Só não use o cache como desculpa para colar um arquivo inteiro que a pergunta não precisa.
Então, a ideia para guardar. A janela é um orçamento, não um depósito. Cada token que você coloca ali custa dinheiro, custa tempo e disputa atenção. A conta de tokens é a primeira coisa a fazer em qualquer desenho.
Na próxima aula, a gente abre aquele sorteio dentro do modelo: amostragem e temperatura, e o que elas controlam de verdade. Até lá.
Tokens and the context window
Tokens e janela de contexto (Tokens and the context window) é um fundamento de engenharia de IA para quem trabalha com LLMs. Por que tudo custa token, por que o meio do contexto some e como medir isso.
A Júlia montou um chat sobre os manuais internos da empresa. Para “garantir”, o código cola os 40 manuais inteiros em toda pergunta. Funciona, mas cada resposta demora e a fatura do mês chegou dez vezes maior que a previsão. Pior: quando a resposta está no manual 23, o bot às vezes diz que não encontrou nada.
Dois conceitos explicam os dois problemas: tokens e janela de contexto.
O modelo não lê letras nem palavras. Ele lê tokens, pedaços de texto que o tokenizador define. Uma palavra comum em inglês costuma ser um token; palavras longas, acentuadas ou raras viram vários. Português, código e JSON costumam gastar mais tokens por palavra que inglês corrido.
Token importa por três motivos:
Um jeito rápido de sentir a diferença: a frase “Qual é o prazo de troca?” em português costuma virar mais tokens do que “What is the return window?” em inglês. Código com muitos símbolos, XML de NF-e e JSON com chaves repetidas incham ainda mais. Se o seu produto fala português e cola XML, a conta por palavra que você fez de cabeça está baixa.
A janela de contexto é o total de tokens que o modelo enxerga numa chamada: system prompt, histórico, documentos, definições de ferramentas e a própria resposta.
flowchart TD
subgraph W["Janela de contexto de uma chamada"]
S["1. System prompt"]:::tool
T["2. Definições de ferramentas"]:::tool
H["3. Histórico da conversa"]:::store
D["4. Documentos e resultados"]:::store
Q(["5. Pergunta atual"]):::io
R(["6. Resposta gerada"]):::llm
end
max_tokens).Dois limites se misturam o tempo todo. A janela é o teto da chamada inteira. max_tokens é só o teto da saída. Se a janela é de 200 mil e você já mandou 198 mil na entrada, a resposta tem no máximo uns 2 mil tokens, mesmo que max_tokens peça 8 mil. APIs costumam recusar a chamada quando a soma não cabe; alguns frameworks, para “caber”, descartam mensagens antigas sem avisar.
Os números abaixo são ilustrativos. Suponha que cada manual tenha cerca de 4 mil tokens. Colar 40 em toda pergunta manda cerca de 160 mil tokens de entrada, mais o system prompt e a pergunta.
| Desenho | Tokens de entrada por pergunta | O que o modelo vê |
|---|---|---|
| Colar os 40 manuais | cerca de 160 mil | Tudo, inclusive 39 irrelevantes |
| Buscar 3 trechos de 500 tokens | cerca de 2 mil, mais o system prompt | Só o que a busca escolheu |
Na primeira linha, a pergunta da Júlia é uma fração minúscula da entrada. Na segunda, ela compete com bem menos ruído. A diferença de preço acompanha a diferença de tamanho: você paga os 160 mil em toda mensagem, mesmo quando a resposta está em três parágrafos.
Em 2023, funcionários da Samsung colaram código confidencial no ChatGPT. O problema de vazamento é de política e de ferramenta. O problema de desenho é o mesmo da Júlia: o que entra na janela o modelo lê, e você paga.
Janelas de contexto ficaram enormes. Isso não quer dizer que o modelo usa bem tudo que está lá. Pesquisas como “Lost in the Middle” (Liu et al., 2023) mostraram que modelos tendem a usar melhor o que está no começo e no fim da entrada, e pior o que fica no meio. Modelos mais novos melhoraram nisso, mas o princípio vale: cada token irrelevante compete com os relevantes pela atenção do modelo.
Por isso o chat da Júlia falhava no manual 23. A informação estava na janela, afogada entre outros 39 manuais. O manual 1 e o 40 tinham mais chance de ser usados do que o do meio.
A armadilha de quem está começando é tratar a janela grande como desculpa para não escolher. “Caber” vira o único critério. O critério certo é: o que precisa estar aqui para esta pergunta, e o que só está ocupando lugar.
Conte os tokens de um prompt antes de mandar. A API tem um endpoint só para isso, que não gera resposta.
import anthropic
client = anthropic.Anthropic()
system = open("system_prompt.txt").read() # o system prompt do seu projeto
count = client.messages.count_tokens(
model="claude-opus-5-5",
system=system,
messages=[{"role": "user", "content": "Qual é o prazo de troca?"}],
)
print(count.input_tokens)
Agora faça a conta do mês: tokens de entrada vezes mensagens por dia vezes 30. Some a saída média. Multiplique pelo preço por milhão de tokens do modelo, que está na página de preços do provedor. Esse número costuma assustar, e é bom que assuste antes de ir para produção.
Depois repita a contagem com um histórico de 20 turnos colado nas messages. A pergunta não mudou; a entrada sim. A diferença entre as duas contagens é o preço de nunca compactar a conversa.
max_tokens curto demais corta a resposta no meio. Janela cheia demais recusa a chamada ou empurra o framework a apagar o começo da conversa.A conta de tokens é a primeira coisa a fazer em qualquer desenho. Ela é aprofundada em Custo e latência.
Responda as 6 perguntas para concluir a aula. Só assistir não conclui: a checagem é o que conta para a trilha e para o certificado.
Tokens e janela de contexto (Tokens and the context window) é um fundamento de engenharia de IA para quem trabalha com LLMs. Por que tudo custa token, por que o meio do contexto some e como medir isso.