Workflow ou agente? Padrões de orquestração
Objetivos de aprendizagem
- Diferenciar workflows (caminho de código pré-definido) de agentes (modelo dirige o próprio processo).
- Reconhecer e aplicar os cinco padrões de orquestração: prompt chaining, routing, parallelization, orchestrator-workers e evaluator-optimizer.
- Aplicar os critérios de decisão: complexidade da tarefa, valor, viabilidade das capacidades e custo do erro.
- Escolher entre decomposição fixa (pipeline sequencial) e decomposição adaptativa dirigida pelos achados intermediários (task statement 1.6).
Workflows vs. agentes
Na taxonomia da Anthropic ("Building effective agents"), os dois são sistemas agênticos, mas com diferença arquitetural clara:
- Workflow: LLMs e ferramentas orquestrados por caminhos de código pré-definidos. O desenvolvedor fixa a sequência; o modelo executa cada etapa. Previsível, testável, mais barato.
- Agente: o LLM dirige dinamicamente seu próprio processo e uso de ferramentas, decidindo em tempo de execução quais passos dar. Flexível, lida com ambiguidade, mas custa mais e é menos previsível.
Regra prática da prova: use a solução mais simples que resolve. Se a tarefa pode ser decomposta em passos conhecidos de antemão, um workflow basta; agentes são para tarefas abertas em que não dá para prever o número de passos nem fixar o caminho.
Os cinco padrões de workflow/orquestração
| Padrão | Como funciona | Quando usar |
|---|---|---|
| Prompt chaining | Decompõe a tarefa em passos sequenciais; a saída de um vira entrada do próximo, opcionalmente com "gates" de validação entre eles. | Tarefas com decomposição fixa e conhecida (ex.: gerar outline → validar → escrever; analisar cada arquivo → passe de integração cross-file). |
| Routing | Um classificador direciona cada entrada para o fluxo/prompt/modelo especializado adequado. | Categorias distintas de entrada com tratamentos diferentes (ex.: suporte: reembolso vs. dúvida técnica; perguntas fáceis → modelo menor). |
| Parallelization | Subtarefas independentes rodam ao mesmo tempo (sectioning) ou a mesma tarefa roda N vezes para votação (voting). | Reduzir latência em subtarefas independentes; aumentar confiança agregando múltiplas execuções. |
| Orchestrator-workers | Um LLM central decompõe a tarefa dinamicamente, delega a workers e sintetiza os resultados. | Quando as subtarefas não são previsíveis de antemão (ex.: pesquisa multi-agente, mudanças em N arquivos que dependem da tarefa). |
| Evaluator-optimizer | Um LLM gera; outro avalia contra critérios e dá feedback; itera até passar. | Quando existem critérios claros de avaliação e o refinamento iterativo agrega valor mensurável (ex.: tradução, escrita com requisitos). |
flowchart TD
subgraph chaining[Prompt chaining — decomposição fixa]
A1[Passo 1] --> A2[Gate] --> A3[Passo 2] --> A4[Passo 3]
end
subgraph orch[Orchestrator-workers — decomposição adaptativa]
B0[Orquestrador] --> B1[Worker A]
B0 --> B2[Worker B]
B0 --> B3[Worker C]
B1 --> B4[Síntese]
B2 --> B4
B3 --> B4
B4 --> B0
end
Quando vale a pena um agente: 4 critérios
Antes de construir um agente, avalie os quatro critérios (framework da Anthropic para decidir "should you build an agent?"):
- Complexidade da tarefa: a tarefa é ambígua/aberta o suficiente para exigir raciocínio dinâmico? Tarefas mapeáveis num fluxograma ficam melhores (e mais baratas) como workflow.
- Valor da tarefa: o valor por execução justifica o custo em tokens e latência do loop agêntico? Tarefas de alto volume e baixo valor pedem workflows enxutos.
- Viabilidade (capacidades): o modelo consegue de fato executar todas as etapas com as ferramentas disponíveis? Derisque as capacidades críticas antes.
- Custo do erro / descoberta do erro: erros são caros ou difíceis de detectar? Se sim, prefira fluxos com mais controle (workflow, gates, human-in-the-loop) ou restrinja a autonomia (ex.: read-only, sandbox).
Decomposição fixa vs. adaptativa (task statement 1.6)
Dentro do universo de decomposição de tarefas, a prova cobra saber quando cada estratégia se aplica:
- Pipeline sequencial fixo (prompt chaining): para trabalhos previsíveis e multi-aspecto. Exemplo clássico do exam guide: revisão de código grande — analisar cada arquivo individualmente (passe local) e depois rodar um passe separado de integração cross-file, evitando diluição de atenção.
- Decomposição dinâmica/adaptativa: para investigação aberta, em que as subtarefas emergem do que se descobre. Exemplo do exam guide: "adicionar testes abrangentes a um codebase legado" — primeiro mapear a estrutura, identificar áreas de alto impacto, criar um plano priorizado e adaptá-lo conforme dependências aparecem.
Sinal para escolher na prova: se o enunciado descreve etapas conhecidas e repetíveis ("todo PR passa por X, depois Y"), a resposta é chaining/pipeline fixo. Se descreve investigação em terreno desconhecido ("dependências descobertas ao longo do caminho"), a resposta é plano adaptativo que gera subtarefas a partir dos achados.
Um routing simples implementado como workflow — o classificador é uma chamada de modelo, mas o caminho é decidido por código:
import anthropic
client = anthropic.Anthropic()
def classify(ticket_text):
"""Passo 1 do workflow: classificar o ticket (routing)."""
response = client.messages.create(
model="claude-opus-5",
max_tokens=100,
system="Classifique o ticket em exatamente uma categoria: "
"refund, technical, account. Responda apenas a categoria.",
messages=[{"role": "user", "content": ticket_text}],
)
text = next((b.text for b in response.content if b.type == "text"), "")
return text.strip().lower()
PROMPTS = {
"refund": "Voce trata reembolsos seguindo a politica de devolucao...",
"technical": "Voce e o suporte tecnico do produto...",
"account": "Voce trata questoes de conta e acesso...",
}
def handle_ticket(ticket_text):
category = classify(ticket_text)
system = PROMPTS.get(category, PROMPTS["technical"])
# Passo 2: fluxo especializado escolhido POR CODIGO (workflow),
# nao pelo modelo em tempo de execucao (agente).
response = client.messages.create(
model="claude-opus-5",
max_tokens=2000,
system=system,
messages=[{"role": "user", "content": ticket_text}],
)
return next((b.text for b in response.content if b.type == "text"), "")
print(handle_ticket("Quero devolver o pedido 4412, chegou quebrado."))
Pegadinhas da prova
- Distrator típico: propor um agente autônomo completo para uma tarefa com passos fixos e conhecidos (over-engineering). Se dá para desenhar o fluxograma de antemão, a resposta certa é workflow (chaining/routing).
- Distrator típico: o inverso — engessar em pipeline fixo uma investigação aberta cujo escopo depende dos achados. Aí a resposta é decomposição adaptativa/orchestrator-workers.
- Distrator típico: confundir parallelization (subtarefas independentes definidas por código) com orchestrator-workers (o orquestrador decide dinamicamente as subtarefas).
- Distrator típico: "use um modelo maior/contexto maior" para resolver diluição de atenção em revisões grandes. A solução cobrada é decompor em passes focados (por arquivo + integração), não escalar o modelo.
- Distrator típico: ignorar o custo do erro: dar autonomia total a um agente em operação financeira irreversível. Custo de erro alto pede gates, aprovação humana ou workflow controlado.
Resumo em 5 linhas
- Workflow = caminho fixado por código; agente = modelo dirige o processo dinamicamente. Use o mais simples que resolve.
- Padrões: prompt chaining (passos sequenciais), routing (classificar e direcionar), parallelization (independentes em paralelo/votação), orchestrator-workers (decomposição dinâmica + síntese), evaluator-optimizer (gerar → avaliar → iterar).
- Decida por 4 critérios: complexidade, valor, viabilidade das capacidades e custo do erro.
- Decomposição fixa para trabalho previsível (revisão por arquivo + passe cross-file); adaptativa para investigação aberta que gera subtarefas conforme descobre.
- Custo de erro alto → mais controle: gates programáticos, human-in-the-loop, menos autonomia.
Documentação oficial
- Building effective agents (Anthropic Engineering)
- Tool use overview
- How we built our multi-agent research system
Questões de fixação
1. Toda solicitação de suporte passa pelas mesmas três etapas, nesta ordem: extrair dados do ticket, consultar a política aplicável e redigir a resposta. Qual padrão é o mais adequado?
Gabarito: B. Etapas fixas e conhecidas de antemão = prompt chaining, mais simples, previsível e barato. A é over-engineering: autonomia não agrega quando o caminho é fixo. C serve para subtarefas imprevisíveis — aqui elas são conhecidas. D acrescenta um ciclo de avaliação que o enunciado não pede.
2. "Adicionar testes abrangentes a um codebase legado, onde as dependências entre módulos só ficam claras conforme a análise avança." Qual estratégia de decomposição o exam guide recomenda?
Gabarito: C. Tarefa aberta com descobertas incrementais pede decomposição adaptativa. A engessa uma investigação cujo escopo depende dos achados. B causa diluição de atenção e não resolve a dependência entre descobertas. D usa votação (parallelization) para um problema que não é de confiança estatística.
3. Revisões de PRs com 12+ arquivos produzem feedback superficial e contraditório. Qual reestruturação o padrão de prompt chaining sugere?
Gabarito: A. Dividir em passes focados ataca a causa raiz (diluição de atenção): profundidade consistente por arquivo + visão cross-file dedicada. B não resolve — janela maior não melhora a qualidade da atenção. C é instrução vaga sem efeito estrutural. D transfere o ônus ao time sem melhorar o sistema.
4. (escolha duas) Quais fatores, segundo os critérios de decisão da Anthropic, pesam contra construir um agente autônomo e a favor de um workflow mais controlado?
Gabarito: B e D. Custo de erro alto (B) pede controle, gates e supervisão; valor baixo com caminho previsível (D) não justifica o custo do loop agêntico. A e C são justamente sinais a favor de agente (ambiguidade, orquestração dinâmica). E remove a objeção de viabilidade — também favorece o agente.
5. Qual é a diferença essencial entre parallelization e orchestrator-workers?
Gabarito: D. A distinção é quem decompõe: código (parallelization) vs. LLM orquestrador (orchestrator-workers). A é falsa — ambos podem usar um ou vários modelos. B é falsa: orchestrator-workers tende a custar mais tokens. C inverte os conceitos: paralelização não exige subagentes e orchestrator-workers tipicamente os usa.