Cómo reducir el costo de tus llamadas a LLMs sin perder calidad

By Carlos Montiel | Especialista en IA Empresarial
Publicado: 2026-07-28 | Por: Carlos Montiel | Lectura: ~5 minutos

La mayoría de las facturas de IA infladas no vienen de usar un modelo caro — vienen de usar el modelo correcto de la forma incorrecta. Aquí está el checklist que uso antes de escalar cualquier integración a producción.

Empieza por medir, no por adivinar

Antes de optimizar nada, necesitas saber dónde se va el dinero. La mayoría de los equipos optimizan a ciegas: bajan a un modelo más barato, notan que la calidad cae, y vuelven al modelo caro sin entender qué pasó. El primer paso real es contar tokens antes de gastar, no después.

# Antes de mandar la request real, cuenta cuánto vas a pagar count = client.messages.count_tokens( model="claude-opus-4-8", system=system_prompt, messages=messages, ) estimated_cost = count.input_tokens * (5.00 / 1_000_000) # $5/1M en Opus 4.8

Con esto puedes construir un dashboard real de costo por request, por endpoint, por cliente. Sin esa visibilidad, cualquier "optimización" es un tiro a ciegas.

Escalona modelos por tarea, no por proyecto

El error más caro es usar el mismo modelo para todo. Un pipeline típico de producción tiene tareas de complejidad muy distinta: clasificar un ticket de soporte no es lo mismo que redactar un contrato. Los precios actuales por millón de tokens ilustran bien la brecha:

| Modelo | Input | Output | Uso típico | |---|---|---|---| | Claude Haiku 4.5 | $1.00 | $5.00 | Clasificación, extracción simple, routing | | Claude Sonnet 5 | $3.00* | $15.00* | Volumen de producción, agentes, coding | | Claude Opus 4.8 | $5.00 | $25.00 | Tareas de máxima complejidad, razonamiento largo |

*Sonnet 5 tiene precio introductorio de $2.00/$10.00 hasta el 31 de agosto de 2026.

La regla práctica: si el 80% de tu volumen son tareas de clasificación o extracción determinística, ese 80% no necesita el modelo más caro. Reserva el modelo grande para el 20% que realmente lo justifica — y mide, no asumas, cuál es cuál.

Prompt caching: la palanca de mayor impacto

Si tu aplicación reenvía el mismo system prompt, el mismo set de herramientas, o el mismo documento de contexto en cada llamada — y la mayoría lo hace — estás pagando precio completo por texto idéntico una y otra vez. El caching de prompts resuelve esto directamente: los tokens leídos desde caché cuestan aproximadamente 10% del precio normal.

response = client.messages.create( model="claude-opus-4-8", max_tokens=1024, system=[{ "type": "text", "text": documento_largo_de_contexto, # ej. 50KB de políticas internas "cache_control": {"type": "ephemeral"}, }], messages=[{"role": "user", "content": pregunta_del_usuario}], ) print(response.usage.cache_read_input_tokens) # pagado a ~10% print(response.usage.cache_creation_input_tokens) # pagado a ~125%

Le dedico un artículo completo a esta técnica más adelante porque el impacto suele ser el mayor de todos — pero la regla corta es: cualquier bloque de texto que se repita en más de dos requests consecutivas debe llevar `cache_control`.

Batch API para todo lo que no sea tiempo real

Si tu caso de uso no necesita respuesta instantánea — clasificación masiva de tickets históricos, generación de resúmenes nocturnos, procesamiento de un dataset — la Batch API cuesta 50% menos que las llamadas síncronas normales, sin cambio en la calidad del modelo.

batch = client.messages.batches.create(requests=[ { "custom_id": f"ticket-{i}", "params": { "model": "claude-haiku-4-5", "max_tokens": 50, "messages": [{"role": "user", "content": f"Clasifica: {texto}"}], }, } for i, texto in enumerate(tickets) ]) # La mayoría de los batches completan en menos de 1 hora

Combinar Batch API con Haiku para tareas de clasificación masiva puede reducir el costo de esa parte del pipeline en un orden de magnitud comparado con llamadas síncronas en el modelo top.

Controla el output, no solo el input

Es fácil obsesionarse con reducir tokens de entrada y olvidar que el output también se factura — y a un precio 5 veces mayor que el input en la mayoría de los modelos. Dos ajustes que bajan costo de salida sin degradar calidad:

- **Effort explícito.** El parámetro `effort` (`low`/`medium`/`high`/`xhigh`/`max`) controla cuánto "piensa" el modelo antes de responder. Para tareas rutinarias, `medium` o incluso `low` suele dar resultados equivalentes a `high` con una fracción del gasto en tokens de razonamiento. - **Pide formato exacto, no prosa.** Un output estructurado (`output_config.format` con JSON schema) evita que el modelo agregue explicaciones, preámbulos o texto de cortesía que nadie va a leer.

response = client.messages.create( model="claude-sonnet-5", max_tokens=1024, output_config={ "effort": "medium", "format": {"type": "json_schema", "schema": schema_de_salida}, }, messages=[{"role": "user", "content": prompt}], )

No trunques contexto — pero tampoco lo infles

Enviar de más también cuesta. Es común ver pipelines de RAG que meten 15 documentos "por si acaso" cuando el modelo solo necesita 3 para responder bien. Cada documento extra son tokens pagados que además diluyen la atención del modelo hacia lo relevante (el problema de "lost in the middle"). Antes de subir el límite de contexto recuperado, mide si realmente mejora la respuesta o solo infla la factura.

La combinación de estas seis técnicas — medir antes de optimizar, escalonar modelos, caching agresivo, batch para lo asíncrono, control de effort/formato, y RAG disciplinado — típicamente reduce el costo total entre 40% y 70% sin que el usuario final note ninguna diferencia en calidad.

Carlos Montiel
Arquitecto de Soluciones IA Empresarial
Especialista en LLMs, Agentes y Orquestación
guatemalia.com/#contacto · info@guatemalia.com

¿Necesitas implementar IA en tu empresa?

Carlos Montiel es arquitecto de soluciones IA empresarial. Implementa LLMs, Agentes, RAG y orquestadores en empresas de Guatemala y Latinoamérica. Contáctalo para una consultoría.

Contactar a Carlos Montiel

info@guatemalia.com