Por que IA falha em codebases grandes (e como eu resolvi isso em codebases 300k+ linhas)

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.
Video description

💎 Participe do meu Workshop de IA Avançado https://tinyurl.com/bdhskdkt A diferença entre ganhar 10 horas ou perder 10 horas corrigindo código de IA está na gestão de contexto. Está neste vídeo. Aqui eu te mostro o framework de 3 pilares que uso para trabalhar com IA em projetos de 300k+ linhas de código de forma segura e produtiva. CONTEÚDO 00:00 Por que você perde 10h corrigindo código de IA 00:15 A diferença entre ganhar e perder tempo 00:31 Quem sou eu 00:50 O que você vai aprender 01:18 Janela de Contexto explicada 01:45 200k vs 1M tokens: qual usar? 02:30 Como definir bem o problema 05:15 Cursor Rules na prática 07:19 Minhas Rules do Cursor 09:30 Mantendo contexto relevante 11:45 Refatorações grandes 13:15 Validação automatizada 15:00 Demo: Refatoração completa 16:00 Quebrando em Pull Requests 18:30 Loop de validação 18:51 O segredo: humano no loop 💎 Quer aprender arquitetura, liderança e IA? Vem para a Tech Leads club https://tinyurl.com/4myz2k7p Referências: - https://claudekit.cc/blog/context-engineering-how-to-turn-ai-coding-agents-into-production-ready-tools