Não é sobre velocidade. É sobre fazer vários agentes com pontos de vista diferentes discutirem uma decisão e chegarem a uma conclusão melhor do que qualquer um deles sozinho. Com código completo para o orquestrador, especialistas e a fusão.
Quando você pede a um único modelo para avaliar uma decisão, ele dá uma visão, geralmente média e cautelosa. Ele tende a concordar, a suavizar, a buscar equilíbrio. Esse é o problema: uma decisão importante não pode ser avaliada por uma única visão média, ela precisa ser atacada de diferentes ângulos.
Um enxame de agentes resolve isso estruturalmente. Você cria vários especialistas, cada um com um papel e um viés 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 o fato de que o desacordo está embutido 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 fusão que reconcilia as conclusões em uma única.
Arquitetura: Orquestrador, Especialistas, Fusão
Um enxame para análise tem três componentes.
O orquestrador recebe 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, uma pessoa 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 diferentes pontos de vista.
A fusão coleta as conclusões dos especialistas e as reconcilia: onde eles concordam, onde se contradizem, qual é o veredito final em 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, que 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 defina os papéis manualmente com antecedência, deixe o modelo escolhê-los para a tarefa específica, isso torna o enxame genérico. 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ões3MAXIMAMENTE DIFERENTES e conflitantes sobre a decisão. Os papéis devem4conflitar em seus interesses, não se complementar.56Para cada papel, forneça: nome, foco (no que ele se fixa), viés (para o que7ele é 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. A exigência "os papéis devem conflitar" no prompt é a chave; sem ela, o modelo dá três papéis quase idênticos e todo o sentido 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 rodam 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 pode 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ão isso.7Seu 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 rodeios."""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 este é o ponto central. Se cada especialista tentar considerar todos os lados, você terá 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 fusão então reconcilia.
Passo 4: A Fusão Reconcilia as Conclusões
Agora temos várias opiniões afiadas e unilaterais. A fusão as reúne em um veredito, mas não por média. Ela procura onde os especialistas concordam (um sinal forte), onde se contradizem (uma zona de risco que exige uma decisão) e o que pesa mais que o quê.
1MERGE_SYSTEM = """Você é o sintetizador de um enxame analítico. Você recebe2as opiniões de vários especialistas com diferentes vieses sobre uma decisão.34Seu trabalho NÃO é tirar a média. Seu trabalho é:51. Concordância: onde os especialistas concordaram apesar de posições diferentes.6 Este é o sinal mais confiável, destaque-o.72. Conflito: onde os especialistas se contradizem diretamente. Não suavize,8 nomeie o conflito explicitamente e diga o que cada lado custa.93. Pontos cegos: um risco que apenas um especialista nomeou, mas é importante.104. Veredito final considerando tudo: a favor / contra / condicional, e sob11 quais condições ele muda.1213Escreva de forma densa. Mantenha o desacordo como informação, não o esconda."""1415def merge_opinions(task, opinions):16 block = "\n\n".join(17 f"### Especialista: {o['role']}\n{o['opinion']}" for o in opinions18 )19 user = f"Decisão:\n{task}\n\nOpiniões dos especialistas:\n{block}"20 return ask(MERGE_SYSTEM, user, temperature=0.4) # temperatura mais baixa para síntese sóbria
Abaixamos a temperatura na fusão: 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 tire a média, mantenha o desacordo como informação." Uma fusão normal colapsa tudo em algo pastoso, "por um lado, por outro lado." Uma boa fusão diz claramente: aqui todos concordam, e aqui há um conflito e ele custa isso.
Passo 4.5: Um Advogado do Diabo Contra o Acordo Falso
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 é acordo falso, e é mais perigoso que o 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 todos podem estar 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 o acordo3deles.45Se os especialistas convergiram em algo, encontre por que eles podem estar6TODOS ERRADOS AO MESMO TEMPO. Procure um ponto cego compartilhado: uma7suposição que todos aceitaram sem verificar, um cenário que ninguém8considerou porque é inconveniente.910Não seja educado. Seu valor é dizer o que o grupo não quer ouvir.11Forneça:12- qual suposição compartilhada dos especialistas é a mais perigosa13- um cenário em que a opinião unânime do enxame se revela fatalmente errada14- uma pergunta que o grupo evitou cuidadosamente15Se não houver acordo e os especialistas realmente discordarem, diga isso16claramente 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 roda após os especialistas, mas antes da fusão, 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, fortes se consolidam.
1DEBATE_SYSTEM = """Você é o especialista {name} na segunda rodada de análise.2Sua posição original:3{own_opinion}45Agora você vê as opiniões dos outros especialistas. Não ceda à pressão, mas6também não ignore argumentos fortes. Forneça:7- onde o argumento de outro realmente atinge sua posição, admita honestamente8- onde você mantém sua linha e por que a objeção deles é fraca9- se você mudou seu veredito após o debate e, em caso afirmativo, como10Curto. Isso não é uma repetição da primeira opinião, mas uma reação aos oponentes."""1112def debate_round(roles, task, opinions):13 others_map = {}14 for o in opinions:15 others = "\n\n".join(16 f"### {x['role']}\n{x['opinion']}" for x in opinions if x is not o17 )18 others_map[o["role"]] = others1920 def rebut(o):21 system = DEBATE_SYSTEM.format(name=o["role"], own_opinion=o["opinion"])22 user = (f"Decisão:\n{task}\n\n"23 f"Opiniões dos oponentes:\n{others_map[o['role']]}")24 return {"role": o["role"], "opinion": ask(system, user, temperature=0.6)}2526 with ThreadPoolExecutor(max_workers=len(opinions)) as pool:27 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 desmoronaram. São essas opiniões endurecidas que vão para a fusão final.
Passo 5: Juntando Tudo
1def analyze(task, debate=True):2 print("Orquestrador está escolhendo 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 o acordo do enxame18 print("\nAdvogado do diabo procura uma rachadura no acordo...")19 devil = run_devil(task, opinions)20 print(f"\n[Advogado do diabo]\n{devil}")2122 # fusão reconcilia as conclusões mais o ataque do advogado23 print("\nFusão 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 pago "32 "com um teste de 14 dias. Devemos fazer isso?"33 )
Ao executar isso, você verá o pipeline completo: o orquestrador escolhe os papéis, os especialistas cortam a verdade de seus ângulos, discutem entre si na rodada de debate, o advogado ataca o acordo deles, e a fusão entrega um veredito sobre tudo, incluindo o ataque. Um único agente sobre esta mesma pergunta 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 conflitar, 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 está quando os interesses conflitam: 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 fusão não tira a média, ela preserva o conflito. Uma síntese ruim transforma cinco opiniões afiadas em um resumo inócuo. 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 educação.
Onde Expandir
Este esqueleto se expande em direções óbvias. Você pode adicionar uma rodada de debate: após a primeira fusão, 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 que 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á ponderando sozinho agora e execute-a através de um enxame como este. Você verá ângulos que não estava considerando.





