- Qodo es un equipo que desarrolla herramientas de asistencia de programación con IA desde la era de GPT-3, y recientemente eligió el framework LangGraph para crear agentes de programación más flexibles y dinámicos
- Este documento explica cómo LangGraph logró satisfacer al mismo tiempo la flexibilidad del flujo de desarrollo y los estándares de calidad del código
De un enfoque estructurado inicial a la transición hacia LangGraph
- En los inicios basados en GPT-3, el foco estaba en tareas estructuradas con flujos claros, como generación de pruebas, revisión de código y trabajo de mejora
- Después de Claude Sonnet 3.5, el rendimiento de los LLM mejoró notablemente, lo que hizo posible diseñar agentes más dinámicos
- Antes solo eran posibles flujos de trabajo estandarizados, pero se buscó desarrollar un sistema capaz de responder con flexibilidad a las solicitudes de los usuarios aprovechando los nuevos modelos
- En el proceso de buscar un framework que permitiera experimentar y validar con rapidez, se terminó eligiendo LangGraph, que pudo escalar más allá de una prueba de concepto inicial hasta un producto real
Convivencia entre flexibilidad y reglas claras
- LangGraph ofrece una estructura de grafo basada en una máquina de estados (
state machine)
- Cada nodo se encarga de una etapa individual del flujo de trabajo (recolección de contexto, planificación, ejecución, validación, etc.), y las aristas (
edge) definen las reglas de transición entre etapas
- Según la densidad de las aristas, cambia el nivel de flexibilidad o estructuración del flujo de trabajo
- Grafo disperso → flujo fijo y predecible
- Grafo denso → flujo dinámico y posibilidad de elegir entre varias rutas
- La ventaja de LangGraph es que, a medida que el modelo evoluciona, se puede reajustar fácilmente el grado de estructuración del flujo de trabajo
- El flujo principal tiene una estructura como la siguiente:
- Recolección de contexto → planificación de tareas → ejecución de código → validación de resultados → repetición en caso de fallo
Una interfaz simple e intuitiva
- LangGraph permite definir flujos de trabajo de forma declarativa, por lo que el código se lee casi como documentación
- Funciona declarando un grafo de estado y agregando nodos y aristas
- También es fácil implementar flujos condicionales (por ejemplo, volver al nodo de ejecución si falla la validación)
- A diferencia de las abstracciones complejas de LangChain, LangGraph expone la lógica en su estructura, lo que ofrece una buena experiencia para desarrolladores
Reutilización entre distintos flujos de trabajo
- Gracias a su estructura basada en nodos, es fácil reutilizar componentes
- Por ejemplo, los nodos de recolección de contexto y validación se reutilizan repetidamente en la mayoría de los flujos
- Incluso al crear nuevos flujos especializados (como TDD), es posible volver a conectar nodos existentes para ampliar el sistema rápidamente
Funcionalidad de gestión de estado incluida de forma nativa
- LangGraph incluye de forma nativa funciones de almacenamiento de estado, lo que hace muy simple implementar persistencia
- Por ejemplo, la función de checkpointing mediante Postgres puede configurarse con unas pocas líneas de código
- Se puede guardar el estado completo, incluido el contexto recopilado, los planes y los resultados de ejecución, y también admite ramas y rollback
- También se pueden sustituir fácilmente otros métodos, como SQLite o memoria en proceso
Aspectos que necesitan mejorar
- Como es un framework que evoluciona rápidamente, a veces la documentación es incompleta o las actualizaciones tardan en reflejarse
- Afortunadamente, la comunicación con los mantenedores a través de Slack fue rápida y muy activa
- Las pruebas de sistemas LLM no deterministas siguen siendo un desafío
- En el caso de agentes que interactúan con un IDE, es difícil construir un entorno de pruebas automatizado
- Algunas funciones del IDE son muy difíciles de simular, por lo que hubo que depender de pruebas manuales, y eso ralentizó la velocidad de iteración
- Los frameworks maduros suelen ofrecer infraestructura para pruebas y mocking, y se espera que LangGraph también evolucione en esa dirección
Aún no hay comentarios.