Infraestructura de Caché de Prompts: Reduciendo Costos y Latencia en LLM
Actualizado el 11 de diciembre de 2025
Actualización de diciembre de 2025: El caché de prefijos de Anthropic ofrece una reducción del 90% en costos y del 85% en latencia para prompts largos. El caché automático de OpenAI está habilitado por defecto (50% de ahorro en costos). El 31% de las consultas a LLM muestran similitud semántica con solicitudes anteriores, lo que representa una ineficiencia masiva sin sistemas de caché.² Las lecturas de caché cuestan $0.30/M tokens frente a $3.00/M para tokens nuevos (Anthropic). La arquitectura de caché multinivel (semántico → prefijo → inferencia) maximiza los ahorros.
El caché de prompts de Anthropic reduce los costos hasta en un 90% y la latencia hasta en un 85% para prompts largos.¹ OpenAI logra una reducción del 50% en costos con el caché automático habilitado por defecto. Las investigaciones muestran que el 31% de las consultas a LLM exhiben similitud semántica con solicitudes anteriores, representando una ineficiencia masiva en implementaciones sin infraestructura de caché.² Las organizaciones que ejecutan aplicaciones de IA en producción dejan dinero sobre la mesa sin estrategias adecuadas de caché.
El caché de prompts opera en múltiples niveles: desde el caché de prefijos del lado del proveedor que reutiliza cálculos del caché KV, hasta el caché semántico a nivel de aplicación que devuelve respuestas anteriores para consultas similares. Comprender cada capa y cuándo implementarla ayuda a las organizaciones a optimizar tanto el costo como la latencia para sus patrones de carga de trabajo específicos.
Fundamentos del caché
Los costos de inferencia de LLM provienen de dos fuentes: procesar tokens de entrada y generar tokens de salida. Las estrategias de caché apuntan a ambos:
Caché de tokens de entrada (caché de prefijos)
Cada solicitud a un LLM procesa tokens de entrada a través del mecanismo de atención del modelo, generando pares clave-valor almacenados en el caché KV. Cuando múltiples solicitudes comparten prefijos idénticos (prompts del sistema, ejemplos few-shot o contexto de documentos), el cálculo del caché KV se repite innecesariamente.
Solución de caché de prefijos: Almacenar los valores KV calculados para prefijos comunes. Las solicitudes subsiguientes con prefijos coincidentes omiten el recálculo, comenzando desde el estado en caché.
Impacto en costos: - Anthropic: Las lecturas de caché cuestan $0.30/M tokens vs. $3.00/M para procesamiento nuevo (90% de ahorro) - OpenAI: 50% de descuento para tokens en caché - Google: Precios variables según la ventana de contexto
Impacto en latencia: Omitir el cálculo del prefijo reduce el tiempo hasta el primer token entre un 50-85% dependiendo de la longitud del prefijo.
Caché de salida (caché semántico)
Algunas solicitudes merecen respuestas idénticas: preguntas repetidas, consultas determinísticas o búsquedas que no requieren regeneración.
Solución de caché semántico: Almacenar las respuestas de salida indexadas por entradas semánticamente similares. Devolver respuestas en caché sin invocar al LLM para consultas coincidentes.
Impacto en costos: Las respuestas en caché eliminan las llamadas a la API por completo: 100% de ahorro en aciertos de caché.
Impacto en latencia: La respuesta se devuelve en milisegundos en lugar de segundos para la inferencia del LLM.
Jerarquía de caché
Los sistemas en producción típicamente implementan múltiples capas de caché:
Solicitud → Caché Semántico (100% ahorro) → Caché de Prefijos (50-90% ahorro) → Inferencia Completa
↓ ↓ ↓
Respuesta en caché Estado KV en caché Cálculo completo
Cada capa captura diferentes oportunidades de optimización basadas en patrones de similitud de solicitudes.
Caché de prompts a nivel de proveedor
Anthropic Claude
Anthropic ofrece el caché de prompts más configurable:³
Precios: - Escrituras en caché: 25% de prima sobre el precio base de entrada - Lecturas de caché: 90% de descuento (10% del precio base) - Punto de equilibrio: 2+ aciertos de caché por prefijo almacenado
Requisitos: - Mínimo 1,024 tokens por punto de control de caché - Hasta 4 puntos de control de caché por solicitud - Tiempo de vida del caché: 5 minutos desde el último acceso (extendido a 1 hora con aciertos regulares) - Hasta 5 turnos de conversación almacenables en caché
Implementación:
import anthropic
client = anthropic.Anthropic()
# Marcar contenido para caché con cache_control
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
system=[
{
"type": "text",
"text": "You are an expert assistant for our enterprise software...",
"cache_control": {"type": "ephemeral"} # Marcar para caché
}
],
messages=[{"role": "user", "content": "How do I configure user permissions?"}]
)
Mejores prácticas: - Colocar contenido estático (prompts del sistema, documentación) al inicio del prompt - Colocar contenido dinámico (entrada del usuario, conversación) al final - Usar puntos de control de caché en límites naturales - Monitorear las tasas de acierto de caché para verificar la optimización
OpenAI
OpenAI implementa caché automático sin cambios en el código:⁴
Precios: - Tokens en caché: 50% del precio base de entrada - Sin prima por escritura en caché
Requisitos: - Mínimo 1,024 tokens para elegibilidad de caché - Los aciertos de caché ocurren en incrementos de 128 tokens - Tiempo de vida del caché: 5-10 minutos de inactividad
Comportamiento automático: - Los prompts que exceden 1,024 tokens se almacenan automáticamente en caché - El sistema detecta prefijos coincidentes entre solicitudes - No se requieren cambios en la API
Monitoreo:
response = client.chat.completions.create(
model="gpt-4-turbo",
messages=[...],
)
# Verificar uso para aciertos de caché
print(f"Tokens en caché: {response.usage.prompt_tokens_details.cached_tokens}")
print(f"Total tokens de entrada: {response.usage.prompt_tokens}")
Google Gemini
Google proporciona caché de contexto para los modelos Gemini:⁵
Precios: - Variables según el tamaño del contexto en caché y la duración - Tarifas de almacenamiento para contenido en caché
Características: - Creación y gestión explícita de caché - Tiempo de vida configurable - Compartición de caché entre solicitudes
Implementación:
from google.generativeai import caching
# Crear contenido en caché
cache = caching.CachedContent.create(
model='models/gemini-1.5-pro-001',
display_name='product-documentation',
system_instruction="You are a product expert...",
contents=[product_docs],
ttl=datetime.timedelta(hours=1)
)
# Usar contenido en caché en solicitudes
model = genai.GenerativeModel.from_cached_content(cached_content=cache)
response = model.generate_content("How do I configure feature X?")
Amazon Bedrock
AWS ofrece caché de prompts en vista previa para modelos compatibles:⁶
Requisitos: - Claude 3.5 Sonnet requiere un mínimo de 1,024 tokens por punto de control - El segundo punto de control requiere 2,048 tokens
El patrón de implementación coincide con el enfoque cache_control de Anthropic dentro de la estructura de API de Bedrock.
Caché de prefijos en vLLM
La inferencia auto-hospedada con vLLM incluye caché automático de prefijos:⁷
Arquitectura
El Caché Automático de Prefijos (APC) de vLLM almacena bloques KV en una tabla hash, permitiendo la reutilización del caché sin estructuras de árbol:
Diseño clave: - Todos los bloques KV almacenados en el pool de bloques en la inicialización - Búsqueda basada en hash para coincidencia de prefijos - Operaciones O(1) para gestión de bloques - Eficiencia de memoria de PagedAttention mantenida
Configuración
from vllm import LLM
llm = LLM(
model="meta-llama/Llama-3.1-8B-Instruct",
enable_prefix_caching=True, # Habilitar APC
gpu_memory_utilization=0.90,
)
Impacto en el rendimiento
vLLM con PagedAttention demuestra un rendimiento 14-24x mayor que las implementaciones ingenuas.⁸ El caché de prefijos añade:
- 10x diferencia de costo entre tokens en caché y sin caché
- Reducción de latencia de un orden de magnitud para prefijos coincidentes
- Eficiencia de memoria a través de bloques KV compartidos
Consideraciones de seguridad
vLLM soporta aislamiento de caché para entornos compartidos:
# Salt de caché por solicitud previene acceso cruzado entre inquilinos
response = llm.generate(
prompt="...",
sampling_params=SamplingParams(...),
cache_salt="tenant-123" # Aislar caché por inquilino
)
La inyección de salt de caché en los hashes de bloques previene ataques de temporización donde los adversarios infieren contenido en caché a través de la observación de latencia.
Extensión LMCache
LMCache extiende vLLM con capacidades avanzadas de caché:⁹
Características: - Reutilización de caché KV entre instancias de motor - Almacenamiento multinivel (GPU → RAM CPU → disco) - Caché de contenido sin prefijo - Reducción de latencia de 3-10x en benchmarks
Arquitectura:
Motor vLLM → LMCache → VRAM GPU (caliente)
→ RAM CPU (templado)
→ Disco Local (frío)
Caché semántico
El caché semántico devuelve respuestas anteriores para consultas semánticamente similares (no solo idénticas):
GPTCache
GPTCache proporciona caché semántico de código abierto para aplicaciones LLM:¹⁰
Arquitectura:
Consulta → Embedding → Búsqueda Vectorial → Verificación de Similitud → Respuesta/Llamada API
↓ ↓ ↓
BERT/OpenAI Milvus/FAISS Umbral (0.8)
Componentes: - Adaptador LLM: Integración con varios proveedores de LLM - Generador de Embeddings: Vectorización de consultas - Almacén Vectorial: Búsqueda de similitud (Milvus, FAISS, Zilliz) - Gestor de Caché: Almacenamiento y recuperación - Evaluador de Similitud: Coincidencia basada en umbrales
Implementación:
from gptcache import cache
from gptcache.adapter import openai
# Inicializar caché semántico
cache.init(
pre_embedding_func=get_text_embedding,
data_manager=manager,
)
# Usar llamadas a OpenAI con caché
response = openai.ChatCompletion.create(
model='gpt-4',
messages=[{"role": "user", "content": "What is machine learning?"}]
)
# Consultas semánticamente similares ("Explain ML", "Define machine learning")
# devuelven respuesta en caché
Rendimiento
GPTCache logra ganancias de eficiencia significativas:¹¹
- Reducción de llamadas API: Hasta 68.8% en todas las categorías de consultas
- Tasas de acierto de caché: 61.6% a 68.8%
- Precisión: 97%+ tasa de aciertos positivos
- Reducción de latencia: 40-50% en aciertos de caché, hasta 100x para aciertos completos
Técnicas avanzadas
Umbrales adaptativos de VectorQ:¹²
Los umbrales de similitud estáticos (por ejemplo, 0.8) funcionan mal en consultas diversas. VectorQ aprende regiones de umbral específicas de embedding que se adaptan a la complejidad de la consulta:
- Consultas factuales simples: Umbrales más altos (coincidencia más estricta)
- Consultas abiertas: Umbrales más bajos (más reutilización)
- Consultas ambiguas: Ajuste dinámico
Detección de patrones SCALM:
SCALM mejora GPTCache a través de detección de patrones y análisis de frecuencia: - 63% de mejora en la tasa de aciertos de caché - 77% de reducción en uso de tokens - Identifica patrones de entrada de caché de alta frecuencia
Cuándo usar caché semántico
Buenos candidatos: - Consultas tipo FAQ con espacio de respuestas limitado - Consultas de búsqueda (información de productos, documentación) - Respuestas determinísticas (cálculos, formateo) - Aplicaciones de alto tráfico con repetición de consultas
Malos candidatos: - Generación creativa que requiere unicidad - Respuestas personalizadas (contexto específico del usuario) - Información sensible al tiempo - Patrones de consulta con baja repetición
Patrones de implementación
Aplicaciones de chat
Los sistemas de chat se benefician tanto del caché de prefijos como del semántico:
Caché de prompt del sistema:
# Prompt del sistema estático en caché al inicio de la solicitud
system_prompt = """
You are a customer support agent for Acme Corp...
[2000+ tokens of guidelines and knowledge]
"""
# Conversación dinámica agregada después del prefijo en caché
messages = [
{"role": "system", "content": system_prompt, "cache_control": {...}},
{"role": "user", "content": user_message}
]
Caché del historial de conversación: Anthropic soporta el almacenamiento en caché de hasta 5 turnos de conversación, reduciendo el costo para conversaciones de múltiples turnos.
Aplicaciones RAG
La generación aumentada por recuperación almacena en caché el contexto recuperado:
# Estructura de caché para RAG
cached_context = {
"system": system_prompt, # Siempre en caché
"documents": retrieved_chunks, # Caché por cluster de consultas
"examples": few_shot_examples # Estable entre solicitudes
}
# Solo la consulta del usuario varía
dynamic_content = {
"query": user_question
}
Caché de fragmentos de documentos: Cuando múltiples consultas recuperan los mismos documentos, el caché de prefijos elimina el procesamiento redundante del contexto compartido.
Flujos de trabajo agénticos
Los sistemas de agentes con llamadas a herramientas se benefician del caché de prefijos:
Prompt del sistema → Definiciones de herramientas → Historial de conversación → Consulta actual
(en caché) (en caché) (parcialmente en caché)
El contenido estable al inicio del prompt maximiza los aciertos de caché mientras el contenido dinámico permanece al final.
Métricas y monitoreo
Indicadores clave de rendimiento
Tasa de aciertos de caché:
Tasa de aciertos = Solicitudes servidas desde caché / Total de solicitudes
Objetivo: 60-80% para aplicaciones con patrones de consulta repetitivos.
Ahorro de costos:
Ahorros = (Costo sin caché - Costo con caché) / Costo sin caché
Mejora de latencia:
Mejora = (Latencia sin caché - Latencia con caché) / Latencia sin caché
Estrategias de monitoreo
Seguimiento a nivel de proveedor:
- Anthropic: Campos cache_creation_input_tokens y cache_read_input_tokens en respuesta
- OpenAI: Campo cached_tokens en detalles de uso
- Métricas personalizadas para caché semántico
Alertas: - Tasa de aciertos de caché cayendo por debajo del umbral - Tamaño de caché acercándose a límites - Latencia de caché excediendo umbrales
Consideraciones de seguridad
Aislamiento de caché
En entornos multi-inquilino: - Usar salts de caché específicos por inquilino - Implementar controles de acceso a nivel de caché - Auditar patrones de acceso al caché
Privacidad de datos
- Evitar almacenar en caché respuestas con PII
- Implementar políticas de retención de caché
- Considerar implicaciones de residencia de datos
Ataques de temporización
- El caché puede filtrar información a través de diferencias de temporización
- Implementar ruido en tiempos de respuesta para aplicaciones sensibles
- Monitorear patrones de acceso al caché inusuales
Conclusión
El caché de prompts representa una de las optimizaciones de mayor impacto disponibles para aplicaciones LLM en producción. La combinación de caché de prefijos a nivel de proveedor (50-90% de ahorro en costos) con caché semántico a nivel de aplicación (100% de ahorro en aciertos) puede reducir dramáticamente tanto los costos como la latencia.
Las organizaciones deben: 1. Habilitar el caché de prefijos del proveedor como línea base 2. Estructurar prompts con contenido estático al inicio 3. Evaluar el caché semántico para patrones de consulta repetitivos 4. Monitorear tasas de aciertos de caché y optimizar continuamente 5. Implementar medidas de seguridad apropiadas para entornos multi-inquilino
Con la infraestructura de caché adecuada, las aplicaciones de IA pueden escalar de manera rentable mientras mantienen tiempos de respuesta bajos para los usuarios finales.
Referencias
- Anthropic. "Prompt Caching with Claude." Documentación de Anthropic, 2024.
- Bang, Yejin, et al. "GPTCache: An Open-Source Semantic Cache for LLM Applications." arXiv preprint, 2023.
- Anthropic. "Prompt Caching (beta)." Documentación de API de Anthropic, 2024.
- OpenAI. "Prompt Caching." Documentación de API de OpenAI, 2024.
- Google. "Context Caching." Documentación de Google AI, 2024.
- Amazon Web Services. "Prompt Caching for Amazon Bedrock." Documentación de AWS, 2024.
- vLLM Project. "Automatic Prefix Caching." Documentación de vLLM, 2024.
- Kwon, Woosuk, et al. "Efficient Memory Management for Large Language Model Serving with PagedAttention." SOSP 2023.
- LMCache Project. "LMCache: Accelerating Long-Context LLM Inference." GitHub, 2024.
- Zilliz. "GPTCache: A Library for Creating Semantic Cache for LLM Queries." GitHub, 2023.
- Bang, Yejin, et al. "GPTCache: An Open-Source Semantic Cache for LLM Applications." arXiv:2308.04014, 2023.
- VectorQ Research. "Adaptive Threshold Learning for Semantic Caching." Technical Report, 2024.