
Ferramentas de compreensão de código baseadas em IA atuais que usam resumo, geração aumentada de recuperação (RAG) e gráficos de conhecimento são como usar uma lupa para mapear um continente. Eles são frágeis e muitas vezes perdem o quadro maior - especialmente para grandes bases de código.
Inspirado por Rich SuttonLição Amargo, todo o método de contexto adota uma abordagem diferente. Em vez de quebrar o codebase em blocos e construir codebase entendendo peça por peça usando truques de divisão e conquista e software, nosso método abraça uma solução holística e orientada para a aprendizagem. Neste pequeno post, vamos examinar por que os métodos fragmentados ficam aquém e traçamos paralelos à evolução da IA. Relataremos também alguns resultados qualitativos iniciais com nosso método, com análise mais aprofundada em um post posterior. O futuro da compreensão de código está aqui, e não depende de truques de software e heurísticas humanas.
A lição amarga e por que os atalhos falham
Rich Sutton, um dos fundadores da aprendizagem de reforço computacional (e também um autor do meu livro didático favorito), escreveuA lição amargano seu site pessoal. É um lembrete de que "os métodos gerais que alavancam a computação são, em última análise, os mais eficazes, e por uma grande margem." Os métodos gerais superam consistentemente heurísticas especializadas, elaboradas por humanos e conhecimentos de domínio. A história da IA apoia isso com exemplos marcantes.
- Xadrez, Azul Profundo e AlfaZero: Em 1997, Deep Blue derrotou o campeão mundial, Kasparov. Profundidade Blue usou uma combinação de busca maciça e táticas humanas de xadrez. Em 2017, o AlphaZero da DeepMind dominou o xadrez do zero até o auto-jogo. Não só superou todos os humanos, mas também explodiu Stockfish - o melhor programa de xadrez do mundo - fora da água. Desde então, Stockfish e outros programas de xadrez "tradicionais" também começaram a incluir redes neurais em seus motores para permanecer competitivos.
- Visão do Computador: No início dos anos 2000, os sistemas de visão dependiam de engenharia de recursos, como SIFT ou HOG. Em 2016, redes neurais profundas convolucionais, como ResNet, treinadas em pixels brutos, superaram esses métodos com precisão sobre-humana.
- StarCraft e AlphaStar: Em 2019, o AlphaStar da DeepMind dominou o StarCraft II da Blizzard, modelando estados inteiros de jogo, incluindo centenas de unidades, mapas e estratégias, sem depender de regras seletivas, superando jogadores profissionais.
- Arqueologia: Em 2022, a DeepMind do Google reconstruiu tablets cuneiformes antigos aprendendo com padrões linguísticos brutos, não suposições especializadas.
- Dobramento de Proteínas: Em 2023, AlphaFold 2 resolveu desafios de dobramento de proteínas de longa data aprendendo com dados moleculares brutos, contornando modelos químicos criados por humanos.
O takeaway parece ser que a aprendizagem holística e generalizada de dados brutos, juntamente com lotes de computação consistentemente supera atalhos inteligentes. Esperamos ver um arco semelhante na compreensão de código de IA também.
Por que a compreensão do código luta para grandes bases de código
A partir do início de 2025, copilotos de código lutam quando o contexto que eles precisam para trabalhar com abrange mais de dezenas de milhares de linhas de código. Geradores de documentação de código de IA produzem resultados sem brilho para bases de código maciças. Isto é principalmente devido ao menor (~100k token) janelas de contexto de muitos LLMs e as limitações dos truques comuns usados para superá-lo. Truques como:
- Resumo e memóriaUma abordagem comum para lidar com grandes contextos é alocar alguma parte dela para um resumo de tudo visto até agora. Este processo, pelo seu próprio design, é perdido. Para a compreensão de código, enquanto esta abordagem pode capturar dependências locais, muitas vezes falha dependências globais cross-module através da base de código.
- Geração Aumentada por Recuperação (RAG): RAG depende de ter um banco de dados vetorial de blocos do codebase e recupera os blocos mais "relevantes" através do codebase para uma determinada consulta. RAG pode ser útil para a recuperação de informações específicas, mas muitas vezes não é confiável. Além disso, RAG não é útil para tarefas que precisam de um grande número de blocos.
- Gráficos de conhecimento (KGs): KGs são ótimos para responder perguntas dentro de um domínio específico onde o vocabulário de objetos e relações é limitado. No entanto, eles lutam para escalar grandes bases de código em evolução.
Janelas de contexto menores forçam os desenvolvedores a quebrar bases de código em fragmentos e trabalhar com um número limitado de fragmentos de cada vez. Esta abordagem perde nuance, uma vez que o código é um artefato vivo com padrões que abrangem milhares de arquivos. Nossa equipe gerou documentação para PyTorch (1,5+ milhões de linhas de código) usando técnicas baseadas em resumo padrão e encontrou a documentação resultante ser de baixa qualidade e falta de dependências críticas. Em contraste, nosso método de contexto completo produziu documentação muito mais clara e precisa.
O Método de Contexto Inteiro
E se, em vez de nos concentrarmos no uso econômico de fichas, nos concentramos em maximizá-las? Poderíamos parar de fragmentar bases de código e capturar até as interdependências mais complexas. Todo o método de contexto faz exatamente isso. Ele usa LLMs com as maiores janelas de contexto disponíveis para processar repositórios inteiros, incluindo cada arquivo, commit e comment, como um único contexto unificado. É assim que funciona:
- Ingestão completa: Ele processa bases de código maciças, como PyTorch (1.2M linhas), de uma só vez, capturando interdependências que os métodos fragmentados falham.
- Aprendizagem Commit-Aware: Ajusta-se em histórias de commit para entender intenção e evolução, além de apenas código estático.
- Hub de Documentação Viva: Cria um hub interativo e questionável que se atualiza automaticamente à medida que o codebase evolui, servindo desenvolvedores e mantenedores.
Conclusão: Abraçar a Lição Amargo
AlphaZero aprendeu xadrez de classe mundial baseado em métodos gerais de aprendizagem, autojogo e busca, juntamente com computação maciça. Da mesma forma, o Método de Contexto Inteiro não depende de heurísticas artesanais, abstrações perdidas, ou tubulações modulares que tentam “exceder” o problema. Em vez disso, ela abraça a Lição Amargo: que o verdadeiro entendimento não vem da codificação de conhecimento de domínio frágil, mas de alavancar sistemas de aprendizagem escaláveis que podem descobrir os padrões que temos tentado criar à mão.
O código, como mentes, é irredutivelmente complexo. Como Sutton escreve, o mundo real está cheio de estrutura arbitrária: preocupações transversais, hacks legados, interações dinâmicas entre milhares de módulos. A necessidade de simplificar com modelos de autoria humana é uma armadilha. A única maneira confiável de avançar é construir sistemas que possam aprender a entender, não sistemas que apenas contenham nossa compreensão atual.
Em um post futuro, compartilharemos benchmarks mais detalhados e exemplos em grandes bases de código como PyTorch, Kubernetes e sistemas empresariais legados. Mas mesmo agora, uma coisa é clara: A próxima geração de ferramentas desenvolvedor não virá de hacks mais inteligentes. Virá de ver o todo.
Referências
- Sutton, R. S. (2019). A lição amarga (Idéias incompletas).
- Silver, D., et al. (2017). Dominando xadrez e shogi por auto-jogo com um algoritmo de aprendizagem de reforço geral (arXiv).
- Vinyals, O., et al. (2019). Nível de Grandmaster em StarCraft II usando a aprendizagem de reforço multi-agente (Natureza).
- Jumper, J., et al. (2021). Previsão de estrutura proteica altamente precisa com AlphaFold (Natureza).
- Assael, Y., et al. (2022). Restaurar e atribuir textos antigos usando redes neurais profundas (Natureza).