Não se trata de velocidade. Trata-se de fazer com que vários agentes com pontos de vista diferentes discutam uma única decisão e cheguem a uma conclusão melhor do que qualquer um deles sozinho. Com código completo para o orquestrador, especialistas e mesclagem.
Quando você pede para um único modelo avaliar uma decisão, ele dá uma visão, geralmente média e cautelosa. Ele tende a concordar, a suavizar, a encontrar um equilíbrio. Esse é o problema: uma decisão importante não pode ser avaliada por uma única visão média, ela deve ser atacada de diferentes lados.
Um enxame de agentes resolve isso estruturalmente. Você cria vários especialistas, cada um com um papel e viés bem definidos: um pensa apenas em dinheiro, outro apenas em risco técnico, um terceiro apenas no usuário. Eles analisam uma decisão de forma independente, chegam a conclusões diferentes, e então você força uma reconciliação dessas conclusões. O valor aqui não é a velocidade, mas sim o fato de que o desacordo é construído na estrutura. Um único agente tende ao pensamento de grupo consigo mesmo, um enxame de papéis não.
Este artigo mostra como construir tal enxame, com código. Abordamos três partes: o orquestrador que atribui papéis, os especialistas que analisam independentemente e a mesclagem que os reconcilia em uma única conclusão.
Arquitetura: Orquestrador, Especialistas, Mesclagem
Um enxame para análise tem três componentes.
O orquestrador pega a tarefa e decide quais papéis de especialistas são necessários. Para avaliar o lançamento de um produto, podem ser um investidor, um engenheiro, um especialista em produto, um profissional de segurança. O orquestrador não analisa, ele distribui os papéis.
Os especialistas trabalham em paralelo e de forma independente. Cada um vê a mesma decisão, mas através de sua própria lente. Crucialmente, eles não veem as conclusões uns dos outros, caso contrário, a conformidade se instala. A independência é o que produz pontos de vista diferentes.
A mesclagem coleta as conclusões dos especialistas e as reconcilia: onde eles concordam, onde se contradizem, qual é o veredito final entre todos os ângulos. Isso não é uma média, mas uma síntese que mantém o desacordo como um sinal.

Passo 1: O Cliente Básico
Comece com um cliente simples para o modelo. Eu uso um formato de mensagem compatível com OpenAI, funciona com a maioria dos provedores e com o Ollama local.
1import requests2import json3from concurrent.futures import ThreadPoolExecutor45API = "http://localhost:11434/api/chat" # Ollama, ou endpoint de um provedor6MODEL = "qwen2.5:32b"78def ask(system, user, temperature=0.7):9 resp = requests.post(API, json={10 "model": MODEL,11 "messages": [12 {"role": "system", "content": system},13 {"role": "user", "content": user},14 ],15 "temperature": temperature,16 "stream": False,17 }, timeout=120)18 resp.raise_for_status()19 return resp.json()["message"]["content"]
Passo 2: O Orquestrador Atribui Papéis
O orquestrador recebe a tarefa e decide quais especialistas são necessários. Não codifique os papéis previamente, deixe o modelo escolhê-los para a tarefa específica, isso torna o enxame geral. Peça um JSON estrito para analisar.
1ORCHESTRATOR_SYSTEM = """Você é o orquestrador de um enxame analítico.2Para a tarefa, defina de 3 a 5 papéis de especialistas que darão visões3DIFERENTES e conflitantes ao máximo sobre a decisão. Os papéis devem4entrar em conflito em seus interesses, não se complementar.56Para cada papel, forneça: nome, foco (no que ele se fixa), viés (para o7que ele é tendencioso, o que ele tende a superestimar).89Responda APENAS com um array JSON, sem explicações:10[{"name": "...", "focus": "...", "bias": "..."}, ...]11"""1213def plan_roles(task):14 raw = ask(ORCHESTRATOR_SYSTEM, f"Tarefa a analisar:\n{task}",15 temperature=0.9) # temperatura mais alta para diversidade de papéis16 # extrai o JSON caso o modelo tenha adicionado texto ao redor17 start, end = raw.find("["), raw.rfind("]") + 118 return json.loads(raw[start:end])
Mantemos a temperatura alta aqui de propósito: queremos papéis diversos, não óbvios. O requisito "os papéis devem entrar em conflito" no prompt é a chave, sem ele o modelo dá três papéis quase idênticos e todo o propósito do enxame se perde.
Passo 3: Os Especialistas Analisam em Paralelo e Independentemente
Cada especialista recebe seu papel e a mesma decisão. Criticamente: eles executam em paralelo e não veem as conclusões uns dos outros. O paralelismo aqui não é apenas para velocidade, ele garante independência, um especialista fisicamente não consegue se ajustar à opinião de outro.
1EXPERT_SYSTEM = """Você é um especialista com o papel: {name}.2Seu foco: {focus}.3Seu viés: {bias}. Não lute contra ele, é o seu valor para a análise.45Analise a decisão ESTRITAMENTE da sua posição. Não seja equilibrado,6não tente considerar outros pontos de vista, outros especialistas farão7isso. Seu trabalho é levar seu ângulo ao limite.89Forneça:10- um veredito da sua posição (a favor / contra / condicional)11- 2-3 argumentos principais do seu ângulo especificamente12- 1 risco que é mais visível da sua posição e que outros perderão13Curto e direto, sem enrolação."""1415def run_expert(role, task):16 system = EXPERT_SYSTEM.format(**role)17 opinion = ask(system, f"Decisão a analisar:\n{task}", temperature=0.7)18 return {"role": role["name"], "opinion": opinion}1920def run_swarm(roles, task):21 # lançamento paralelo: independência mais velocidade22 with ThreadPoolExecutor(max_workers=len(roles)) as pool:23 futures = [pool.submit(run_expert, role, task) for role in roles]24 return [f.result() for f in futures]
Observe o prompt do especialista: proibimos explicitamente que ele seja equilibrado. Isso é contraintuitivo, mas é o ponto central. Se cada especialista tentar considerar todos os lados, você obtém cinco opiniões cautelosas idênticas. Ao forçar cada um a levar seu ângulo ao limite, você obtém um espectro real, que a mesclagem então reconcilia.
Passo 4: A Mesclagem Reconcilia as Conclusões
Agora temos várias opiniões afiadas e unilaterais. A mesclagem as reúne em um veredito, mas não por média. Ela procura onde os especialistas concordam (um sinal forte), onde eles se contradizem (uma zona de risco que requer uma decisão) e o que pesa mais que o quê.
1MERGE_SYSTEM = """Você é o sintetizador de um enxame analítico. Você2recebe as opiniões de vários especialistas com diferentes vieses sobre3uma única decisão.45Seu trabalho NÃO é fazer uma média. Seu trabalho é:61. Concordância: no que os especialistas concordaram apesar das7 diferentes posições. Este é o sinal mais confiável, destaque-o.82. Conflito: onde os especialistas se contradizem diretamente. Não9 suavize, nomeie o conflito explicitamente e diga o que cada lado custa.103. Pontos cegos: um risco que apenas um especialista nomeou, mas que11 importa.124. Veredito final sobre tudo: a favor / contra / condicional, e sob13 quais condições ele muda.1415Escreva densamente. Mantenha o desacordo como informação, não o esconda."""1617def merge_opinions(task, opinions):18 block = "\n\n".join(19 f"### Especialista: {o['role']}\n{o['opinion']}" for o in opinions20 )21 user = f"Decisão:\n{task}\n\nOpiniões dos especialistas:\n{block}"22 return ask(MERGE_SYSTEM, user, temperature=0.4) # temperatura mais baixa para síntese sóbria
Abaixamos a temperatura na mesclagem: se os especialistas devem ser diversos (T alta), o sintetizador deve ser sóbrio e consistente (T baixa). A instrução chave aqui é "não faça média, mantenha o desacordo como informação." Uma mesclagem normal colapsa tudo em mingau, "por um lado, por outro lado." Uma boa mesclagem diz claramente: aqui todos concordam, e aqui há um conflito e ele custa tanto.
Passo 4.5: Um Advogado do Diabo Contra o Falso Consenso
Há um perigo silencioso: às vezes os especialistas concordam não porque a decisão é boa, mas porque todos estão olhando na mesma direção por inércia. Isso é falso consenso, e é mais perigoso do que conflito aberto, porque parece confiança.
Contra isso, adicionamos um agente especial, o advogado do diabo. Seu único trabalho é atacar o consenso. Ele vê todas as opiniões dos especialistas e é obrigado a encontrar por que eles podem estar todos errados ao mesmo tempo. Se o enxame votou unanimemente "a favor", o advogado procura um cenário onde isso é uma catástrofe.
1DEVIL_SYSTEM = """Você é o advogado do diabo em um enxame analítico. Você2recebe as opiniões dos especialistas. Seu único trabalho: atacar a3concordância deles.45Se os especialistas convergiram em algo, encontre por que eles podem6estar TODOS errados AO MESMO TEMPO. Procure um ponto cego compartilhado:7uma suposição que todos aceitaram sem verificar, um cenário que ninguém8considerou porque é inconveniente.910Não seja educado. Seu valor é que você diz o que o grupo não quer ouvir.11Forneça:12- qual suposição compartilhada dos especialistas é a mais perigosa13- um cenário no qual a opinião unânime do enxame se mostra fatalmente errada14- uma pergunta que o grupo cuidadosamente evitou15Se não houver concordância e os especialistas realmente discordarem,16diga isso claramente e aponte para o conflito não resolvido mais agudo."""1718def run_devil(task, opinions):19 block = "\n\n".join(20 f"### {o['role']}\n{o['opinion']}" for o in opinions21 )22 user = f"Decisão:\n{task}\n\nOpiniões do enxame:\n{block}"23 return ask(DEVIL_SYSTEM, user, temperature=0.8)
O advogado executa após os especialistas, mas antes da mesclagem, e seu ataque vai para a síntese junto com as opiniões. O ponto é que mesmo um enxame unânime tem pelo menos um agente obrigado a procurar uma rachadura. Isso é barato (uma chamada) e quebra estruturalmente o pensamento de grupo: o consenso agora tem que sobreviver a um ataque, não apenas acontecer.
Passo 4.6: Uma Rodada de Debate para Aguçar o Conflito
A primeira passagem dos especialistas é independente, e isso é correto para a diversidade. Mas depois que as opiniões são coletadas, você pode dar uma rodada de debate: mostre a cada especialista um resumo das opiniões dos outros e deixe-o objetar. Isso aguça os conflitos, argumentos fracos caem, os fortes se consolidam.
1DEBATE_SYSTEM = """Você é o especialista {name} na segunda rodada de2análise. Sua posição original:3{own_opinion}45Agora você vê as opiniões dos outros especialistas. Não ceda à pressão,6mas também não ignore argumentos fortes. Forneça:7- onde o argumento de outro realmente atinge sua posição, admita8 honestamente9- onde você mantém sua linha e por que a objeção deles é fraca10- se você mudou seu veredito após o debate e, em caso afirmativo, como11Curto. Isso não é uma repetição da primeira opinião, mas uma reação aos12oponentes."""1314def debate_round(roles, task, opinions):15 others_map = {}16 for o in opinions:17 others = "\n\n".join(18 f"### {x['role']}\n{x['opinion']}" for x in opinions if x is not o19 )20 others_map[o["role"]] = others2122 def rebut(o):23 system = DEBATE_SYSTEM.format(name=o["role"], own_opinion=o["opinion"])24 user = (f"Decisão:\n{task}\n\n"25 f"Opiniões dos oponentes:\n{others_map[o['role']]}")26 return {"role": o["role"], "opinion": ask(system, user, temperature=0.6)}2728 with ThreadPoolExecutor(max_workers=len(opinions)) as pool:29 return list(pool.map(rebut, opinions))
A rodada de debate também é paralela: cada especialista reage a todos os outros ao mesmo tempo, novamente sem conformidade em tempo real. Após o debate, as opiniões geralmente são mais afiadas: você pode ver quais posições se mantiveram sob fogo e quais ruíram. São essas opiniões endurecidas que vão para a mesclagem final.
Passo 5: Juntando Tudo
1def analyze(task, debate=True):2 print("Orquestrador está escolhendo os papéis...")3 roles = plan_roles(task)4 for r in roles:5 print(f" - {r['name']}: {r['focus']}")67 print(f"\nLançando {len(roles)} especialistas em paralelo...")8 opinions = run_swarm(roles, task)9 for o in opinions:10 print(f"\n[{o['role']}]\n{o['opinion']}")1112 # rodada de debate opcional: especialistas reagem uns aos outros13 if debate:14 print("\nRodada de debate, especialistas rebatem uns aos outros...")15 opinions = debate_round(roles, task, opinions)1617 # advogado do diabo ataca a concordância do enxame18 print("\nAdvogado do diabo procura uma rachadura na concordância...")19 devil = run_devil(task, opinions)20 print(f"\n[Advogado do diabo]\n{devil}")2122 # mesclagem reconcilia as conclusões mais o ataque do advogado23 print("\nMesclagem está reconciliando as conclusões...")24 opinions_plus = opinions + [{"role": "Advogado do diabo", "opinion": devil}]25 verdict = merge_opinions(task, opinions_plus)26 print(f"\n=== VEREDITO FINAL ===\n{verdict}")27 return verdict2829if __name__ == "__main__":30 analyze(31 "Queremos remover o nível gratuito e tornar o produto totalmente "32 "pago com um teste de 14 dias. Devemos fazer isso?"33 )
Ao executar isso, você verá o pipeline completo: o orquestrador escolhe papéis, os especialistas cortam a verdade de seus ângulos, discutem entre si na rodada de debate, o advogado ataca a concordância deles e a mesclagem entrega um veredito sobre tudo, incluindo o ataque. Um único agente sobre essa mesma questão daria um vago "depende do seu público", o enxame dá uma análise estruturada onde os conflitos são explícitos e o consenso é testado sob estresse.
O Que Faz Este Enxame Funcionar
Três coisas separam um enxame útil de um teatro de agentes.
Os papéis devem entrar em conflito, não se complementar. Se seus especialistas são "um profissional de marketing, um especialista em SMM, um gerente de conteúdo", eles darão respostas quase idênticas, porque seus interesses coincidem. O valor real é quando os interesses entram em conflito: crescimento vs sustentabilidade, velocidade vs qualidade, dinheiro agora vs confiança depois. Um conflito de interesses é o que abre a decisão.
Os especialistas não devem ver uns aos outros. Assim que um especialista vê a opinião de outro, a conformidade começa, ele se ajusta. A independência não é um detalhe de implementação, é uma condição de trabalho. O lançamento paralelo dá isso de graça.
A mesclagem não faz média, ela preserva o conflito. Uma síntese ruim transforma cinco opiniões afiadas em um resumo sem dentes. Uma boa síntese deixa o conflito visível, porque o conflito é a informação mais valiosa: mostra onde a decisão é genuinamente arriscada, não onde todos concordam por acordo.
Onde Expandir
Este esqueleto se expande em direções óbvias. Você pode adicionar uma rodada de debate: após a primeira mesclagem, mostre o resumo aos especialistas e deixe-os objetar, o que aguça os conflitos. Você pode colocar um juiz em um modelo mais forte sobre os especialistas para pesar os argumentos. Você pode tornar os papéis permanentes para um tipo recorrente de decisão, para não gerá-los toda vez.
Mas o princípio básico permanece: lentes diferentes, análise independente, uma síntese que respeita o desacordo. Um enxame é útil para análise não porque há muitos agentes, mas porque eles olham de forma diferente e não deixam uns aos outros escorregar para um denominador comum. Pegue uma decisão que você está virando na sua cabeça sozinho agora e execute-a através de um enxame como este. Você verá ângulos que não estava considerando.





