Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 34

Decomposing User Stories into Actionable Steps

Recommended resources

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.

LangGraph: Planning Agents

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.

Conceptual Architecture of an AI Agent
Esta arquitetura conceitual de um agente de IA mostra a "Decomposição de sub-objetivos" (Subgoal decomposition) como uma parte central do componente de "Planejamento". É exatamente este processo que estamos projetando: quebrar um objetivo principal em sub-objetivos gerenciáveis.

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:

  1. 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.
  2. 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" }
  3. Gerenciamento da Complexidade e Ambiguidade:

    • Tratamento de Erros: Se, durante a análise, o agente encontrar ambiguidades (conforme definido no ERROR_HANDLING do nosso prompt), ele não gera o plano. Em vez disso, ele usa a action do 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.

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.