Prompt caching: cómo reducir coste y latencia de LLM sin servir respuestas equivocadas

Prompt caching ahorra cuando reutilizas el mismo prefijo largo; no es una excusa para cachear respuestas de un agente. Esta guía separa la caché de proveedor de la semántica y fija límites de seguridad.

Compartir
Prompt caching: cómo reducir coste y latencia de LLM sin servir respuestas equivocadas

La keyword principal es prompt caching; la intención es técnica: un equipo que ya paga tokens y espera varios segundos quiere reutilizar instrucciones, schemas de tools o contexto estable sin bajar calidad ni confundirlo con una caché de respuestas.

OpenAI documenta un mínimo de prefijo visible cacheable de 1.024 tokens para GPT-5.6 y posteriores; modelos anteriores pueden exigir 2.048. Anthropic permite puntos de corte explícitos con cache_control. Las cifras son detalles de proveedor: la arquitectura que sobrevive es mantener lo compartido al principio y medir tokens cacheados en cada respuesta.

El orden de tu request decide el ahorro

Ordena por estabilidad, no por conveniencia del código: versión de sistema y política, definiciones de tools, ejemplos compartidos, corpus versionado y solo después identidad, permisos, pregunta, fecha, estado de conversación y resultados de tools. Si interpolas el email o un timestamp en la primera línea, conviertes todo lo que sigue en un prefijo distinto.

Versiona cada bloque estable. Un cambio deliberado en policy:v7 o tools:v12 debe invalidar la caché; un cambio accidental de espacios, orden de JSON o una descripción generada en caliente no. Serializa los schemas de forma canónica y prueba que dos requests que deberían compartir prefijo tienen el mismo hash antes de culpar al proveedor.

No alargues un prompt corto solo para superar un umbral. El coste de una primera escritura puede ser mayor que el input normal. Calcula el punto de equilibrio con tráfico real: longitud del prefijo, precio de write/read, solicitudes que lo reutilizan y caída de latencia. Cachear sin repetición es una optimización que paga el primer usuario y no cobra el segundo.

¿Te está sirviendo? Hay una dosis cada semana

Te resumo herramientas de IA para devs, agentes, MCP, seguridad y workflows en un email de 5 minutos. En español y sin ruido.

Suscribirme gratis
Diagrama conceptual que separa el prefijo estable de instrucciones y herramientas, la caché del proveedor, la petición dinámica y el modelo; una ruta inferior muestra una caché semántica protegida por identidad y TTL
El prefijo idéntico se reutiliza antes de generar. La caché semántica es otro sistema y necesita su propio ámbito, TTL y política.

Checklist

Implementación: prefijo estable con Responses API

Con OpenAI, la caché de prompt es automática en modelos compatibles cuando el comienzo coincide. prompt_cache_key no convierte un prompt diferente en idéntico: ayuda a agrupar tráfico parecido. Registra cached_tokens en uso y correlaciónalo con versión de prompt, modelo y ruta; no declares victoria solo porque añadiste un campo.

src/answer.ts
const stablePrefix = [{ role: "system", content: POLICY_V7 }, { role: "system", content: TOOL_SCHEMAS_V12 }]; const response = await client.responses.create({ model: "gpt-5.6", input: [...stablePrefix, { role: "user", content: "actor=" + actor.id + "; question=" + question }], prompt_cache_key: "support:" + POLICY_VERSION + ":" + TOOLS_VERSION, store: false }); metrics.observe("llm.cached_tokens", response.usage?.input_tokens_details?.cached_tokens ?? 0);

El actor va después del prefijo común porque es dinámico. Aun así, el backend debe autorizar RAG, tools y cualquier respuesta cacheada antes de construir el prompt. store: false tampoco sustituye revisar la política de retención de cada capacidad; la caché extendida puede tener requisitos incompatibles con Zero Data Retention.

Anthropic: breakpoints y TTL sin suposiciones

Anthropic permite marcar el final de un bloque reutilizable con cache_control. Sus docs ordenan el prefijo como tools, system y messages; cambiar cualquier bloque antes del breakpoint cambia el hash acumulado. Es útil cuando instrucciones y tools cambian a una frecuencia distinta del contexto RAG o del historial.

Puntos a revisar

Lo que conviene comprobar

El TTL normal es de cinco minutos y se refresca con el uso; el de una hora cuesta más al escribir. No elijas una hora porque parezca más rápida: ambos TTL mejoran el mismo prefix hit; la decisión es cuánto cuesta mantener caliente contenido que se reutiliza con huecos. Para tráfico paralelo, la entrada aparece después de que la primera respuesta empiece: pre-calentar sin medir puede solo adelantar gasto.

Caché semántica: otro producto, otra frontera

Una caché semántica embebe una pregunta y devuelve una respuesta anterior si supera un umbral de similitud. Sirve para una FAQ pública y estable donde dos formulaciones tienen la misma respuesta validada. Reduce llamadas completas, pero no reproduce el razonamiento ni las tools del request actual.

No la actives por defecto delante de un agente. LiteLLM advierte que está pensada para single-shot y que tráfico multi-turn o agentic puede reproducir respuestas obsoletas. Una respuesta a un pedido depende de identidad, permisos, hora y datos vivos aunque la frase sea muy similar a otra pregunta.

La clave de seguridad no puede ser solo el embedding. Incluye como mínimo tenant, usuario o grupo autorizado, versión de política, idioma, modelo, versión de base de conocimiento y clase de consulta. Aplica TTL pequeño e invalida al cambiar documentación, precio, permisos o resultado de una tool. Si no puedes explicar el scope de un hit, trátalo como miss.

Ejecuta un experimento por clase de tráfico, no un cambio global. Empieza con una ruta de alto volumen y prefijo largo; compara dos semanas con control. Después revisa una muestra humana de respuestas y casos de seguridad. Ahorrar tokens de una respuesta equivocada es una falsa economía.

Fallos comunes que revisaría en un PR

  • Añadir fecha, UUID de request, email o JSON no canónico antes del bloque común y esperar cache hits.
  • Contar cualquier descuento de proveedor como caché semántica o cualquier cache hit de prompt como una respuesta reutilizada.
  • Cachear outputs de tools, resultados de RAG con ACL o conversaciones enteras solo porque su embedding supera 0,8.
  • Compartir una bucket semántica por API key cuando varios usuarios usan esa key; la identidad debe entrar en el scope autenticado.
  • No versionar policy, schemas, modelo ni knowledge base; una entrada válida ayer no tiene por qué serlo después de un deploy.
  • Medir solo hit rate y no coste del write, P95, precisión, edad, invalidación, fugas y bypasses de cache.

Preguntas frecuentes

¿Qué es prompt caching?

Es la reutilización de un prefijo idéntico que el proveedor ya procesó. Reduce input repetido y latencia, pero el modelo recibe la pregunta actual y genera una respuesta nueva.

¿Prompt caching y caché semántica son lo mismo?

No. El primero reutiliza cómputo de un prompt idéntico; la segunda puede devolver una respuesta previa para una pregunta parecida. La segunda necesita una política de frescura, precisión y aislamiento mucho más estricta.

¿Qué debo poner al principio del prompt?

Instrucciones versionadas, schemas de tools, ejemplos y contexto que sea igual entre requests. Pon identidad, permisos, hora, pregunta, estado y outputs de tools después del prefijo estable.

¿Puedo usar caché semántica con agentes?

Por defecto no. Es más segura para rutas públicas y single-shot sin tools. Para tráfico agentic usa como mínimo exact-match con ámbito estricto o trata la llamada como un miss.

¿Cómo sé si prompt caching está funcionando?

Registra tokens cacheados, hit rate, coste efectivo y TTFT por versión de prompt y ruta. Un campo de configuración no es evidencia de ahorro.

¿Prompt caching es compatible con requisitos estrictos de datos?

Depende de proveedor, endpoint y retención elegida. Revisa los controles de datos: ciertas modalidades de caché extendida almacenan estado de aplicación y pueden no ser compatibles con Zero Data Retention.

Cómo desplegar prompt caching de forma segura

  1. Clasificar tráfico. Separa prompts repetidos de FAQs públicas, agentes con tools, RAG privado y conversaciones; no todos admiten la misma caché.
  2. Extraer el prefijo. Mueve instrucciones, schemas, ejemplos y contexto estable a bloques versionados y deterministas al inicio del request.
  3. Medir la base. Registra input tokens, coste y TTFT sin caché por ruta antes de cambiar nada.
  4. Activar el proveedor. Usa la caché de prefijo compatible, un key estable cuando aplique y conserva identidad, tiempo y consulta después del bloque común.
  5. Verificar el hit. Observa tokens cacheados y misses con dos requests idénticos y después con un cambio controlado de versión.
  6. Definir el scope semántico. Si hay cache de respuestas, restringe a rutas públicas single-shot, tenant autenticado, versión de policy y TTL corto.
  7. Bloquear agentes y datos vivos. Excluye tools, historial, RAG con ACL, operaciones y resultados dependientes de identidad salvo una política exacta y probada.
  8. Probar seguridad y calidad. Ejecuta casos parafraseados entre tenants, cambios de permisos, contenido caducado y rutas que deben hacer miss.
  9. Operar por evidencia. Monitoriza coste, P95, precisión, invalidaciones y denegaciones; desactiva una ruta si ahorra tokens pero empeora respuestas.

Fuentes y referencias

También te puede interesar

LiteLLM Proxy: gateway IA, costes y modelosMemoria de agentes de IA: guía de producciónObservabilidad OpenTelemetry para agentesRAG multi-tenant seguro: filtros y permisosOpenAI Responses API: function calling fiable

Recibe una lectura semanal de herramientas IA para devs

Cada semana te resumo herramientas de IA para devs, agentes, MCP, seguridad y workflows en un email de 5 minutos. En español y sin ruido.

Suscribirme gratis

Lo mejor de la IA para desarrolladores, cada martes

Newsletter en español, gratis. Las herramientas, modelos y trucos de IA para devs que de verdad importan — sin ruido.