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
- 1. Anthropic — Docs de prompt caching (breakpoints, TTLs, umbrales)
- 2. OpenAI — Guía de prompt caching (modo/ttl/breakpoint en GPT-5.6, path pre-5.6)
- 3. Google — Docs de context caching de Gemini (mínimos implícitos)
- 4. Google — Precios API Gemini (caché + storage)
- 5. Anthropic — Precios (multiplicadores de escritura/lectura)



