Voltar ao blog

Otimização de custosGuia

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.

Por CheapTokens TeamPublicado em 5 min de leitura

Terminal mostrando pip install tiktoken e uma contagem de tokens em uma linha
Nesta página
  1. Cinco linhas que contam tokens
  2. O prompt cabe na janela?
  3. Quanto vai custar?
  4. Compare a estimativa com o uso

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.prompt_tokens 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.

bash
pip install tiktoken
python
import tiktoken

enc = tiktoken.get_encoding('o200k_base')
text = 'Hello world'
tokens = enc.encode(text)
print(len(tokens))  # how many tokens the text is
As cinco linhas num arquivo chamado estimate.py
O contador inteiro: get_encoding, encode, len.

enc.decode(tokens) 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.encoding_for_model('gpt-4o'), 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?

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:

python
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_000, 8_192, 'MiniMaxAI/MiniMax-M2.7') é False, então você encaminha essa tarefa para um modelo com janela maior ou divide o documento, e o 400 nunca acontece. fits(250_000, 8_192, 'deepseek-ai/DeepSeek-V4-Flash-0731') é 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 Por solicitação 5.000 solicitações OpenRouter, 5.000 solicitações
GLM-5.3-Flash $0.000024 $0.12 $0.217
DeepSeek-V4-Flash $0.000032 $0.16 $0.42
MiniMax-M2.7 $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.

O fluxo de estimativa do texto até a contagem real de uso
Estime offline, verifique a janela, envie e compare com o uso.

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.prompt_tokens é 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.

bash
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://api.cheaptokens.dev/v1 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.

python
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.prompt_tokens 31, ratio 1.29. 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

  • 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.