【Traducción】Ingeniería del Contexto: ¡No llenes la ventana, cuanto más metas peor! Usa la estrategia de escribir, seleccionar, comprimir y aislar en cuatro pasos, mantén el ruido afuera — Aprende sobre IA 170
Introducción
- El límite de los agentes de IA no depende solo del tamaño del modelo, sino también de la habilidad en la “gestión del contexto”. Es similar a configurar la memoria en un CPU, determina la profundidad y eficiencia del pensamiento del agente.
- La ventana de contexto no es un basurero: la sobrecarga de información puede “contaminar”, interferir y confundir el juicio de la IA. La precisión es mucho más importante que la cantidad.
- Los expertos utilizan la estrategia de “escribir, seleccionar, comprimir y aislar” para gestionar el contexto de la IA, aprovechando al máximo la “memoria” limitada, logrando así una reducción de costos y un aumento de eficiencia.
- La competencia del futuro es una competencia por la eficiencia del sistema. Aislar tareas con una arquitectura de múltiples agentes, permitiendo que cada uno funcione de manera óptima en su pequeña ventana, es clave para construir sistemas de tareas complejas.
Resumen Central
Los agentes (Agent) realizan tareas dependiendo del contexto (Context). La “ingeniería del contexto” es el arte y la ciencia de inyectar información apropiada en la ventana de contexto de un agente en cada paso de su tarea. Este artículo resume las estrategias de ingeniería del contexto utilizadas por los agentes más populares en varias categorías generales.
Ingeniería del Contexto (Context Engineering)
Como dice Andrej Karpathy, los modelos de lenguaje grandes (LLM) son como un “nuevo sistema operativo”. El LLM actúa como CPU, mientras que su “ventana de contexto” funciona como RAM, siendo la memoria de trabajo del modelo. Al igual que la RAM tiene un límite de capacidad, la ventana de contexto de un LLM enfrenta limitaciones de capacidad al procesar diversas fuentes de contexto. Uno de los trabajos clave del sistema operativo es gestionar cómo utilizar eficientemente la RAM del CPU, y “la ingeniería del contexto” desempeña un papel similar. Karpathy resume esto de manera convincente:
“La ingeniería del contexto es ‘… un arte y ciencia sutil para llenar de manera precisa la ventana de contexto para el siguiente paso (cálculo).’”
Al construir aplicaciones de LLM, necesitamos gestionar qué tipos de contexto. El concepto general de ingeniería del contexto abarca los siguientes tipos de contexto:
- • Instrucciones (Instructions) – Frases de entrada, memorias, ejemplos de pocos datos, descripciones de herramientas, etc.
- • Conocimiento (Knowledge) – Hechos, memorias, etc.
- • Herramientas (Tools) – Información de retroalimentación sobre llamadas a herramientas.
Ingeniería del Contexto para Agentes
Este año, con la mejora de las capacidades del LLM en razonamiento y llamadas a herramientas, el interés en los agentes ha aumentado considerablemente. Los agentes ejecutan tareas alternando entre llamadas a LLM y a herramientas, siendo especialmente buenos para manejar tareas complejas en ejecución a largo plazo.
Sin embargo, las tareas largas y la retroalimentación acumulativa de las llamadas a herramientas significan que los agentes suelen consumir grandes cantidades de tokens. Esto puede generar varios problemas: superar las limitaciones de capacidad de la ventana de contexto, incurrir en costos y retrasos adicionales, e incluso disminuir el rendimiento del agente. Drew Breunig ha señalado claramente que un contexto demasiado largo puede causar problemas de rendimiento de las siguientes maneras:
- • Contaminación de contexto (Context Poisoning): cuando información errónea (ilusión) entra en el contexto.
- • Interferencia de contexto (Context Distraction): cuando hay demasiada información en el contexto, ahogando el conocimiento original del modelo.
- • Confusión de contexto (Context Confusion): cuando información irrelevante en el contexto afecta la respuesta del modelo.
- • Conflicto de contexto (Context Clash): cuando diferentes partes del contexto son contradictorias.
Debido a estos problemas, la empresa Cognition AI ha enfatizado la importancia de la ingeniería del contexto:
“La ingeniería del contexto” … de hecho es la tarea principal de los ingenieros que construyen agentes de IA.
La empresa Anthropic también ha señalado:
Los agentes generalmente necesitan tener cientos de rondas de diálogo, lo que requiere que adoptemos estrategias de gestión del contexto con cuidado.
Entonces, ¿cómo están los desarrolladores de hoy enfrentando este desafío? Clasifico los enfoques actuales en cuatro categorías: escribir (Write), seleccionar (Select), comprimir (Compress) y aislar (Isolate) — y proporcionaré ejemplos para cada uno.
Escribir Contexto (Write Context)
Escribir contexto se refiere a almacenar información fuera de la ventana de contexto para su uso por parte del agente durante la ejecución de tareas.
Áreas de trabajo (Scratchpads)
Cuando los humanos resuelven problemas, toman notas y recuerdan cosas para su uso en el futuro. ¡Los agentes también están adquiriendo estas habilidades! Utilizar “áreas de trabajo” para tomar notas es un enfoque para persistir información durante la ejecución de tareas del agente. La idea principal es almacenar información fuera de la ventana de contexto, pero que esté siempre disponible para el agente. El sistema de investigación de múltiples agentes de Anthropic proporciona un claro ejemplo:
“El investigador principal” primero piensa en cómo resolver el problema y guarda su plan en la “memoria” para persistir el contexto, ya que una vez que la ventana de contexto supera los 200,000 tokens, puede ser truncada, y conservar el plan es vital.
Las áreas de trabajo pueden implementarse de varias maneras. Pueden ser una simple llamada a una herramienta, como escribir un archivo; o un campo en un objeto de estado durante la ejecución que permanezca constante durante toda la sesión. En cualquier caso, las áreas de trabajo permiten al agente guardar información útil para completar mejor las tareas.
Memorias (Memories)
Las áreas de trabajo ayudan a los agentes a resolver tareas en una sola sesión, pero a veces los agentes necesitan recordar cosas a través de múltiples sesiones. El modelo Reflexion introduce la idea de reflexionar en cada acción del agente y reutilizar estas memorias generadas por sí mismo. El modelo Generative Agents puede sintetizar periódicamente memorias de un conjunto de retroalimentación de acciones anteriores del agente.
Estos conceptos ya se han aplicado en productos populares como ChatGPT, Cursor y Windsurf. Todos ellos poseen mecanismos para generar automáticamente memorias a largo plazo basadas en la interacción del usuario con el agente.
Seleccionar Contexto (Select Context)
Seleccionar contexto se refiere a mover la información necesaria a la ventana de contexto para ayudar al agente en la ejecución de tareas.
Áreas de trabajo (Scratchpad)
El mecanismo para seleccionar contexto desde el área de trabajo depende de cómo se haya implementado. Si es una herramienta, el agente solo necesita leer a través de la llamada a la herramienta. Si es parte del estado de ejecución del agente, el desarrollador puede decidir exponer selectivamente ciertas partes del estado al agente en cada paso. Esto proporciona un control fino para suministrar el contexto del área de trabajo al LLM en rondas posteriores.
Memorias (Memories)
Si el agente tiene la capacidad de almacenar memorias, también necesita la capacidad de seleccionar memorias relevantes para la tarea en curso. Esto es muy útil por varias razones: el agente puede elegir ejemplos de pocos datos (memorias contextuales) para aprender los patrones de comportamiento esperados; puede seleccionar instrucciones (memorias programáticas) para guiar su propio comportamiento; o elegir hechos (memorias semánticas) para proporcionar el contexto relevante para la tarea.
Un gran desafío es asegurar que las memorias seleccionadas sean relevantes. Algunos agentes populares solo utilizan una pequeña parte de archivos fijos que siempre se cargan en el contexto. Por ejemplo, muchos agentes de código utilizan archivos para almacenar instrucciones (“memorias programáticas”) o, en algunos casos, ejemplos (“memorias contextuales”). Claude Code utiliza CLAUDE.md
, mientras que Cursor y Windsurf utilizan archivos de reglas.
Sin embargo, si el agente ha almacenado una gran cantidad de hechos o relaciones (por ejemplo, de tipo “memorias semánticas”), la selección se vuelve más difícil. ChatGPT es un buen ejemplo, ya que almacena y selecciona de una gran cantidad de memorias específicas del usuario.
Las incrustaciones vectoriales y/o grafos de conocimiento son técnicas comunes de indexación de memorias utilizadas para ayudar en la selección. Aun así, la selección de memorias sigue siendo un desafío. En la feria mundial AIEngineer, Simon Willison compartió un ejemplo de un error en la selección de memorias: ChatGPT recuperó su información de ubicación de la memoria y la inyectó inesperadamente en la imagen solicitada. Esta recuperación de memoria inesperada o no deseada puede hacer que algunos usuarios sientan que la ventana de contexto “ya no les pertenece”.
Herramientas (Tools)
Los agentes necesitan usar herramientas, pero si se presentan demasiadas, pueden sentirse abrumados. Esto suele suceder porque las descripciones de herramientas pueden superponerse, causando confusión al modelo sobre cuál elegir. Una forma de abordarlo es aplicar RAG (Generación Aumentada por Recuperación) a las descripciones de herramientas, recuperando la herramienta más relevante para la tarea según la similitud semántica. Algunos estudios recientes han mostrado que este enfoque puede triplicar la precisión en la elección de herramientas.
Conocimiento (Knowledge)
La generación aumentada por recuperación (RAG) es en sí misma un gran tema y puede convertirse en un desafío central en la ingeniería del contexto. Los agentes de código son uno de los mejores ejemplos de RAG en producción a gran escala. Varun de Windsurf resume bien algunos de los desafíos:
Indexar código ≠ Recuperar contexto … lo que estamos haciendo es analizar código a través de un AST (Árbol de Sintaxis Abstracto) y fragmentarlo a lo largo de fronteras con significado semántico … pero a medida que crece el tamaño de la base de código, la búsqueda de incrustaciones vectoriales como método heurístico de recuperación se vuelve poco confiable … debemos confiar en una combinación de diferentes técnicas, como búsqueda por grep/búsqueda de archivos, recuperación basada en grafos de conocimiento, y … un paso de reordenación donde el contexto se clasifica por relevancia.
Comprimir Contexto (Compress Context)
Comprimir contexto significa conservar únicamente los tokens necesarios para la ejecución de la tarea.
Resumen de contexto (Context Summarization)
Las interacciones de los agentes pueden abarcar cientos de rondas, utilizando herramientas que consumen una gran cantidad de tokens. El resumen es una estrategia común para enfrentar estos desafíos. Si has usado Claude Code, ya has visto su aplicación práctica. Cuando la utilización de la ventana de contexto supera el 95%, Claude Code realiza una “compresión automática”, resumiendo la trayectoria completa de interacción entre el usuario y el agente. Este proceso de compresión de la trayectoria del agente puede llevarse a cabo de diversas maneras, como a través de resúmenes recursivos o jerárquicos.
Incorporar un paso de resumen en el diseño del agente puede ser muy útil. Por ejemplo, puede ser utilizado para postprocesar las llamadas de ciertas herramientas (especialmente herramientas que consumen muchos tokens, como las de búsqueda). Además, Cognition menciona la importancia del resumen en los límites de la interacción entre agentes para reducir el consumo de tokens en el proceso de transferencia de conocimiento. Capturar eventos o decisiones específicas puede ser un desafío para resumir. Cognition ha utilizado un modelo de ajuste fino para esto, lo que resalta la cantidad de trabajo que puede requerirse en esta etapa.
Recorte de contexto (Context Trimming)
Los resúmenes generalmente utilizan LLM para extraer los fragmentos de contexto más relevantes, mientras que el recorte es más como filtrar o “podar” el contexto, como dice Drew Breunig. Esto puede hacerse mediante reglas heurísticas codificadas, como eliminar mensajes más antiguos de una lista de mensajes. Drew también mencionó a Provence, un podador de contexto entrenado para tareas de preguntas y respuestas.
Aislar Contexto (Isolating Context)
Aislar contexto se refiere a descomponer el contexto para ayudar al agente en la ejecución de tareas.
Múltiples Agentes (Multi-agent)
Una de las formas más populares de aislar contexto es distribuirlo entre múltiples subagentes. Una de las motivaciones para la biblioteca Swarm de OpenAI es la “separación de preocupaciones”, donde un equipo de agentes maneja tareas secundarias. Cada agente tiene su propio conjunto de herramientas, instrucciones y ventana de contexto independiente.
El sistema de investigación de múltiples agentes de Anthropic proporciona una fuerte evidencia de que múltiples agentes con contextos independientes superan el rendimiento de un único agente, en gran medida debido a que la ventana de contexto de cada subagente puede concentrarse en una sub-tarea más específica. Como se señala en su blog:
Los subagentes operan paralelamente con sus respectivas ventanas de contexto, explorando diferentes aspectos del problema.
Naturalmente, los múltiples agentes también enfrentan desafíos, incluyendo el consumo de tokens (por ejemplo, Anthropic reportó que su consumo de tokens es 15 veces el de una conversación), la necesidad de ingeniería de indicaciones cuidadosa para planificar el trabajo de subagentes y los problemas de coordinación entre subagentes.
Aislamiento de contexto mediante entornos (Context Isolation with Environments)
El proyecto de investigadores profundos de HuggingFace muestra otro interesante ejemplo de aislamiento de contexto. La mayoría de los agentes utilizan llamadas a herramientas API, que devuelven objetos JSON (parámetros de herramientas), que luego se pasan a herramientas (como APIs de búsqueda) para obtener retroalimentación (como resultados de búsqueda). HuggingFace utiliza un CodeAgent, que genera directamente el código que contiene las llamadas a herramientas requeridas. Este código se ejecuta luego en un entorno de sandbox. El contexto específico devuelto por las llamadas a herramientas (como el valor de retorno) se reenvía al LLM.
Esto permite que el contexto esté aislado dentro del entorno del LLM. Hugging Face señala que esta es una excelente forma de aislar objetos que consumen muchos tokens:
Los Code Agents son mejores manejando estados … ¿Necesitas almacenar imágenes/audio/datos adicionales para su uso posterior? No hay problema, solo asígnalos como una variable para que los uses más tarde.
Estado (State)
Es notable que el objeto de estado en tiempo de ejecución del agente también es una buena forma de aislar el contexto. Esto puede funcionar de manera similar a un sandbox. El objeto de estado puede diseñarse con un esquema (por ejemplo, un modelo Pydantic) que incluya campos que se puedan escribir en el contexto. Un campo en el esquema (como messages
) puede exponerse al LLM en cada interacción del agente, mientras que el esquema puede aislar información en otros campos para ser utilizada de manera más selectiva.
Conclusión
Los patrones de ingeniería del contexto para agentes están en evolución continua, pero podemos clasificar los métodos comunes en cuatro categorías: escribir, seleccionar, comprimir y aislar:
- • Escribir contexto implica almacenar información fuera de la ventana de contexto para su uso durante la ejecución de tareas por parte del agente.
- • Seleccionar contexto implica mover la información necesaria a la ventana de contexto para ayudar al agente en la ejecución de tareas.
- • Comprimir contexto significa conservar solo los tokens necesarios para la ejecución de la tarea.
- • Aislar contexto implica descomponer el contexto para ayudar al agente en la ejecución de su tarea.
Comprender y aplicar estos patrones es la tarea central para construir agentes eficientes en el presente.