El prompt caching lleva un año siendo estándar en las APIs de los grandes modelos, pero la mayoría de integraciones lo activan sin cambiar nada más y luego se preguntan por qué el ahorro no aparece en la factura. El caching no es un flag que enciendes: es una forma de ordenar tus peticiones.
Cómo funciona por dentro
El proveedor cachea el prefijo de tokens que ya ha procesado. Si dos peticiones comparten los primeros N tokens exactos, la segunda reutiliza el trabajo de atención sobre ese prefijo y solo paga el sufijo nuevo. La palabra clave es exactos: un solo carácter distinto al principio invalida todo el cache aguas abajo.
El error que mata el hit rate
El patrón habitual es meter algo variable al inicio del prompt: un timestamp, el ID de la sesión, el nombre del usuario. Eso rompe el prefijo compartido y el cache nunca acierta.
La regla es simple: lo estable arriba, lo variable abajo.
[ system prompt fijo ] <- cacheable
[ herramientas / schema ] <- cacheable
[ documentos de contexto ] <- cacheable si no cambian
[ historial de conversación ] <- semi-estable
[ mensaje del usuario ] <- siempre nuevo, al final
Mídelo o no existe
Las APIs devuelven en la respuesta cuántos tokens salieron del cache y cuántos se procesaron de nuevo. Si no estás logueando esos campos, no sabes tu hit rate y estás optimizando a ciegas. Un dashboard mínimo con cache_read_tokens / total_input_tokens te dice en un día si tu estructura funciona.
Cuándo no vale la pena
El cache tiene un TTL corto (minutos). Si tus peticiones llegan espaciadas y no comparten prefijo real, escribir en cache cuesta más que leerlo y sales perdiendo. El caching brilla en cargas con mucho contexto repetido: agentes, RAG con documentos fijos, chats largos. Para llamadas sueltas y variadas, ni lo mires.
El ahorro está ahí, pero es tuyo solo si diseñas para él.