Estudando Arquitetura e Orquestração de Agentes: o Maior Domínio do Exame CCA
Arquitetura e Orquestração de Agentes vale 27% do exame CCA Foundations, mais do que qualquer outro domínio.
Ele abrange como você projeta sistemas onde Claude não apenas responde a uma pergunta, mas planeja, chama ferramentas, delega trabalho para outros agentes e decide quando terminou.
Este artigo aborda os padrões de orquestração que aparecem com mais frequência em cenários de exame, com ilustrações Python executáveis construídas sobre o SDK anthropic.
Resumo
Sistemas multiagente trocam simplicidade por capacidade, e o exame testa se você sabe quando essa troca vale a pena.
Um único agente bem definido com boas ferramentas supera um sistema multiagente mal decomposto quase todas as vezes.
Os padrões principais que valem a pena conhecer são pipelines sequenciais, topologias supervisor-trabalhador e fan-out paralelo com uma etapa de merge.
Todo padrão precisa de uma condição de término explícita, ou corre o risco de entrar em loop além do ponto de ser útil.
Questões de orquestração no exame geralmente se concentram em escolher a menor arquitetura que resolve o problema, não a mais sofisticada.
Receita
Cartão de receita de referência rápida - a forma mínima de um loop supervisor-trabalhador.
from anthropic import Anthropic
client = Anthropic()
def run_worker(task: str, model: str = "claude-sonnet-5") -> str:
"""Um agente trabalhador de propósito único que faz um trabalho e retorna."""
response = client.messages.create(
model=model,
max_tokens=1024,
system="Você é um agente trabalhador focado. Faça exatamente a tarefa dada. Retorne apenas o resultado.",
messages=[{"role": "user", "content": task}],
)
return response.content[0].text
def run_supervisor(goal: str, max_steps: int = 5) -> str:
"""Um supervisor que decompõe um objetivo em tarefas de trabalhador e para na conclusão."""
completed_work = []
for step in range(max_steps):
plan_prompt = f"Objetivo: {goal}\nConcluído até agora: {completed_work}\nPróxima subtarefa única, ou DONE se concluído:"
plan = run_worker(plan_prompt, model="claude-sonnet-5")
if plan.strip().upper().startswith("DONE"):
break
result = run_worker(plan)
completed_work.append({"task": plan, "result": result})
return "\n".join(w["result"] for w in completed_work)Quando usar isso:
- O objetivo se decompõe naturalmente em um número pequeno e limitado de subtarefas independentes.
- Cada subtarefa se beneficia de um prompt de sistema mais restrito do que o objetivo geral exigiria.
- Você precisa de uma condição de parada explícita em vez de uma conversa aberta.
- Você está disposto a arcar com a latência e o custo de múltiplas chamadas de modelo para um melhor isolamento de tarefas.
Exemplo de Trabalho
from anthropic import Anthropic
from dataclasses import dataclass
client = Anthropic()
@dataclass
class AgentResult:
agent_name: str
output: str
def draft_agent(topic: str) -> AgentResult:
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=512,
system="Você elabora um breve esboço técnico. Retorne apenas o esboço, sem preâmbulo.",
messages=[{"role": "user", "content": f"Esboço: {topic}"}],
)
return AgentResult("draft", response.content[0].text)
def critic_agent(draft: str) -> AgentResult:
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=512,
system="Você critica um esboço técnico em busca de lacunas e riscos factuais. Seja conciso. Retorne apenas a crítica.",
messages=[{"role": "user", "content": draft}],
)
return AgentResult("critic", response.content[0].text)
def reviser_agent(draft: str, critique: str) -> AgentResult:
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=768,
system="Você revisa um esboço de rascunho dada uma crítica. Retorne apenas o esboço revisado.",
messages=[{"role": "user", "content": f"Rascunho:\n{draft}\n\nCrítica:\n{critique}"}],
)
return AgentResult("reviser", response.content[0].text)
def orchestrate_draft_critique_revise(topic: str) -> str:
"""Um pipeline sequencial de três agentes: rascunho -> crítico -> revisor.
Cada agente tem um trabalho e um prompt de sistema restrito, que é o
padrão que o exame chama de 'design de agente de responsabilidade única'.
"""
draft = draft_agent(topic)
critique = critic_agent(draft.output)
final = reviser_agent(draft.output, critique.output)
return final.output
if __name__ == "__main__":
result = orchestrate_draft_critique_revise("Estratégia de migração de banco de dados sem tempo de inatividade")
print(result)O que isso demonstra:
- Um pipeline sequencial onde a saída de cada agente se torna a entrada do próximo agente, sem estado mutável compartilhado.
- Mistura deliberada de modelos: um modelo mais forte (Opus 4.8) para a etapa de crítica, onde a qualidade do julgamento é mais importante, e um modelo mais rápido (Sonnet 5) para rascunho e revisão.
- Prompts de sistema de responsabilidade única por agente, que o exame testa como um princípio de design distinto da engenharia de prompt em si.
- Nenhuma lógica de loop ou término necessária aqui, porque o pipeline tem um comprimento fixo e conhecido, que é em si uma escolha de design que vale a pena reconhecer.
Mergulho Profundo
Como Funciona
- Um pipeline sequencial passa a saída para frente através de uma cadeia fixa de agentes; é a forma correta quando o número de etapas é conhecido com antecedência.
- Uma topologia supervisor-trabalhador tem um agente que planeja e despacha, e um ou mais agentes trabalhadores que executam; é a forma correta quando o número de etapas não é conhecido até o tempo de execução.
- Um fan-out paralelo despacha subtarefas idênticas ou relacionadas para vários agentes simultaneamente, e depois mescla os resultados; é a forma correta quando as subtarefas são independentes e a latência é mais importante que o sequenciamento.
- Toda orquestração não trivial precisa de uma condição de término explícita: um orçamento de etapas, um sinal "DONE" que o supervisor pode emitir, ou uma verificação de validação que confirma que o objetivo foi atingido.
- A passagem de contexto entre agentes é uma decisão de design, não um dado adquirido: passe apenas o que o próximo agente precisa, não todo o histórico da conversa, ou você infla o custo de token de cada chamada downstream.
Padrões de Orquestração em Resumo
| Padrão | Forma | Melhor para | Término |
|---|---|---|---|
| Pipeline sequencial | A -> B -> C | Etapas de transformação conhecidas e fixas | Comprimento fixo, sem necessidade de loop |
| Supervisor-trabalhador | Supervisor planeja, despacha para trabalhadores | Contagem de subtarefas desconhecida, objetivos decomponíveis | Supervisor emite DONE ou atinge o orçamento de etapas |
| Fan-out paralelo | Um despachante, N trabalhadores concorrentes, um merge | Subtarefas independentes, sensível à latência | Todos os trabalhadores retornam, ou um timeout dispara |
| Agente único + ferramentas | Um agente, múltiplas chamadas de ferramenta em um loop | A maioria das tarefas de produção; mais simples de raciocinar e depurar | Agente para de solicitar ferramentas |
Término e Segurança de Loop
MAX_STEPS = 8
def safe_supervisor_loop(goal: str) -> str:
step = 0
history = []
while step < MAX_STEPS:
step += 1
next_action = run_worker(f"Objetivo: {goal}\nHistórico: {history}\nPróxima etapa ou DONE:")
if "DONE" in next_action.upper():
break
history.append(next_action)
else:
# Loop esgotou MAX_STEPS sem um sinal DONE - trate como uma falha, não um sucesso.
raise RuntimeError(f"Supervisor não terminou dentro de {MAX_STEPS} etapas para o objetivo: {goal}")
return "\n".join(history)Um orçamento de etapas fixo combinado com um caminho de falha explícito (em vez de retornar silenciosamente um resultado parcial) é o padrão que o exame recompensa: um agente que não pode dizer que falhou é pior do que um que levanta um erro.
Notas Python
# Prefira dataclasses tipadas ou TypedDicts para cargas úteis inter-agentes em vez de dicts brutos,
# para que uma incompatibilidade de esquema entre agentes falhe rapidamente em vez de surgir como um
# bug confuso de formatação de prompt downstream.
from typing import TypedDict
class SubtaskResult(TypedDict):
agent: str
task: str
output: strArmadilhas
- Adicionar um segundo agente quando uma ferramenta maior faria o trabalho. Um único agente com uma ferramenta bem projetada frequentemente substitui um "agente auxiliar" inteiro. Correção: tente expandir a superfície da ferramenta antes de recorrer à orquestração.
- Nenhuma condição de término em um loop de supervisor. Deixado sem limites, um loop de planejamento pode rodar até esgotar o orçamento ou o contexto. Correção: sempre defina um limite máximo de etapas e trate excedê-lo como um erro levantado, não truncamento silencioso.
- Passar o histórico completo da conversa para cada trabalhador. Isso multiplica o custo de tokens linearmente com a profundidade do pipeline sem benefício. Correção: passe apenas os campos específicos que o próximo agente realmente precisa.
- Usar o mesmo modelo e prompt de sistema para cada agente no pipeline. Isso desperdiça a chance de igualar a força do modelo à dificuldade da tarefa. Correção: reserve um modelo mais forte para etapas de julgamento pesado, como crítica ou síntese.
- Tratar fan-out paralelo como gratuito. Chamadas concorrentes ainda consomem limites de taxa e custam o mesmo preço por chamada; fan-out reduz a latência, não o custo. Correção: dimensionar o fan-out para a contagem real de subtarefas independentes, não por si só.
- Nenhuma estratégia de merge definida antes do início do fan-out. Se você não sabe como reconciliar saídas conflitantes de trabalhadores, improvisará mal sob pressão. Correção: projete o merge (por exemplo, "supervisor arbitra", "voto majoritário", "concatenar") antes de despachar.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Agente único com loop de ferramentas | A tarefa é limitada e um agente com ferramentas pode raciocinar sobre ela de ponta a ponta | A tarefa requer genuinamente papéis distintos ou trabalho paralelo independente |
| Pipeline sequencial | Etapas e sua ordem são conhecidas com antecedência | O número ou ordem das etapas depende de resultados intermediários |
| Supervisor-trabalhador | A contagem de subtarefas é desconhecida até o tempo de execução e o objetivo se decompõe de forma limpa | O objetivo é simples o suficiente que a decomposição adiciona sobrecarga sem benefício |
| Fan-out paralelo | Subtarefas são independentes e a latência é mais importante que o custo de coordenação | Subtarefas dependem da saída umas das outras, o que o força de volta ao sequencial |
FAQs
Por que este domínio vale mais do que qualquer outro no exame?
Porque as decisões de orquestração (agente único vs. multiagente, qual topologia, como o término é tratado) tendem a ser as decisões que criam ou quebram a confiabilidade de um sistema de produção, mais do que qualquer prompt único ou definição de ferramenta.
Um sistema multiagente é sempre mais capaz que um agente único?
Não. Um único agente bem definido com boas ferramentas é frequentemente mais confiável e barato do que um sistema multiagente mal decomposto; o exame testa especificamente o julgamento sobre quando o multiagente agrega valor real em vez de apenas sobrecarga de coordenação.
Qual é a diferença entre um pipeline sequencial e um padrão supervisor-trabalhador?
- Um pipeline sequencial tem uma cadeia fixa e conhecida de etapas decididas no momento do design.
- Um padrão supervisor-trabalhador tem um planejador que decide a próxima etapa no tempo de execução, porque a contagem de subtarefas não é conhecida com antecedência.
Como sei quando um loop de agente precisa de um limite rígido de etapas?
Qualquer loop onde a condição de saída depende da própria saída do modelo (como emitir "DONE") precisa de um limite máximo de etapas como backup, já que um modelo pode falhar em emitir esse sinal.
Todo agente em um pipeline deve usar o mesmo modelo?
Não necessariamente. Combinar um modelo mais forte com etapas de julgamento pesado (como crítica ou síntese) e um modelo mais rápido com etapas mecânicas (como rascunho ou formatação) é um trade-off de custo e qualidade sobre o qual o exame espera que você raciocine.
O que significa "passagem de contexto" no design de orquestração?
Refere-se a decidir exatamente quais informações passam de um agente para o próximo, em vez de passar por padrão todo o histórico da conversa, o que infla o custo de tokens com cada agente adicional na cadeia.
O fan-out paralelo é mais barato que o processamento sequencial?
Não, geralmente não é mais barato. O Fan-out reduz a latência de relógio de parede executando chamadas independentes concorrentemente, mas cada chamada ainda custa o mesmo em tokens; não confunda "mais rápido" com "mais barato".
Qual é um erro comum que os candidatos cometem ao responder a perguntas de orquestração?
Optar pela arquitetura mais complexa (multiagente, multi-etapas) quando um único agente com melhor design de ferramenta resolve o cenário de forma mais confiável e barata.
Como este domínio se relaciona com Design de Ferramentas e Integração MCP?
Eles se sobrepõem pesadamente: se um agente precisa de um agente auxiliar ou apenas de uma ferramenta melhor é, em si, uma decisão de orquestração, e uma ferramenta mal definida frequentemente se disfarça como um "problema de orquestração" no exame.
O que um passo de merge deve fazer quando trabalhadores paralelos discordam?
A estratégia de merge deve ser decidida antes do despacho, seja um supervisor arbitrando entre as saídas, voto majoritário ou concatenação direta, em vez de improvisada depois.
O exame espera que eu memorize frameworks de orquestração específicos?
O domínio testa os padrões subjacentes (sequencial, supervisor-trabalhador, fan-out paralelo, agente-único-mais-ferramentas) e o julgamento por trás da escolha entre eles, não a memorização da API de qualquer framework de terceiros específico.
Por que o exemplo de trabalho usa um dataclass para cargas úteis inter-agentes?
Cargas úteis tipadas fazem com que incompatibilidades de esquema entre agentes falhem rapidamente e visivelmente, em vez de surgirem mais tarde como um bug de formatação confuso dentro de um prompt downstream.
Relacionados
- O que o Exame Claude Certified Architect Realmente Testa - o modelo mental geral do exame em que este domínio se encaixa.
- Domínios do Exame CCA Foundations em Resumo - onde este domínio de 27% se situa em relação aos outros quatro.
- Design de Ferramentas, Integração MCP e Gerenciamento de Contexto: Checklist do Domínio CCA - as decisões de design de ferramentas que frequentemente determinam se a orquestração é mesmo necessária.
- Estudo de Caso: Construindo um Agente de Suporte ao Cliente de Produção de Ponta a Ponta - esses padrões de orquestração aplicados a uma construção de produção completa.
- Melhores Práticas do Exame CCA Foundations - orientação prática para aplicar padrões de orquestração a construções reais.
Versões da Stack: Escrito contra a linha de modelos Claude atual em ~junho de 2026 - Claude Fable 5, Claude Opus 4.8, Claude Sonnet 5 (o padrão) e Claude Haiku 4.5 - e o SDK oficial
anthropicpara Python (última versão 0.x). Nomes de modelos, preços, formato do exame e versões do SDK mudam rapidamente - verifique os detalhes atuais em platform.claude.com/docs e o guia oficial do exame CCA antes de confiar neles.