Conte tokens antes de enviar uma requisição: tiktoken em Python
Estime a contagem de tokens de um prompt offline com tiktoken, confira-a contra a janela de contexto, precifique-a e compare com o campo usage da API.

Nesta página
Você pode contar os tokens de um prompt na sua própria máquina antes de enviá-lo: instale tiktoken, codifique o texto e pegue len() do resultado. O tiktoken é o tokenizador da OpenAI, então para os modelos DeepSeek, GLM e MiniMax o número é uma estimativa. O valor real volta em usage. após a primeira chamada, e comparar os dois leva mais uma linha.
Por que se dar ao trabalho? Porque a conta e os erros começam ambos pelo tamanho da entrada. Cole um contrato longo num script e você só descobre que era grande demais quando a API responde com um 400. Rode um lote de cinco mil e-mails e você só descobre quanto custou quando o saldo está menor. Contar primeiro transforma as duas surpresas num número que você pode ler com antecedência.
Cinco linhas que contam tokens#
O README do tiktoken (verificado em 1 de novembro de 2026) mostra a ideia inteira: escolha uma codificação, codifique o texto, e o comprimento da lista é a contagem de tokens.
pip install tiktokenimport tiktoken
enc = tiktoken.get_encoding('o200k_base')
text = 'Hello world'
tokens = enc.encode(text)
print(len(tokens)) # how many tokens the text is
enc. devolve o texto original, o que é uma verificação de sanidade útil para confirmar que você está olhando para o mesmo texto que o modelo verá. O README também menciona tiktoken., que escolhe o tokenizador para um modelo OpenAI específico. Aí está o detalhe que vale lembrar: tokenizadores pertencem a famílias de modelos. A regra de bolso do README é de cerca de quatro bytes de texto por token, e ela descreve apenas os tokenizadores da OpenAI.
Então o que fazer para um modelo DeepSeek? Use a mesma contagem como estimativa de trabalho e calibre-a, como mostrado abaixo.
Adivinhar o número
Aproximadamente quantos tokens tem um texto em inglês de 2.000 caracteres?
O seu palpite
02.000
Mostrar resposta
Resposta: 500
Cerca de 500. Com a regra de bolso do README de quatro bytes por token, e texto em inglês simples a cerca de um byte por caractere, 2.000 ÷ 4 = 500. Outros idiomas e emojis ocupam mais bytes por caractere, então os mesmos 2.000 caracteres geralmente significam mais tokens por essa regra.
O prompt cabe na janela?#
Todo modelo tem uma janela de contexto, e sua entrada mais a resposta que você permite precisam caber nela. As janelas dos modelos que servimos: DeepSeek-V4-Flash 380K, GLM-5.3-Flash 390K, MiniMax-M2.7 180K tokens. A resposta mais longa é de 32.768 tokens para o DeepSeek-V4-Flash e 8.192 para os outros dois (lista de modelos da CheapTokens, 1 de novembro de 2026).
Uma verificação antes da chamada são quatro linhas:
CONTEXT = {
'deepseek-ai/DeepSeek-V4-Flash-0731': 380_000,
'zai-org/GLM-5.3-Flash': 390_000,
'MiniMaxAI/MiniMax-M2.7': 180_000,
}
def fits(prompt_tokens, max_tokens, model):
return prompt_tokens + max_tokens <= CONTEXT[model]Digamos que você tenha um documento de 250.000 tokens. fits(250_ é False, então você encaminha essa tarefa para um modelo com janela maior ou divide o documento, e o 400 nunca acontece. fits(250_ é True. Se você quiser a história completa de como o erro se parece, request too long: 400 vs 413, context window and max_tokens percorre tudo.
Quanto vai custar?#
Agora o orçamento. Pegue um item típico, conte-o e multiplique. Suponha que você classifique 5.000 e-mails de pedidos. Você conta um e-mail representativo e obtém cerca de 800 tokens de entrada, e limita o rótulo e um motivo curto a 200 tokens de saída. Os totais: 5.000 × 800 = 4.000.000 tokens de entrada e 5.000 × 200 = 1.000.000 tokens de saída.
A tabela abaixo precifica exatamente essa carga de trabalho com preços atuais, com entrada e saída contadas juntas:
| Modelo | Entrada $/1M | Saída $/1M | Por solicitação | 5.000 solicitações | OpenRouter, 5.000 solicitações |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000024 | $0.12 | $0.217 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000032 | $0.16 | $0.42 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.00007 | $0.35 | $4.20 |
800 tokens de entrada e 200 tokens de saída por solicitação. Os preços por 1M de tokens são atuais e mudam junto com nossas tarifas; a coluna OpenRouter mostra preços de referência para a mesma carga de trabalho.
No total, com entrada e saída contadas juntas, a coluna CheapTokens é mais barata que a OpenRouter para esses modelos. Troque os três números pelas suas próprias contagens e você tem um orçamento antes da primeira requisição. Para a diferença entre os dois lados da conta, veja input vs output tokens: what an AI API bills you for, e para exemplos medidos de verdade how many tokens an API request uses. Os preços atuais estão sempre na página de preços.

Compare a estimativa com o uso#
A estimativa é um palpite sobre o tokenizador de outra pessoa, então confira-a uma vez contra o gabarito. Toda resposta carrega um campo usage, e usage. é o que a API contou para sua entrada. Coloque os dois números lado a lado e divida.
Passo a passo
Rode a comparação
Configuração
Instale os pacotes e coloque a chave numa variável de ambiente. Nunca cole a chave no script.
pip install tiktoken openai
export CHEAPTOKENS_API_KEY='your-key-here'Rode o script
Salve isto como compare.py. Ele conta localmente, envia a requisição para https:/ e imprime os dois números. O id do modelo é o completo da lista de modelos da CheapTokens, já que nomes abreviados não são aceitos.
import os
import tiktoken
from openai import OpenAI
MODEL = 'deepseek-ai/DeepSeek-V4-Flash-0731'
enc = tiktoken.get_encoding('o200k_base')
messages = [{'role': 'user',
'content': 'Classify this email as order, refund or other: Hi, my parcel from last Tuesday has not arrived yet.'}]
estimate = sum(len(enc.encode(m['content'])) for m in messages)
client = OpenAI(base_url='https://api.cheaptokens.dev/v1',
api_key=os.environ['CHEAPTOKENS_API_KEY'])
r = client.chat.completions.create(model=MODEL, messages=messages, max_tokens=200)
real = r.usage.prompt_tokens
print(f'estimate {estimate}, usage.prompt_tokens {real}, ratio {real / estimate:.2f}')Leia a diferença
A última linha imprime três números. Digamos que mostre estimate 24, usage.. Então multiplique suas estimativas futuras pela razão antes de orçar. Um prompt real também é envolvido na formatação de chat, então a contagem real pode sair um pouco acima da estimativa de texto simples. Rode em alguns prompts típicos, não em um só, e use a razão média.
A partir daí a rotina é: estime localmente, verifique a janela, aplique sua razão ao orçamento e deixe o usage em cada resposta manter você honesto. Se você também quiser o total acumulado ao longo de uma tarefa inteira, track AI agent token cost in Python constrói isso sobre o mesmo campo. Novo na conexão em si? Your first API request with CheapTokens cobre isso, e a documentação tem o resto.
Emparelhar os pares
Relacione cada nome ao que ele informa
Toque num item à esquerda, depois no seu par
- len(enc.encode(text))Sua estimativa local do tamanho da entrada
- usage.prompt_tokensO tamanho da entrada como a API contou
- usage.completion_tokensO tamanho da resposta, precificado no lado da saída
- max_tokensO limite de comprimento da resposta que você reserva na verificação da janela
Contar é barato, local e leva segundos. Faça isso antes da chamada que custa dinheiro.



