Desarrollo IALLM Ops

Prompt Caching en 2026: Guía de Costo y Latencia

3 de septiembre de 2026
10 min de lectura
Capas de caché brillantes apiladas con rayos en un servidor
Compartir:

Si corrés agentes, pipelines RAG o conversaciones largas en producción, probablemente estés reenviando — y pagando de nuevo — el mismo system prompt, los schemas de herramientas y los documentos recuperados en cada llamada. El prompt caching resuelve justo eso: el proveedor guarda el prefijo estable de tu prompt y lo reutiliza en vez de reprocesarlo.

En esta guía te muestro cómo funciona el caching en 2026 en Anthropic, OpenAI y Gemini — con límites verificados, matemática real de precios y código que podés pegar en tu proyecto hoy.

1. El Problema: Pagás los Mismos Tokens Dos Veces

Pensá en un agente de código con un system prompt de 40k tokens más definiciones de herramientas, haciendo 10 turnos por sesión. Sin caché, cada turno reprocesa los 40k tokens a precio completo — 400k tokens de entrada facturados por una sesión. Con caché, el prefijo de 40k se escribe una vez y se lee a una fracción del precio en los 9 turnos siguientes, y el time-to-first-token baja porque el prefijo cacheado saltea el procesamiento.

El Default Caro

La mayoría de las apps en producción que audito reenvían system prompts y few-shots idénticos en cada request sin activar nunca el caché — en Anthropic eso significa pagar hasta 10x más de lo necesario en tokens repetidos, porque el caching de Claude es explícito y no hace nada hasta que lo marcás.

El caching no es memoización de respuestas: el modelo igual genera output fresco cada vez. Solo evita reprocesar el prefijo de entrada. Por eso es seguro para todo lo que tenga cabeza estable y cola cambiante — historial de chat, agentes con herramientas fijas, RAG con contexto reutilizado.

2. Conceptos Mínimos: Tres Proveedores, Tres Filosofías

Los tres labs venden la misma idea con distintos controles. Aprendé esta tabla una vez y cada ejemplo de código abajo va a tener sentido.

🟠

Anthropic (Claude) — Explícito

breakpoints cache_control · hasta 4 por request

Vos marcás qué se cachea con cache_control: { type: “ephemeral” } en bloques de system, messages o tools. Escribir cuesta 1.25x la entrada base (TTL 5 minutos) o 2x (TTL 1 hora); leer cuesta 0.1x. El largo mínimo del prefijo depende del modelo (1.024–4.096 tokens). Los breakpoints en sí son gratis.

🟢

OpenAI (GPT-5.6+) — Implícito o Explícito

prompt_cache_options mode/ttl · mín 1.024 tokens

En GPT-5.6 y posteriores, el caché está activo por default (breakpoint implícito al final del último mensaje elegible de usuario/tool) con mínimo de 1.024 tokens: escrituras 1.25x, lecturas 0.1x (cached_tokens / cache_write_tokens). Configurá prompt_cache_options { mode: 'implicit' | 'explicit', ttl: '30m' } (30m es el default y único valor), agregá prompt_cache_breakpoint { mode: 'explicit' } tras el contenido estable y reutilizá un prompt_cache_key estable. Pre-5.6 difiere: mínimo 2.048 tokens, escrituras gratis, redondeo a 128 tokens, solo intervalos implícitos, prompt_cache_retention (in_memory / 24h).

🔵

Google (Gemini) — Implícito + Explícito

implícito por default en Gemini 2.5+ · API explícita caches.create

El caching implícito no requiere setup en Gemini 2.5 y posteriores, con mínimos de 2.048 tokens (2.5 Flash/Pro) y 4.096 tokens (Gemini 3.x), y te devuelve el ahorro automáticamente. El context caching explícito da reuso garantizado con TTL que vos controlás, más costo de almacenamiento por hora por millón de tokens.

La Única Regla Detrás de Cada Hit

Los hits requieren match exacto del prefijo. Ordená cada prompt de estable a dinámico: schemas de herramientas, instrucciones del sistema, contexto RAG de larga vida — después el historial, y el mensaje fresco del usuario al final. Un solo byte dinámico arriba invalida todo lo de abajo.

3. Tutorial: Activá el Caché Paso a Paso

Tres setups, en orden de control. Elegí el proveedor que facturás y seguí sus pasos — la disciplina de orden es idéntica en todos.

Paso 1 — Anthropic: marcá el prefijo estable

Agregá cache_control a los bloques que casi no cambian. Dejá el mensaje fresco del usuario sin marcar y reutilizá el mismo prefijo exacto en la próxima llamada. Mirá usage para cache_creation_input_tokens en la primera y cache_read_input_tokens después.

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model=“claude-sonnet-4-5-20250929”,
    max_tokens=1024,
    system=[
        {
            “type”: “text”,
            “text”: SYSTEM_PROMPT,  # instrucciones largas y estables
            “cache_control”: {“type”: “ephemeral”},
        }
    ],
    messages=[{“role”: “user”, “content”: user_question}],
)

print(response.usage.cache_creation_input_tokens)
print(response.usage.cache_read_input_tokens)

Paso 2 — Anthropic: elegí el TTL a conciencia

El TTL default es 5 minutos. Para loops agénticos o conversaciones largas donde los follow-ups pueden tardar, poné ttl en “1h” — duplica el precio de escritura pero las lecturas siguen a 0.1x. Mezclá ambos TTLs solo con las entradas de 1 hora antes que las de 5 minutos.

system=[
    {
        “type”: “text”,
        “text”: SYSTEM_PROMPT,
        “cache_control”: {“type”: “ephemeral”, “ttl”: “1h”},
    }
]

# O caching automático: un solo marcador top-level,
# el breakpoint sigue al último bloque cacheable.
response = client.messages.create(
    model=“claude-sonnet-4-5-20250929”,
    max_tokens=1024,
    cache_control={“type”: “ephemeral”},
    system=[{“type”: “text”, “text”: SYSTEM_PROMPT}],
    messages=[{“role”: “user”, “content”: user_question}],
)

Paso 3 — OpenAI: elegí un modo y marcá un breakpoint

En GPT-5.6 y posteriores, dejá el modo implícito default para threads que solo agregan mensajes, o poné prompt_cache_options.mode en “explicit” y marcá el fin del contenido estable con prompt_cache_breakpoint para que el sufijo cambiante nunca se escriba a 1.25x. Reutilizá un prompt_cache_key estable, mantené el prefijo ≥ 1.024 tokens con TTL 30m (default, único valor), y después leé cached_tokens y cache_write_tokens. Pre-5.6: solo automático, mínimo 2.048 tokens, escrituras gratis, prompt_cache_retention en vez de prompt_cache_options.

from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model=“gpt-5.6”,
    prompt_cache_key=“my-app-v1:session-42”,
    prompt_cache_options={“mode”: “explicit”, “ttl”: “30m”},
    input=[
        {
            “role”: “developer”,
            “content”: [
                {
                    “type”: “input_text”,
                    “text”: LONG_SYSTEM_PROMPT,  # estable, >= 1.024 tokens
                    “prompt_cache_breakpoint”: {“mode”: “explicit”},
                }
            ],
        },
        {“role”: “user”, “content”: user_question},  # dinámico al final
    ],
)

print(response.usage.input_tokens_details.cached_tokens)
print(response.usage.input_tokens_details.cache_write_tokens)
# Pre-5.6: solo automático, mín 2.048 tokens, escrituras gratis,
# prompt_cache_retention (in_memory / 24h), redondeo a 128 tokens.

Paso 4 — Gemini: confiá en lo implícito, pasá a explícito

En Gemini 2.5+ hacé el mismo orden estable-primero y el caching implícito funciona solo — revisá usageMetadata para los tokens cacheados. Cuando necesites reuso garantizado de un corpus grande (docs, repo, video), creá un caché explícito con TTL y referenciá su nombre en llamadas siguientes.

from google import genai

client = genai.Client()

cache = client.caches.create(
    model=“gemini-2.5-flash”,
    config={
        “system_instruction”: LONG_SYSTEM_PROMPT,
        “contents”: [LARGE_DOCUMENT_CORPUS],
        “ttl”: “3600s”,
    },
)

response = client.models.generate_content(
    model=“gemini-2.5-flash”,
    contents=f“Pregunta: {user_question}”,
    config={“cached_content”: cache.name},
)

print(response.usage_metadata)

Cómo Se Ve lo Bueno

Un hit rate sano en producción es 60–90% de los tokens de entrada servidos desde caché. En Claude eso es ~90% off en esos tokens; en OpenAI y Gemini implícito, la tarifa descontada de cached-input. Si tu primera medición da 0 hits, la causa es casi siempre el orden o un prefijo bajo el mínimo — no el proveedor.

4. Errores Comunes Que Dejan tu Hit Rate en Cero

El caching falla en silencio: sin error, a precio completo. Estos son los cinco modos de fallo que más veo, y cada uno tiene un fix de una línea.

1. Contenido dinámico antes que el estable

Un timestamp, user ID o snippet RAG cambiante al tope del prompt cambia el hash del prefijo y cada request es un miss. Fix: mové todo lo variable después de los bloques cacheados.

2. Prefijo bajo el mínimo, marcado igual

Anthropic y Gemini ignoran las marcas en prefijos bajo el mínimo del modelo (1.024–4.096 tokens según modelo). Los prompts cortos no cachean nada — sin error, sin ahorro. Fix: marcá solo bloques que superen el umbral; verificalo con el contador de tokens.

3. Schemas de tools serializados en orden aleatorio

Iterar dicts o regenerar JSON con claves mezcladas produce un prefijo distinto a nivel byte en cada llamada. Fix: serializá las tools de forma determinística (claves ordenadas, orden fijo) para que el prefijo coincida byte por byte.

4. TTL más corto que los huecos de tu conversación

Un TTL de 5 minutos en un bot de soporte donde los usuarios responden a los 20 minutos hace que cada turno sea una escritura fresca. Fix: medí los gaps entre requests y usá el TTL de 1 hora (Claude) o caché explícito con TTL largo (Gemini) cuando los gaps superen minutos.

5. Conversaciones que crecen más que la ventana

En Claude, un solo breakpoint puede quedar fuera de la ventana de 20 bloques a medida que crece el historial, cortando los hits a mitad de sesión sin aviso. Fix: agregá un segundo breakpoint cerca de la cola que crece — uno para instrucciones estables, otro tras el historial reciente.

Regla de oro

Medí los hits antes de festejar el ahorro: logueá cache_creation_input_tokens y cache_read_input_tokens (Claude), cached_tokens (OpenAI) o usageMetadata (Gemini) en cada llamada. Una escritura se paga sola con un solo hit — pero un caché sin medición es solo una esperanza.

Conclusión

El prompt caching es la optimización con mejor ROI que la mayoría de las apps LLM nunca aplican: mismo modelo, misma calidad, hasta ~90% más barato en tokens repetidos y primeros tokens visiblemente más rápidos. Explícito en Claude, implícito o explícito en OpenAI GPT-5.6+ (escrituras 1.25x, lecturas 0.1x, TTL 30m), implícito o explícito en Gemini — pero la disciplina es una: prefijo estable primero, contenido dinámico al final, hits medidos.

Esta semana, elegí tu endpoint más caliente, reordená su prompt, activá el caché y compará un día de usage antes y después. Si construís agentes o RAG, seguí con mi guía de MCP y la de multi-agentes en producción — caché más contexto de tools limpio es donde vive el margen real.

Machete

Anthropic

  • • cache_control: ephemeral
  • • Escrituras 1.25x / 2x, lecturas 0.1x
  • • Mín 1.024–4.096 según modelo

OpenAI

  • • 5.6+: escrituras 1.25x, lecturas 0.1x
  • • mode implicit/explicit + ttl 30m
  • • Pre-5.6: mín 2.048, escrituras gratis, 24h retention

Gemini

  • • Implícito default en 2.5+
  • • Mín 2.048 (2.5) / 4.096 (3.x)
  • • Caché explícito + TTL + storage

Fuentes

Diego Rodriguez

Diego Rodriguez

Ingeniero Senior Full-Stack & AI

Diego tiene mas de 9 anos de experiencia construyendo aplicaciones potenciadas por IA de produccion, desde orquestacion de LLMs y pipelines RAG hasta deteccion de riesgos con ML y sistemas de trading algoritmico.

Conoce mas sobre Diego