GPT Diffusion

Multi-agent systems con OpenClaw: arquitectura real

2026-04-12 · Devs #agentes#multi-agent#openclaw#orquestacion#arquitectura

TL;DR

  • Los sistemas multi-agente no son “varios chatbots hablando”. Son agentes especializados con routing, memoria aislada y skills compartidas.
  • OpenClaw implementa routing jerárquico que funciona. Este post detalla la arquitectura, los trade-offs y los problemas reales que encontramos.

¿Qué es un multi-agent system?

Un sistema donde múltiples agentes con roles distintos trabajan juntos para resolver problemas complejos. Cada agente es especialista en un dominio. Un router decide a quién enviar cada request.

La diferencia con un solo agente “todo-en-uno”:

AspectoSingle agentMulti-agent
ContextoUn context window para todoContexto aislado por especialidad
CalidadJack of all trades, master of noneEspecialista por dominio
CosteModelo caro para todoModelo barato para simple, caro para complejo
ErroresUn error lo rompe todoUn agente falla, los demás siguen

Arquitectura: Routing jerárquico

El patrón que funciona en producción:

Router (front door — clasifica intención)
├── Researcher (papers, búsqueda, arXiv, web)
├── Coder (desarrollo, debugging, PRs)
├── Writer (contenido, edición, SEO)
├── Analyst (datos, métricas, dashboards)
└── SRE (monitoring, infra, alertas)

El router no es un LLM poderoso. Es un clasificador barato y rápido. Su único trabajo: decidir qué agente debe manejar la request.

Routing con modelo barato:

async def route(message: str) -> str:
    prompt = f"""Clasifica esta mensaje en una categoría:
- research: búsqueda de información, papers, noticias
- code: programación, debugging, revisión de código
- content: escritura, edición, SEO
- data: análisis de datos, métricas
- ops: infraestructura, monitoring

Mensaje: {message}

Responde SOLO con la categoría."""
    
    response = await cheap_model.generate(prompt)
    return response.strip().lower()

Coste del routing: ~$0.0001 por request. Despreciable.

OpenClaw en práctica

OpenClaw implementa esta arquitectura con estos conceptos:

Workspace

Cada agente tiene su workspace aislado:

  • Memoria propia: No comparte contexto con otros agentes (por defecto)
  • Skills: Herramientas que el agente puede usar
  • Config: Modelo, temperatura, max_tokens específicos

Skills compartidas

Las skills son módulos de capacidad que pueden compartirse entre agentes:

skills:
  web-search:
    type: tool
    description: "Buscar en la web"
    mcp: mcp-server-brave-search
  git-operations:
    type: tool
    description: "Operaciones de git"
    mcp: mcp-server-git

Un agente researcher necesita web-search pero no git-operations. Un agente coder necesita git-operations pero no web-search. Las skills se asignan por rol.

Delegación

Cuando un agente necesita ayuda de otro, usa delegación:

# El researcher necesita datos técnicos
result = await delegate(
    agent="analyst",
    task="Extraer métricas de este paper",
    context=paper_text
)

La delegación pasa por el router, que decide si la task necesita un agente diferente.

Cron y proactividad

Los agentes no solo responden. También pueden iniciar acciones:

crons:
  - schedule: "0 8 * * *"
    agent: "researcher"
    task: "Buscar papers nuevos sobre RAG y agentes"
  - schedule: "0 9 * * 1"
    agent: "writer"
    task: "Generar resumen semanal de hallazgos"

Esto convierte el sistema de reactivo a proactivo. Los agentes trabajan en background y te entregan resultados.

Memoria en multi-agent

El problema más difícil: cómo comparten contexto sin sobrecargar.

Enfoque 1: Memoria aislada (recomendado)

Cada agente tiene su propia memoria. No comparte contexto por defecto. Cuando necesitan compartir, usan mensajes estructurados:

{
  "from": "researcher",
  "to": "coder",
  "type": "delegation",
  "summary": "Encontré que el bug está en auth.ts línea 42",
  "evidence": ["paper X dice...", "este test falla porque..."]
}

Enfoque 2: Memoria compartida (peligroso)

Todos los agentes comparten un context window. Problema: se llena rápido, el modelo se confunde con contexto de otros dominios, y un agente puede “contaminar” el contexto de otro.

Solo usar para sistemas simples con 2-3 agentes.

Coste real

Un sistema multi-agent con OpenClaw + routing:

ComponenteModeloCoste/1K requests
Routerglm-4.5-air (gratis)$0
ResearcherGPT-4o-mini$0.15
CoderClaude Sonnet$3.00
WriterGPT-4o-mini$0.15
AnalystGPT-4o$2.50

Coste blended: ~$1-2/día para uso moderado. Mucho menos que un solo agente con Claude Opus para todo.

Problemas que encontramos

1. Routing errors

El router envía la task al agente equivocado. Solución: si el agente receptor detecta que la task no es de su dominio, la devuelve al router con una corrección.

2. Overhead de coordinación

La delegación añade latencia. Cada delegación = 1 LLM call extra. Para tareas que necesitan 3+ delegaciones, la latencia puede ser 15-30s.

3. Debugging difícil

Cuando algo falla, ¿fue el router, el agente, o la skill? Sin logging detallado por paso, es imposible debuguear. OpenClaw genera traces pero necesitas un dashboard para visualizarlos.

4. Coste de modelos caros

El agente coder con Claude Sonnet es caro. Solución: usar modelos baratos para sub-tareas dentro del agente y solo usar el modelo caro para la síntesis final.

Cuándo NO usar multi-agent

  • Tareas simples que un solo agente resuelve bien
  • Prototipos rápidos (empieza con single-agent)
  • Presupuesto muy limitado
  • Equipo pequeño sin tiempo para mantener el sistema

Conclusión

Multi-agent systems tienen sentido cuando tienes tareas con dominios distintos, necesitas especialización, y puedes permitirte la complejidad operativa. OpenClaw hace que la implementación sea viable, pero no elimina la complejidad inherent del sistema.

Empieza con un solo agente. Añade agentes cuando tengas evidencia de que lo simple no basta.


Fuentes: OpenClaw docs, experiencia propia con sistemas multi-agent en producción.

Cargando comentarios...