Multi-Agent Orchestration Patterns with OpenClaw

Master multi-agent orchestration with OpenClaw. Learn supervisor-worker, pipeline, consensus, and market-maker patterns for building robust autonomous AI systems.

E
ECOSIRE Research and Development Team
|19 de março de 202613 min de leitura2.8k Palavras|

Padrões de orquestração multiagente com OpenClaw

Um único agente de IA pode automatizar um processo. Um sistema de agentes bem orquestrado pode automatizar uma função comercial. A diferença está em como os agentes coordenam, comunicam e lidam com falhas além das fronteiras. A orquestração multiagente é a disciplina de engenharia que faz a diferença entre uma coleção de bots independentes e um sistema autônomo coerente e confiável.

OpenClaw fornece as bases para orquestração multiagente: um barramento de mensagens digitadas, um registro de agente, protocolos de transferência, namespaces de memória compartilhada e rastreamento distribuído que segue solicitações através dos limites do agente. Este guia aborda os quatro padrões fundamentais de orquestração, quando usar cada um, como implementá-los no OpenClaw e os modos de falha contra os quais projetar.

Principais conclusões

  • O padrão Supervisor-Trabalhador é a arquitetura mais comum: um agente orquestrador decompõe metas e delega para trabalhadores especializados.
  • O padrão Pipeline é melhor para processamento sequencial de documentos ou transformação de dados em várias etapas, onde cada estágio produz entrada para o próximo.
  • O padrão Consenso permite que vários agentes independentes avaliem a mesma questão, reduzindo o risco de erros de um único agente em decisões de alto risco.
  • O padrão Market-Maker aloca tarefas dinamicamente ao agente disponível mais capaz, permitindo balanceamento de carga e degradação graciosa.
  • A comunicação entre agentes usa o barramento de mensagens digitado do OpenClaw – sem passagem de string bruta, sem estado mutável compartilhado entre agentes.
  • O rastreamento distribuído é essencial para depuração multiagente – cada mensagem carrega um ID de correlação que abrange os limites do agente.
  • Os disjuntores no limite do agente evitam falhas em cascata quando um agente no sistema fica indisponível.
  • A ECOSIRE projeta e implementa arquiteturas multiagentes para fluxos de trabalho complexos de automação empresarial.

A Fundação: Modelo de Comunicação de Agente do OpenClaw

Antes de abordar os padrões, é importante entender como os agentes OpenClaw se comunicam. Existem três mecanismos, cada um com diferentes compensações:

O Message Bus é o principal canal de comunicação entre agentes no mesmo sistema. Os agentes publicam mensagens digitadas em canais nomeados; outros agentes assinam esses canais. As mensagens são persistidas pelo agente de barramento (Redis Streams ou Kafka, configurável), para que as mensagens não sejam perdidas se o agente receptor estiver temporariamente indisponível.

Invocação direta permite que um agente ligue diretamente para as habilidades expostas de outro agente e aguarde uma resposta. Isso é síncrono da perspectiva do chamador e adequado para fluxos de trabalho de baixa latência, nos quais o agente chamador não pode prosseguir até obter o resultado. Use com moderação – isso cria um acoplamento forte entre os agentes.

Namespaces de memória compartilhada permitem que agentes dentro do mesmo sistema leiam e gravem em uma região compartilhada do armazenamento de memória. Isso é apropriado para transmitir objetos de contexto grandes (um documento sendo processado, um perfil de cliente sendo enriquecido entre estágios) sem serializá-los por meio de cargas úteis de mensagens.

// Publishing a message
await messageBus.publish("document.classified", {
  documentId: "DOC-4521",
  type: "vendor-invoice",
  confidence: 0.94,
  storageKey: "incoming/doc-4521.pdf",
});

// Subscribing to messages
messageBus.subscribe("document.classified", async (message) => {
  await extractionAgent.handle(message);
});

Todas as mensagens incluem um ID de correlação, carimbo de data/hora, ID do agente de origem e versão do esquema. A versão do esquema permite que o barramento de mensagens valide as mensagens em relação ao contrato declarado e rejeite mensagens malformadas antes que cheguem ao agente receptor.


Padrão 1: Supervisor-Trabalhador

O padrão Supervisor-Worker é a arquitetura multiagente mais amplamente aplicável. Um agente Supervisor recebe a meta de nível superior, decompõe-a em subtarefas, atribui cada subtarefa a um agente Trabalhador especializado, monitora o progresso e sintetiza os resultados.

User/System Goal
      ↓
[ Supervisor Agent ]
  ├─ task 1 → [ Worker Agent A ]
  ├─ task 2 → [ Worker Agent B ]
  └─ task 3 → [ Worker Agent C ]
      ↓
[ Supervisor Agent ] ← results from all workers
      ↓
Synthesized Response

Quando usar: quando uma meta complexa requer conhecimentos heterogêneos. O supervisor lida com a lógica de coordenação; os trabalhadores são especialistas de domínio que fazem uma coisa bem.

Implementação do OpenClaw:

export const SupervisorAgent = defineAgent({
  name: "due-diligence-supervisor",
  skills: ["decompose-goal", "assign-workers", "synthesize-results"],
  async run({ goal, workerRegistry, messageBus }) {
    // Decompose goal into tasks
    const tasks = await decomposeGoal(goal);

    // Assign to appropriate workers
    const assignments = tasks.map((task) => ({
      task,
      worker: workerRegistry.findBestMatch(task.type),
    }));

    // Publish tasks and wait for results
    const results = await Promise.allSettled(
      assignments.map(({ task, worker }) =>
        messageBus.requestReply(`worker.${worker.id}.tasks`, task, { timeoutMs: 60_000 })
      )
    );

    // Synthesize
    const successfulResults = results
      .filter((r) => r.status === "fulfilled")
      .map((r) => r.value);

    return synthesize(goal, successfulResults);
  },
});

Principais decisões de design:

  • O supervisor não deve conter lógica de domínio – deve apenas coordenar.
  • Os trabalhadores devem ser apátridas e escaláveis ​​de forma independente.
  • As tarefas do trabalhador com falha são repetidas pelo supervisor, e não pelo trabalhador internamente.
  • Os tempos limite das tarefas no nível do supervisor evitam que um trabalhador lento bloqueie todo o fluxo de trabalho.

Exemplo do mundo real: Um sistema de automação de due diligence onde o Supervisor decompõe uma revisão da empresa em tarefas paralelas atribuídas a um Profissional de Análise Financeira, um Profissional de Revisão de Documentos Legais, um Profissional de Pesquisa de Mercado e um Profissional de Verificação de Referências. O supervisor combina todas as descobertas em um relatório unificado de due diligence.


Padrão 2: Pipeline

O padrão Pipeline sequencia os agentes para que a saída de cada agente se torne a entrada do próximo agente. É ideal para processamento de documentos, enriquecimento de dados e qualquer fluxo de trabalho onde cada etapa transforma ou enriquece a carga em uma ordem definida.

Input Document
    ↓
[ Stage 1: Ingestion Agent ]
    ↓
[ Stage 2: Classification Agent ]
    ↓
[ Stage 3: Extraction Agent ]
    ↓
[ Stage 4: Validation Agent ]
    ↓
[ Stage 5: Integration Agent ]
    ↓
Output: ERP Record

Quando usar: Fluxos de trabalho sequenciais com limites claros de estágio e transformação em cada etapa. Excelente para processamento de documentos de alto rendimento.

Implementação do OpenClaw:

A primitiva Pipeline do OpenClaw gerencia a cadeia de estágio, lida com falhas e oferece suporte à ramificação em qualquer estágio com base no conteúdo da carga útil.

import { definePipeline } from "@openclaw/orchestration";

export const InvoicePipeline = definePipeline({
  name: "invoice-processing",
  stages: [
    { agent: "document-ingester", timeout: 30_000 },
    {
      agent: "document-classifier",
      timeout: 15_000,
      branch: {
        "vendor-invoice": "invoice-extractor",
        "credit-memo": "credit-memo-extractor",
        "unknown": "human-review-queue", // Branch to exception handling
      },
    },
    { agent: "invoice-validator", timeout: 20_000 },
    { agent: "invoice-enricher", timeout: 10_000 },
    { agent: "erp-integrator", timeout: 30_000, retries: 3 },
  ],
  onFailure: {
    agent: "exception-handler",
    preservePartialState: true,
  },
});

Principais decisões de design:

  • Cada estágio deve ser idempotente – se for executado duas vezes com a mesma entrada, produzirá a mesma saída.
  • O manipulador onFailure recebe o estado parcial do pipeline para que possa retomar do último estágio bem-sucedido, em vez de recomeçar.
  • A ramificação permite que diferentes tipos de documentos sigam diferentes subpipelines após a classificação.
  • Use o namespace de memória compartilhada para passar grandes cargas (buffers de documentos) entre estágios, em vez de serializá-las por meio do barramento de mensagens.

Tratamento de falhas: quando o estágio N falha após M estágios bem-sucedidos, o estado do pipeline é verificado no estágio M. Após a falha ser resolvida (correção manual, nova tentativa após a recuperação da dependência), o pipeline retoma do estágio M+1 com a mesma carga útil.


Padrão 3: Consenso

O padrão Consensus executa vários agentes independentes na mesma entrada e exige que eles concordem (dentro de um limite) antes que o sistema aja. É o equivalente multiagente de uma segunda opinião e é mais valioso em decisões de alto risco, onde um erro de um único agente seria caro.

Input
  ├─ → [ Evaluator Agent A ] → assessment A
  ├─ → [ Evaluator Agent B ] → assessment B
  └─ → [ Evaluator Agent C ] → assessment C
          ↓
  [ Consensus Resolver ]
    ├── unanimous or majority? → act
    └── no consensus? → escalate to human

Quando usar: Decisões de alto risco (aprovações de empréstimos, detecção de fraudes, análise de registros médicos, revisão de cláusulas contratuais), informações adversas em que um único agente pode ser manipulado ou situações em que diferentes modelos têm pontos fortes complementares.

Implementação do OpenClaw:

export const FraudConsensusCheck = defineAgent({
  name: "fraud-consensus",
  async run({ transaction, evaluators }) {
    // Run all evaluators in parallel
    const assessments = await Promise.all(
      evaluators.map((evaluator) =>
        evaluator.assess(transaction)
      )
    );

    const fraudVotes = assessments.filter((a) => a.isFraud).length;
    const totalVotes = assessments.length;
    const agreementRatio = fraudVotes / totalVotes;

    if (agreementRatio >= 0.67) { // Supermajority fraud detection
      return { decision: "block", confidence: agreementRatio, assessments };
    } else if (agreementRatio === 0) { // Unanimous clear
      return { decision: "allow", confidence: 1 - agreementRatio, assessments };
    } else {
      // Disagreement — escalate with all assessments for human review
      return { decision: "escalate", confidence: null, assessments };
    }
  },
});

Principais decisões de design:

  • Os agentes avaliadores devem utilizar diferentes modelos ou diferentes estratégias de estímulo para minimizar falhas correlacionadas. Dois agentes que usam o mesmo modelo com o mesmo prompt geralmente concordarão – o que vai contra o propósito.
  • O limite de consenso é configurável. O acordo unânime é apropriado para ações irreversíveis; a maioria simples é suficiente para decisões reversíveis.
  • Os caminhos de escalonamento precisam de planejamento de capacidade – se sua taxa de escalonamento for alta, os critérios do avaliador precisarão de ajustes.

Padrão 4: Formador de Mercado

O padrão Market-Maker mantém um conjunto de agentes Trabalhadores e aloca tarefas dinamicamente para o trabalhador disponível mais apropriado no momento em que a tarefa chega. Os trabalhadores registram suas capacidades e carga atual; o Market-Maker encaminha cada tarefa para a melhor correspondência.

Task Queue
    ↓
[ Market-Maker Agent ]
    ├── Worker A: [language-translation] load: 30%
    ├── Worker B: [language-translation] load: 80%
    └── Worker C: [language-translation] load: 10%  ← assigned

Quando usar: Sistemas de alto rendimento onde o volume de tarefas varia significativamente. Permite o escalonamento horizontal de agentes de trabalho sem alterar a lógica de roteamento. Também permite a degradação graciosa – se um trabalhador especializado não estiver disponível, o Formador de Mercado pode encaminhar para um trabalhador generalista com desempenho inferior em vez de falhar na tarefa.

export const TranslationMarketMaker = defineAgent({
  name: "translation-market-maker",
  tools: ["worker-registry", "task-queue"],
  async run({ tools }) {
    while (true) {
      const task = await tools.taskQueue.dequeue("translation.pending");
      if (!task) { await sleep(100); continue; }

      const workers = await tools.workerRegistry.getAvailable({
        capability: "language-translation",
        targetLanguage: task.targetLanguage,
      });

      if (workers.length === 0) {
        // No specialist available — try generalist
        const generalists = await tools.workerRegistry.getAvailable({ capability: "general-translation" });
        if (generalists.length === 0) {
          await tools.taskQueue.requeueWithDelay(task, { delayMs: 5000 });
          continue;
        }
        workers.push(...generalists);
      }

      // Select worker with lowest load
      const selected = workers.sort((a, b) => a.currentLoad - b.currentLoad)[0];
      await selected.dispatch(task);
    }
  },
});

Principais decisões de design:

  • Os relatórios de carga de trabalho devem ser precisos e de baixa latência. Dados de carga obsoletos levam a uma distribuição desigual.
  • A cadeia de fallback (especialista → generalista → fila com atraso) evita a perda de tarefas durante falhas de capacidade.
  • Os trabalhadores se auto-registram na inicialização e cancelam o registro no desligamento normal. A pesquisa de verificação de integridade remove os trabalhadores travados automaticamente.

Padrão cruzado: rastreamento distribuído

Independentemente do padrão de orquestração usado, o rastreamento distribuído não é negociável para sistemas multiagentes de produção. Cada mensagem carrega um correlationId e um spanId. Quando um agente cria uma tarefa filha (no padrão Supervisor) ou passa o trabalho para o próximo estágio (no padrão Pipeline), ele cria um novo intervalo como filho do intervalo atual.

// Middleware that injects tracing into all agent message handlers
agent.useHook("preRun", (ctx) => {
  ctx.span = tracer.startSpan(ctx.skill, { childOf: ctx.message.parentSpan });
  ctx.span.setTag("agent.id", ctx.agentId);
  ctx.span.setTag("correlation.id", ctx.message.correlationId);
});

agent.useHook("postRun", (ctx) => {
  ctx.span.finish();
});

Com o rastreamento distribuído, você pode visualizar a árvore de execução completa de qualquer tarefa em todos os limites do agente, o que é inestimável para depurar problemas de latência e comportamento inesperado.


Antipadrões a serem evitados

Estado mutável compartilhado: Vários agentes gravando no mesmo registro de armazenamento de dados sem coordenação levam à perda de atualizações e condições de corrida. Use o barramento de mensagens para coordenação; os agentes possuem seu próprio estado.

Cadeias síncronas com mais de três agentes: Se o agente A ligar para B, que chama C, que chama D de forma síncrona, a latência aumenta e o raio de explosão da falha é grande. Divida longas cadeias síncronas em estágios de pipeline assíncronos com pontos de verificação.

Agentes supervisores com lógica de domínio: os supervisores devem orquestrar, e não executar o trabalho do domínio. Quando um supervisor começa a conter lógica de extração ou regras de validação, ele se torna um monólito disfarçado.

Contratos implícitos entre agentes: Os esquemas de mensagens devem ser versionados e validados no nível do barramento. Agentes que assumem a estrutura da mensagem em vez de validá-la falham silenciosamente quando o remetente altera seu formato de saída.


Perguntas frequentes

Como você lida com falhas parciais em um sistema Supervisor-Trabalhador onde alguns trabalhadores são bem-sucedidos e outros falham?

O Supervisor recebe os resultados de todas as tarefas do trabalhador como uma mistura de sucessos e fracassos. A habilidade de síntese decide como lidar com resultados parciais com base no objetivo: para alguns objetivos, resultados parciais são suficientes para produzir um resultado útil; para outros, todos os resultados são obrigatórios. Configure o Supervisor com um limite mínimo de sucesso – se menos do que essa proporção de trabalhadores for bem-sucedido, aumente a escala em vez de produzir um resultado parcial potencialmente enganoso.

O mesmo agente pode participar de vários padrões de orquestração simultaneamente?

Sim. Um agente é apenas um serviço – ele pode ser um Trabalhador em um sistema Supervisor-Trabalhador e ao mesmo tempo ser um Estágio em um Pipeline e participar como Avaliador em uma verificação de Consenso. Cada invocação é independente. O requisito crítico é que os agentes não tenham estado entre as invocações (os dados com estado vão para armazenamentos de memória, não para variáveis ​​de instância do agente), para que múltiplas invocações simultâneas não interfiram.

Qual é a sobrecarga do barramento de mensagens para sistemas de alto rendimento?

Com o Redis Streams como back-end do barramento de mensagens, a latência de publicação/assinatura de mensagens é normalmente inferior a 2 ms para mensagens com menos de 64 KB. Para pipelines de alto rendimento que processam milhares de documentos por minuto, isso é insignificante em comparação com o trabalho de processamento em cada etapa. Para sistemas de rendimento extremamente alto (milhões de mensagens por dia), o Kafka fornece maior rendimento sustentado ao custo de maior complexidade operacional.

Como criar versões de sistemas multiagentes quando agentes individuais evoluem?

Agentes de versão usando de forma independente o versionamento semântico em seus manifestos. O barramento de mensagens valida mensagens em relação à versão do esquema declarada. Quando um agente altera seu esquema de saída (alteração significativa), ele altera a versão principal e o barramento roteia mensagens do esquema antigo para a versão anterior. Ambas as versões são executadas simultaneamente durante a janela de migração. A configuração do Supervisor ou Pipeline especifica qual versão de cada trabalhador é necessária, proporcionando controle total do tempo de implementação.

Como o padrão Market-Maker lida com a ordenação de tarefas quando as tarefas têm dependências?

O Formador de Mercado é apropriado para tarefas independentes – tarefas que podem ser executadas em qualquer ordem. Para tarefas com dependências, use o padrão Pipeline ou Supervisor, que impõe a ordem explicitamente. Se você tiver uma combinação de tarefas independentes e dependentes, o padrão Supervisor funciona bem: o Supervisor despacha tarefas independentes para o pool do Formador de Mercado e gerencia a ordem de dependência para o restante.


Próximas etapas

A orquestração multiagente libera complexidade de automação que agentes únicos não conseguem lidar. Os padrões neste guia — Supervisor-Trabalhador, Pipeline, Consenso e Formador de Mercado — cobrem a grande maioria dos casos de uso de automação empresarial. A chave é escolher o padrão certo para a estrutura de comunicação do problema, e não forçar todos os problemas em uma única arquitetura.

O serviço de orquestração multiagente OpenClaw da ECOSIRE fornece design de arquitetura, implementação e otimização contínua para sistemas multiagentes complexos. Nossa equipe projetou arquiteturas de orquestração para sistemas de processamento de documentos que lidam com milhões de documentos mensalmente, pipelines de análise financeira funcionando 24 horas por dia, 7 dias por semana e sistemas de automação de RH coordenados por uma dúzia de agentes especializados.

Entre em contato com a ECOSIRE para discutir seus requisitos de arquitetura multiagente.

E

Escrito por

ECOSIRE Research and Development Team

Construindo produtos digitais de nível empresarial na ECOSIRE. Compartilhando insights sobre integrações Odoo, automação de e-commerce e soluções de negócios com IA.

Converse no WhatsApp