Contagem de tokens para GPT, Claude e Llama em uma API
Conte e trunque tokens em 15 modelos LLM com uma única solicitação POST. Evite estouros de janela de contexto e estime custos antes de cada chamada de API.
Você envia um prompt para GPT-4o e a resposta é interrompida no meio da frase. Você verifica sua fatura e encontra um trabalho em lote queimou US$ 40 porque a entrada foi 3x maior do que o esperado. Você cola um longo documento em Claude e recebo um erro: janela de contexto excedida. Cada um desses problemas rastreia de volta à mesma causa raiz; você não sabia quantos tokens seu texto continha antes de enviá-lo.
A contagem de tokens é a verificação pré-voo que toda integração LLM precisa. A contagem de caracteres não irá ajudá-lo. A contagem de palavras leva você ao limite, mas os tokenizadores dividem o texto de maneira diferente, dependendo do modelo. Você precisa da contagem exata do modelo que está chamando.
Por que a contagem de caracteres não é uma contagem de tokens
LLMs não processam caracteres brutos. Eles quebram o texto em tokens usando um tokenizer, que é um vocabulário de peças de subpalavras treinadas em um grande corpus. O mapeamento de texto para tokens é não óbvio e específico do modelo.
Alguns exemplos que mostram por que contar caracteres engana você:
-
"Não posso" divide-se em 3 tokens no GPT-4:
I,can,'t. São 7 caracteres, mas 3 tokens. - "antidesestabelecimento" é uma palavra, mas 6-8 tokens, dependendo do modelo. O tokenizer o divide em partes de subpalavras que ele reconhece.
- "Olá" é 1 ficha. " Olá" (com espaços iniciais) pode ser 2 tokens porque o espaço em branco recebe seu próprio token.
- Trechos de código tokenizar de forma diferente da prosa. Chaves, ponto e vírgula e cada recuo consome tokens. Uma função de 500 caracteres pode facilmente custar mais de 200 tokens.
Os modelos GPT usam BPE (codificação de par de bytes) com o vocabulário cl100k_base ou o200k_base. Cláudio usa um tokenizer BPE semelhante, mas distinto. Lhama usa SentencePiece. O mesmo parágrafo produz diferentes contagem de tokens em todos os três.
Contar tokens com uma chamada de API
Envie seu texto para o botoi /v1/token/count endpoint com o modelo de destino. A API
retorna a contagem estimada de tokens junto com contagens de caracteres e palavras.
curl -X POST https://api.botoi.com/v1/token/count \\
-H "Content-Type: application/json" \\
-d '{
"text": "The quick brown fox jumps over the lazy dog. This sentence is used to test tokenizers across different language models.",
"model": "gpt-4o"
}'
Resposta:
{
"success": true,
"data": {
"tokens": 24,
"model": "gpt-4o",
"method": "estimated",
"characters": 116,
"words": 20
}
}
A resposta informa que esta frase de 20 palavras custa 24 tokens no GPT-4o. Você também recebe
characters e words para referência rápida. O method campo
indica a abordagem de contagem usada.
Contagens de tokens por modelo
O mesmo texto produz contagens de tokens diferentes dependendo do modelo alvo. O
model O parâmetro aceita 15 modelos nas principais famílias. Veja como eles se comparam
para a mesma entrada:
| Modelo | Tokenizador | Janela de contexto | Tokens (mesmo texto) |
|---|---|---|---|
| gpt-4o | o200k_base (BPE) | 128 mil | 24 |
| gpt-3.5-turbo | cl100k_base (BPE) | 16K | 24 |
| claude-3.5-soneto | Claude BPE | 200 mil | 25 |
| close-4-trabalho | Claude BPE | 200 mil | 25 |
| lhama-3.2 | Peça de frase | 128 mil | 24 |
| gemini-2.0-flash | Peça de frase | 1 milhão | 24 |
| mistral | Peça de frase (BPE) | 32K | 24 |
As diferenças são pequenas para frases curtas em inglês, mas aumentam à medida que o comprimento da entrada aumenta. Não inglês texto, código e dados estruturados (JSON, XML) podem apresentar variações maiores. Sempre conte fichas com o modelo específico que você planeja ligar.
Truncar texto até um limite de token
Quando o seu prompt excede a janela de contexto, você precisa cortá-lo sem quebrar o meio da palavra.
O /v1/token/truncate o endpoint corta o texto para uma contagem de tokens de destino em um limite de palavra.
curl -X POST https://api.botoi.com/v1/token/truncate \\
-H "Content-Type: application/json" \\
-d '{
"text": "You are a helpful assistant. Summarize the following document in three bullet points. The document discusses the impact of renewable energy adoption on global carbon emissions over the past decade, with specific focus on solar and wind installations in Europe and Southeast Asia.",
"max_tokens": 20,
"model": "claude-3.5-sonnet"
}'
Resposta:
{
"success": true,
"data": {
"truncated": "You are a helpful assistant. Summarize the following document in three bullet points. The",
"tokens": 18,
"was_truncated": true,
"model": "claude-3.5-sonnet",
"max_tokens": 20,
"original_tokens": 48
}
}
O prompt original era de 48 tokens. A API truncou para 18 tokens (dentro do orçamento de 20 tokens)
em um limite de palavra limpo. O was_truncated flag informa se o texto foi modificado.
O original_tokens campo mostra quantos tokens o texto completo continha.
Isso é útil para ajustar as solicitações do sistema a orçamentos de tokens apertados, cortando o histórico de bate-papo para permanecer dentro da janela de contexto e agrupar documentos antes de enviá-los para uma API de incorporação.
Crie uma verificação pré-voo para chamadas LLM
A integração de maior valor: uma função que conta tokens e compara com o contexto do modelo janela e trunca se o prompt for muito longo. Isso evita truncamento silencioso e erros de API.
const MODEL_LIMITS = {
"gpt-4o": 128000,
"gpt-4o-mini": 128000,
"claude-3.5-sonnet": 200000,
"claude-4-sonnet": 200000,
"llama-3.2": 128000,
};
async function countTokens(text, model = "gpt-4o") {
const res = await fetch("https://api.botoi.com/v1/token/count", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ text, model }),
});
const { data } = await res.json();
return data.tokens;
}
async function truncateText(text, maxTokens, model = "gpt-4o") {
const res = await fetch("https://api.botoi.com/v1/token/truncate", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ text, max_tokens: maxTokens, model }),
});
const { data } = await res.json();
return data;
}
async function preflightCheck(prompt, model = "gpt-4o") {
const limit = MODEL_LIMITS[model];
if (!limit) throw new Error("Unknown model: " + model);
const tokens = await countTokens(prompt, model);
// Reserve 20% of the context window for the model's response
const inputBudget = Math.floor(limit * 0.8);
if (tokens <= inputBudget) {
return { safe: true, tokens, limit, model };
}
// Truncate to fit within the input budget
const result = await truncateText(prompt, inputBudget, model);
return {
safe: false,
original_tokens: tokens,
truncated_tokens: result.tokens,
truncated_text: result.truncated,
limit,
model,
};
}
// Usage
const prompt = buildPromptFromChatHistory(messages);
const check = await preflightCheck(prompt, "claude-3.5-sonnet");
if (!check.safe) {
console.log(
"Prompt truncated from " +
check.original_tokens + " to " +
check.truncated_tokens + " tokens"
);
prompt = check.truncated_text;
}
const response = await callLLM(prompt, "claude-3.5-sonnet");
A função reserva 20% da janela de contexto para a resposta do modelo. Se a entrada for adequada, passa inalterado. Se for muito grande, será truncado para o orçamento de entrada. Você sempre saiba exatamente quantos tokens você está enviando.
Envolva isso em todas as chamadas LLM em seu aplicativo. Ele adiciona uma solicitação HTTP (duas se o truncamento for necessário) e elimina toda uma classe de falhas de produção.
Casos de uso do mundo real
- Estimativa de custos antes das chamadas de API. Conte tokens em um lote de prompts, multiplique pelo preço por token do modelo e saiba o custo total antes de se comprometer. Esta função Node.js faz isso em poucas linhas:
async function estimateCost(text, model = "gpt-4o") {
const tokens = await countTokens(text, model);
// Price per 1M input tokens (March 2026 pricing)
const rates = {
"gpt-4o": 2.50,
"gpt-4o-mini": 0.15,
"claude-3.5-sonnet": 3.00,
"claude-4-sonnet": 4.00,
"llama-3.2": 0.00, // self-hosted
};
const rate = rates[model] || 0;
const cost = (tokens / 1_000_000) * rate;
return {
tokens,
model,
estimated_cost_usd: cost.toFixed(6),
};
}
// Check cost before sending a large document
const estimate = await estimateCost(longDocument, "gpt-4o");
console.log(estimate);
// { tokens: 14320, model: "gpt-4o", estimated_cost_usd: "0.035800" }
- Validação de tamanho imediato. Rejeite ou elimine solicitações enviadas pelo usuário que excedam seu orçamento de token do aplicativo. Evite que uma única entrada longa consuma todo o seu limite de taxa.
- Agrupamento de documentos para incorporações. Divida documentos longos em partes que caibam dentro do limite de tokens do seu modelo de incorporação (normalmente 512 ou 8.192 tokens). Contar tokens por pedaço para garantir que nenhum exceda o limite.
- Gerenciamento de histórico de bate-papo. À medida que as conversas crescem, as mensagens mais antigas aumentam o total contagem de tokens além da janela de contexto. Conte o total cumulativo de tokens após cada mensagem e descarte as mensagens mais antigas quando você se aproximar do limite.
- Protetores de pipeline CI/CD. Adicione uma etapa de contagem de tokens ao pipeline de implantação. Se um modelo de prompt exceder um limite definido, a compilação falhará antes que ela atinja a produção.
Pontos-chave
- A contagem de tokens varia de acordo com o modelo. GPT, Claude e Llama simbolizam o mesmo texto diferentemente. Sempre especifique o modelo de destino ao contar.
-
Dois endpoints cobrem todo o fluxo de trabalho.
/v1/token/countdiz a você o tamanho./v1/token/truncateguarnições para caber. Ambos suportam 15 modelos. - As verificações pré-voo evitam falhas de produção. Conte tokens antes de cada LLM chamada para evitar respostas truncadas, erros de janela de contexto e custos surpresa.
- Nenhuma conta é necessária. O nível gratuito permite 5 solicitações por minuto sem inscrição. Obtenha uma chave de API para maior volume em botoi.com/api.
O documentação completa da API cubra a lista completa de modelos suportados e endpoints adicionais de utilitários para desenvolvedores.
FAQ
- Quantos tokens existem em uma palavra?
- Em média, uma palavra em inglês equivale a cerca de 1,3 tokens. Palavras curtas e comuns como "o" ou "é" são um símbolo. Palavras mais longas ou incomuns, como "autenticação", são divididas em 2 a 4 tokens de subpalavras. A contagem exata depende do tokenizer do modelo.
- O que é um token no GPT?
- Um token é um pedaço de texto que o modelo processa como uma única unidade. Os modelos GPT usam um tokenizer de codificação de pares de bytes (BPE) que divide o texto em partes de subpalavras. As palavras comuns permanecem inteiras, enquanto as palavras raras ou longas se dividem em fragmentos menores. Pontuação e espaços em branco também são tokenizados.
- Como contar tokens antes de uma chamada de API?
- Envie seu texto para POST https://api.botoi.com/v1/token/count com um parâmetro de modelo opcional (gpt-4o, claude-3.5-sonnet, llama-3, etc.). A API retorna a contagem estimada de tokens, contagem de palavras e contagem de caracteres em uma única resposta.
- Diferentes LLMs tokenizam texto da mesma maneira?
- Não. Os modelos GPT usam a codificação cl100k_base ou o200k_base. Claude usa um tokenizer BPE semelhante, mas distinto. Lhama usa SentencePiece. A mesma frase produz diferentes contagens de tokens entre modelos. Sempre conte tokens com o modelo específico que você planeja chamar.
- O que acontece quando você excede a janela de contexto de um modelo?
- A maioria das APIs LLM retornam um erro quando a entrada excede a janela de contexto. Alguns truncam silenciosamente a entrada, o que pode cortar instruções ou contexto críticos. A pré-verificação da contagem de tokens e o truncamento para ajuste evitam ambos os modos de falha.
Comece a construir com botoi
150+ endpoints de API para consultas, processamento de texto, geração de imagens e utilitários para desenvolvedores. Plano gratuito, sem cartão de crédito.