Ir al contenido
Tutorial

Recuento de tokens para GPT, Claude y Llama en una API

| 7 min read

Cuente y trunque tokens en 15 modelos LLM con una única solicitud POST. Evite los desbordamientos de la ventana de contexto y calcule los costos antes de cada llamada a la API.

AI model comparison dashboard
Photo by Possessed Photography on Unsplash

Envía un mensaje a GPT-4o y la respuesta se corta a mitad de la frase. Revisas tu factura y encuentras un trabajo por lotes consumió $40 porque la entrada fue 3 veces mayor de lo esperado. Pegas un largo documento en Claude y aparece un error: se excedió la ventana de contexto. Cada uno de estos problemas tiene su origen volver a la misma causa raíz; No sabías cuántos tokens contenía tu texto antes de enviarlo.

El recuento de tokens es la verificación previa al vuelo que toda integración de LLM necesita. El recuento de caracteres no te ayudará. El conteo de palabras lo lleva al estadio, pero los tokenizadores dividen el texto de manera diferente según el modelo. Necesitas el recuento exacto para el modelo al que estás llamando.

¿Por qué el recuento de caracteres no es el recuento de tokens?

Los LLM no procesan caracteres sin formato. Dividen el texto en tokens usando un tokenizador, que es un Vocabulario de piezas de subpalabras entrenado en un corpus grande. El mapeo de texto a tokens es no obvio y específico del modelo.

Algunos ejemplos que muestran por qué contar caracteres te engaña:

  • "No puedo" se divide en 3 tokens en GPT-4: I, can, 't. Son 7 caracteres pero 3 fichas.
  • "antidisestablecimiento" es una palabra pero de 6 a 8 fichas dependiendo del modelo. El tokenizador lo divide en subpalabras que reconoce.
  • "Hola" es 1 ficha. " Hola" (con espacios iniciales) podría ser 2 tokens porque el espacio en blanco obtiene su propio token.
  • Fragmentos de código tokenizar de manera diferente a la prosa. Llaves, punto y coma y La sangría cada uno consume tokens. Una función de 500 caracteres puede costar fácilmente más de 200 tokens.

Los modelos GPT utilizan BPE (codificación de pares de bytes) con el vocabulario cl100k_base u o200k_base. Claude usa un tokenizador BPE similar pero distinto. Llama usa SentencePieza. El mismo párrafo produce diferentes recuentos de tokens en los tres.

Cuente tokens con una llamada API

Envía tu texto a la botoi /v1/token/count punto final con el modelo objetivo. La API devuelve el recuento de tokens estimado junto con el recuento de caracteres y palabras.

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"
  }'

Respuesta:

{
  "success": true,
  "data": {
    "tokens": 24,
    "model": "gpt-4o",
    "method": "estimated",
    "characters": 116,
    "words": 20
  }
}

La respuesta le dice que esta oración de 20 palabras cuesta 24 tokens en GPT-4o. tu tambien obtienes characters y words para referencia rápida. El method campo indica el método de conteo utilizado.

Recuento de tokens por modelo

El mismo texto produce diferentes recuentos de tokens según el modelo al que se dirija. El model El parámetro acepta 15 modelos en las principales familias. Así es como se comparan para la misma entrada:

Modelo Tokenizador ventana contextual Fichas (mismo texto)
gpt-4o o200k_base (BPE) 128K 24
gpt-3.5-turbo cl100k_base (BPE) 16K 24
claude-3.5-soneto Claude BPE 200K 25
cerrar-4-trabajo Claude BPE 200K 25
llama-3.2 FrasePieza 128K 24
géminis-2.0-flash FrasePieza 1M 24
mistral Pieza de oración (BPE) 32K 24

Las diferencias son pequeñas para oraciones cortas en inglés, pero aumentan a medida que aumenta la longitud de la entrada. No inglés El texto, el código y los datos estructurados (JSON, XML) pueden mostrar una mayor variación. Cuente siempre las fichas con el modelo específico al que planeas llamar.

Truncar texto a un límite simbólico

Cuando su mensaje excede la ventana de contexto, debe recortarlo sin interrumpir la palabra. El /v1/token/truncate El punto final corta el texto a un recuento de tokens de destino en un límite de palabra.

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"
  }'

Respuesta:

{
  "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
  }
}

El mensaje original era 48 fichas. La API lo truncó a 18 tokens (dentro del presupuesto de 20 tokens) en un límite de palabra limpio. El was_truncated La bandera le indica si el texto fue modificado. El original_tokens El campo muestra cuántos tokens contenía el texto completo.

Esto es útil para adaptar las indicaciones del sistema a presupuestos de tokens ajustados, recortar el historial de chat para mantener dentro de la ventana de contexto y fragmentar los documentos antes de enviarlos a una API de incorporación.

Cree una verificación previa al vuelo para las llamadas de LLM

La integración de mayor valor: una función que cuenta tokens y se compara con el contexto del modelo ventana y se trunca si el mensaje es demasiado largo. Esto evita tanto el truncamiento silencioso como los errores 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");

La función reserva el 20% de la ventana de contexto para la respuesta del modelo. Si la entrada encaja, pasa sin cambios. Si es demasiado grande, se trunca al presupuesto de entrada. tu siempre sepa exactamente cuántos tokens está enviando.

Incluya esto en cada llamada de LLM en su solicitud. Agrega una solicitud HTTP (dos si el truncamiento es necesario) y elimina toda una clase de fallas de producción.

Casos de uso del mundo real

  • Estimación de costos antes de llamadas API. Cuente fichas en un lote de indicaciones, multiplíquelas por el precio por token del modelo y conozca el costo total antes de comprometerse. Esta función de Node.js lo hace en unas pocas líneas:
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" }
  • Validación rápida del tamaño. Rechazar o recortar mensajes enviados por usuarios que excedan su presupuesto simbólico de la aplicación. Evite que una sola entrada larga consuma todo su límite de tarifa.
  • Fragmentación de documentos para incrustaciones. Divida documentos largos en trozos que quepan dentro del límite de tokens de su modelo de inserción (normalmente 512 u 8192 tokens). Contar fichas por trozo para garantizar que ninguno exceda el límite.
  • Gestión del historial de chat. A medida que crecen las conversaciones, los mensajes más antiguos aumentan el total recuento de tokens más allá de la ventana de contexto. Cuente el total de tokens acumulado después de cada mensaje y suelte los mensajes más antiguos cuando se acerque al límite.
  • Protectores de tuberías CI/CD. Agregue un paso de recuento de tokens a su canal de implementación. si una plantilla de aviso excede un umbral definido, la compilación falla antes de que llegue a producción.

Puntos clave

  • El recuento de tokens varía según el modelo. GPT, Claude y Llama tokenizan el mismo texto de manera diferente. Especifique siempre el modelo de destino al contar.
  • Dos puntos finales cubren el flujo de trabajo completo. /v1/token/count te dice el tamaño. /v1/token/truncate adornos para encajar. Ambos admiten 15 modelos.
  • Los controles previos al vuelo evitan fallos de producción. Cuente tokens antes de cada LLM llame para evitar respuestas truncadas, errores de ventana de contexto y costos sorpresa.
  • No se requiere cuenta. El nivel gratuito permite 5 solicitudes por minuto sin registro. Obtenga una clave API para un mayor volumen en botoi.com/api.

La documentos API completos cubra la lista completa de modelos compatibles y puntos finales de utilidades para desarrolladores adicionales.

FAQ

¿Cuántas fichas hay en una palabra?
En promedio, una palabra en inglés equivale aproximadamente a 1,3 tokens. Palabras cortas y comunes como "el" o "es" son una muestra. Las palabras más largas o poco comunes, como "autenticación", se dividen en 2 a 4 tokens de subpalabras. El recuento exacto depende del tokenizador del modelo.
¿Qué es un token en GPT?
Un token es un fragmento de texto que el modelo procesa como una sola unidad. Los modelos GPT utilizan un tokenizador de codificación de pares de bytes (BPE) que divide el texto en subpalabras. Las palabras comunes permanecen completas, mientras que las palabras raras o largas se dividen en fragmentos más pequeños. La puntuación y los espacios en blanco también se tokenizan.
¿Cómo cuento tokens antes de una llamada a la API?
Envíe su texto a POST https://api.botoi.com/v1/token/count con un parámetro de modelo opcional (gpt-4o, claude-3.5-sonnet, llama-3, etc.). La API devuelve el recuento estimado de tokens, palabras y caracteres en una sola respuesta.
¿Los diferentes LLM tokenizan el texto de la misma manera?
No. Los modelos GPT utilizan codificación cl100k_base u o200k_base. Claude utiliza un tokenizador BPE similar pero distinto. Llama usa SentencePieza. La misma oración produce diferentes recuentos de tokens en todos los modelos. Cuente siempre los tokens con el modelo específico al que planea llamar.
¿Qué sucede cuando se excede la ventana de contexto de un modelo?
La mayoría de las API de LLM devuelven un error cuando la entrada excede la ventana de contexto. Algunos truncan silenciosamente la entrada, lo que puede cortar instrucciones o contexto críticos. La verificación previa del recuento de tokens y el truncamiento para ajustarlos evitan ambos modos de falla.

Empieza a construir con botoi

150+ endpoints de API para consultas, procesamiento de texto, generacion de imagenes y utilidades para desarrolladores. Plan gratuito, sin tarjeta de credito.