Mientras construyo agentes día a día, veo cómo los Frameworks Agénticos desarrollan distintos enfoques para resolver los mismos problemas centrales de orquestación. En el fondo, las diferencias se reducen a cómo los diseñadores de cada framework piensan en los bloques comunes de un sistema agéntico. El problema es que todos usan terminología distinta y jerga que hace esto parecer más complicado de lo que es. Creo que eso genera una especie de parálisis de decisión, especialmente en quienes empiezan. Esta serie de blogs y videos es mi intento por sacar a la luz los patrones que subyacen a todos los sistemas agénticos.
Este post acompaña a un video que publiqué hace un par de días. ¡Te recomiendo verlo!
Así está configurado el experimento
Implementé el mismo sistema agéntico con tres frameworks distintos:
- LangGraph
- OpenAI’s Agents SDK
- Google’s Agent Development Kit (ADK)
En todos los casos, el agente usa una arquitectura de “supervisor”: un solo agente recibe la mayoría de los prompts del usuario y decide si delega una tarea a otros agentes más especializados. En este caso, tengo un agente de Google capaz de leer y enviar correos, y un agente de Slack capaz de leer y enviar mensajes. Exijo aprobación HITL explícita en todas las herramientas de “envío”.
Y claro, como estas herramientas son reales integraciones, las implementé usando Arcade.dev
Planeo agregar más frameworks a la lista, pero con 3 ya es suficiente para ver el patrón emergente de orquestación de agentes. También es un buen punto de partida para una comparación corta y más detallada.
Los compararé en varios aspectos, pero el primero es Human-in-the-Loop.
¿Qué es Human-in-the-Loop (HITL)?
Como sucede con muchos términos en ingeniería de software y ciencias de la computación, este tiene una definición flexible según el contexto.
Wikipedia remite a la definición del DoD de 1998:
“Un modelo que requiere interacción humana”
Lo cual básicamente puede significar casi cualquier cosa. Para tener una definición útil en el contexto de los sistemas agénticos, quiero ofrecer una definición “dura” de HITL:
Un modelo autónomo con pasos que exigen interacción humana
No es tan distinto de 1998, pero ahora al menos podemos decir que si marcamos una herramienta como “requiere interacción humana antes de ejecutarse” y el agente no pide permiso para hacerlo, tenemos un problema.
¿Cómo aborda cada framework el HITL?
Por suerte sí es posible implementar un cumplimiento estricto de los flujos HITL en todos los frameworks que probé. Sin embargo, cada uno tiene su propio enfoque.
Lo que hay de bastante universal en cómo los frameworks abordan esto es que siempre involucran una herramienta que obtiene información del usuario (humano). Eso nos da una pista sobre la característica “natural” de los LLMs que habilita las construcciones HITL: el function-calling (es decir, las tools). En el fondo, la pregunta se traduce en qué tan fácil (o difícil) es controlar el flujo alrededor de una llamada a una herramienta.
Google’s Agent Development Kit
Este framework aborda esto con callbacks. La documentación de HITL no está bien desarrollada al momento de escribir esto. Su repositorio sí tiene un ejemplo llamado human_in_loop, pero no creo que encaje con mi definición anterior, ya que el agente podría alucinar y simplemente llamar a la función. El enfoque sugerido ahí es “forzar” una llamada para pedir aprobación usando prompt engineering.
Lo que me gusta de su enfoque es la simplicidad. Los callbacks te permiten “interceptar y controlar” el flujo de información según el contexto antes y después de la llamada a la herramienta. Si haces tus validaciones en el callback before, retornas None y la herramienta real se ejecuta y continúa con el flujo habitual. Si quieres interceptar, puedes retornar otra cosa, como un string o un diccionario, y eso se tratará como si viniera de la herramienta.
Lo que no me gusta es que necesito manejar el “marcado” de las herramientas fuera del código de orquestación agéntica. Si quisiera tener un callback before específico para cada herramienta, tengo que manejar ese enrutamiento yo mismo. No es la mejor ergonomía en mi opinión.
OpenAI’s Agents SDK
Este framework no soporta bien el control de flujo. Puedes forzar HITL mediante inyección de código: crear una herramienta de función personalizada compatible con el Agents SDK y luego envolver la función on_invoke_tool para integrarla manualmente en tu propia función de control de flujo. Además de esa incomodidad, resulta extraño retornar algo desde el callback como si viniera de la herramienta.
Lo que me gusta de su enfoque es que te obliga a profundizar en Python (si no hubiera conocido functools, este post habría sido muy distinto).
Lo que no me gusta es que considero el control de flujo una parte esencial del diseño de sistemas agénticos. Sé que queremos agentes más autónomos que hagan todo lo útil que imagines, pero si voy a desplegar algo a producción, necesito poder decir “ESPERA, NO ENVÍES ESE CORREO” sin tener que dar mil vueltas para lograrlo.
LangGraph
LangGraph es el único framework (hasta ahora) que tiene documentación específica para HITL. Su enfoque se apoya en interrupciones y en la idea subyacente de un estado de grafo que puede reanudarse en cualquier punto. Son conceptos suficientemente sofisticados como para no explicarlos a fondo aquí, pero te recomiendo mucho leer sobre ellos en la documentación de LangGraph.
Este es mi enfoque favorito por mucho. Creo que las interrupciones son la abstracción correcta para esto (son un tipo de primitiva explícita de control de flujo). También creo que los grafos son la herramienta de modelado correcta para sistemas multi-agente. De las tres implementaciones, esta fue la más fácil porque simplemente seguí la documentación y ¡listo! al final tenía un agente funcionando.
Lo que no me gusta de LangGraph/LangChain es que creo que hay demasiadas capas de abstracción y se siente verboso y algo inflado. Pero eso no es lo que evalúo en este post, así que dejo ese reclamo para otra ocasión.
¿Entonces cuál es el mejor framework?
Bueno, como muchas cosas en la vida: ✨depende✨
Si vas a lanzar a producción hoy, definitivamente LangGraph. Si estás explorando y aprendiendo, te recomiendo Google ADK (por ahora). Tiene las ideas correctas y la implementación está tan en sus primeras etapas que es más fácil para quienes empiezan entender la arquitectura del framework y “ver” los patrones con más claridad. Si quieres explorar más, dale una oportunidad también al OpenAI Agents SDK; no brilla en human-in-the-loop, pero vale la pena ver cómo aborda la orquestación agéntica.
¡Pruébalo hoy!
El código y los recursos de este experimento son open-source.
Vas a necesitar:
- Una API Key de Arcade.dev
- Una API Key de AgentOps para tracing y observabilidad
- Clona el repositorio.
¡A construir!
Recursos:
Tutorial completo: https://youtu.be/VgQp-kMAt90
Descarga el código: https://github.com/ArcadeAI/framework-showdown
Prueba Arcade.dev: https://try.arcade.dev/register
Obtén observabilidad con AgentOps: https://www.agentops.ai/

