Phase 17 - Lesson 14
Prompt Caching and Semantic Caching Economics
Precios de referencia en abril de 2026. Los valores numéricos a continuación reflejan las tablas de tarifas de los proveedores capturadas en la publicación de esta lección; verifica la documentación oficial en los enlaces antes de utilizarlos en proyectos reales.
El almacenamiento en caché ocurre en dos capas. El almacenamiento en caché de prompt/prefijo L2 (a nivel de proveedor) reutiliza la atención KV para prefijos repetidos — la documentación de almacenamiento en caché de prompts de Anthropic indica una reducción de hasta el 90% en costos y del 85% en la latencia para prompts largos; para Claude 3.5 Sonnet, las lecturas de caché cuestan $0.30/M frente a $3.00/M para solicitudes originales (fresh) con un TTL de 5 minutos, habiendo una tarifa adicional de escritura (write premium) de 2x para la opción con TTL de 1 hora (docs.anthropic.com, 04/2026). El almacenamiento en caché de prompts de OpenAI se aplica automáticamente para prompts ≥1024 tokens y cobra por las entradas en caché con un descuento aproximado del 90% en relación con el procesamiento original (platform.openai.com, 04/2026); el valor exacto del token almacenado en caché depende de la tabla del modelo. El almacenamiento en caché semántico L1 (a nivel de aplicación) omite la llamada al LLM por completo al encontrar similitud de embeddings por encima de un umbral. La afirmación de "95% de precisión" de los proveedores se refiere a la corrección de la coincidencia, no a la tasa de aciertos de la caché (hit rate) — las tasas reales reportadas en producción varían del 10% (chats abiertos) al 70% (FAQs estructuradas); ningún proveedor publica una tasa de referencia oficial, por lo que debes tratar estos datos como telemetría de la comunidad y no como garantía. Principales trampas en producción: la paralelización anula los beneficios del almacenamiento en caché (N solicitudes paralelas realizadas antes del cierre de la primera escritura en caché pueden inflar los costos varias veces), y el contenido dinámico dentro del prefijo impide por completo los aciertos de caché (hits). ProjectDiscovery reportó un aumento del 7% al 74% en la tasa de aciertos (11/2025) al remover textos dinámicos del prefijo almacenable en caché.
Type: Learn Languages: Python (stdlib, toy two-layer cache simulator) Prerequisites: Phase 17 · 04 (vLLM Serving Internals), Phase 17 · 06 (SGLang RadixAttention) Time: ~60 minutos
Learning Objectives
- Distinguir el almacenamiento en caché de prompt/prefijo L2 (reutilización de KV en el proveedor) del almacenamiento en caché semántico L1 (desvío de la llamada al LLM para prompts similares).
- Explicar la marcación explícita
cache_controlde Anthropic y las dos opciones de TTL (5 minutos vs 1 hora) con sus respectivos multiplicadores de precio. - Calcular el ahorro mensual esperado en función de la tasa de aciertos (hit rate), la combinación de prompts/respuestas y el precio de los tokens.
- Identificar el antipatrón de paralelización que infla las facturas entre 5 y 10 veces y el antipatrón de contenido dinámico que destruye la tasa de aciertos.
El Problema
Agregas almacenamiento en caché de prompts a tu servicio de RAG, pero la factura sigue igual. Al medir la tasa de aciertos, descubres que es del 7%. Tus prompts parecen estáticos, pero no lo son — el prompt del sistema incluye la fecha actual formateada al minuto, un identificador de solicitud y una reordenación aleatoria de ejemplos para aumentar la diversidad. Con esto, cada solicitud realiza una nueva escritura en caché y obtiene cero lecturas.
En paralelo, tu agente ejecuta diez llamadas a herramientas de forma concurrente por pregunta del usuario. Las diez llamadas llegan al proveedor antes de que finalice la primera escritura en caché. Resultado: diez escrituras, cero lecturas. Tu factura llega a ser de 5 a 10 veces el valor estimado usando caché.
El almacenamiento en caché es un protocolo, no un simple parámetro de configuración. Son dos capas con dos modos de fallo completamente distintos.
El Concepto
L2 — almacenamiento en caché de prompt/prefijo en el proveedor
El proveedor almacena la atención KV de un prefijo almacenable en caché y la reutiliza en la solicitud siguiente que coincida exactamente con ese prefijo. Pagas el costo de escritura una sola vez, y las lecturas subsiguientes son casi gratuitas.
Anthropic (familia Claude 3.5 / 3.7 / 4): marcador explícito cache_control en la solicitud. Señalas qué bloques deben almacenarse en caché. TTL: de 5 minutos (la escritura cuesta 1.25x el precio base) o de 1 hora (la escritura cuesta 2x el precio base). Las lecturas de la caché cuestan $0.30/M en Claude 3.5 Sonnet frente a $3.00/M fresh — 10x más barato (docs.anthropic.com, a partir de 04/2026). Los valores varían por modelo (Opus/Haiku tienen precios separados); siempre consulta la página oficial de tarifas.
OpenAI: almacenamiento en caché automático para prompts ≥1024 tokens (platform.openai.com, 04/2026). Sin parámetros explícitos. Las entradas en caché cuestan cerca de 10 veces menos que las solicitudes normales en las tablas actuales de gpt-4o/gpt-5. Ni la documentación ni las notas de versión especifican una tasa de aciertos estándar; los reportes de la comunidad giran en torno al 30-60% con un diseño cuidadoso de prompts. Monitorea la métrica usage.cached_tokens para validar tus resultados.
Google (Gemini): almacenamiento en caché de contexto disponible a través de una API explícita; con contextos de 1 millón de tokens, el uso de caché se vuelve aún más ventajoso.
Auto-hospedado (vLLM, SGLang): la lección 06 de la Fase 17 aborda RadixAttention — el mismo patrón ejecutándose en tu propia infraestructura de hardware.
L1 — almacenamiento en caché semántico a nivel de aplicación
Antes incluso de realizar la llamada al LLM, se calcula el hash del prompt, se genera el embedding y se busca una solicitud similar en el almacenamiento en caché (similitud de coseno por encima de un umbral, típicamente 0.95+). Si hay acierto (hit), se devuelve la respuesta almacenada de inmediato. En caso de fallo (miss), se llama al LLM y se guarda el resultado en el almacenamiento en caché.
Soluciones de código abierto: Redis Vector Similarity, GPTCache, Qdrant. Comerciales: Portkey Cache, Helicone Cache.
Las afirmaciones de precisión de los proveedores indican la frecuencia con la que la respuesta almacenada proporcionada era semánticamente adecuada, no la frecuencia de aciertos. Tasas de aciertos observadas en producción:
- Conversación abierta (open-ended chat): 10-15%.
- FAQ estructurado / soporte: 40-70%.
- Preguntas sobre programación: 20-30% (pequena variación impide los aciertos).
- Agentes de voz que repiten prompts: 50-80% (gracias a conjuntos de normalización de voz fijos).
El antipatrón de paralelización
Tu agente realiza 10 llamadas a herramientas en paralelo. Las 10 utilizan el mismo prompt de sistema de 4K tokens. Las escritas de caché de Anthropic ocurren por solicitud; la primera escritura finaliza cerca de 300 ms después de que el proveedor lee el prompt. Dado que las solicitudes 2 a 10 llegan dentro de este mismo intervalo de milisegundos, todas encuentran fallos en el almacenamiento en caché (cache miss). Así, pagas 10 adicionales de escritura y obtienes 0 descuentos de lectura.
Solución: agrupar enviando la primera solicitud de forma secuencial — ejecuta la primera llamada sola y, tan pronto como la caché se haya llenado con la primera respuesta, dispara las solicitudes 2 a 10. Esto añade unos 300 ms de latencia solo en la primera llamada a herramienta, pero reduce la factura entre 5 y 10 veces.
El antipatrón de contenido dinámico
Tu prompt de sistema tiene la siguiente estructura:
You are a helpful assistant. The current time is 14:32:17.
User ID: abc123. Today is Tuesday...
Cada solicitud generada es única. Cada solicitud escribe. Cero aciertos.
Solución: mueve todo lo que sea estático al prefijo almacenable en caché; añade el contenido dinámico después del límite de la caché:
[cacheable]
You are a helpful assistant. [rules, examples, instructions]
[/cacheable]
[dynamic, not cached]
Current time: 14:32:17. User: abc123.
ProjectDiscovery subió su tasa de aciertos en caché del 7% al 74% adoptando este ajuste de prompt y detalló la estrategia en su blog.
Agrupamiento de procesamiento por lotes y caché para flujos de trabajo nocturnos
Las APIs de procesamiento por lotes (Batch APIs, abordadas en la Fase 17 · 15) otorgan un 50% de descuento para plazos de entrega de 24 horas. Al acumular el caché de entrada sobre esto, se puede obtener alrededor de 10 veces de descuento adicional. Clasificaciones nocturnas, etiquetado y generación de informes voluminosos pueden reducirse a aproximadamente el 10% del costo síncrono y sin caché al combinar ambos recursos.
Números que deberías recordar
Las tarifas de referencia se recopilaron en abril de 2026 a partir de la documentación de los respectivos proveedores y varían con el tiempo; vuelve a confirmar los precios vigentes antes de utilizarlos para modelado financiero.
- Lectura de caché en Anthropic: $0.30/M de tokens en Claude 3.5 Sonnet, unas 10 veces más barato que la lectura normal (docs.anthropic.com).
- Tarifa adicional de escritura (write premium) en Anthropic: 1.25x (TTL de 5 min) o 2x (TTL de 1 hora).
- Caché automático en OpenAI: aplicado a prompts con al menos 1024 tokens; la entrada en caché se tarifa con alrededor del 10% del costo normal de entrada en las tablas de precios vigentes (platform.openai.com).
- Tasa de aciertos de caché semántica (reportada por la comunidad): ~10% para conversación abierta; hasta ~70% para FAQs estructuradas. No es una especificación oficial registrada por los proveedores.
- Caso ProjectDiscovery: elevación del 7% al 74% de aciertos tras mover el contenido dinámico fuera del prefijo almacenable en caché (blog oficial, 11/2025).
- Antipatrón de paralelización: informes típicos de facturas infladas entre 5 y 10 veces cuando N llamadas paralelas encuentran fallas sucesivas de escritura de caché.
Pruébalo
code/main.py simula el comportamiento de las cachés L1 y L2 en flujos de trabajo variados. Presenta las tasas de aciertos, la factura consolidada y demuestra el impacto del costo de paralelización concurrente.
Envíalo a Producción
Esta lección produce outputs/skill-cache-auditor.md. A partir de un modelo de prompt y un volume de tráfico, analiza la viabilidad de almacenamiento en caché y orienta la reestructuración de las variables del sistema.
Ejercicios
- Ejecuta
code/main.py. Modifica la flag de paralelización. ¿Cuál es el impacto en la factura consolidada? - Tu prompt de sistema contiene un campo dinámico de fecha. Modifica la estructura del prompt moviendo ese campo y calcula la proyección matemática de aciertos antes/después.
- Calcula el punto de equilibrio para elegir entre un TTL de 1 hora (2x de escritura) versus un TTL de 5 minutos (1.25x de escritura) considerando la tasa de llegada de solicitudes de tu servicio.
- Un caché semántico con un umbral de 0.95 obtiene el 20% de aciertos. Al bajar el umbral a 0.85, la tasa sube al 50%, pero se comienzan a proporcionar respuestas incorrectas. Indica el umbral ideal con base en las premisas técnicas y justifica.
- Disparas 10 subconsultas de forma concurrente para responder a cada pregunta del usuario. Reestructura esta rutina buscando optimización de caché sin introducir latencia de extremo a extremo indeseada.
Términos Clave
| Término | Lo que la gente dice | Lo que realmente significa |
|---|---|---|
| Caché de prompt L2 | "caché de prefijo" | El proveedor almacena la atención KV de un prefijo repetido |
cache_control |
"marcador de caché de Anthropic" | Parámetro explícito utilizado para delimitar bloques que pueden entrar en caché |
| Adicional de escritura | "tarifa de escritura" | Costo superior pagado en la primera solicitud que genera la caché (1.25x o 2x) |
| Caché semántico L1 | "caché de embeddings" | Validación basada en hash y similitud de vector local antes de llamar al LLM |
| GPTCache | "biblioteca de caché de LLM" | Biblioteca popular de código abierto enfocada en caché L1 |
| Tasa de aciertos | "hits / total" | Proporción de solicitudes totales respondidas con base en datos de caché |
| Antipatrón de paralelización | "trampa de las N escrituras" | Fallo de caché simultáneo en N solicitudes paralelas que chegan antes de la primera escritura |
| Trampa de contenido dinámico | "time-in-prompt trap" | Bytes dinámicos (como la hora actual) integrados en el prefijo que rompen la coincidencia de caché |
| RadixAttention | "caché entre réplicas" | Implementación interna de caché de prefijos adoptada en el framework SGLang |
Lecturas Recomendadas
- Anthropic Prompt Caching — semántica oficial de
cache_controly reglas de TTL. - OpenAI Prompt Caching — funcionamiento y criterios de elegibilidad automática de la caché.
- TianPan — Semantic Caching for LLMs Production
- ProjectDiscovery — Cut LLM Costs 59% With Prompt Caching
- DigitalOcean / Anthropic — Prompt Caching