ADSM: directorios de nivel superior

Fecha de publicación: 2025-11-22

Etapa 3 del AFKP (inmersión). La etapa 2 (resonancia) se describe en la entrada del blog ADSM: directorios de nivel superior.

La naturaleza lingüística de los agentes

Los agentes más populares que se utilizan hoy para crear aplicaciones de software se basan en Grandes Modelos de Lenguaje (LLM). Lo principal que convierte a un agente "inteligente" es preparar una solicitud al LLM (un prompt) y luego analizar el resultado de esa solicitud y registrarlo como un archivo de texto nuevo (por ejemplo, con código fuente) o como cambios en uno ya existente.

Por el momento puedo formular cuatro afirmaciones que llamo los "4 axiomas de ADSM":

  1. Por su naturaleza, un modelo de lenguaje puede servir de herramienta para transformar conocimiento en código sin necesidad de comprenderlo.
  2. Toda la interacción con el modelo ocurre únicamente mediante texto.
  3. El modelo solo trabaja con textos que son estadísticamente significativos para él.
  4. El modelo realiza la inferencia dentro de un contexto finito donde la densidad de conexiones estadísticas disminuye conforme aumenta el volumen.

Mi enfoque para estructurar los archivos del proyecto está impulsado por estos axiomas. Ya he señalado que una persona y un agente interactúan de forma iterativa a través de un conjunto de textos jerárquicamente estructurados. En esta publicación describo la estructura de directorios de nivel superior que utilizo actualmente en mis proyectos con agentes LLM.

Código y documentos

Inicialmente dividí todos los archivos en dos repositorios de GitHub:

Para permitir que el agente actuara en ambos espacios, los dos repositorios se unieron en una sola estructura de archivos al configurar la versión en la nube del agente Codex. Monté el repositorio de documentos en el directorio ./ctx del repositorio base (con las fuentes) al iniciar el agente Codex, y para el agente era una única estructura de archivos, aunque en realidad estuviera repartida en diferentes repositorios. A la vez, el agente solo podía hacer commits en el repositorio base. Los documentos del proyecto se usaban en modo de solo lectura.

Esta experiencia me hizo comprender que la documentación de un mismo producto puede montarse sobre diferentes bases de código en diversos lenguajes de programación. El mismo producto puede publicarse como distintas aplicaciones escritas para diferentes plataformas.

Es evidente que el lenguaje elegido para la implementación impone sus propios requisitos a la estructura de archivos del repositorio con el código fuente. Un proyecto en Python será diferente de uno en Node.js, pero en ambos casos se puede montar un directorio ./ctx/ en el repositorio del código y colocar allí los documentos del contexto cognitivo. O incluso se puede prescindir del montaje y crear el directorio ./ctx/ directamente en el repositorio de fuentes si el proyecto no es demasiado grande. En ese caso se obtiene una ventaja: el agente también puede modificar la documentación si es necesario.

Producto y aplicación

De esta comprensión surgió la idea de que toda la documentación del directorio ./ctx/ puede dividirse en dos partes desiguales:

./ctx/
    product/
    rules/
    

Los documentos del directorio product/ definen el esqueleto de la futura aplicación. Regulan qué debe hacer la aplicación pero no explican cómo. En esencia, estos documentos conforman el campo de acción del agente y dirigen su atención hacia los puntos críticos para el negocio. Es una exposición de proposiciones estadísticamente únicas. Por norma cada idea de negocio busca diferenciarse de la competencia y estos documentos contienen afirmaciones que probablemente no figuraban en el conjunto de entrenamiento del modelo que alimenta al agente.

Los documentos del directorio rules/ constituyen la parte más importante para que el agente genere o modifique código. Regulan las acciones del agente al nivel necesario para escribir código fuente. Debido a la naturaleza estadística de los LLM, cuanto más "promedio" estén formulados estos documentos, cuanto más se acerquen al "promedio" del conjunto de entrenamiento, menos texto necesita el agente para generar código funcional siguiendo estas reglas.

En mi proyecto de demostración construí una aplicación web utilizando mi propio contenedor de objetos con inyección de dependencias en el constructor, lo que requirió varios documentos separados en ./rules/ que regulaban la creación de nuevos módulos ES6 que pudiera utilizar mi contenedor.

Comunicación humana con el agente

./ctx/
    agent/
    

En términos generales, este directorio almacena información operativa que inmediatamente se convierte en archivística. A través de este catálogo, el agente informa a su supervisor (una persona) sobre las acciones que ha realizado durante la iteración actual de trabajo con el código (ejecución de la tarea). Por norma, la persona que asigna la tarea está dentro del contexto de la misma en el momento de establecerla, pero ese contexto se disipa y se olvida rápidamente (aproximadamente en dos semanas, según mi experiencia).

Si se trabaja solo en el proyecto, como en mi caso, la necesidad de estos informes no es evidente: los agentes trabajan tan rápido que no me da tiempo a perder el contexto de la tarea (menos de una hora). Pero para el trabajo en equipo o proyectos más largos, dichos informes son útiles porque ayudan a cualquier miembro del equipo "de carne y hueso" a recuperar el contexto de desarrollo cuando se pierde. También resultan muy útiles cuando el agente ejecuta mal los comandos: analizarlos permite descubrir por qué el agente entendió mal la tarea.

Inicialmente, cuando separé los documentos del contexto y el código fuente en repositorios distintos, este directorio no formaba parte del contexto cognitivo porque debía estar dentro del repositorio base para poder hacer commits en la versión en la nube del agente Codex. Al ejecutar la versión CLI del agente o cuando las fuentes y el contexto cognitivo están en el mismo repositorio, el directorio ./agent/ puede permanecer dentro del contexto cognitivo (./ctx).

Resumen

Dado que el núcleo de cualquier agente—no solo Codex—es preparar un prompt para un LLM y transformar el resultado de la inferencia, los archivos de un proyecto deben estructurarse teniendo en cuenta la naturaleza de los LLM. En mi caso esto da lugar a la siguiente estructura de directorios de nivel superior:
./ctx/
    agent/
    product/
    rules/
    

Esta estructura no constituye un estándar reconocido: simplemente refleja mi experiencia con el agente Codex. En líneas generales, he reflexionado y documentado mi práctica en esta publicación. La estructura de los subdirectorios en niveles inferiores ya va tomando forma, pero todavía no estoy listo para fijarla. Puedes consultar la estructura que describo en mi proyecto de demostración.

Si lo deseas, la etapa 4 del AFKP (significado) se puede realizar en este canal de Telegram.