Tu documento legal de 50 páginas se sube a Claude, y el modelo devuelve un análisis basado en la página 3. El resto existe en un vacío de tokens. Esto no es un problema de alucinación, es un problema de ventana de contexto, y rompe más sistemas de producción que los prompts erróneos.
La ventana de contexto es un espacio limitado. Cada token que usas —prompt, documentos, historial de conversación, instrucciones del sistema— ocupa un espacio que podría dedicarse a tu tarea real. Si excedes el límite, el modelo deja de responder o, peor aún, empieza a ignorar la información más antigua para dar cabida a nueva entrada. Comprender cómo gestionar este espacio es la diferencia entre un sistema que funciona y uno que falla misteriosamente el jueves, cuando tu documento se hizo más largo.
Entendiendo Tu Presupuesto de Contexto
Empieza por saber exactamente con qué estás trabajando.
Claude 3.5 Sonnet te da 200.000 tokens. GPT-4o te da 128.000 tokens (o 4.096 si usas el modelo base más antiguo). Mistral Large ofrece 32.000 tokens. Estas cifras suenan grandes hasta que empiezas a medir contenido real.
Una página típica de texto de negocios tiene entre 250 y 350 tokens. Un documento de 50 páginas te cuesta 12.500–17.500 tokens antes de haber escrito una sola instrucción. Una conversación larga con 20 intercambios consume 4.000–8.000 tokens. Eso te deja con espacio de trabajo real medido por lo que queda —tu «presupuesto de procesamiento».
Calcula tu coste exacto en tokens antes del despliegue. Usa el tokenizador del proveedor del modelo:
# Ejemplo en Python usando el tokenizador de Anthropic
import anthropic
client = anthropic.Anthropic()
with open('document.txt', 'r') as f:
doc_text = f.read()
response = client.messages.count_tokens(
model="claude-3-5-sonnet-20241022",
messages=[{"role": "user", "content": doc_text}]
)
print(f"Tokens del documento: {response.input_tokens}")
print(f"Presupuesto restante: {200000 - response.input_tokens}")
Esto no es opcional. Adivinar te cuesta consultas fallidas y gasto desperdiciado en la API.
Las Tres Técnicas de Compresión Que Realmente Funcionan
Tienes tres palancas: extraer lo que importa, resumir estratégicamente o dividir el trabajo en trozos. La mayoría de la gente intenta saltar directamente a la resumen y falla porque está resumiendo las partes equivocadas.
1. Extracción Antes del Resumen
No resumas todo. Extrae primero las secciones relevantes para tu pregunta real.
Si estás analizando un contrato para términos de pago, no necesitas resúmenes de la historia de la empresa o especificaciones del producto. Extrae las cláusulas relevantes, pásalas al LLM y mantén el 80% de tu ventana de contexto libre.
Enfoque incorrecto:
# Resume todo el documento de 50 páginas
Prompt: "Resume este documento legal en 500 palabras."
[Documento de 50 páginas]
"¿Cuáles son los términos de pago?"
Enfoque correcto:
# Extrae secciones relevantes, luego responde
Prompt: "Extrae todas las secciones que mencionen 'pago', 'factura', 'fecha de vencimiento' o 'términos'. Mantén la redacción exacta."
[Documento de 50 páginas]
# Luego, en una segunda llamada o en la misma llamada con el texto extraído:
Prompt: "Basado en estas secciones, ¿cuáles son los términos de pago y cuándo vencen las facturas?"
[Solo secciones extraídas - ~2000 tokens en lugar de 15000]
Usa extracción de palabras clave, patrones regex o un pase de búsqueda ligero (Claude Mini en documentos más cortos) para identificar fragmentos relevantes antes de pasarlos a tu modelo de análisis principal.
2. Resumen Jerárquico
Si la extracción no es viable —por ejemplo, si necesitas el contexto completo— resume en capas. No resumas 50 páginas a 500 palabras en una sola pasada. Resume fragmentos en resúmenes, y luego resume esos resúmenes.
Divide el documento en fragmentos de 5–10 páginas. Resume cada uno a 150–200 tokens. Luego, resume esos resúmenes. Comprimes 15.000 tokens a 500–800 mientras conservas la estructura y las relaciones.
Esto preserva mejor los matices que un único resumen agresivo, porque el modelo nunca descarta detalles arbitrariamente — condensa proporcionalmente en cada capa.
3. Procesamiento con Ventana Deslizante para Conversaciones
Las conversaciones largas llenan el contexto rápidamente. No mantengas todo el historial. Conserva los intercambios recientes (últimos 5–10) más resúmenes de los más antiguos.
# Gestión del contexto de conversación
conversation = [
{"role": "user", "content": "Háblame de los precios de AWS"},
{"role": "assistant", "content": "Los precios de AWS son..."}
# ... 15 intercambios más ...
]
# Antes de la llamada a la API, recorta y resume
if conversation_token_count > 100000:
# Conserva los últimos 5 intercambios
recent = conversation[-10:] # 5 pares de usuario/asistente
# Resume todo lo anterior
older_summary = summarize_conversation(conversation[:-10])
# Reconstruye con marcador de historial explícito
trimmed = [
{"role": "system",
"content": "Anteriormente en esta conversación: " + older_summary}
] + recent
Temperatura y Muestreo: Problemas Ocultos de Contexto
También puedes gestionar la eficiencia del contexto a través del comportamiento del modelo, no solo del tamaño de la entrada.
Una temperatura más baja (0.3–0.5) hace que el modelo se centre en lo que ya sabe — útil para la extracción de hechos del contexto proporcionado. Una temperatura más alta (0.7–1.0) aumenta la aleatoriedad, lo que quema tokens en resultados menos predecibles.
Para tareas con mucho contexto («responde solo de este documento»), opera a 0.3–0.4. La atención del modelo se mantiene en tu entrada, no en explorar formulaciones alternativas.
El parámetro max_tokens también es importante. Establécelo deliberadamente. Si estás extrayendo términos de pago, no necesitas salidas de 4.096 tokens. Establece max_tokens=500. Esto reserva presupuesto para tu tarea real en lugar de dejar que el modelo divague en espacio vacío.
La Configuración Real: Un Patrón de Producción
Esto es lo que realmente funciona a escala:
- Capa de extracción: Usa regex, búsqueda de palabras clave o un modelo rápido (Claude 3.5 Haiku) para extraer secciones relevantes de documentos grandes. Coste: mínimo.
- Verificación del presupuesto de tokens: Cuenta los tokens de las secciones extraídas. Si está por debajo de 30.000 tokens con Claude Sonnet, procede. Si no, resume.
- Resumir si es necesario: Resúmenes jerárquicos de fragmentos, no compresión agresiva en una sola pasada.
- Consulta con contexto: Pasa el material extraído o resumido más instrucciones explícitas: «Responde solo basándote en estas secciones. No uses conocimiento externo.»
- Recorte de conversación: Después de 10 mensajes de usuario, haz una instantánea de la conversación, resúmela y comienza una nueva ventana.
El cuello de botella rara vez es el modelo. Es el trabajo de preparación antes de la llamada a la API.
Empieza Contando Tokens, No Resumiendo
Hoy: mide tus documentos reales. Pásalos por el tokenizador del modelo que estás utilizando. Calcula cuántos tokens quedan después de que se suban tus documentos. Ese número restante es tu presupuesto de trabajo real.
Si es inferior a 30.000 para Claude Sonnet o inferior a 50.000 para trabajo de producción, necesitas extraer, no resumir. Si es negativo, necesitas un enfoque diferente por completo: dividir documentos, usar búsqueda vectorial para recuperar solo secciones relevantes o usar un modelo con una ventana más grande.
La mayoría de los problemas de contexto no se resuelven con mejores prompts. Se resuelven no pidiendo al modelo que procese más de lo que necesita.