Pular para o conteúdo principal
O Mixture-of-Agents (MoA) roda o mesmo prompt em vários modelos em paralelo (os proponentes) e então usa um agregador para sintetizar uma única resposta de alta qualidade a partir de todas as propostas. A técnica é baseada em Wang et al., arXiv:2406.04692.
MoA é distinto da Orquestração Multi-Agent: lá o eixo é agents especialistas (planner, reviewer…) despachados em paralelo dentro de uma tarefa. Aqui o eixo é a diversidade de modelos/provedores respondendo à mesma pergunta. Acionado pelo comando /moa.

Como funciona

/moa <prompt>

     ├─ proponente 1 (openai:gpt-5)        ┐
     ├─ proponente 2 (claudeai:opus-4-8)   ├─ em paralelo, mesmo prompt
     ├─ proponente 3 (googleai:gemini-2.5) ┘


  agregador (provider/modelo ativo, ou CHATCLI_MOA_AGGREGATOR)


  resposta única sintetizada
  1. Briefing compartilhado — o mesmo system prompt estruturado de um turno de chat (contextos anexados via /context attach, memória do workspace, skills, retrieval por turno) é montado uma vez por rodada e entregue a todos os participantes.
  2. Proposta paralela — cada proponente recebe o mesmo prompt e o mesmo briefing, concorrentemente, podendo puxar knowledge, CCR e memória (read-only) antes de responder.
  3. Tolerância a falhas — erros de um proponente são tolerados; o MoA segue desde que pelo menos um tenha respondido. Só falha se o agregador em si falhar.
  4. Agregação — o agregador recebe um prompt de síntese com todas as propostas, mais o mesmo briefing e as mesmas tools, e produz uma resposta correta e coesa (sem mencionar que houve agregação).
Um timeout de 5 minutos envolve toda a rodada. Ao final, o ChatCLI mostra quais proponentes contribuíram (✓/✗) e renderiza a resposta final.

Briefing e tools do painel

Cada participante do painel — proponentes e agregador — é tão capaz quanto um turno normal de conversa: recebe o briefing completo da sessão e três exceções de tools estritamente read-only, executadas em um loop limitado (até 4 rodadas de tool por participante), tanto via tool-use nativo quanto via XML para provedores sem suporte nativo:
ToolO que fazQuando é oferecida
knowledgeBusca nas bases de conhecimento anexadas à sessão (search/get/toc)Mesmo gate da exceção do chat: habilitada + base anexada
recallExpande markers <<ccr:KEY>> da compressão de contexto de volta ao originalSó quando a camada de compressão está ativa e o histórico realmente carrega um marker
memoryRecupera a memória de longo prazo do usuário (perfil, fatos duráveis, preferências, notas)CHATCLI_MEMORY_MODE diferente de off
Quando alguma tool está ativa, a linha de status da rodada informa: Ferramentas de especialista ativas neste painel: knowledge, recall, memory.
Read-only por construção. O acesso à memória é limitado ao subcomando recall pelo próprio executor — as formas mutantes (remember, profile, forget) são inalcançáveis a partir de um turno do painel, mesmo que um modelo tente contrabandeá-las nos argumentos. ask_user e graphview ficam de fora de propósito: os participantes rodam em paralelo e desassistidos. Nenhum tool de execução, arquivo ou busca — a mesma regra do chat.

Configuração

VariávelDescrição
CHATCLI_MOA_MODELSOpcional. Proponentes em CSV provider:model. Sem ela, /moa e @moa usam os provedores configurados (ordenados, cap 4).
CHATCLI_MOA_AGGREGATOROpcional. Modelo agregador (provider:model). Default: o provider/modelo ativo da sessão.
export CHATCLI_MOA_MODELS="openai:gpt-5,claudeai:claude-opus-4-8,googleai:gemini-2.5-pro"
export CHATCLI_MOA_AGGREGATOR="claudeai:claude-opus-4-8"   # opcional
Autenticação: funciona com OAuth, não só API key — quando um proponente/agregador coincide com o provider ativo da sessão, o MoA reusa o client da sessão, honrando o token OAuth (preferido sobre API key quando logado) ou tokens encaminhados (modo server/gateway). Nomes de provider são resolvidos de forma case-insensitive (openaiOPENAI). O comando /moa e o tool @moa compartilham a mesma resolução e os mesmos defaults.
Use provedores diferentes como proponentes para maximizar a diversidade — é daí que vem o ganho de qualidade do MoA. O agregador costuma render mais sendo um modelo forte (Opus, GPT-5).

Uso

> /moa explique os trade-offs entre WAL e snapshotting num scheduler durável
  Rodando Mixture-of-Agents com 3 modelos…
    ✓ openai:gpt-5
    ✓ claudeai:claude-opus-4-8
    ✓ googleai:gemini-2.5-pro

  <resposta única sintetizada, renderizada em Markdown>
Qualquer provedor configurado pode participar como proponente ou agregador. Veja Provedores Suportados.

Tool @moa (para o agente)

Além do comando /moa, há o tool @moa, que o agente pode invocar dentro de um fluxo agent/coder para consultar vários modelos e sintetizar a melhor resposta:
<tool_call name="@moa" args='{"cmd":"ask","args":{"prompt":"Projete um rate limiter para 1M rps"}}' />
<tool_call name="@moa" args='{"cmd":"list"}' />
  • ask {prompt, models?, aggregator?}models opcional (ex. ["openai","anthropic:claude-opus-4-8"]); default é um conjunto dos provedores configurados. aggregator default é o modelo da sessão.
  • list — provedores disponíveis para participar.
Os membros do @moa recebem o histórico da conversa do fluxo agent e as mesmas tools read-only do painel (knowledge, recall, memory) — o briefing de chat não é remontado, pois o contexto do agente já está no histórico. Degrada com elegância: um único proponente bem-sucedido é retornado direto; se o agregador estiver indisponível, retorna o melhor candidato em vez de falhar.

Veja também