Saltar al contenido principal
Jordi Izquierdo Montalbán
Proyectos

Agente Graphos

Le describo un grafo de LangGraph en lenguaje natural y el agente lo diseña, me enseña el código para que lo apruebe, lo genera con sus tests, los ejecuta en un entorno aislado y se autocorrige si fallan.

Código privado: te lo enseño en una entrevista

LangGraph, CrewAI, Pydantic, Python, 6 proveedores LLM

El problema

Construir un grafo de LangGraph desde cero tiene mucho código repetitivo: definir el estado, los nodos, las aristas condicionales y, sobre todo, los tests. Quería describir lo que necesito en lenguaje natural y que un agente hiciera ese trabajo, pero sin darle vía libre para escribir y ejecutar código en mi máquina.

La solución

Agente Graphos combina dos frameworks: LangGraph orquesta el flujo con estado y CrewAI pone a trabajar tripulaciones de agentes por roles (diseño y codificación).

LangGraph orquesta el flujo y CrewAI pone las tripulaciones; nada se escribe en disco sin mi aprobación.
  1. Diseña el esquema del grafo (nodos, aristas, estado) y un diagrama Mermaid.
  2. Me pide aprobación con interrupt() de LangGraph, enseñándome el contenido de los ficheros, no solo sus nombres, antes de tocar el disco.
  3. Genera el StateGraph y su suite de tests en un workspace aislado por sesión.
  4. Valida: analiza el AST y ejecuta los tests en un subproceso aislado. Si fallan, vuelve a codificar con el error como contexto, hasta tres veces, y vuelve a pedirme aprobación antes de reescribir.

Seguridad en profundidad

Un agente que escribe y ejecuta código es de lo más arriesgado que se puede construir, así que puse varias capas:

  • Workspace confinado: cada ruta se resuelve y se comprueba que no escapa del directorio de la sesión (incluidos los saltos entre unidades en Windows).
  • Filtro AST: bloquea imports de red y de sistema (socket, requests, subprocess, ctypes…) y llamadas como eval, exec o __import__.
  • Subproceso aislado: python -I, directorio de trabajo confinado, entorno saneado por lista blanca (sin claves ni tokens) y pytest con la raíz fijada al sandbox.
  • Timeout estricto de 30 segundos para cortar bucles infinitos.

Stack desglosado

  • Orquestación: LangGraph (StateGraph, interrupt, Command).
  • Agentes por roles: CrewAI.
  • Validación: Pydantic para estado y configuración.
  • Modelos: Anthropic, OpenAI, Gemini, OpenRouter, Ollama y Groq, autodetectados por las claves presentes y con Ollama local como respaldo.
  • Tests: arnés a coste 0 con un LLM falso, sin llamadas a APIs.

Estado y aprendizajes

Por qué está en pausa: lo que aprendí aquí lo llevé a langgraph-template y a mi agente auditor de código, que hoy son mi forma de construir agentes LangGraph. Lo retomaré para añadir persistencia de hilos en SQLite.

Lo que aprendí: a combinar dos frameworks de agentes con responsabilidades claras (LangGraph manda y CrewAI ejecuta) y a diseñar el human-in-the-loop como una pieza del grafo, no como un input() suelto.