atom-agent-ia
Plataforma AaaS (Agent as a Service) que orquesta agentes de IA multi-proveedor y los expone como API REST.
Problema
Construir y mantener agentes de IA "a mano" para cada caso de uso no escala: cada integración termina reinventando el mismo ciclo de registrar el agente, exponerlo por API, conectar herramientas externas, controlar el consumo de tokens y medir qué está pasando en producción.
Solución
atom-agent-ia es una plataforma AaaS (Agent as a Service) construida con FastAPI y LangChain / LangGraph: expone agentes de IA como un servicio consumible por API REST, con autenticación por token, cuotas de consumo, tres tipos de agente (DAG, ReAct y Deep) sobre el mismo registro de agente, un sistema de herramientas configurables sin escribir código (HTTP personalizadas, servidores MCP, salida estructurada) y un panel de observabilidad con costo y latencia por sesión — pensada para que integrar un agente en otro sistema sea tan simple como llamar un endpoint REST.
Stack y arquitectura
- FastAPI como capa de API, en arquitectura por capas (
router → service → repository → modelo ORM) con responsabilidad única por capa. - LangChain / LangGraph para orquestar tres tipos de agente sobre la misma configuración (
llm_id,system_prompt,tools): DAG (StateGraphcon control total del grafo), ReAct (prebuilt, para uso general) y Deep (razonamiento multi-paso con la libreríadeepagents). - PostgreSQL para persistencia (agentes, tokens, logs de uso) con pool de conexiones dimensionado a la concurrencia de workers, y migraciones automáticas con Alembic en cada arranque.
- Sistema de herramientas dinámico sin tocar código: HTTP personalizadas, servidores MCP (expone automáticamente todas sus tools remotas) y herramientas de salida estructurada, todas registrables vía API.
- Docker / Docker Compose para despliegue, con logs separados por componente (API y core de agentes) y observabilidad vía stdout en contenedores multi-worker.
- Autenticación por Bearer token (hash SHA-256), cuotas de tokens por cliente y locking por sesión para serializar turnos concurrentes.
Retos
Diseñar una API genérica para tres tipos de agente distintos sin volverla excesivamente abstracta — resuelto dejando que el agent_id sea el mismo entre rutas y que la ruta de chat invocada (/agents/chat, /prebuilt-agents/chat, /deep-agents/chat) decida el wrapper a construir. Otro reto fue diseñar el sistema de herramientas para que terceros pudieran registrar integraciones HTTP o servidores MCP sin tocar el código del agente, y hacerlo de forma segura: las herramientas de acceso directo a bases de datos se eliminaron por completo del proyecto por razones de seguridad.