Um Enxame de Agentes para Análise Multidimensional: Criando uma Equipe de Especialistas a partir de LLMs

@h100envy
INGLÊShá 2 dias · 15/07/2026
625K
273
38
13
754

TL;DR

Este guia explica como construir um sistema de LLM multiagente que simula uma equipe de especialistas com vieses conflitantes para fornecer uma análise profunda e multidimensional de decisões complexas.

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.

h100envy - inline image

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.

python
1import requests
2import json
3from concurrent.futures import ThreadPoolExecutor
4
5API = "http://localhost:11434/api/chat" # Ollama, ou endpoint de um provedor
6MODEL = "qwen2.5:32b"
7
8def 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.

python
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ões
3MAXIMAMENTE DIFERENTES e conflitantes sobre a decisão. Os papéis devem
4conflitar em seus interesses, não se complementar.
5
6Para cada papel, forneça: nome, foco (no que ele se fixa), viés (para o que
7ele é tendencioso, o que ele tende a superestimar).
8
9Responda APENAS com um array JSON, sem explicações:
10[{"name": "...", "focus": "...", "bias": "..."}, ...]
11"""
12
13def 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éis
16 # extrai o JSON caso o modelo tenha adicionado texto ao redor
17 start, end = raw.find("["), raw.rfind("]") + 1
18 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.

python
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.
4
5Analise 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.
8
9Forneça:
10- um veredito da sua posição (a favor / contra / condicional)
11- 2-3 argumentos principais do seu ângulo especificamente
12- 1 risco que é mais visível da sua posição e que outros perderão
13Curto e direto, sem rodeios."""
14
15def 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}
19
20def run_swarm(roles, task):
21 # lançamento paralelo: independência mais velocidade
22 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ê.

python
1MERGE_SYSTEM = """Você é o sintetizador de um enxame analítico. Você recebe
2as opiniões de vários especialistas com diferentes vieses sobre uma decisão.
3
4Seu 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 sob
11 quais condições ele muda.
12
13Escreva de forma densa. Mantenha o desacordo como informação, não o esconda."""
14
15def merge_opinions(task, opinions):
16 block = "\n\n".join(
17 f"### Especialista: {o['role']}\n{o['opinion']}" for o in opinions
18 )
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.

python
1DEVIL_SYSTEM = """Você é o advogado do diabo em um enxame analítico. Você
2recebe as opiniões dos especialistas. Seu único trabalho: atacar o acordo
3deles.
4
5Se os especialistas convergiram em algo, encontre por que eles podem estar
6TODOS ERRADOS AO MESMO TEMPO. Procure um ponto cego compartilhado: uma
7suposição que todos aceitaram sem verificar, um cenário que ninguém
8considerou porque é inconveniente.
9
10Nã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 perigosa
13- um cenário em que a opinião unânime do enxame se revela fatalmente errada
14- uma pergunta que o grupo evitou cuidadosamente
15Se não houver acordo e os especialistas realmente discordarem, diga isso
16claramente e aponte para o conflito não resolvido mais agudo."""
17
18def run_devil(task, opinions):
19 block = "\n\n".join(
20 f"### {o['role']}\n{o['opinion']}" for o in opinions
21 )
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.

python
1DEBATE_SYSTEM = """Você é o especialista {name} na segunda rodada de análise.
2Sua posição original:
3{own_opinion}
4
5Agora você vê as opiniões dos outros especialistas. Não ceda à pressão, mas
6também não ignore argumentos fortes. Forneça:
7- onde o argumento de outro realmente atinge sua posição, admita honestamente
8- onde você mantém sua linha e por que a objeção deles é fraca
9- se você mudou seu veredito após o debate e, em caso afirmativo, como
10Curto. Isso não é uma repetição da primeira opinião, mas uma reação aos oponentes."""
11
12def 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 o
17 )
18 others_map[o["role"]] = others
19
20 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)}
25
26 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

python
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']}")
6
7 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']}")
11
12 # rodada de debate opcional: especialistas reagem uns aos outros
13 if debate:
14 print("\nRodada de debate: especialistas rebatem uns aos outros...")
15 opinions = debate_round(roles, task, opinions)
16
17 # advogado do diabo ataca o acordo do enxame
18 print("\nAdvogado do diabo procura uma rachadura no acordo...")
19 devil = run_devil(task, opinions)
20 print(f"\n[Advogado do diabo]\n{devil}")
21
22 # fusão reconcilia as conclusões mais o ataque do advogado
23 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 verdict
28
29if __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.

Recriar no YouMind

Turn one viral article into a full content workflow

Collect the source, decode the pattern, create assets, draft the story, and distribute from one AI workspace.

Explore YouMind
Para criadores

Transforme o seu Markdown num artigo 𝕏 impecável

Quando publica os seus próprios textos longos, formatar imagens, tabelas e blocos de código para o 𝕏 é uma dor de cabeça. O YouMind transforma um rascunho completo em Markdown num artigo 𝕏 impecável e pronto a publicar.

Experimente Markdown para 𝕏

Mais padrões para decifrar

Artigos virais recentes

Explorar mais artigos virais