En este artículo, aprenderá cinco estrategias prácticas para gestionar ventanas de contexto en aplicaciones de agentes de IA de larga duración, junto con las ventajas y desventajas clave que presenta cada enfoque.
Los temas que cubriremos incluyen:
Por qué las ventanas de contexto se convierten en un cuello de botella crítico en los sistemas de IA basados en agentes diseñados para un funcionamiento autónomo y sostenido. Cinco estrategias distintas de gestión de contexto: ventanas deslizantes, resumen recursivo, gestión de estado estructurado, contexto efímero a través de RAG y enrutamiento de contexto dinámico. Las compensaciones inherentes de cada estrategia, desde la pérdida de memoria y la compresión de información hasta los puntos ciegos de recuperación y la complejidad del mantenimiento.
Introducción
Los agentes de larga duración son aquellos capaces de exhibir una ejecución autónoma sostenida en el tiempo. En estas aplicaciones basadas en agentes, impulsadas por interacciones con usuarios u otros sistemas en los que la información se acumula rápidamente, la ventana de contexto es un cuello de botella crítico. Los agentes y los grandes modelos de lenguaje, o LLM en su forma abreviada, son dos caras de la misma moneda en los sistemas de inteligencia artificial modernos, por así decirlo. En consecuencia, pasar de “LLM como motores de respuesta rápida” a “LLM (dotados de agentes) como procesos en segundo plano de larga duración” convierte las ventanas de contexto en un importante cuello de botella en la ingeniería de IA.
Por todas estas razones, la gestión de ventanas de contexto a largo plazo requiere estrategias específicas como ventanas deslizantes, memoria por niveles y resumen dinámico. Este artículo presenta cinco estrategias operativas diferentes para esto, junto con sus inevitables compensaciones.
1. Ventanas corredizas
Piense en un agente de IA capaz de recordar sólo sus últimos diez minutos de trabajo. Los enfoques de ventana deslizante simplemente gestionan los límites de memoria: eliminan los mensajes más antiguos, dejando espacio para los más nuevos, y sólo las instrucciones básicas quedan “bloqueadas” en la parte superior del contexto.
A continuación se muestra un ejemplo de cómo podría verse una implementación de ventana deslizante (el código no pretende ser ejecutable por sí solo; se muestra sólo con fines ilustrativos):
def Manage_sliding_window(system_prompt, message_history, max_turns=10): “””Conserva las instrucciones permanentes del sistema y elimina los turnos de chat más antiguos cuando el historial sea demasiado largo. “”” if len(message_history) > max_turns: # Recorta el historial para conservar solo los ‘X’ mensajes más recientes message_history = message_history[-max_turns:]# Siempre anteponga el mensaje del sistema para que el agente recuerde su devolución de identidad. [system_prompt] + historial_mensaje
definición gestionar_ventana_deslizante(aviso_sistema, historial_mensaje, max_turns=10):
“”“Conserve las instrucciones permanentes del sistema y elimine los turnos de chat más antiguos
cuando la historia se hace demasiado larga.
““”
si len(historial_mensaje) > max_turns:
# Recortar el historial para conservar solo los mensajes ‘X’ más recientes
historial_mensaje = historial_mensaje[–max_turns:]
# Siempre anteponga el mensaje del sistema para que el agente recuerde su identidad.
devolver [system_prompt] + historial_mensaje
Si bien es extremadamente barata y rápida debido a que no requiere procesamiento adicional de IA, esta estrategia tiene una advertencia: la “amnesia digital”. En otras palabras, si el agente se encuentra con un problema que ya había abordado una hora antes, habrá olvidado por completo cómo solucionarlo, lo que puede atraparlo en bucles interminables.
2. Resumen recursivo
Piense en esto como un protocolo de compresión de imágenes como JPEG, pero aplicado al ámbito de las ventanas contextuales. En lugar de eliminar el pasado lejano como lo harían las ventanas deslizantes, el resumen recursivo consiste en comprimir periódicamente mensajes antiguos en un resumen. Esto puede ayudar a mantener viva la “misión y la trama” del agente en general durante largas horas de operación, pero, por supuesto, como en un archivo JPEG borroso, hay pérdida de información relacionada con detalles finos, lo que deja al agente con un recuerdo vago a largo plazo de eventos pasados.
3. Gestión del Estado estructurada
En esta estrategia, las transcripciones del chat en ejecución se dejan atrás por completo. Para reemplazarlos, el agente mantiene un objeto JSON manejable que rastrea objetivos, hechos y errores, que sirve como una especie de “bloc de notas” estructurado. En cada paso o paso, la conversación sin procesar se descarta y el agente de IA recibe solo las instrucciones principales, un objeto JSON actualizado y la nueva entrada actual. Esta es, sin duda, una estrategia muy eficiente simbólica. Sin embargo, depende en gran medida de los criterios implementados por el desarrollador sobre qué se debe rastrear exactamente. Si variables inesperadas pero cruciales caen fuera de los límites del esquema predefinido, el agente inevitablemente las ignorará.
Este es un ejemplo simplificado de cómo podría ser la implementación de esta estrategia:
def run_scratchpad_turn(system_prompt, scratchpad_state, new_input): “””Borra el historial de conversación por completo. El agente solo navega usando sus instrucciones principales, el estado actual y la nueva tarea. “”” # Combinando el estado rígido con la nueva entrada en un solo mensaje = f”{system_prompt}\nESTADO MEMORIZADO: {scratchpad_state}\nNUEVA ENTRADA: {new_input}” # La AI procesa el mensaje y devuelve su siguiente acción más un estado actualizado ai_output = call_llm(prompt, Response_format=”json”) return ai_output[“chosen_action”]salida_ai[“updated_scratchpad”]
definición run_scratchpad_turn(aviso_sistema, scratchpad_estado, nueva_entrada):
“”“Borra el historial de conversaciones por completo. El agente sólo navega
utilizando sus instrucciones principales, estado actual y nueva tarea.
““”
# Combinando el estado rígido con la nueva entrada en un solo mensaje
inmediato = F“{system_prompt}\nESTADO MEMORIZADO: {scratchpad_state}\nNUEVA ENTRADA: {new_input}”
# La IA procesa el mensaje y devuelve su siguiente acción más un estado actualizado
salida_ai = llamada_llm(inmediato, formato_respuesta=“json”)
devolver salida_ai[“chosen_action”], salida_ai[“updated_scratchpad”]
4. Contexto efímero vía RAG
La estrategia basada en RAG descarga todo en el contexto acumulativo a una base de datos externa (una base de datos vectorial en sistemas RAG, como se explica aquí). Esta es una alternativa a obligar a un agente a mantener su historial en la memoria activa, de modo que una búsqueda silenciosa recupere solo los eventos pasados más relevantes en el mensaje actual, según la relevancia. En teoría, esto podría permitir que el agente se ejecute indefinidamente sin problemas de sobrecarga de contexto. Sin embargo, hay una desventaja: un punto ciego en la recuperación, particularmente si el agente necesita volver a conectar dos eventos pasados aparentemente no relacionados. Depender del recuperador y su política de búsqueda subyacente para esto puede resultar en la pérdida de un contexto relevante que de otro modo conectaría “piezas mentales” importantes.
5. Enrutamiento de contexto dinámico
Esta estrategia está diseñada para equilibrar la capacidad y el costo. Hace que dos modelos de IA distintos funcionen juntos. El agente principal ejecuta tareas repetitivas de alta frecuencia basándose en un modelo más rápido y económico que gestiona ventanas de contexto más pequeñas. Mientras tanto, cuando ocurren eventos excepcionales (como fallar una tarea tres veces seguidas), el historial completo y sin procesar se envía a un modelo potente y de gran contexto, que analiza el panorama general y ofrece una instrucción más clara basada en el modelo más económico. Esta es una estrategia bastante rentable, pero el código necesario para identificar de manera confiable exactamente cuándo se atasca el modelo más barato puede ser extremadamente difícil de mantener y ajustar.
Concluyendo
Este artículo describe cinco estrategias (y sus inevitables compensaciones) para optimizar la gestión de ventanas de contexto cuando se trabaja con aplicaciones de IA basadas en agentes de larga duración. Sin embargo, tenga en cuenta: en última instancia, crear aplicaciones de agentes autónomos exitosas no se trata de perseguir la ilusión de una memoria infinita, sino más bien de construir arquitecturas más inteligentes y una lógica subyacente que ayude a determinar qué se debe recordar y qué el agente puede permitirse olvidar.