Por que IA falha em codebases grandes (e como eu resolvi isso em codebases 300k+ linhas)
Como Usar IA para Melhorar a Produtividade em Projetos de Código Complexos
Introdução à Gestão do Contexto
- O apresentador discute a frustração comum ao trabalhar com IA, onde mudanças solicitadas resultam em códigos fora de contexto, levando a horas de retrabalho.
- Valdemar Neto se apresenta e compartilha sua experiência em desenvolvimento de software e liderança técnica, destacando seu trabalho com grandes empresas e como cofundador da Tech Leads Clube.
Técnicas Avançadas para Uso Eficiente da IA
- O vídeo aborda técnicas avançadas como "context engineering" e "spec driven", além de introduzir o termo RPI (Reinforcement Prompting Iteration).
- A importância da janela de contexto é enfatizada; as LLM (Modelos de Linguagem Grande) não mantêm estado, exigindo que o estado seja sempre passado no prompt.
Janelas de Contexto e Efeitos na Resposta da IA
- As janelas de contexto podem chegar até 1 milhão de tokens, mas recomenda-se manter entre 200.000 tokens para evitar respostas sem sentido.
- Um excesso de tokens pode levar a alucinações nas respostas da IA, semelhante ao que acontece quando uma pessoa recebe muitas perguntas simultaneamente.
Exemplificação Prática com Codebases Complexas
- O apresentador utiliza um exemplo prático: um codebase complexo similar ao Netflix, discutindo os desafios que a IA enfrenta ao lidar com estruturas não modulares.
- A falta de modularidade no código dificulta a compreensão pela IA; um bom design é crucial para obter resultados eficazes.
Conceitos Fundamentais: Progressive Disclosure e On Demand Loading
- Para otimizar o uso das LLMs, dois conceitos são essenciais: "progressive disclosure" (divulgação progressiva), onde informações são fornecidas gradualmente à IA.
- "On demand loading" refere-se à configuração para que a IA carregue arquivos específicos conforme necessário, melhorando assim sua capacidade de resposta.
Carregamento Sob Demanda e Estruturação de Projetos
Importância do Carregamento Sob Demanda
- O carregamento sob demanda é uma das funcionalidades mais importantes discutidas, permitindo que a IA nutra seu contexto conforme necessário.
- As regras (rules) do cursor podem ser configuradas para carregar contextos automaticamente ou sob demanda, oferecendo flexibilidade na aplicação de diretrizes.
Documentação e Diretrizes Arquiteturais
- A geração de documentação básica é essencial em qualquer base de código; recomenda-se que a própria IA gere essa documentação inicial.
- É importante ter diretrizes arquitetônicas claras, como o uso de Domain Driven Design (DDD), que ajudam na estruturação do projeto.
Identificação e Análise de Domínios
- Diretrizes sobre como identificar domínios dentro do DDD são fundamentais para a organização do projeto.
- Exemplos práticos sobre como estruturar pastas e documentos ao longo da vida do projeto são apresentados, enfatizando a importância da modularidade.
Aplicação das Regras no Cursor
- As regras no cursor podem ser aplicadas automaticamente ou sob demanda; por exemplo, as regras arquitetônicas são sempre aplicadas quando necessário.
- A IA carrega contextos específicos apenas quando relevante, evitando sobrecarga desnecessária durante alterações menores.
Workshop Prático e RPI
- Um workshop será oferecido para ensinar como preparar projetos complexos para usar IA efetivamente, compartilhando diretrizes práticas.
- O conceito de RPI (Research, Plan and Implement - Pesquisa, Planejamento e Implementação) é introduzido como um método estruturado para descobrir informações relevantes antes da implementação.
A Importância dos Subagents na Pesquisa e Contexto
Delegação de Tarefas a Subagents
- O uso de subagents permite delegar tarefas específicas, como pesquisas, em vez de sobrecarregar o contexto com muitos tokens.
- É importante que os subagents sejam específicos para tarefas, como análise de complexidade ou validação de arquitetura, evitando desperdício de tokens.
Problemas com o Carregamento do Contexto
- Um exemplo prático mostra que ao solicitar arquivos que não seguem as diretrizes do projeto, o sistema carrega muitas informações no contexto.
- Com 43% do contexto carregado, há um risco elevado de alucinações nas respostas devido à quantidade excessiva de dados.
Estratégias para Gerenciamento do Contexto
- Ao realizar uma pesquisa extensa, é crucial escolher ações simples para evitar confusão no contexto já carregado.
- A primeira ação recomendada pode ser reorganizar a estrutura das pastas para melhorar a organização do código.
Importância da Estruturação e Planejamento
- Ao criar um plano, é essencial definir verificações para garantir que os testes estejam passando após refatorações.
- Garantir que a nova versão cubra 100% dos casos de uso da versão anterior é fundamental durante o processo de refatoração.
Diferença entre Spec Driven e Research Plan Implement
- O conceito de "spec driven" envolve usar especificações como base para implementar mudanças; isso se tornou um padrão no desenvolvimento atual.
- O formato lógico proposto (pesquisa, planejamento e implementação) oferece uma abordagem mais clara em comparação ao modelo tradicional "spec driven".
Exemplos Práticos e Aplicações Futuras
- A discussão avança para exemplos práticos onde grandes refatorações são necessárias, destacando a importância da aplicação correta das práticas discutidas.
Refatoração e Design Orientado a Domínio
Complexidade da Refatoração
- O apresentador menciona que o serviço atual possui um fluxo complexo com mais de 13 serviços envolvidos em uma única transação, destacando a necessidade de refatorar para implementar o design orientado a domínio (DDD).
- A refatoração é descrita como um processo extenso, onde um único plano pode se tornar tão grande que se torna impraticável para revisão humana, levando à criação de uma "memória de longo prazo" para armazenar pesquisas.
Estrutura do Plano de Refatoração
- Em vez de criar um plano tradicional, o apresentador opta por documentar suas ideias em um arquivo markdown, enfatizando a importância da clareza e detalhamento no planejamento.
- Ele destaca que essa abordagem permite ajustes manuais importantes e facilita a comunicação com a equipe sobre o plano proposto.
Divisão do Plano em Subplanos
- O próximo passo na refatoração é dividir o plano principal em subplanos menores e mais gerenciáveis, permitindo uma implementação faseada.
- Cada subplano deve ter pré-requisitos claros e especificações sobre quais partes do projeto precisam ser carregadas ou modificadas.
Implementação Segura
- Através dessa metodologia, é possível realizar grandes refatorações com segurança, utilizando múltiplas pull requests para revisão pela equipe.
- O apresentador conclui que essa abordagem garante que as mudanças sejam testadas adequadamente antes da validação final.