Consultoría IA para empresas — 100% remoto, trabajamos con tu equipo in-house

javi@javadex.es — Diagnóstico gratuito 30 min
Despliega tu proyecto IA hoy — VPS desde 4,99€/mes con SSD NVMeVer Hostinger
Inicio/Blog/Optimizar Costos de Tokens en LLMs: Guía Completa [2026]
Volver al Blog
Tutoriales IA2 de febrero de 202616 min

Optimizar Costos de Tokens en LLMs: Guía Completa [2026]

Reduce hasta 90% el costo de tokens en GPT-4, Claude y otros LLMs. Técnicas de optimización, caching, y mejores prácticas.

Cómo Optimizar Costos de Tokens en LLMs: Guía Definitiva [2026]

TLDR: Los principales consumidores de tokens son: contexto acumulado (40-50%), outputs de herramientas (20-30%), y system prompts repetidos (10-15%). Estrategias clave: usar el modelo correcto para cada tarea, implementar prompt caching, limitar contexto, y hacer batching. Reducción típica: 60-80% de costos.


¿Por qué tus costos de IA son tan altos?

El problema

Muchos desarrolladores ven facturas de $100-500/mes en APIs de IA cuando podrían pagar $20-50 por el mismo resultado.

Causas comunes:

  • Enviar todo el historial de conversación en cada request
  • Usar GPT-4 para tareas que GPT-4o-mini haría igual de bien
  • No implementar caching de prompts repetidos
  • Generar outputs más largos de lo necesario

Anatomía de un token

code
1"Hola, ¿cómo estás hoy?" = 7 tokens (español)
2"Hello, how are you today?" = 6 tokens (inglés)
3 
41000 tokens ≈ 750 palabras en español
51000 tokens ≈ 4-5 párrafos de texto

Precios actuales (referencia)

ModeloInput/1MOutput/1M
GPT-4o$2.50$10
GPT-4o-mini$0.15$0.60
Claude 3.5 Sonnet$3$15
Claude 3 Haiku$0.25$1.25
Gemini 1.5 Flash$0.075$0.30
Observación clave: Los outputs cuestan 4x más que los inputs. Optimizar outputs tiene mayor impacto.


Los 6 principales consumidores de tokens

1. Contexto acumulado (40-50% del costo)

El problema:

python
1# Cada mensaje añade al historial
2conversation = []
3for i in range(50): # 50 turnos de conversación
4 conversation.append({"role": "user", "content": user_msg})
5 conversation.append({"role": "assistant", "content": ai_response})
6 # El turno 50 envía TODO el historial: ~100K tokens

Costo por turno:

  • Turno 1: 500 tokens
  • Turno 10: 5,000 tokens
  • Turno 25: 25,000 tokens
  • Turno 50: 50,000 tokens (¡100x más caro!)

2. Tool outputs almacenados (20-30%)

El problema:

python
1# Una búsqueda devuelve JSON grande
2tool_result = """
3{
4 "results": [
5 {"title": "...", "content": "...", "metadata": {...}},
6 {"title": "...", "content": "...", "metadata": {...}},
7 # ... 20 resultados más
8 ]
9}
10""" # ~5,000 tokens que se quedan en el contexto

3. System prompts repetidos (10-15%)

El problema:

python
1SYSTEM_PROMPT = """
2Eres un asistente experto en...
3[5,000 tokens de instrucciones]
4"""
5 
6# Se envía completo en CADA request
7for query in user_queries:
8 client.chat.completions.create(
9 messages=[
10 {"role": "system", "content": SYSTEM_PROMPT}, # 5K tokens
11 {"role": "user", "content": query} # 100 tokens
12 ]
13 )
14# 100 queries = 500,000 tokens solo en system prompt

4. Multi-turn reasoning (10-15%)

Tareas complejas que requieren múltiples llamadas a la API:

  • Planificación → Ejecución → Verificación → Corrección
  • Cada paso consume tokens del contexto anterior

5. Modelo incorrecto (5-10%)

TareaModelo usadoModelo óptimoDiferencia
Clasificación simpleGPT-4oGPT-4o-mini17x más caro
TraducciónClaude OpusHaiku60x más caro
Extracción datosGPT-4Regex/código∞ (gratis)

6. Cache misses (5-10%)

Cuando el cache expira o no está configurado, pagas el prompt completo de nuevo.


Estrategia 1: Model routing inteligente

El concepto

Usar el modelo más barato que pueda hacer la tarea bien.

python
1def get_optimal_model(task_type, complexity):
2 routing_table = {
3 ("classification", "low"): "gpt-4o-mini",
4 ("classification", "high"): "gpt-4o",
5 ("generation", "low"): "claude-3-haiku",
6 ("generation", "high"): "claude-3-5-sonnet",
7 ("code", "any"): "claude-3-5-sonnet",
8 ("translation", "any"): "gpt-4o-mini",
9 ("summarization", "low"): "gemini-1.5-flash",
10 ("summarization", "high"): "gpt-4o",
11 }
12 return routing_table.get((task_type, complexity), "gpt-4o-mini")

Clasificador de complejidad automático

python
1def classify_complexity(query):
2 # Heurísticas simples
3 if len(query) < 100 and "?" in query:
4 return "low"
5 if any(word in query.lower() for word in ["analiza", "compara", "evalúa"]):
6 return "high"
7 if "código" in query.lower() or "
" in query:

return "code"

return "medium"

def smart_completion(query):

complexity = classify_complexity(query)

model = get_optimal_model("generation", complexity)

return client.chat.completions.create(

model=model,

messages=[{"role": "user", "content": query}]

)

code
1### Ahorro típico
2 
3| Sin routing | Con routing | Ahorro |
4|-------------|-------------|--------|
5| Todo GPT-4o: $100 | Mix optimizado: $25 | 75% |
6 
7---
8 
9## Estrategia 2: Prompt caching
10 
11### Anthropic Prompt Caching
python

from anthropic import Anthropic

client = Anthropic()

El system prompt largo se cachea

LONG_SYSTEM_PROMPT = """

[5,000 tokens de instrucciones detalladas]

"""

def cached_completion(user_query):

return client.messages.create(

model="claude-3-5-sonnet-20241022",

max_tokens=1024,

system=[{

"type": "text",

"text": LONG_SYSTEM_PROMPT,

"cache_control": {"type": "ephemeral"} # Cachear por 5 min

}],

messages=[{"role": "user", "content": user_query}]

)

Primera llamada: pagas 5,000 tokens de system

Siguientes 5 min: pagas ~500 tokens (90% descuento en cached)

code
1### Costos de cache en Anthropic
2 
3| Tipo | Costo |
4|------|-------|
5| Cache write | 1.25x precio normal |
6| Cache read | 0.1x precio normal (90% descuento) |
7| TTL | 5 minutos |
8 
9**Break-even:** Si usas el mismo prompt >2 veces en 5 min, el caching ahorra dinero.
10 
11### OpenAI Prompt Caching (automático)
12 
13OpenAI cachea automáticamente prompts >1024 tokens que se repiten exactamente:
python

Los primeros 1024+ tokens idénticos se cachean automáticamente

50% descuento en tokens cacheados

TTL: ~1 hora

code
1---
2 
3## Estrategia 3: Gestión de contexto
4 
5### Limitar historial de conversación
python

MAX_HISTORY_MESSAGES = 10

def get_trimmed_history(full_history):

if len(full_history) <= MAX_HISTORY_MESSAGES:

return full_history

# Mantener system + últimos N mensajes

return full_history[:1] + full_history[-MAX_HISTORY_MESSAGES:]

code
1### Summarizar conversaciones largas
python

def summarize_and_continue(conversation):

if count_tokens(conversation) < 10000:

return conversation

# Resumir todo excepto los últimos 5 mensajes

old_messages = conversation[:-5]

recent_messages = conversation[-5:]

summary = client.chat.completions.create(

model="gpt-4o-mini", # Modelo barato para resumir

messages=[{

"role": "user",

"content": f"Resume esta conversación en 200 palabras:\n{old_messages}"

}]

).choices[0].message.content

return [

{"role": "system", "content": f"Resumen previo: {summary}"}

] + recent_messages

code
1### Sliding window con overlap
python

def sliding_window_context(messages, window_size=8000, overlap=1000):

"""

Mantiene una ventana de contexto con overlap

para no perder información crítica en los bordes

"""

total_tokens = count_tokens(messages)

if total_tokens <= window_size:

return messages

# Calcular qué mensajes mantener

keep_tokens = window_size - overlap

kept_messages = []

current_tokens = 0

for msg in reversed(messages):

msg_tokens = count_tokens([msg])

if current_tokens + msg_tokens > keep_tokens:

break

kept_messages.insert(0, msg)

current_tokens += msg_tokens

return kept_messages

code
1---
2 
3## Estrategia 4: Batch processing
4 
5### OpenAI Batch API (50% descuento)
python

Crear archivo de batch

batch_requests = [

{"custom_id": f"req-{i}", "method": "POST", "url": "/v1/chat/completions",

"body": {"model": "gpt-4o", "messages": [{"role": "user", "content": q}]}}

for i, q in enumerate(queries)

]

Subir y ejecutar

batch_file = client.files.create(

file=open("batch_requests.jsonl", "rb"),

purpose="batch"

)

batch_job = client.batches.create(

input_file_id=batch_file.id,

endpoint="/v1/chat/completions",

completion_window="24h" # Resultados en 24h

)

50% descuento vs llamadas individuales

code
1### Cuándo usar batching
2 
3| Escenario | Usar batch? |
4|-----------|-------------|
5| Procesamiento nocturno | ✅ Sí |
6| Análisis de dataset | ✅ Sí |
7| Chatbot en tiempo real | ❌ No |
8| Generación de contenido | ✅ Sí |
9| Respuestas urgentes | ❌ No |
10 
11---
12 
13## Estrategia 5: Compression y summarization
14 
15### Comprimir outputs de herramientas
python

def compress_tool_output(raw_output, max_tokens=500):

"""Comprime outputs grandes de herramientas"""

if count_tokens(raw_output) <= max_tokens:

return raw_output

# Usar modelo barato para comprimir

compressed = client.chat.completions.create(

model="gpt-4o-mini",

messages=[{

"role": "user",

"content": f"""Extrae solo la información relevante de este output,

máximo {max_tokens} tokens:

{raw_output}"""

}],

max_tokens=max_tokens

)

return compressed.choices[0].message.content

code
1### Limitar longitud de outputs
python

response = client.chat.completions.create(

model="gpt-4o",

messages=[...],

max_tokens=500, # Limitar output

# Pedir concisión en el prompt

system="Responde de forma concisa, máximo 3 párrafos."

)

code
1### Output structurado (JSON mode)
python

JSON usa menos tokens que texto narrativo

response = client.chat.completions.create(

model="gpt-4o",

messages=[{

"role": "user",

"content": "Extrae nombre, email y teléfono de este texto: ..."

}],

response_format={"type": "json_object"}

)

Output: {"nombre": "Juan", "email": "...", "telefono": "..."}

vs narrativo: "El nombre es Juan, su email es ... y su teléfono..."

code
1---
2 
3## Estrategia 6: Modelos locales para tareas básicas
4 
5### Ollama para tareas gratuitas
python

import ollama

def local_completion(prompt, model="llama3.1:8b"):

"""Usa modelo local para tareas simples - GRATIS"""

response = ollama.chat(

model=model,

messages=[{"role": "user", "content": prompt}]

)

return response['message']['content']

Tareas ideales para local:

- Clasificación simple

- Extracción de datos estructurados

- Traducciones básicas

- Resúmenes simples

code
1### Hybrid routing: local + cloud
python

def hybrid_completion(query, task_type):

# Tareas simples → modelo local (gratis)

if task_type in ["classify", "extract", "translate_simple"]:

return local_completion(query)

# Tareas complejas → cloud (pago)

return cloud_completion(query, model="gpt-4o")

code
1### Ahorro con modelos locales
2 
3| Tarea | Cloud (GPT-4o-mini) | Local (Llama 8B) |
4|-------|---------------------|------------------|
5| 10,000 clasificaciones | ~$5 | $0 |
6| 1,000 traducciones | ~$3 | $0 |
7| Costo hardware | - | ~$0.05/hora GPU |
8 
9---
10 
11## Caso real: De $150 a $35/mes
12 
13### Escenario inicial
14 
15**Aplicación:** Chatbot de soporte con RAG
16**Volumen:** 50,000 consultas/mes
17**Costo inicial:** $150/mes
18 
19**Desglose del problema:**
20- 100% consultas con GPT-4: $80
21- Contexto completo cada vez: $40
22- Sin caching de prompts: $20
23- Outputs largos innecesarios: $10
24 
25### Optimizaciones aplicadas
26 
27**1. Model routing (ahorro: $50)**

  • 70% consultas simples → GPT-4o-mini
  • 20% consultas medias → Claude Haiku
  • 10% consultas complejas → GPT-4o

code
1**2. Prompt caching (ahorro: $18)**

  • System prompt de 3,000 tokens cacheado
  • 90% de lecturas desde cache

code
1**3. Contexto limitado (ahorro: $30)**

  • Máximo 10 mensajes de historial
  • Resumen automático de conversaciones largas

code
1**4. Outputs controlados (ahorro: $17)**

  • max_tokens=300 en lugar de 1000
  • Instrucción de concisión en prompt

code
1### Resultado final
2 
3| Concepto | Antes | Después |
4|----------|-------|---------|
5| Costo modelos | $80 | $30 |
6| Costo contexto | $40 | $10 |
7| Costo prompts | $20 | $2 |
8| Costo outputs | $10 | $3 |
9| **Total** | **$150** | **$35** |
10 
11**Ahorro: 77%**
12 
13---
14 
15## Preguntas frecuentes
16 
17### ¿El caching afecta la calidad de las respuestas?
18 
19**No.** El caching solo evita re-procesar tokens idénticos. El modelo genera la misma respuesta, solo que más barato.
20 
21### ¿Cuánto contexto es "demasiado"?
22 
23**Regla general:**
24- <10K tokens: Sin problema
25- 10-50K tokens: Monitorear costos
26- >50K tokens: Implementar gestión activa
27 
28Para la mayoría de chatbots, 5-10 mensajes de historial son suficientes.
29 
30### ¿Los modelos pequeños dan peores resultados?
31 
32**Depende de la tarea.** Para clasificación, extracción y tareas estructuradas, GPT-4o-mini y Haiku son tan buenos como los grandes. Para razonamiento complejo y creatividad, sí necesitas modelos mayores.
33 
34### ¿Cómo mido mi consumo de tokens?
python

OpenAI

response = client.chat.completions.create(...)

print(f"Input: {response.usage.prompt_tokens}")

print(f"Output: {response.usage.completion_tokens}")

print(f"Total: {response.usage.total_tokens}")

Anthropic

print(f"Input: {response.usage.input_tokens}")

print(f"Output: {response.usage.output_tokens}")

`


Conclusión

La optimización de tokens no es opcional si usas APIs de IA en producción. Con las estrategias de esta guía, puedes reducir costos 60-80% sin sacrificar calidad.

Checklist de optimización:

  • [ ] Implementar model routing por tipo de tarea
  • [ ] Activar prompt caching para system prompts
  • [ ] Limitar historial de conversación
  • [ ] Usar batch API para procesamiento no urgente
  • [ ] Considerar modelos locales para tareas simples
  • [ ] Monitorear consumo de tokens por endpoint

Recursos relacionados:


¿Quieres más tutoriales de desarrollo con IA? Visita Javadex.es para proyectos avanzados.

Síguenos:

Recomendado

¿Listo para poner tu proyecto en producción?

Si estás siguiendo este tutorial, necesitas un servidor donde desplegarlo. Yo uso Hostinger para mis proyectos porque el panel es intuitivo, los VPS van con SSD NVMe, y a 4,99€/mes no hay nada comparable en relación calidad-precio.

SSL gratis + IP dedicada
SSD NVMe ultra rápido
Soporte 24/7 en español

* Enlace de afiliado. Si contratas a través de este enlace, nos ayudas a mantener este contenido gratuito.

Posts Relacionados

JS

Javier Santos Criado

Consultor de IA y Automatización | Fundador de Javadex

Experto en implementación de soluciones de Inteligencia Artificial para empresas. Especializado en automatización con n8n, integración de LLMs, y desarrollo de agentes IA.

RECOMENDADO

Lleva tu proyecto a producción

Hosting web desde 2,99€/mes o VPS con SSD NVMe desde 4,99€/mes. Panel intuitivo, IP dedicada y soporte 24/7 en español.

SSL gratis SSD NVMe Soporte 24/7 Panel intuitivo
Explorar planes de Hostinger

¿Quieres más contenido de IA?

Explora nuestras comparativas y guías

Consultoría y formación en IA para empresas

Implementamos soluciones de inteligencia artificial adaptadas a tu negocio. Proceso 100% remoto — trabajamos con tu equipo in-house sin que tengas que desplazarte.

javi@javadex.esSesión de diagnóstico gratuita · 30 min