De Chatbot a Agente: Orquestación asíncrona de IA en Symfony
En el panorama actual del desarrollo de software la etiqueta inteligencia artificial se ha vuelto omnipresente pero muchas integraciones son simples envoltorios HTTP hacia OpenAI u otros proveedores. Un servicio que solo envía y recibe texto carece de memoria y de capacidad para actuar sobre el dominio de la aplicación. Un agente IA en cambio razona, planifica y ejecuta tareas manteniendo estado e interactuando con un conjunto de herramientas que representan servicios reales de la aplicación.
En este artículo explico cómo construir un agente asíncrono y con memoria usando componentes centrales de Symfony como Messenger Doctrine y el Service Container. El agente que describo usa la funcionalidad de Tool Calling de OpenAI y un patrón ReAct para razonar y actuar sobre herramientas internas y externas. El ejemplo práctico es un caso de uso para comercio electrónico: el usuario pregunta cual es el estado de su pedido y si hay retrasos en envíos en su zona. Resolver esa consulta exige dos acciones distintas: consultar la base de datos interna para obtener el estado del pedido y buscar en la web noticias sobre incidentes de transporte.
Diseño arquitectónico clave: no ejecutar la lógica en un controlador de forma síncrona. Las llamadas a LLM pueden ser lentas y variables. En su lugar el controlador recibe el mensaje del usuario valida y despacha un mensaje ligero RunAgentTask al bus de Messenger devolviendo inmediatamente un estado 202 Accepted. Un worker de Messenger recoge la tarea y la pasa al AgentOrchestrator que actúa como cerebro, carga la memoria desde Doctrine y consulta un ToolRegistry para saber qué herramientas están disponibles.
Las herramientas son servicios Symfony normales etiquetados mediante un atributo personalizado AsAgentTool y que implementan una interfaz AgentToolInterface. Ejemplos: OrderLookupTool que consulta la tienda de pedidos y WebSearchTool que hace búsquedas externas mediante symfony http client. El ToolRegistry descubre las herramientas mediante reflexión y un ServiceLocator etiquetado, expone el esquema JSON que requiere OpenAI y permite invocarlas de forma perezosa cuando el modelo lo solicita.
El bucle ReAct funciona así: el orquestador formatea el historial de mensajes usando entidades Conversation y Message persistidas con Doctrine y llama a la API de chat con la lista de herramientas. Si la respuesta del modelo solicita una llamada a herramienta el orquestador persiste ese pedido como un mensaje assistant con datos de tool calls ejecuta la herramienta correspondiente y añade el resultado como una observación con rol tool. El bucle se repite hasta que el modelo devuelve una respuesta final natural en lenguaje humano que se persiste y queda disponible para el frontend.
Memoria y modelado: la entidad Conversation contiene una colección ordenada de Message. Cada Message guarda rol content createdAt y metadatos para vincular llamadas a herramientas toolCallId y toolCallsData en formato JSON. Esto permite reconstruir de forma fiel el contexto entre iteraciones del agente y manejar flujos multi paso sin perder estado.
Componentes y dependencias recomendadas: symfony messenger para ejecución asíncrona doctrine ORM para persistencia symfony http client para integraciones externas y un cliente OpenAI mantenido por la comunidad. Configurar Messenger con un transporte asíncrono y arrancar el worker messenger consume async evita timeouts HTTP y permite escalar procesos en segundo plano.
Proceso de desarrollo resumido: crear entidades y migraciones para Conversation y Message definir el atributo AsAgentTool y la interfaz de herramientas implementar herramientas concretas como OrderLookupTool y WebSearchTool registrar las herramientas con tagged_locator configurar ToolRegistry y AgentOrchestrator implementar el mensaje RunAgentTask y su handler crear endpoints API para enviar mensajes y para consultar el historial y finalmente probar con el worker en marcha.
Ejemplo operativo: el usuario envía la pregunta sobre su pedido el controlador crea o recupera la conversación y despacha RunAgentTask. El worker inicia el bucle LLM que primero pide llamar a getOrderStatus el orquestador ejecuta OrderLookupTool y añade la observación. El modelo vuelve a razonar solicita searchWeb con la cadena shipping delays Anytown el orquestador ejecuta WebSearchTool y finalmente el modelo produce la respuesta consolidada indicando estado de envío transportista y la posible incidencia local. El frontend recupera el histórico y muestra la respuesta final al usuario.
Ventajas de este enfoque: persistencia de memoria para trazabilidad capacidad de ejecutar lógica de dominio real gracias a herramientas internas integración de datos en tiempo real mediante herramientas externas escalabilidad y resiliencia por ser asíncrono y control total sobre la orquestación dentro del ecosistema Symfony.
Sobre Q2BSTUDIO: somos una empresa de desarrollo de software y aplicaciones a medida especializada en inteligencia artificial ciberseguridad y servicios cloud aws y azure. Ayudamos a empresas a diseñar soluciones con agentes IA automatización de procesos y plataformas de inteligencia de negocio usando tecnologías como power bi. Si busca servicios de software a medida visite desarrollo de aplicaciones multiplataforma y si su foco es potenciar sus capacidades de inteligencia artificial explore nuestras soluciones en Inteligencia artificial para empresas.
Palabras clave que trabajamos constantemente en proyectos y contenidos: aplicaciones a medida software a medida inteligencia artificial ciberseguridad servicios cloud aws y azure servicios inteligencia de negocio ia para empresas agentes IA power bi. Nuestra oferta integra desarrollo a medida ciberseguridad y despliegue cloud para entregar soluciones seguras y escalables alineadas con objetivos de negocio.
Conclusión: pasar de un chatbot simple a un agente autónomo requiere pensar en orquestación memoria y herramientas. Con Symfony Messenger Doctrine y un diseño basado en Tool Calling es posible construir agentes IA que razonan actúan y persisten resultados de forma robusta y escalable. Si desea que Q2BSTUDIO le acompañe en un proyecto de agentes IA automatización o inteligencia de negocio contacte con nuestros especialistas para diseñar una solución a medida que aproveche lo mejor de la nube y la analítica avanzada.


