La ingeniería de sistemas basados en modelos de lenguaje de gran tamaño ha experimentado una transformación radical en los entornos de producción, pasando de simples textos y prompts aleatorios vinculados a códigos de enlace básicos, a marcos de ejecución estructurados conocidos como estructuras agénticas (Agentic Harnesses). Esta evolución tiene como objetivo rodear a los modelos probabilísticos con el soporte de software necesario para garantizar la fiabilidad, la confiabilidad y la observabilidad en entornos de trabajo reales.
Fase 1: Cadenas y procesos lineales simples
Los sistemas tempranos se basaban en un flujo de trabajo lineal y simplificado conocido como cadenas (Chains). Este enfoque se caracteriza por su rapidez de ejecución y bajo coste computacional en tareas estrechas como el resumen simple. La idea consiste en pasar la salida del primer paso como entrada para el segundo paso, y así sucesivamente, utilizando los modelos como cajas negras que reciben y producen texto.
Por ejemplo, LinkedIn utilizó en sus primeras etapas cadenas fijas que incluían clasificación y direccionamiento, seguidas de la recuperación de datos mediante herramientas de búsqueda para enriquecer la respuesta, y finalmente la generación y el filtrado. A pesar de la rapidez de desarrollo, estos sistemas sufrían de fragilidad estructural; cualquier error en una etapa temprana provocaba la interrupción de todo el flujo de trabajo debido a la falta de mecanismos de respuesta y corrección automática.
Fase 2: Grafos para mejorar la estructura y el control
A medida que aumentaba la complejidad de los casos de uso, los desarrolladores se desplazaron hacia el uso de estructuras de grafos (Graphs) para introducir ramificaciones condicionales, paralelismo, reintentos y gestión de estado (State Management). Los nodos en estas estructuras representan las diferentes tareas, mientras que las aristas controlan el flujo de control.
Estas estructuras permitieron el diseño de sistemas multiagente (Multi-Agent Systems) con un coordinador principal que gestiona el flujo de tareas y la comunicación asíncrona para garantizar el orden y la continuidad. Estas arquitecturas se utilizaron para lanzar el Asistente de Contratación (Hiring Assistant), permitiendo a los responsables de contratación automatizar tareas rutinarias. Sin embargo, estos marcos seguían limitados a flujos de trabajo definidos por humanos, lo que podía dificultar su mantenimiento cuando aumentaba el número de casos excepcionales.
Fase 3: La programación como herramienta fundamental de razonamiento
La evolución más reciente consiste en depender del código en lugar de las instrucciones lingüísticas visuales como medio principal de razonamiento. En lugar de limitarse a interpretar los problemas textualmente, estas estructuras generan código y lo ejecutan en entornos aislados y probados.
El código se distingue por su naturaleza determinista y verificable en comparación con las salidas probabilísticas no garantizadas de los modelos de lenguaje. Esta arquitectura se basa en un entorno de ejecución aislado, herramientas de registro y monitoreo, estructuras de verificación automática y bucles de depuración iterativos que corrigen errores y vuelven a ejecutar el código hasta que se cumplen los criterios requeridos. LinkedIn aplicó este enfoque internamente para permitir que los empleados consulten datos mediante lenguajes de consulta estructurados y Python, de acuerdo con los marcos de privacidad y gobernanza.
Mejores prácticas para la ingeniería de sistemas agénticos
- Tratar las salidas como datos no fiables: Es necesario validar las salidas de los modelos antes de pasarlas a cualquier lógica de programación posterior.
- Separar la planificación de la ejecución: Permitir que el modelo proponga planes mientras un marco de trabajo de software estricto se encarga de la ejecución.
- Invertir en monitoreo: Realizar un seguimiento preciso de los estados de ejecución para revisar errores y registros de estado sin comprometer los datos sensibles.
- Desarrollo continuo: Construir bucles de retroalimentación analítica para mejorar el rendimiento de los sistemas con el tiempo.
Elección de la abstracción de ingeniería adecuada
No todos los problemas técnicos requieren la complejidad operativa de los grafos o del código avanzado. Las cadenas simples siguen siendo la opción más adecuada y menos costosa en términos de tiempo y capacidad computacional para tareas directas como el resumen y el procesamiento de contenido. Por otro lado, los grafos se vuelven necesarios cuando se requiere ramificación y control de estado, mientras que los marcos de programación se utilizan en áreas críticas que requieren precisión y verificación estrictas, como la ingeniería de software y el análisis de datos complejos.