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

@h100envy
INGLÊShá 2 dias · 15 de jul. de 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 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.

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, 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 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.

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
3DIFERENTES e conflitantes ao máximo sobre a decisão. Os papéis devem
4entrar em conflito em seus interesses, não se complementar.
5
6Para cada papel, forneça: nome, foco (no que ele se fixa), viés (para o
7que ele é 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. 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.

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
7isso. Seu 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 enrolação."""
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 é 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ê.

python
1MERGE_SYSTEM = """Você é o sintetizador de um enxame analítico. Você
2recebe as opiniões de vários especialistas com diferentes vieses sobre
3uma única decisão.
4
5Seu trabalho NÃO é fazer uma média. Seu trabalho é:
61. Concordância: no que os especialistas concordaram apesar das
7 diferentes posições. Este é o sinal mais confiável, destaque-o.
82. Conflito: onde os especialistas se contradizem diretamente. Não
9 suavize, nomeie o conflito explicitamente e diga o que cada lado custa.
103. Pontos cegos: um risco que apenas um especialista nomeou, mas que
11 importa.
124. Veredito final sobre tudo: a favor / contra / condicional, e sob
13 quais condições ele muda.
14
15Escreva densamente. Mantenha o desacordo como informação, não o esconda."""
16
17def merge_opinions(task, opinions):
18 block = "\n\n".join(
19 f"### Especialista: {o['role']}\n{o['opinion']}" for o in opinions
20 )
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.

python
1DEVIL_SYSTEM = """Você é o advogado do diabo em um enxame analítico. Você
2recebe as opiniões dos especialistas. Seu único trabalho: atacar a
3concordância deles.
4
5Se os especialistas convergiram em algo, encontre por que eles podem
6estar TODOS errados AO MESMO TEMPO. Procure um ponto cego compartilhado:
7uma suposição que todos aceitaram sem verificar, um cenário que ninguém
8considerou porque é inconveniente.
9
10Nã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 perigosa
13- um cenário no qual a opinião unânime do enxame se mostra fatalmente errada
14- uma pergunta que o grupo cuidadosamente evitou
15Se não houver concordância e os especialistas realmente discordarem,
16diga isso claramente 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 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.

python
1DEBATE_SYSTEM = """Você é o especialista {name} na segunda rodada de
2análise. Sua posição original:
3{own_opinion}
4
5Agora 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, admita
8 honestamente
9- onde você mantém sua linha e por que a objeção deles é fraca
10- se você mudou seu veredito após o debate e, em caso afirmativo, como
11Curto. Isso não é uma repetição da primeira opinião, mas uma reação aos
12oponentes."""
13
14def 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 o
19 )
20 others_map[o["role"]] = others
21
22 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)}
27
28 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

python
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']}")
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 a concordância do enxame
18 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}")
21
22 # mesclagem reconcilia as conclusões mais o ataque do advogado
23 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 verdict
28
29if __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.

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 seu Markdown em um artigo 𝕏 impecável

Quando você publica 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 em um artigo 𝕏 impecável e pronto para publicar.

Experimente Markdown para 𝕏

Mais padrões para decifrar

Artigos virais recentes

Explorar mais artigos virais