Partiendo el prompt en tres bloques con reglas de recorte distintas: una ficha del personaje que no se toca nunca, un resumen acumulativo que se reescribe cada 15-25 turnos, y los últimos 10-15 mensajes literales. Si además necesitas detalles sueltos de hace horas, añades recuperación vectorial y metes tres o cinco fragmentos por turno, no más. El orden de los bloques cambia el resultado.
El síntoma clásico llega sobre el turno cien: el detective seco de Bilbao que llevabas cien mensajes construyendo empieza a preguntar en qué más puede ayudarte. No se ha roto el modelo, se ha roto tu gestión de la ventana.
Por dos motivos que se suman. El primero es que casi nadie manda la conversación entera: la mayoría de frameworks recortan los mensajes más antiguos en silencio cuando pasas de un umbral, y ese recorte se come justo la parte donde definiste quién es el personaje.
El segundo es que, aunque quepa, el modelo no atiende igual a todo. El trabajo Lost in the Middle (Liu et al., 2023) midió que el rendimiento es máximo cuando la información relevante está al principio o al final del contexto, y cae de forma apreciable cuando queda enterrada en el medio. Tu ficha de personaje en el mensaje 3 de 200 está exactamente en el peor sitio posible si la dejas ahí.
La ficha es el bloque que nunca se recorta y va siempre arriba, en el system prompt. Entre 200 y 400 tokens, y si te pasas de ahí, sobra algo. Dentro:
Fuera de la ficha: la biografía de tres párrafos, el histórico de lo que ha pasado y cualquier cosa que cambie con la conversación. Eso es trabajo del resumen.
El resumen se genera en una llamada aparte, con temperatura baja y una plantilla de campos fijos. No se va añadiendo texto al anterior: se reescribe entero partiendo del resumen previo más los mensajes nuevos. Seis campos:
Disparador: lo que llegue antes, 20 turnos o que el histórico literal pase de tu presupuesto de tokens. Tope duro de 400-500 tokens para el resumen completo; si el modelo se pasa, lo recortas por campos, no por el final.
Hace falta cuando la conversación vive semanas y en sesiones distintas, o cuando hay muchas entidades sueltas —nombres, sitios, objetos— que el resumen no puede llevar todos. Con un chat de una tarde, no la montes.
Si la montas: cada fragmento es un intercambio completo con su marca de tiempo, recuperas por umbral de similitud y no por «los cinco mejores» a ciegas, y los fragmentos entran por debajo del resumen, nunca por encima. El fallo típico es precioso: recuperas un intercambio de hace tres semanas donde el personaje todavía no sabía algo, el modelo lo lee como presente y te suelta una contradicción con detalles muy concretos, que son las peores de detectar.
| Técnica | Coste por turno | Qué arregla | En qué falla |
|---|---|---|---|
| Mandar todo el histórico | Crece sin techo; latencia y factura suben cada turno | Nada se pierde | Se degrada por el efecto del medio y revienta el presupuesto |
| Truncar los mensajes viejos | Cero | Coste estable | Amnesia total del principio; es el problema, no la solución |
| Ficha fija arriba | 200-400 tokens fijos, cacheables | Carácter y voz | No recuerda nada de lo que ha pasado |
| Resumen acumulativo | 400-500 tokens + una llamada extra cada 20 turnos | Continuidad e historia | Pierde detalle fino en cada reescritura |
| Memoria vectorial | 300-600 tokens de fragmentos + búsqueda + coste de embeddings | Detalles concretos de hace mucho | Trae contexto caducado y contradice el canon |
Un detalle de factura que pilla a todo el mundo: la caché de prompts funciona por prefijo, así que cualquier cambio invalida todo lo que va detrás. Si reescribes el resumen y lo pones encima del histórico, en ese turno pierdes la caché entera. La documentación de Anthropic pone leer de caché al 10% del precio de entrada y escribirla con un 25% de recargo, con un mínimo de 1.024 tokens según modelo. Traducido: acepta el fallo de caché en los turnos de reescritura y deja la ficha, que no cambia nunca, como primer bloque cacheado.
Bloque 1 — system, inmutable, cacheado. Ficha del personaje (200-400 tokens) + reglas de habla + lo que no sabe.
Bloque 2 — system, se reescribe cada 20 turnos. «Contexto de la conversación hasta ahora» con los seis campos, en el mismo orden siempre.
Bloque 3 — opcional, solo si hay recuperación. «Fragmentos de conversaciones anteriores, cada uno con su fecha. Pueden estar desactualizados; si contradicen el bloque 2, manda el bloque 2.»
Bloque 4 — mensajes. Los últimos 10-15 turnos literales, sin tocar.
Bloque 5 — última línea del system. Recordatorio de tres líneas: nombre, tono actual y la regla de habla principal. Va al final porque el final es la otra posición buena de la ventana.
Para no ir a ciegas, escribe diez preguntas de control sobre cosas que pasaron en los primeros veinte mensajes y pásalas en el turno 20, 60 y 120 de una conversación de prueba. Cuántas falla en cada punto te dice si el problema está en el recorte, en el resumen o en el orden de los bloques, y eso no lo adivinas mirando la conversación por encima.
Buena parte de las visitas que te mandan los asistentes aterrizan en GA4 como tráfico…
Treinta y siete páginas, 1.200 agentes, 70.000 mensajes y tres lecciones que te puedes llevar…
No es que programar sea cerrado y el negocio ambiguo. Es quién corrige los deberes…
Hay sitios que siguen inyectando HowTo, FAQ y sitelinks searchbox en cada plantilla años después…
Mismo dominio, misma configuración: desde España resuelve a una IP que no contesta y desde…
Una skill no es un programa ni un modelo: es un fichero de texto con…