Saltar al contenido
16/30Capítulo 16 de 30

Context window, tokens y factura, medidos

Una conversación de 40 turnos cuesta 22 veces su longitud en input tokens. El caching recorta un 68 %; un timestamp mal puesto suma un 20 %.

En esta página

Aquí tienes una conversación de soporte de cuarenta turnos, facturada turno a turno. No tiene nada de raro: un desarrollador preguntando por una API, un assistant respondiendo en uno o dos párrafos. Todo el intercambio ocupa 5.090 tokens de texto: unas ocho páginas.

turnoprompt tokenstexto nuevooutputcoste de este turnototal acumulado
121318183$0.002622$0.002622
589214123$0.003260$0.014354
101.65619114$0.004680$0.035530
202.86818103$0.006972$0.094426
303.9412099$0.009070$0.174170
404.94717142$0.011598$0.274386

Lee juntas la segunda y la tercera columna. En el turno 40, el usuario escribió diecisiete tokens y se le cobraron 4.947. La pregunta no era más difícil que la primera; era más corta. Lo que cambió es que la solicitud llevaba consigo toda la conversación, otra vez, por cuadragésima vez.

Total de input tokens facturados en esas cuarenta llamadas: 112.617. La conversación mide 5.090 tokens. Pagaste por ella veintidós veces.

Este capítulo trata de por qué ocurre eso, cómo se llama en la factura de cada proveedor y sobre cuáles de las cinco cosas por las que se te cobra puedes hacer algo.

Mostrar detalles

Lo que este capítulo necesita de la Parte II.

  • Capítulo 7 construyó el tokenizer. Un token también es la unidad aquí: la misma unidad, ahora con precio.
  • Capítulo 9 derivó la self-attention y su coste O(n2)O(n^2), en el recuadro de notación asintótica. Ese coste es la razón por la que existe un límite, y aquí se enlaza en vez de volver a explicarlo.
  • Capítulo 13 midió prefill frente a decode y calculó cuánto ocupa una KV cache. Esas dos fases son lo que realmente están comprando las columnas de input y output anteriores.

Todo lo demás es TypeScript, porque esto es contabilidad de una llamada remota y no matemáticas sobre un modelo.

El malentendido más caro de este negocio es creer que un modelo recuerda una conversación.

No lo hace, y el mecanismo del Capítulo 13 explica exactamente por qué. El estado de un transformer durante la generación es la KV cache: las keys y values calculadas para cada token de la secuencia. Esa cache vive durante una única solicitud. Cuando la solicitud termina, el proceso que la tenía queda libre para atender a otra persona, y la cache desaparece. No hay ningún almacén por usuario al otro lado, ni ninguna sesión.

Así que la siguiente solicitud tiene que llegar llevando todo lo que se supone que el modelo debe saber, y el modelo reconstruye ese estado ejecutando un forward pass sobre todo el prompt antes de emitir un solo token nuevo. El Capítulo 15 llamó al prompt «el estado entero». Esta es la razón física: el prompt es el estado completo porque nada más sobrevive a la llamada.

La context window es la longitud máxima de ese prompt más su respuesta. Es un techo sobre cuánto estado puedes reconstruir, no un contenedor que guarde nada entre solicitudes. Llamarla «la memoria del modelo» invierte la causalidad: no estás llenando una memoria, estás pagando por restablecer una.

De ahí sale el veintidós. El turno nn arrastra todos los n1n-1 turnos anteriores, así que el input total a lo largo de una conversación de nn turnos es la suma de una serie creciente, que es cuadrática:

total input  =  i=1n(s+hi)  =  Θ(n2)\text{total input} \;=\; \sum_{i=1}^{n} \big(s + h_i\big) \;=\; \Theta(n^2)

donde ss es el system prompt y hih_i el historial en el turno ii. Ajustar el input acumulado medido a an2+bnan^2 + bn en los cuarenta turnos da 60.22n2+432.25n60.22\,n^2 + 432.25\,n, que predice 113.645 tokens en el turno 40 frente a 112.617 medidos. El término cuadrático domina y el término lineal es lo que el usuario escribió realmente.

La consecuencia es la frase que conviene llevarse de este capítulo: tu factura crece con el cuadrado de la conversación, no con la última pregunta. Las mismas cuarenta preguntas hechas sin historial alguno cuestan $0.066036. Mantener el historial costó $0.274386. El historial multiplicó la factura por 4,2, y la seguirá multiplicando, porque el multiplicador es la longitud de la conversación.

La window es finita por dos razones que empujan en la misma dirección. La primera es la del Capítulo 9: la attention compara cada token con cada otro token, así que el trabajo de esa capa crece con el cuadrado de la longitud de la secuencia. La segunda es la memoria: la KV cache crece linealmente con la longitud de la secuencia, y el Capítulo 13 ya hizo esas cuentas; en secuencias largas es mayor que los pesos.

Ambos límites han sido atacados y ninguno ha desaparecido. FlashAttention1 reorganiza el cálculo para que lea y escriba mucho menos en memoria de alto ancho de banda, lo que hace prácticas las secuencias largas sin cambiar el coste asintótico. Position Interpolation2 y YaRN3 amplían la window utilizable de un modelo entrenado reescalando los positional encodings del Capítulo 9 en vez de reentrenar. Juntos explican por qué las windows pasaron de 2K a 1M en cinco años.

Lo que no hicieron fue volver gratis los context largos. Hicieron el techo más alto y la pendiente más suave. La pendiente sigue ahí, y es lo que miden los tramos de precio más adelante en este capítulo.

Casi todas las calculadoras de costes de internet modelan una llamada API como input tokens por un precio de input más output tokens por un precio de output. Eso era cierto en 2023. Ahora es incorrecto de una forma que produce facturas desviadas por un factor de dos o más en ambas direcciones.

Hay cinco categorías de token facturables:

cuboqué esprecio típico, relativo al input
uncached inputprompt tokens que el modelo tuvo que procesar desde cero
cache readprompt tokens servidos desde un prefijo almacenado0,1×
cache writeprompt tokens almacenados en la cache en esta llamada1,25× a 2×
outputtokens que el modelo generó y te envió5× a 6×
reasoningtokens que el modelo generó y no te enviótarifa de output

Tres de esas cinco no existían como líneas separadas hace dos años, y las dos líneas de cache son las que la gente entiende mal, porque un cache write cuesta más que el input ordinario, no menos. Pagas una prima por almacenar algo para poder pagar un descuento al leerlo de vuelta, y si esa operación compensa depende por completo de cuántas veces lo leas.

El cubo de reasoning es el del Capítulo 12, ahora con precio, y trae un detalle que merece decirse claramente: la documentación de Google dice que el precio «se basa en todos los thought tokens que el modelo necesita generar, aunque la API solo devuelva el resumen».4 Se te facturan tokens que nunca se te transmiten. Es el único cubo cuyo contenido no puedes contar, inspeccionar ni verificar.

Ahora viene la parte que convierte esto en un problema de normalización en vez de un problema de multiplicación. Cada proveedor informa de estos cubos con nombres distintos y —esta es la trampa— dos de ellos usan la misma palabra para dos cantidades distintas.

Toma una llamada: 4.837 tokens leídos de cache, 110 nuevos, 142 output tokens visibles, 300 reasoning tokens.

three usage payloads, one callJSON
// OpenAI-compatible
{ "usage": { "prompt_tokens": 4947,
             "prompt_tokens_details": { "cached_tokens": 4837 },
             "completion_tokens": 442,
             "completion_tokens_details": { "reasoning_tokens": 300 } } }

// Anthropic
{ "usage": { "input_tokens": 110,
             "cache_read_input_tokens": 4837,
             "cache_creation_input_tokens": 0,
             "output_tokens": 442 } }

// Gemini
{ "usageMetadata": { "promptTokenCount": 4947,
                     "cachedContentTokenCount": 4837,
                     "candidatesTokenCount": 142,
                     "thoughtsTokenCount": 300 } }

Mira prompt_tokens: 4947 y input_tokens: 110. Ambos campos son el recuento de input tokens del mismo prompt. El de OpenAI incluye los tokens en cache; el de Anthropic los excluye: su documentación establece explícitamente la identidad, total_input_tokens = cache_read_input_tokens + cache_creation_input_tokens + input_tokens.5 El input_tokens de Anthropic significa «los tokens después de tu último punto de corte de cache».

Y mira el output. OpenAI y Anthropic informan ambos de 442, que ya contiene los 300 reasoning tokens. Gemini informa de 142 y pone los 300 en un campo propio. El Capítulo 12 señaló esto como una incompatibilidad entre dos formas de contar el mismo trabajo; aquí está lo que cuesta.

Un normalizador son treinta líneas y no es opcional:

normalise.tsTS
export interface Usage {
  promptTokens?: number;        // input, NOT cached
  cachedInputTokens?: number;   // read from cache
  cacheWriteTokens?: number;    // written to cache on this call
  completionTokens?: number;    // output
  reasoningTokens?: number;     // billed apart from output (Gemini only)
}

const num = (v: unknown) => (typeof v === "number" && isFinite(v) ? v : 0);

export const fromOpenAI = (raw: any): Usage => {
  const u = raw.usage ?? {}, d = u.prompt_tokens_details ?? {};
  const cached = num(d.cached_tokens), write = num(d.cache_write_tokens);
  return {
    promptTokens: Math.max(0, num(u.prompt_tokens) - cached - write), 
    cachedInputTokens: cached,
    cacheWriteTokens: write,
    completionTokens: num(u.completion_tokens),   // reasoning already inside
    reasoningTokens: 0,
  };
};

export const fromAnthropic = (raw: any): Usage => {
  const u = raw.usage ?? {};
  return {
    promptTokens: num(u.input_tokens),            // already excludes cache
    cachedInputTokens: num(u.cache_read_input_tokens),
    cacheWriteTokens: num(u.cache_creation_input_tokens),
    completionTokens: num(u.output_tokens),
    reasoningTokens: 0,
  };
};

export const fromGemini = (raw: any): Usage => {
  const m = raw.usageMetadata ?? {}, cached = num(m.cachedContentTokenCount);
  return {
    promptTokens: Math.max(0, num(m.promptTokenCount) - cached),
    cachedInputTokens: cached,
    cacheWriteTokens: 0,
    completionTokens: num(m.candidatesTokenCount), // EXCLUDES thinking
    reasoningTokens: num(m.thoughtsTokenCount),    // billed at output rate
  };
};

Pasa los tres payloads anteriores por los tres lectores y los tres producen el mismo Usage, y por tanto el mismo número: $0.006491. Ese acuerdo es todo el sentido de escribir la capa.

Si te equivocas, esto es lo que cuesta, en la misma llamada:

errorfacturadodesviación
tratar cached_tokens como adicional a prompt_tokens$0.0161652,49× — cobras el prompt dos veces
tratar las cache reads como gratis en vez de 0,1×$0.0055240,85× — te comes un 15 %
leer candidatesTokenCount e ignorar thoughtsTokenCount$0.002891desaparece el 55 % de la llamada

El tercero es el peligroso, porque falla en silencio en la dirección de las buenas noticias. Tu dashboard muestra un modelo de reasoning costando menos de la mitad de lo que cuesta, y nada en ninguna parte lanza un error.

Con los cubos normalizados, la función de coste es corta. La única parte no evidente es la búsqueda de tramo, que explica la siguiente sección:

cost.tsTS
export interface Tier { maxPromptTokens: number | null; price: number }
export interface Pricing {
  input: Tier[]; output: Tier[];
  cachedInput?: Tier[]; cacheWrite?: Tier[]; reasoning?: Tier[];
}

const tierPrice = (tiers: Tier[] | undefined, contextSize: number, fallback?: Tier[]) => {
  const table = tiers ?? fallback;
  if (!table?.length) return 0;
  const sorted = [...table].sort(
    (a, b) => (a.maxPromptTokens ?? Infinity) - (b.maxPromptTokens ?? Infinity));
  for (const t of sorted)
    if (t.maxPromptTokens === null || contextSize <= t.maxPromptTokens) return t.price;
  return sorted[sorted.length - 1].price;
};

export function computeCost(pricing: Pricing, usage: Usage): number {
  const fresh = usage.promptTokens ?? 0;
  const read  = usage.cachedInputTokens ?? 0;
  const write = usage.cacheWriteTokens ?? 0;
  const out   = usage.completionTokens ?? 0;
  const think = usage.reasoningTokens ?? 0;
  const contextSize = fresh + read + write;   // the tier depends on the WHOLE prompt
  return fresh * tierPrice(pricing.input, contextSize)
       + read  * tierPrice(pricing.cachedInput, contextSize, pricing.input)
       + write * tierPrice(pricing.cacheWrite,  contextSize, pricing.input)
       + out   * tierPrice(pricing.output, contextSize)
       + think * tierPrice(pricing.reasoning, contextSize, pricing.output);
}

Hay dos decisiones de diseño ahí que merece la pena defender. Los fallbacks —precios de cache que caen al input, reasoning que cae al output— codifican qué significa una tabla incompleta: los reasoning tokens en Gemini se facturan a la tarifa de output, así que un precio reasoning ausente no es cero, es el precio de output. Y contextSize suma los tres cubos de input en vez de solo los nuevos, porque el tramo se elige por lo largo que es el prompt, no por qué parte de él se te cobró a precio completo.

Una prompt cache almacena el estado calculado del modelo para un prefijo de tu prompt, de modo que una solicitud posterior con el mismo prefijo se salta recomputarlo. De la palabra «prefijo» se desprenden cuatro propiedades, y las cuatro sorprenden.

La cache compara desde el principio del prompt renderizado hacia delante y se detiene en el primer byte que difiere. No hay crédito parcial por contenido que aparece más tarde en otro orden. OpenAI lo dice sin rodeos: «cache reuse requires the entire rendered prefix to match».6

Por debajo de ella, nada se guarda en cache y no se devuelve ningún error. En OpenAI, el mínimo es 1.024 tokens para GPT-5.6 y posteriores y 2.048 para modelos anteriores. En Anthropic va de 512 a 4.096 según el modelo: 1.024 para Claude Sonnet 4.5, 4.096 para Claude Haiku 4.5. Si ambos campos de cache vuelven a cero, normalmente es por eso.

Escribir cuesta más que leer, y más que no cachear

Enlace a la sección: Escribir cuesta más que leer, y más que no cachear

En OpenAI y Anthropic, un cache write es 1,25× la tarifa de uncached input para la cache de corta duración, y la cache de una hora de Anthropic es 2×. Una read es 0,1×. Google no cobra por escribir pero alquila el almacenamiento: $4.50 por millón de tokens por hora en Gemini 2.5 Pro.

La entrada por defecto de Anthropic vive cinco minutos, renovados gratis con cada hit. La de OpenAI dura al menos treinta minutos después de la última escritura o reutilización. Y OpenAI señala que los estados en cache viven en máquinas individuales, así que una solicitud solo acierta si se enruta a la máquina que tiene la entrada, que es en lo que influye prompt_cache_key, sin garantizarlo.

El punto de equilibrio es lo bastante pequeño como para recordarlo, y la documentación de OpenAI hace la cuenta: escribir un prefijo una vez y reutilizarlo una vez cuesta 1,35× su coste de input ordinario, frente a 2× por procesarlo dos veces sin cache; en diez solicitudes, una escritura y nueve lecturas cuestan 2,15× frente a 10×. Una reutilización paga la escritura. Anthropic cae en el mismo sitio: una lectura para la cache de cinco minutos, dos para la cache de una hora.

Ahora la conversación de cuarenta turnos otra vez, con caching activado y el prefijo estable:

uncached inputcache readscache writestotal
sin cache112.617$0.274386
caching2.887104.7834.947$0.088250

Un sesenta y ocho por ciento más barato, y hay tres números en esa tabla que merecen atención.

La cache no entra en juego hasta el turno 6. El prompt no llega a 1.024 tokens hasta entonces, así que los cinco primeros turnos se facturan exactamente como antes, y el sexto se factura peor, con la prima de escritura de 1,25\u00d7, porque es el turno que llena la cache. La primera lectura llega en el turno 7. Los 2.887 uncached tokens de la tabla son esa aritmética: el valor de cinco turnos, no de seis. El caching es un descuento sobre prompts largos, y una conversación corta no obtiene nada de él.

La prima de escritura es $0.002474, lo que supone el 2,8 % de la factura con cache. Cada turno escribe su nueva cola, cuarenta veces, y toda la prima de escritura es un error de redondeo frente a lo que ahorraron las lecturas. Conviene entender con precisión el cargo de escritura para dejar de preocuparte por él.

Solo 2.887 tokens se cobraron al precio completo de input de 112.617. Esa es la forma de una cache que funciona: casi todo es una lectura.

El orden del prompt decide si algo de esto ocurre

Enlace a la sección: El orden del prompt decide si algo de esto ocurre

Aquí está el fallo que cuesta dinero de verdad, y es un bug de una línea.

Pon algo que cambie en cada llamada cerca del principio del prompt —un timestamp, un request id, el nombre del usuario, una línea de «hoy es», un documento recién recuperado— y el prefijo difiere desde el primer byte. Nada coincide. Cada llamada es un fallo. Y como cada llamada presenta un prefijo nuevo, cada llamada también escribe.

Misma conversación, mismos cuarenta turnos, caching activado, con un timestamp por llamada al principio del system prompt:

totalfrente a
sin caching en absoluto$0.274386
caching, prefijo estable$0.088250−67,8 %
caching, prefijo volátil$0.329251+20,0 %

Activar prompt caching hizo la conversación un veinte por ciento más cara que no activarlo. Pagaste la prima de escritura de 1,25× sobre 109.730 tokens y no leíste nada de vuelta. No hay error, no hay aviso, y la función está activada.

Así que la regla, y es todo prompt caching en una línea: contenido estable delante, contenido variable detrás. Instrucciones de sistema, definiciones de herramientas y material de referencia primero; timestamps, identidad del usuario y la pregunta actual al final. Anthropic hace explícita la jerarquía: la cache sigue toolssystemmessages, y un cambio en cualquier nivel invalida ese nivel y todo lo que viene después, así que editar una sola descripción de herramienta invalida toda la cache.5

Dos consecuencias con las que la gente tropieza. Cambiar qué herramientas están habilitadas cambia las definiciones de herramientas, así que un feature flag que añade una herramienta para algunos usuarios divide tu cache en dos. Y en Anthropic, activar o desactivar la búsqueda web o las citas modifica el system prompt, lo que invalida las caches de sistema y mensajes sin que toques una línea de tu propio texto.

La respuesta obvia a una factura cuadrática es dejar de enviar todo el historial: conservar la última docena de mensajes y eliminar el resto. Reduce la factura, y normalmente es la decisión equivocada, y la medición explica por qué.

estrategiatotalfrente a historial completo + cache
historial completo, sin cache$0.274386+211 %
historial completo, caching$0.088250
últimos 12 mensajes, sin cache$0.118712+35 %
últimos 12 mensajes, caching activado$0.122546+39 %

Truncar a una window de doce mensajes es un 57 % más barato que enviarlo todo sin cache: la comparación que todo el mundo hace, y la razón por la que la técnica es popular. Pero es un 39 % más caro que enviarlo todo con una cache que funciona, y activar caching junto con la truncación lo hace ligeramente peor en vez de mejor.

El mecanismo vuelve a ser el prefijo. Una window deslizante elimina el mensaje más antiguo en cada turno, así que el prompt ya no empieza donde empezó la vez anterior y cada turno presenta un prefijo nuevo. La guía de OpenAI dice exactamente esto: «summarisation, compaction, or context truncation can change the prefix and reset cache reuse».6 En el turno 40, el prompt con window mide 813 tokens, por debajo del mínimo de 1.024 tokens, así que no puede cachearse en absoluto.

Y el dinero es la mitad barata del coste. Lo que has eliminado es la instrucción que el usuario dio en el turno 2 y que el modelo necesitaba en el turno 40. La truncación cambia una factura que puedes ver por un fallo que no puedes ver, y hacerlo bien —compaction, notas estructuradas mantenidas fuera de la window, recuperar historial bajo demanda— es el tema del Capítulo 24.

Los context largos no son más caros solo porque sean más largos. Pasado un umbral, son más caros por token, y el umbral se aplica retroactivamente a todo el prompt.

La página de modelo de OpenAI para gpt-5.6-terra lo dice en una frase: «Prompts with >272K input tokens are priced at 2x input and 1.5x output for the full request».7 No para el exceso. Para todo.

the most expensive token you will ever sendTEXT
prompt 271,999 + 500 output  ->  $0.5500
prompt 272,000 + 500 output  ->  $0.5500
prompt 272,001 + 500 output  ->  $1.0970

Un token, cincuenta y cinco céntimos. Si tu servicio construye prompts a partir de documentos recuperados cuyo tamaño no controlas, tienes un precipicio en tu modelo de costes en una frontera que nadie de tu equipo ha escrito.

Los precios de Google funcionan igual con un umbral de 200.000 tokens: Gemini 2.5 Pro cuesta $1.25 por millón de input tokens para prompts de hasta 200K y $2.50 por encima, con el output pasando de $10.00 a $15.00.8 Anthropic fue en la dirección contraria: a 6 de septiembre de 2026, su documentación dice que Claude 4.6 y posteriores incluyen toda la context window de un millón de tokens al precio estándar, así que «a 900k-token request is billed at the same per-token rate as a 9k-token request».9 Los modelos anteriores mantenían el recargo.

Por eso un precio no es un número. Un precio es una tabla de tramos indexada por longitud de prompt, que es para lo que sirve Tier[] en la función de coste, y por eso computeCost selecciona el tramo usando todo el prompt en vez de cada cubo por separado.

Prefill, decode, y por qué el output cuesta seis veces el input

Enlace a la sección: Prefill, decode, y por qué el output cuesta seis veces el input

Los cinco cubos se corresponden con las dos fases del Capítulo 13, y una vez ves el mapeo las ratios de precio dejan de parecer arbitrarias.

Los input tokens son prefill. Todo el prompt pasa por el modelo en una sola pasada, procesado en paralelo: grandes multiplicaciones de matrices, limitadas por cómputo. El coste por token es bajo, y esta es la fase que fija el time to first token: un prompt de 4.947 tokens tiene 4.947 tokens de prefill que hacer antes de que aparezca la primera palabra.

Los output tokens son decode. Se producen uno a uno, cada uno con un forward pass completo que lee toda la KV cache, con la GPU más esperando a la memoria que calculando. Esta es la fase que fija los tokens per second, no puede paralelizarse dentro de una respuesta, y por eso el output cuesta unas seis veces el input en el modelo tasado aquí: $12.00 frente a $2.00 por millón de tokens.

De ahí se siguen directamente tres consecuencias. Una cache read sustituye trabajo de prefill, así que compra latencia y dinero a la vez: el mismo descuento aparece como una factura menor y una espera más corta hasta el primer token. Los reasoning tokens son decode que no ves, por eso un modelo de reasoning no streamea nada durante varios segundos y luego responde rápido: el Capítulo 12 advirtió de la consecuencia en la interfaz, y esta es la consecuencia en la factura. Y abortar un stream no detiene la generación: el Capítulo 14 construyó la cancelación y dejó el precio para este capítulo, y el precio es el recuento completo de output, porque los tokens se producen y facturan escuche alguien o no. Lo mismo ocurre con la respuesta que nadie conserva: regenerar una respuesta del turno 40 cinco veces cuesta $0.057990 por la única que queda en pantalla.

El tokenizer del Capítulo 7 era Python y se quedó allí. El budgeting ocurre en el servidor que construye la solicitud, así que tiene que ocurrir aquí, y hay exactamente tres niveles de precisión disponibles.

Nivel uno: contar localmente. js-tiktoken incluye las mismas tablas de fusiones BPE que el tiktoken de Python, así que da un recuento idéntico byte a byte para encodings de OpenAI, sin llamada de red:

count.tsTS
import { getEncoding } from "js-tiktoken";

const enc = getEncoding("o200k_base");
const PER_MESSAGE = 4;   // role and delimiters added by the chat template
const PER_REPLY = 3;     // priming for the assistant turn

export function promptTokens(messages: { role: string; content: string }[]) {
  return messages.reduce(
    (sum, m) => sum + enc.encode(m.content).length + PER_MESSAGE, PER_REPLY);
}

Las dos constantes importan y son donde se desvían los recuentos locales. Tu texto no es lo que se tokeniza: la plantilla de chat del Capítulo 11 envuelve primero cada mensaje en marcadores de rol, y esos son tokens que pagas. Cuatro por mensaje y tres para el priming de la respuesta es la aproximación convencional para modelos de chat de OpenAI; en los ochenta y un mensajes de la conversación anterior suman 324 tokens, el 6,4 % de su longitud. Los recuentos aquí se contrastaron con el tiktoken de Python del Capítulo 7 en las ochenta y una cadenas y son idénticos.

Nivel dos: preguntar al proveedor. Anthropic expone /v1/messages/count_tokens y Google expone count_tokens, ambos aceptan la misma forma de solicitud que una llamada real y devuelven gratis un recuento de input tokens. Úsalos cuando no puedas contar localmente, y no puedes contar localmente en Anthropic, cuyo tokenizer no está publicado. La documentación de Anthropic es cuidadosa sobre lo que te da: el recuento «es una estimación», y «puede incluir tokens añadidos automáticamente por Anthropic para optimizaciones del sistema», por los que «no se te factura».10

Nivel tres: leer usage en la respuesta. Esa es la verdad, y llega después de gastar el dinero. Precisamente por eso existen los dos primeros niveles: para decidir si enviar la solicitud, no para facturarla.

Las cosas por las que pagas y que nadie te muestra

Enlace a la sección: Las cosas por las que pagas y que nadie te muestra

Cuatro partidas que no aparecen como partidas.

El system prompt, pagado en cada llamada. El de arriba son 192 tokens con su sobrecarga de plantilla. En cuarenta llamadas son 7.680 tokens: el 5,6 % de toda la factura de esta conversación, por ocho líneas escritas una vez. También es el mejor candidato posible para cache, porque es estable y va primero.

Definiciones de herramientas. El nombre, la descripción y el esquema JSON de cada herramienta salen en cada solicitud, y los proveedores añaden andamiaje encima. Anthropic publica el número: activar herramientas añade de por sí un system prompt oculto de 496 tokens en Claude Sonnet 4.5 con tool_choice establecido en auto, o 588 con any o una herramienta con nombre.9 Eso es antes de tus propios esquemas. El Capítulo 18 construye el catálogo; el Capítulo 24 mide lo que consume.

Cada generación, incluidas las que descartas. Cinco regeneraciones cuestan cinco veces. El chat muestra una.

Pensamientos que no se te muestran. La facturación se basa en todos los thought tokens aunque solo se devuelva un resumen, y ninguna contabilidad tuya puede auditar ese número.

Una advertencia para cerrar, porque es la siguiente idea natural y la respuesta no es la obvia.

Una window de un millón de tokens no significa un millón de tokens utilizables. La precisión de retrieval se degrada con la posición: Liu et al. descubrieron que los modelos localizan información de forma fiable al principio y al final de un input largo, y con mucha menos fiabilidad en el medio.11 Una window más grande compra la capacidad de enviar más, no la certeza de ser leído.

Ese fenómeno se mide una vez en este curso —la tasa de retrieval en nueve posiciones del mismo prompt de 853 tokens— y pertenece al Capítulo 24, donde cambia lo que hace un agent. Se cita aquí porque cambia lo que deberías comprar: el token más barato es el que no enviaste.

Ahora puedes predecir cuánto costará una llamada antes de hacerla, leer cuánto costó después y distinguir entre ambas cosas. Eso cubre todo lo relacionado con la solicitud salvo la parte que todavía no has tocado: los controles.

El Capítulo 17 es sampling: temperature, top-p, top-k, las penalizaciones y el determinismo que no tienes. Empieza desmontando el error más extendido del campo: que temperature es un dial de creatividad. No lo es: temperature divide los logits del Capítulo 4 antes de la softmax, y subirla no vuelve imaginativo al modelo, sube la probabilidad de tokens que el propio modelo puntuó como peores. A partir de ahí, por qué el greedy decoding produce texto mediblemente peor que el sampling, por qué top-k y top-p fallan con formas opuestas de distribución, y el experimento que cierra el capítulo: veinte forward passes idénticos a temperature 0 vuelven idénticos bit a bit cuando el modelo se ejecuta solo, y poner el mismo prompt en un batch junto a las solicitudes de otra persona mueve el 97 % de sus logits.

No coinciden todos. La razón empieza con el recuadro de floating point del Capítulo 2.


Todos los precios, umbrales y multiplicadores de este capítulo se leyeron de las propias páginas de los proveedores el 6 de septiembre de 2026 y se indican con esa fecha porque cambiarán. El método importa más que los números: los cubos, la regla del prefijo y la aritmética de tramos se han mantenido estables durante dos años mientras que cada cifra dentro de ellos se ha movido.

La clase 2 de Stanford CS336, Resource accounting, es el tratamiento académico más cercano de este material y la siguiente lectura adecuada: hace la misma aritmética en el lado del entrenamiento que este capítulo hace en el lado de la inferencia. Los recuentos de tokens aquí se produjeron con js-tiktoken 1.0.21 usando los encodings o200k_base y cl100k_base, sobre una conversación de cuarenta turnos y 5.090 tokens; la sobrecarga de plantilla por mensaje es la aproximación convencional de cuatro más tres y se indica allí donde se incluye. Las cifras de cache, tramos y truncación son las reglas de precios documentadas aplicadas a esos recuentos de tokens medidos, no observaciones de respuestas API en vivo: no se hizo ninguna llamada de pago para producir este capítulo, que es también la razón honesta por la que las afirmaciones de latencia son cualitativas y las de coste no.

  1. Dao, T., Fu, D. Y., Ermon, S., Rudra, A. y Ré, C. FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. arXiv:2205.14135 (2022). Por qué el techo se movió sin que cambiara el coste asintótico.

  2. Chen, S., Wong, S., Chen, L. y Tian, Y. Extending Context Window of Large Language Models via Positional Interpolation. arXiv:2306.15595 (2023).

  3. Peng, B., Quesnelle, J., Fan, H. y Shippole, E. YaRN: Efficient Context Window Extension of Large Language Models. arXiv:2309.00071 (2023).

  4. Google, Thinking, ai.google.dev/gemini-api/docs/thinking, y Token counting, ai.google.dev/gemini-api/docs/tokens, ambas consultadas el 2026-09-06. «Pricing is based on the full thought tokens the model needs to generate, despite only the summary being output from the API.» El objeto de uso informa de total_input_tokens, total_output_tokens, total_thought_tokens, total_cached_tokens, total_tool_use_tokens y total_tokens: seis cubos, con pensamientos y uso de herramientas fuera del recuento de output. El nombre de campo anterior para la misma cantidad, que todavía devuelve la superficie generateContent, es thoughtsTokenCount, documentado en una tercera página, ai.google.dev/gemini-api/docs/generate-content/thinking.

  5. Anthropic, Prompt caching, docs.anthropic.com/en/docs/build-with-claude/prompt-caching, consultado el 2026-09-06. Fuente de la jerarquía de invalidación toolssystemmessages y su tabla; las longitudes mínimas cacheables por modelo; la identidad total_input_tokens = cache_read_input_tokens + cache_creation_input_tokens + input_tokens; y la vida útil por defecto de cinco minutos renovada sin coste en cada hit. 2

  6. OpenAI, Prompt caching, platform.openai.com/docs/guides/prompt-caching, consultado el 2026-09-06. Fuente de: la regla del prefijo renderizado completo; el prefijo mínimo cacheable (1.024 input tokens visibles en GPT-5.6 y posteriores, 2.048 en anteriores); los multiplicadores de escritura 1,25× y lectura 0,1×, y la ausencia de cargo de escritura en GPT-5.5 y anteriores; la vida útil de 30 minutos; los límites de cuatro escrituras por solicitud y cincuenta puntos de corte; la nota de afinidad de máquina y prompt_cache_key; los ejemplos calculados de punto de equilibrio 1,35×, 2,15× y 10×; y la afirmación de que summarisation, compaction o truncation reinician la reutilización de cache. 2

  7. OpenAI, Pricing (platform.openai.com/docs/pricing) y la página de modelo para gpt-5.6-terra, ambas consultadas el 2026-09-06. gpt-5.6-terra, tramo de servicio estándar, por millón de tokens: input $2.00, cached input $0.20, cache writes $2.50, output $12.00; long context input $4.00, cached $0.40, writes $5.00, output $18.00; «prompts with >272K input tokens are priced at 2x input and 1.5x output for the full request»; context window de 1.050.000 tokens con un máximo de 922.000 input tokens. La misma tabla lista gpt-6-astra a $10.00/$1.00/$12.50/$50.00 y gpt-5.6-luna a $0.20/$0.02/$0.25/$1.20. Todos los costes calculados de este capítulo usan las tarifas estándar de short context de gpt-5.6-terra.

  8. Google, Gemini Developer API pricing, ai.google.dev/gemini-api/docs/pricing, consultado el 2026-09-06. Gemini 2.5 Pro, por millón de tokens: input $1.25 para prompts de hasta 200K y $2.50 por encima; output $10.00 y $15.00, en ambos casos etiquetado «including thinking tokens»; context caching $0.125 y $0.25, más un cargo de almacenamiento de $4.50 por millón de tokens por hora. Gemini 3.1 Pro Preview usa el mismo umbral de 200K a $2.00/$4.00 de input y $12.00/$18.00 de output.

  9. Anthropic, Pricing, docs.anthropic.com/en/docs/about-claude/pricing, consultado el 2026-09-06. Por millón de tokens, base input / 5-minute cache write / 1-hour cache write / cache read / output: Claude Sonnet 4.5 $3 / $3.75 / $6 / $0.30 / $15; Claude Haiku 4.5 $1 / $1.25 / $2 / $0.10 / $5; Claude Opus 5 $5 / $6.25 / $10 / $0.50 / $25. Multiplicadores: 1,25× para la escritura de cinco minutos, 2× para la escritura de una hora, 0,1× para una lectura. También es la fuente de la afirmación de long-context («Claude 4.6 and later models... include the full 1M token context window at standard pricing»), los recuentos de tokens del system prompt de tool-use (496 tokens en Claude Sonnet 4.5 con tool_choice de auto o none, 588 con any o una herramienta con nombre), y la nota de que Claude 4.7 y posteriores usan un tokenizer nuevo que produce «approximately 30 % more tokens for the same text». 2 3

  10. Anthropic, Token counting, docs.anthropic.com/en/docs/build-with-claude/token-counting, consultado el 2026-09-06. El endpoint /v1/messages/count_tokens acepta los mismos inputs que un mensaje y devuelve un recuento de input tokens; la documentación indica que el recuento es una estimación, que puede incluir tokens que Anthropic añade para optimizaciones del sistema, y que esos no se facturan.

  11. Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F. y Liang, P. Lost in the Middle: How Language Models Use Long Contexts. arXiv:2307.03172 (2023). Citado aquí, medido en el Capítulo 24.

¿Listo para dejar que elija LIA?

Crea con todos los modelos de IA en un mismo sitio. Empieza gratis hoy.