Prompt caching, model routing, parallel worktrees, Batch API y control de context window. De $2,400 a $680/mes sin pérdida de calidad.
Toyota no tenía mejor producto que Ford en los años 70. La diferencia fue el Sistema de Producción Toyota — eliminar el desperdicio (muda) en cada paso. Un agente sin optimizar tiene los mismos desperdicios: usa el modelo más caro para tareas triviales, no hace cache del contexto repetido, carga documentos enormes en cada sesión, procesa todo en serie cuando podría ser paralelo.
La analogía falla aquí: Toyota minimiza tiempo de ciclo. En agentes, el objetivo es maximizar costo/valor — no minimizar costo absoluto. Un Opus bien usado en una tarea crítica puede ser la inversión más rentable del día.
A Precios oficiales (platform.claude.com/docs/en/about-claude/pricing):
| Contenido | Tokens estimados | Costo (Sonnet) |
|---|---|---|
| 1,000 palabras en español | ~1,667 tokens | $0.005 (input) |
| Función Python de 50 líneas | ~600 tokens | $0.002 (input) |
| CLAUDE.md de 100 líneas | ~1,700 tokens | $0.005 (input) |
| Sesión de Claude Code activa (1h) | ~30,000 tokens | $0.09 (input) |
| Sistema multi-agente complejo | ~150,000 tokens | $0.45 (input) |
A Almacena bloques de prompt que se repiten entre llamadas. La primera vez paga 1.25× el precio normal (overhead de escritura). Cada lectura subsecuente: solo 10% del precio normal = 90% de descuento.
| Operación | Precio/1M tokens | vs. Sin caché |
|---|---|---|
| Sin caché (base) | $3.00 | — |
| Escritura de caché | $3.75 (1.25×) | +25% (overhead inicial) |
| Lectura de caché | $0.30 (0.1×) | -90% de ahorro |
Con 50,000 tokens en caché (Sonnet):
Sin caché: 50K × $3.00/1M = $0.150 por llamada
Con caché:
Escritura: 50K × $3.75/1M = $0.188 (primera vez)
Lectura: 50K × $0.30/1M = $0.015 (2da llamada en adelante)
Break-even: ~1.4 lecturas (desde la 2ª lectura hay ahorro neto)
Ahorro después de 10 lecturas: 90% por llamada
import anthropic
client = anthropic.Anthropic()
SYSTEM_PROMPT = """[...documentación del proyecto, 20K tokens...]"""
# Primera llamada — escribe el cache
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
system=[{
"type": "text",
"text": SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"} # ← activa caching
}],
messages=[{"role": "user", "content": "Revisa el PR #127"}]
)
# Segunda+ llamadas — 90% de descuento en el system prompt
print(f"Cache write: {response.usage.cache_creation_input_tokens}")
# → siguientes llamadas leerán del cache automáticamente
Sistema de análisis de incidentes con 90K tokens de contexto de infraestructura (siempre el mismo). Sin caching: $0.27 por RCA. Con caching: $0.027. Con 500 RCAs/mes → $1,458/año en ahorro solo del contexto.
Asistente de código con 50K tokens de contexto de codebase repetido en cada solicitud. 1,000 solicitudes/día. Sin caché: $150/día. Con caché: $15/día (primeras 10% escriben, 90% leen). Ahorro anual: $49,275 de un solo endpoint.
A El Message Batches API procesa solicitudes de forma asíncrona (resultados en hasta 24 horas), con descuento fijo del 50% en todos los tokens.
| Modelo | Input (tiempo real) | Input (batch) | Output (batch) |
|---|---|---|---|
| Haiku 4.5 | $1.00 | $0.50 | $2.50 |
| Sonnet 4.6 | $3.00 | $1.50 | $7.50 |
| Opus 4.6 | $5.00 | $2.50 | $12.50 |
| Caso de uso | Usa Batch | Razón |
|---|---|---|
| Pipeline de documentos (contratos, facturas) | ✓ Sí | Alta latencia aceptable, alto volumen |
| Enriquecimiento masivo de datos | ✓ Sí | Miles de registros, no urgente |
| Jobs analíticos nocturnos | ✓ Sí | El horario es el punto — ya es async |
| Evaluaciones offline de modelos | ✓ Sí | Benchmarks y evals no son urgentes |
| Chatbot interactivo en tiempo real | ✗ No | El usuario espera respuesta inmediata |
| Debug de bugs en producción | ✗ No | Urgencia alta — 24h inaceptable |
import anthropic
client = anthropic.Anthropic()
# Preparar un batch de documentos a procesar
requests = []
for i, documento in enumerate(lista_documentos):
requests.append({
"custom_id": f"doc-{i}",
"params": {
"model": "claude-sonnet-4-6",
"max_tokens": 500,
"messages": [{
"role": "user",
"content": f"Extrae campos clave: {documento['contenido']}"
}]
}
})
# Crear el batch
batch = client.messages.batches.create(requests=requests)
print(f"Batch ID: {batch.id}") # guardar para recuperar después
# Recuperar resultados (en otro script, horas después)
batch = client.messages.batches.retrieve(batch_id)
if batch.processing_status == "ended":
for result in client.messages.batches.results(batch_id):
print(result.result.message.content[0].text)
Ejemplo de ahorro: 500 documentos × 3K tokens de input × Sonnet:
Tiempo real: 500 × $0.009 = $4.50 → Batch: $2.25 · Ahorro: $2.25 solo en input
B Usar siempre el modelo más caro (Opus) o siempre el más barato (Haiku) es subóptimo. El routing inteligente puede reducir costos 50-80% sin pérdida de calidad.
vs. todo Sonnet → ahorro del 45-55% en costo total mensual
import anthropic
client = anthropic.Anthropic()
def clasificar_complejidad(tarea: str) -> str:
"""Usa Haiku (más barato) para decidir qué modelo usar — meta-optimización"""
response = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=10, # solo necesita responder: baja, media, alta
messages=[{"role": "user", "content": f"""
Clasifica la complejidad de esta tarea de software.
Tarea: {tarea}
Responde SOLO: baja, media, o alta
baja → clasificación, formateo, summary simple, transformación mecánica
media → código producción, revisión PR, debug de función individual
alta → arquitectura sistemas, análisis seguridad completo, diseño multi-componente
"""}]
)
return response.content[0].text.strip().lower()
def ejecutar_tarea(tarea: str, contenido: str) -> str:
complejidad = clasificar_complejidad(tarea)
modelos = {
"baja": "claude-haiku-4-5-20251001",
"media": "claude-sonnet-4-6",
"alta": "claude-opus-4-6",
}
return client.messages.create(
model=modelos[complejidad],
max_tokens=4096,
messages=[{"role": "user", "content": f"{tarea}\n\n{contenido}"}]
)
| Tipo de tarea | Modelo | Razón |
|---|---|---|
| Clasificación, triage, routing | Haiku | Decisión binaria, no requiere razonamiento profundo |
| Formateo, transformación de datos | Haiku | Tarea mecánica, predecible, alta repetición |
| Código de producción general | Sonnet | Balance calidad/costo óptimo |
| Revisión de código y PRs | Sonnet | Razonamiento moderado sobre código |
| Arquitectura de sistemas | Opus | Multi-step reasoning, trade-offs complejos |
| Análisis de seguridad crítico | Opus | Alta precisión requerida, costo justificado |
A Los tokens de input se cobran en cada llamada. Una sesión con 80K tokens de historial paga esos 80K tokens en cada herramienta que se usa.
Sin /compact — sesión de 8 horas: Herramienta 1: 5K tokens de historial × $3/1M = $0.015 Herramienta 10: 50K tokens de historial × $3/1M = $0.150 Herramienta 20: 100K tokens de historial × $3/1M = $0.300 Herramienta 50: 200K tokens de historial × $3/1M = $0.600 Total acumulado (estimado): ~$8.50 Con /compact (2 veces en la sesión): Comprime historial de 80K → resumen denso de 5K tokens Las 50 herramientas promedian 15K tokens de contexto Total acumulado (estimado): ~$1.80 Ahorro: ~79% del gasto en tokens de input
| Tamaño de contexto | Precio input | Cuándo usar |
|---|---|---|
| < 200K tokens | Precio estándar | Mayoría de casos — ideal |
| 200K – 1M tokens | 2× el precio estándar | Análisis de codebase completo, documentos muy largos |
| Situación | Acción recomendada |
|---|---|
| Sesión lleva 2+ horas de trabajo continuo | /compact obligatorio |
| Claude avisa que el contexto es largo | /compact inmediatamente |
| Nueva feature independiente de lo que se trabajó | Nueva sesión — CLAUDE.md da el contexto |
| Bug en módulo diferente al actual | Sesión enfocada en ese módulo (worktree si necesario) |
| Pipeline multi-paso con pasos independientes | Worktrees paralelos, una sesión por paso |
# Regla: 1 sesión = 1 objetivo claro # MAL: "Hoy voy a trabajar en el proyecto" → historial mezcla todo claude # sesión abierta, trabaja en A, B, C, D entremezclados # BIEN: Una sesión por objetivo claude --task "Implementar endpoint /users/profile" # enfocado # → contexto pequeño, barato, eficiente
B Branch8 atribuye el 35% de su reducción de costos a la disciplina de session focus: mantener conversaciones estrechas (1 tarea por sesión) redujo el costo promedio por sesión a ~33% del de sesiones abiertas.
A Git worktrees permiten múltiples ramas en directorios físicos separados, simultáneamente. Claude Code añadió soporte de primera clase con el flag -w en late 2025.
# Crear worktrees git worktree add ../proyecto-feature-auth feature/auth git worktree add ../proyecto-feature-pagos feature/pagos git worktree add ../proyecto-hotfix-prod hotfix/prod-bug # Lanzar Claude Code en paralelo (en terminales separadas) cd ../proyecto-feature-auth && claude cd ../proyecto-feature-pagos && claude cd ../proyecto-hotfix-prod && claude # O directamente con el flag -w de Claude Code claude -w feature/nueva-api # crea worktree + abre sesión
Sin worktrees (secuencial): Tarea A: 2 horas Tarea B: 2 horas (espera a que A termine) Tarea C: 2 horas (espera a que B termine) Total: 6 horas Con worktrees (paralelo): Tarea A: 2 horas ─┐ Tarea B: 2 horas ├── ejecutadas simultáneamente Tarea C: 2 horas ─┘ Total: ~2.5 horas (incluyendo merge) Ganancia: 3× en throughput de tareas independientes
| Condición | Usa worktrees |
|---|---|
| Tarea toca más de 3 archivos | ✓ Sí, siempre |
| Dos tareas independientes pendientes | ✓ Sí |
| Bug urgente mientras hay feature en progreso | ✓ Sí — hotfix no contamina feature |
| Tests que tardan 5+ minutos | ✓ Paralelizar con otra tarea |
| Cambio de 1-2 archivos simples | — No necesario |
C Regla de thumb de la comunidad: "Scope worktrees por módulo, no por tarea. Cualquier tarea que toca más de 3 archivos merece su propio worktree." — Dogukan Uraz Tuna (Medium, 2025)
Combinadas: 80-90% de reducción total del gasto API 🎯