Contexto extendido. Los agentes también necesitan tomar notas

Publicado el
pantalla con notas a mano

El propósito de este post es describir una estrategia de ampliación de contexto en el desarrollo de proyectos complejos con agentes. Pero como no solo los LLMs necesitan contexto para comprender ideas, comienzo con un poco de contexto para humanos.

Si tienes prisa y pasas de contexto previo, adelante y no te preocupes, nadie sabrá que has tenido este mini ataque de holgazanería 😬

Contexto para humanos

La aparición de los agentes en los asistentes de código ha supuesto un salto enorme en el desarrollo de software asistido por IA.

Lo primero que llama la atención es su capacidad para iterar de forma automática sobre sus propias respuestas, crear/modificar archivos y correr comandos en la terminal. Pero creo que la habilidad que realmente marca la diferencia es que son capaces de indexar y analizar el código de un proyecto, incluídas las dependencias entre archivos y las relaciones entre sus componentes.

Si los asistentes nos permitían trabajar a nivel archivo, con la aparición de los agentes hemos pasado a trabajar a nivel arquitectura. Ahora la IA no sólo nos ayuda en la escritura/fixing de partes de nuestro código, si no que nos asiste en la construcción de proyectos completos (a una velocidad que a veces da vértigo).

Pero este aumento en la complejidad de las tareas desarrolladas provoca algo que antes era difícil de ver, llevamos al límite la ventana de contexto de los propios agentes. Desarrollar un proyecto completo requiere muchas tareas, por lo que llegado a un punto el agente empieza a olvidar partes de la conversación, haciendo muy difícil (por no decir imposible) mantener la coherencia del trabajo que estamos realizando.

Cuando ocurre esto lo más normal es abrir un nuevo chat para reiniciar la ventana de contexto, pero, ¿cómo llevamos al agente al punto en el que estábamos? ¿Cómo hacerle recordar que había construido ya y que le queda por desarrollar?

En mi caso estoy usando una estrategia a la que he llegado a partir de mis interacciones con Cursor primero y GitHub Copilot Agent Mode después y a la que llamo Contexto Extendido. Vale, sé que no soy muy original, pero creo que expresa decentemente la idea 🤓

Contexto extendido (usando markdowns como memoria)

Esta estrategia se basa en el almacenamiento de archivos markdown con información del proyecto en una carpeta llamada context/

La idea es crear una memoria a la que el agente (o nosotros) puede recurrir en todo momento permitiéndole saber en qué punto está y qué le queda por hacer.

Gracias a esta memoria podemos dividir el trabajo en tareas pequeñas y usar tantos chats como sean necesarios para evitar alcanzar el límite de la ventana de contexto. Manteniendo de esta forma la coherencia y calidad del trabajo de principio a fin.

Esquema de trabajo

En la siguiente imagen se resume el esquema de trabajo.

Esquema de trabajo con 3 chats

Chat 0

  1. Prompt para crear un experto sintético en la tecnología del proyecto: rol, experiencia, stack técnico, forma de razonamiento y formato de respuesta. Finalizado con un "no escribas código aun".
  2. Prompt donde pedimos que:
    • analice el código del proyecto,
    • genere un informe de su análisis,
    • y lo guarde en formato .md dentro de la carpeta context/ con un 00- delante del nombre del archivo. Si el informe no nos gusta del todo, podemos iterar sobre él hasta quedar satisfechos.
  3. Prompt donde:
    • indicamos qué queremos hacer (requisitos),
    • pedimos que genere un plan maestro,
    • y lo guarde en formato .md dentro de la carpeta context/ con un 01- delante del nombre del archivo. Al igual que con el análisis, podemos iterar sobre él hasta quedar satisfechos.

Chat 1

  1. Mismo prompt para creación de experto sintético.
  2. Prompt pidiendo que lea e interiorice el análisis del proyecto.
  3. Prompt pidiendo que lea e interiorice el plan maestro.
  4. Prompt pidiendo que ejecute el punto 1 del plan maestro.
  5. Iteración normal hasta terminar el punto 1.
  6. Prompt pidiendo que documente el trabajo desarrollado en el punto 1. en un .md dentro de context/ siguiendo la numeración actual y que marque el punto como resuelto en el plan maestro.

Chat n

  1. Mismo prompt para creación de experto sintético
  2. Prompt pidiendo que lea e interiorice el análisis del proyecto
  3. Prompt pidiendo que lea e interiorice el plan maestro
  4. Prompt pidiendo que ejecute el punto n del plan maestro
  5. Iteración normal hasta terminar el punto n.
  6. Prompt pidiendo que documente el trabajo desarrollado en el punto n. dentro del .md de documentación creado anteriormente y que marque el punto como resuelto en el plan maestro.

Evidentemente, este esquema se trata de una base de trabajo que puede ser modificada en función de las necesidades de cada proyecto y que espero mejorar con el tiempo. Aun así, en esta primera versión, ya aporta algunas ventajas respecto a no usar ninguna estrategia.

Ventajas del contexto extendido

  1. Evitamos la pérdida de contexto: el agente puede consultar los archivos cuando necesite recordar de dónde viene y a dónde va.
  2. Continuidad: podemos cerrar el ordenador y retomar el trabajo días después sin perder el hilo.
  3. Colaboración: otros miembros del equipo pueden entender fácilmente el estado del proyecto y continuarlo (con sus agentes).
  4. Documentación automática: al finalizar, tenemos ya una documentación estructurada.
  5. Facilita la división de tareas: orientando el trabajo hacia metodologías ágiles y sprints.

Terminando

Resulta irónico que en esta imitación del pensamiento humano que representan los modelos de lenguaje, no sólo hayamos copiado sus capacidades, sino también sus limitaciones. Y entre ellas está una muy humana: el olvidar. Así que al igual que los imperfectos humanos, los imperfectos LLMs también necesitan tomar notas. Eso sí, si son en markdown mejor, ¡aman el markdown!

Por cierto, ¿tú haces tomar notas a tus agentes o tienes alguna otra estrategia a la hora de desarrollar proyectos complejos? Si trabajas de otra forma, me encantaría conocer tu experiencia 😊