Olá! Bem-vindo de volta.
Na lição anterior, projetamos o "prompt mestre" para nosso agente. Esse prompt atua como a diretriz principal, instruindo o agente a analisar um ticket do Jira, consultar a base de conhecimento e, crucialmente, gerar um plano de implementação em formato JSON.
Nesta lição, vamos nos aprofundar em como o agente concebe esse plano. O aprendizado de hoje se concentra no resultado: "Desenvolver uma estratégia para o agente decompor uma história de usuário complexa em uma sequência de passos concretos". Vamos explorar as arquiteturas e os padrões de pensamento que permitem que um LLM transforme um requisito de alto nível em um plano de ação detalhado e executável. Esta é a essência do planejamento em agentes de IA.
1. Além da Reatividade: O Padrão "Plan-and-Execute"
Seu uso anterior de APIs de LLM, como Gemini, provavelmente seguiu um padrão de pergunta e resposta. No mundo dos agentes, essa abordagem reativa, conhecida como ReAct (Reasoning and Acting), tem limitações. O agente executa uma etapa, observa o resultado e decide a próxima, o que pode ser lento, caro e míope para tarefas complexas.
Uma estratégia mais robusta é o padrão Plan-and-Execute. Aqui, um agente "Planejador" primeiro cria um plano completo de etapas. Depois, um ou mais agentes "Executores" realizam essas etapas. Isso permite um pensamento mais estratégico e a otimização da execução.
Para entender a evolução do ReAct para o Plan-and-Execute, assista a este vídeo do canal LangChain. Ele estabelece a base teórica para a decomposição de tarefas.
Assista às seguintes seções: ReAct e suas limitações (00:49 - 02:35): Entenda por que o padrão ReAct é insuficiente para tarefas complexas. O padrão Plan-and-Execute (02:35 - 03:29): Veja como a separação entre planejamento e execução aborda essas limitações. Foque na decomposição em módulos: planejador, executores e, opcionalmente, um replanejador.
O padrão Plan-and-Execute é a nossa estratégia fundamental. O JSON que nosso agente gera é a manifestação do "plano". As actions que definimos no módulo anterior serão usadas pelo "executor".
2. Decomposição Hierárquica de Processos: Uma Abordagem de Engenharia
Para tarefas de engenharia de software, um simples plano linear muitas vezes não é suficiente. Dada sua experiência em pesquisa e desenvolvimento, você sabe que a solução para um problema complexo raramente é uma lista simples de tarefas. A chave é a decomposição rigorosa.
A abordagem mais eficaz é a Decomposição Hierárquica de Processos. Em vez de pedir ao LLM para "implementar a funcionalidade X", nós o guiamos a quebrar essa tarefa em níveis sucessivos de granularidade até chegar a "micro-tarefas atômicas" — operações únicas, verificáveis e com um propósito específico.
Stop “Prompt Engineering”: The Real Reason LLMs Fail at Complex ...
O artigo 'Stop “Prompt Engineering”: The Real Reason LLMs Fail at Complex Work' de Devin Hedge oferece uma metodologia poderosa para essa decomposição. Ele argumenta que o sucesso dos agentes não está em prompts melhores para tarefas grandes, mas em decompor essas tarefas em seus menores componentes possíveis.
Leia as seções a seguir, que são o cerne do artigo (aproximadamente 8 minutos): 'The Deeper Problem: Micro-Tasks Within Tasks': Entenda por que mesmo tarefas aparentemente simples são compostas por múltiplas micro-decisões que exigem contexto organizacional. 'The Solution: Hierarchical Process Decomposition': Absorva o conceito central. 'The Real-World Example' (Níveis 1 a 8): Acompanhe o exemplo de decomposição de 8 níveis, de uma necessidade de negócio de alto nível até 17 micro-tarefas atômicas. Isso ilustra o nível de detalhe necessário para um agente robusto. Não se preocupe em memorizar cada etapa, mas sim em internalizar a profundidade do processo.
Essa abordagem é a espinha dorsal da nossa estratégia de planejamento. O prompt que projetamos na última lição já orienta o agente a realizar uma forma de decomposição, produzindo uma lista de ações no campo "plan". A decomposição hierárquica nos dá um método para pensar sobre como tornar esse plano ainda mais detalhado e confiável.

3. Decomposição Através da Especialização: Arquitetura Multi-Agente
A decomposição hierárquica sugere naturalmente a especialização. Algumas micro-tarefas são de investigação (ler arquivos, analisar o código existente), outras são de implementação (escrever novo código) e outras de verificação (rodar testes). Isso nos leva a uma arquitetura de múltiplos agentes, onde cada agente é especialista em um tipo de tarefa.
Mesmo que estejamos construindo um único agente Rovo, podemos projetar seu processo de planejamento para imitar essa especialização.
A Deep Dive into Deep Agent Architecture for AI Coding Assistants
O artigo 'A Deep Dive into Deep Agent Architecture for AI Coding Assistants' explora uma arquitetura com agentes especializados: um Orquestrador (estrategista), um Explorador (investigador) e um Codificador (implementador).
Leia as seguintes seções (aproximadamente 6 minutos): 'What Makes Deep Agents Different': Entenda as características que distinguem esses agentes, como planejamento estratégico e delegação de subtarefas. 'Strategic Task Decomposition': Veja como a decomposição é a primeira capacidade central. 'The Forced Delegation Pattern': Este é um conceito-chave. A arquitetura força o agente Orquestrador a planejar e decompor a tarefa, pois ele não tem permissão para acessar o código diretamente. Isso evita atalhos e incentiva um planejamento mais metódico. 'Use Case Patterns': Observe os padrões de decomposição para cenários comuns de desenvolvimento (Feature Implementation, Bug Fix, etc.), como Investigate → Plan → Implement → Verify. Isso fornece um modelo prático para as etapas do nosso plano.
Nosso agente atuará principalmente como o Orquestrador. Ele analisará o ticket do Jira e criará um plano. As etapas dentro do plano gerado seguirão o padrão Investigate → Implement → Verify, simulando a delegação para agentes especializados. Por exemplo, uma etapa pode ser "Analisar o arquivo X para entender a estrutura de dados atual" (tarefa de Explorador), seguida por "Modificar o arquivo X para adicionar o novo campo" (tarefa de Codificador).
4. Estratégias Práticas para Lidar com a Complexidade
A teoria da decomposição é sólida, mas a prática traz desafios, como ambiguidades nos requisitos ou tarefas tão grandes que excedem a janela de contexto do LLM.
How I use Claude Code for real engineering
Este vídeo de Matt Pocock, um desenvolvedor experiente, demonstra como ele usa um agente de codificação (Claude Code) para uma tarefa real e complexa. Observe como ele guia o agente no processo de decomposição.
Assista a estas seções para aprender estratégias práticas: Exploração e Perguntas Claras (01:00 - 02:00): A primeira fase da decomposição é a investigação. Veja como o agente explora a base de código e faz perguntas para resolver ambiguidades. Isso se conecta diretamente à nossa cláusula ERROR_HANDLING no prompt. Planos Multifásicos (03:53 - 04:34): Para tarefas grandes, é crucial instruir explicitamente o agente a quebrar o trabalho em fases. Esta é uma técnica de decomposição direta para gerenciar a complexidade e a janela de contexto. Externalizando o Plano (07:36 - 09:22): Esta é uma tática avançada e poderosa. Para preservar o plano através de múltiplas interações (ou reinícios), ele é salvo em um ativo externo, como uma issue do GitHub. Em nosso caso, poderíamos usar um comentário no próprio ticket do Jira. Isso garante a persistência do estado do plano.
5. Nossa Estratégia de Decomposição Sintetizada
Vamos unificar esses conceitos em uma estratégia coesa para o nosso agente de código:
-
Análise e Planejamento Inicial (Padrão Plan-and-Execute):
- Acionado por um evento no Jira, o agente recebe o ticket.
- Usando nosso "prompt mestre", ele atua como Orquestrador. Sua primeira tarefa é analisar o requisito e gerar o JSON do plano.
-
Decomposição Hierárquica e Especialização Simulada:
- O prompt orienta o agente a pensar de forma estruturada. O plano resultante não será apenas uma lista de modificações de código. Ele seguirá uma lógica de
Investigate -> Plan -> Implement -> Verify. - Exemplo de plano decomposto:
- Fase 1: Investigação (Simulando o Explorador)
{ "action": "SEARCH_FILES", "query": "user model definition" }{ "action": "READ_FILE", "file_path": "src/models/User.cs" }
- Fase 2: Implementação (Simulando o Codificador)
{ "action": "CREATE_BRANCH", "branch_name": "feature/JIRA-123" }{ "action": "MODIFY_FILE", "file_path": "src/models/User.cs", "description": "Add PhoneNumber property" }- ...outras modificações de código...
- Fase 3: Verificação (Simulando o Explorador novamente)
{ "action": "RUN_TESTS", "project": "backend-api.csproj" }
- Fase 1: Investigação (Simulando o Explorador)
- O prompt orienta o agente a pensar de forma estruturada. O plano resultante não será apenas uma lista de modificações de código. Ele seguirá uma lógica de
-
Gerenciamento da Complexidade e Ambiguidade:
- Tratamento de Erros: Se, durante a análise, o agente encontrar ambiguidades (conforme definido no
ERROR_HANDLINGdo nosso prompt), ele não gera o plano. Em vez disso, ele usa aactiondo Jira para adicionar um comentário ao ticket pedindo esclarecimentos. - Checkpoint Humano: Para planos que envolvem alterações críticas (como migrações de banco de dados), o JSON do plano inclui a chave
"human_approval_required". O sistema de orquestração deve pausar e aguardar uma aprovação humana antes de prosseguir para a fase de execução.
- Tratamento de Erros: Se, durante a análise, o agente encontrar ambiguidades (conforme definido no
Essa estratégia combina a teoria robusta da decomposição hierárquica com a praticidade de uma arquitetura de agente único, preparando o terreno para uma futura expansão para um sistema multi-agente mais complexo.
Conclusão
Nesta lição, você aprendeu a formular uma estratégia para que um agente decomponha tarefas complexas de software. Vimos que simplesmente pedir a um LLM para "fazer o trabalho" é ineficaz. Em vez disso, devemos projetar um processo de planejamento estruturado.
Principais Pontos:
- Plan-and-Execute: Separe o planejamento da execução para um comportamento mais estratégico e confiável.
- Decomposição Hierárquica: A chave para tarefas complexas é quebrar o trabalho em micro-tarefas atômicas e verificáveis. Esta é uma abordagem de engenharia para o design de agentes.
- Especialização e Delegação: Projetar o agente para pensar em termos de papéis especializados (Orquestrador, Explorador, Codificador) leva a planos mais robustos, mesmo em uma arquitetura de agente único. O "Padrão de Delegação Forçada" é um poderoso princípio de design para incentivar um bom planejamento.
- Estratégias Práticas: Para tarefas muito grandes, use planos multifásicos e externalize o plano (por exemplo, em um comentário do Jira) para gerenciar a janela de contexto e manter o estado.
Na Próxima Lição:
Agora que temos uma estratégia de planejamento, vamos começar a focar em como o agente executa as primeiras etapas desse plano. A próxima lição, "Implementar uma etapa de planejamento onde o agente determina quais arquivos precisam ser modificados em vários repositórios", nos levará da teoria do planejamento para a implementação prática da fase de investigação do nosso agente.