El almacenamiento en caché de prompts es la palanca individual más importante en la factura de un agente y la que más probablemente no funciona sin que nadie lo advierta. Si se marca correctamente, la parte repetida de tu solicitud se factura a una décima parte de la tarifa de entrada. Si se marca incorrectamente —o se dirige a través de algo que reescribe tu prefijo—, se factura por encima de la tarifa normal, porque pagas por escribir entradas de caché que nadie lee.
El mecanismo está bien documentado en otros lugares. Lo que no está documentado en ninguna parte es qué cambia cuando la solicitud pasa por una pasarela, que es la situación de la mayoría de las personas que leen esto. Ambas cosas se explican a continuación.
El mecanismo, brevemente
Marcas un prefijo estable —un prompt del sistema, un esquema de herramientas o un documento— y el proveedor almacena su forma procesada. La siguiente solicitud cuyo prefijo coincida exactamente lo lee en lugar de volver a procesarlo.
{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"system": [
{
"type": "text",
"text": "<your long, stable instructions>",
"cache_control": { "type": "ephemeral" }
}
],
"messages": [{ "role": "user", "content": "..." }]
}Dos propiedades hacen todo el trabajo y causan todos los problemas. La coincidencia se realiza sobre un prefijo, por lo que cualquier cambio al principio invalida todo lo que viene después. Además, una entrada tiene una vida útil, por lo que una conversación con pausas largas entre turnos se reconstruye en lugar de leerse.
Cuánto cuesta
| Modelo | Entrada, por 1M | Lectura de caché | Escritura de caché en Kunavo |
|---|---|---|---|
| Claude Haiku 4.5 | $0,70 | $0,07 | $0,88 |
| Claude Sonnet 5 | $1,40 | $0,14 | $1,75 |
| Claude Opus 5 | $3,50 | $0,35 | $4,38 |
La tercera columna muestra la proporción estándar: una lectura cuesta una décima parte de la entrada. La cuarta también es estándar: una escritura de caché cuesta 1,25× la entrada, el multiplicador que Anthropic indica para una entrada de cinco minutos; y, como ambas proporciones se aplican al precio de entrada de Kunavo, cada una mantiene el mismo descuento respecto a la tarifa publicada de Anthropic que la entrada del modelo. Donde Kunavo se aparta de Anthropic es en la entrada de una hora: Anthropic indica esa escritura a 2× la entrada, y Kunavo la factura al mismo 1,25×. Esto importa específicamente para las cargas de trabajo que se reconstruyen con frecuencia —agentes de larga duración, conversaciones lentas o cualquier situación en la que cambie el prefijo—, porque son las cargas donde las escrituras, no las lecturas, dominan la línea de caché de la factura.
Ambas cifras se leen del catálogo en tiempo de renderizado, la misma fuente que consultan la tabla de precios y la calculadora de Claude; no hay tarifas introducidas manualmente en esta página.
Lectura del objeto de uso
No deduzcas el comportamiento de la caché a partir de la factura; cada respuesta te lo indica directamente, y los tres recuentos de tokens constituyen todo el diagnóstico.
// The four numbers that tell you whether caching is working.
// Read them from every response before you tune anything.
"usage": {
"input_tokens": 312, // billed at the input rate
"cache_creation_input_tokens": 0, // billed at the write rate
"cache_read_input_tokens": 24106, // billed at the read rate
"output_tokens": 890
}
// A healthy cached agent turn looks like the above: a small
// input_tokens, a large cache_read, and a zero creation.
// If cache_creation is large on EVERY turn, the cache is being
// rebuilt each time and you are paying more, not less.Por qué las tasas de aciertos disminuyen detrás de una pasarela
Una caché vive en el upstream que la creó, y la coincidencia del prefijo es exacta. Juntos, esos dos hechos producen tres modos de fallo que nunca ocurren cuando llamas directamente a un único proveedor:
El enrutamiento cambió. Si las solicitudes consecutivas llegan a upstreams distintos, la segunda no encuentra ninguna caché; la entrada que escribió la primera no es visible desde donde se ejecutó la segunda. Esto es invisible en tus propios registros y solo aparece como un recuento de creación de caché que debería haber sido una lectura. Es la causa más común y por eso una pasarela que redirige libremente entre upstreams puede ser más barata por token y más cara por sesión.
Se inyectó algo delante de tu prefijo. Una capa que reescribe el mensaje del sistema, normaliza las definiciones de herramientas o reordena campos produce un prefijo diferente, y un prefijo diferente es un fallo de caché. No se produce ningún error; simplemente aumenta la factura.
La pausa duró más que la entrada. Un agente que tarda varios minutos en pensar entre turnos puede reconstruirlo todo cada vez. Esto es una propiedad de tu carga de trabajo, no de la pasarela, pero interactúa mal con lo primero: una reconstrucción también es una oportunidad de redireccionamiento.
El diagnóstico de los tres casos es el mismo: observa cache_creation_input_tokens a lo largo de una sesión. Un valor grande y plano significa que estás reconstruyendo. Un valor grande una vez y cero después significa que funciona. En Kunavo, el coste a nivel de solicitud y los recuentos de tokens en caché aparecen en la vista de uso, y la referencia sobre caché contiene los detalles a nivel de endpoint.
Qué hacer al respecto
Mantén el prefijo almacenado en caché realmente estable: coloca todo lo que cambie por solicitud después del bloque marcado, nunca antes. Agrupa los turnos de un agente más cerca unos de otros cuando puedas, ya que el tiempo de inactividad es el enemigo de una entrada de corta duración. Y mide una sesión de extremo a extremo en lugar de una solicitud: la caché es una propiedad de una secuencia, y una estimación por solicitud no puede detectarla. La calculadora de costes de tokens de Claude tiene un campo de tokens en caché precisamente por este motivo: configúralo con la fracción de tu prompt que realmente se repite y la cifra mensual dejará de ser ficticia.
Preguntas frecuentes
¿Cómo funciona el almacenamiento en caché de prompts de Claude?
Marcas un prefijo estable de la solicitud —normalmente el prompt del sistema, las definiciones de herramientas o un documento largo— con cache_control, y el proveedor almacena la forma procesada de esos tokens. En la siguiente solicitud cuyo prefijo coincida exactamente, esos tokens se sirven desde la caché y se facturan a una fracción de la tarifa de entrada en lugar de volver a procesarse. La coincidencia se realiza sobre un prefijo exacto, por lo que cualquier cambio al principio de la solicitud invalida todo lo que viene después.
¿Cuánto ahorra el almacenamiento en caché de prompts de Claude?
Una lectura desde la caché se factura a una décima parte de la tarifa de entrada del modelo. En Claude Sonnet 5, eso es $0,14 en lugar de $1,40 por 1M de tokens; en Claude Opus 5, $0,35 en lugar de $3,50; en Claude Haiku 4.5, $0,07 en lugar de $0,70. El ahorro depende por completo de qué proporción de tu entrada se repite: un producto de chat donde cada prompt es diferente no ahorra nada, mientras que un agente de programación que vuelve a enviar un mapa del repositorio de 24.000 tokens en cada turno convierte la mayor parte de su factura de entrada en una décima parte de sí misma.
¿Kunavo cobra un recargo por escribir en la caché?
Sí: el mismo 1,25× que cobra Anthropic, aplicado al descuento del modelo. La propia API de Anthropic fija un precio superior a la tarifa de entrada normal para escribir una entrada de caché, porque la escritura cuesta más de procesar que un token ordinario: 1,25× la entrada para una entrada de cinco minutos y 2× para una de una hora. Kunavo factura cada escritura de caché a 1,25× la tarifa de entrada del propio modelo, incluida la de una hora, por lo que una escritura mantiene el mismo descuento respecto a la tarifa publicada de Anthropic que la entrada del modelo: en Claude Sonnet 5, $1,75 por 1M de tokens de escritura frente a $1,40 para la entrada normal. Esto está configurado en un único lugar del código de facturación como una proporción de escritura de 1.25 para los modelos de Claude, y las calculadoras de este sitio leen la tarifa resultante de esa misma función en lugar de repetirla, por lo que la cifra que muestran no puede desviarse de lo que se cobra.
¿Por qué mi tasa de aciertos de caché es baja mediante una pasarela?
Porque una caché está vinculada al upstream que la contiene, y la coincidencia de prefijos es exacta. En una configuración con pasarela, tres cosas la rompen que no la romperían frente a un único proveedor directamente. Una solicitud dirigida a un upstream distinto del anterior no encuentra allí ninguna caché, porque la caché no se comparte entre ellos. Cualquier elemento insertado delante de tu prefijo —un mensaje del sistema reescrito o una lista de herramientas reordenada— produce un prefijo diferente y, por tanto, un fallo de caché. Además, una pausa superior a la vida útil de la entrada hace que caduque, por lo que un agente que avanza lentamente la reconstruye en cada turno. El objeto de uso indica cuál es la causa: un valor alto de cache_creation_input_tokens en cada solicitud significa reconstrucción, no almacenamiento en caché.
¿Cómo sé si el almacenamiento en caché de prompts funciona realmente?
Lee el objeto de uso en lugar de la factura. Cada respuesta informa por separado de input_tokens, cache_creation_input_tokens y cache_read_input_tokens. Una caché funcional muestra un recuento pequeño de entrada, un recuento grande de lecturas desde caché y un recuento de creación igual a cero u ocasional. Una caché que se reconstruye muestra un recuento grande de creación en cada turno, lo que cuesta más que no usar caché, porque pagas por escribir entradas que nadie lee.
¿Cuál es el tamaño mínimo de una caché de prompts de Claude?
Existe un límite inferior por debajo del cual un prefijo no se puede almacenar en caché, y difiere según el nivel del modelo, por lo que un prompt del sistema corto puede no almacenarse nunca, aunque lo marques correctamente. La prueba práctica es empírica, no documental: marca el prefijo, envía dos solicitudes idénticas y comprueba si la segunda informa de un valor de cache_read_input_tokens superior a cero. Si no lo hace, el prefijo está por debajo del límite o no es idéntico byte a byte.
¿El almacenamiento en caché de prompts cambia lo que devuelve el modelo?
No. El almacenamiento en caché es una optimización de facturación y latencia aplicada al procesamiento del prefijo, no un cambio en lo que el modelo ve o produce. La misma solicitud con y sin cache_control devuelve el mismo tipo de respuesta; lo que cambia es el coste del prefijo y la velocidad a la que llega el primer token.