Não daria para o LLM simplesmente entender a codebase inteira? Uma tentativa de RAG por meio de bundling
(gist.github.com/atjsh)> "Neste texto, vamos verificar com que precisão um LLM consegue responder a perguntas relacionadas a uma codebase quando uma codebase TypeScript com muitos arquivos é compactada em um único arquivo JavaScript por meio de bundling e então enviada ao LLM."
- Preparação de uma codebase de servidor web baseada em NestJS
- Compactação da codebase com esbuild (bundling)
- O código compactado é inserido no prompt
- Envio do prompt ao ChatGPT o3-mini
- Verificação de quão precisamente ele responde a perguntas relacionadas à codebase
- Teste de geração de Swagger: na maioria das tentativas, conseguiu documentar corretamente 19 ou mais dos 21 endpoints
- Teste de solicitação de explicação sobre endpoints de API: gerou com sucesso manuais para não desenvolvedores e para desenvolvedores
- Existem limitações
- Conclusão
> "Para fazer RAG da codebase inteira com um LLM, foi projetado um teste que compacta toda a codebase em um único arquivo e a envia ao LLM.
>
> Ao compactar a codebase usando ferramentas de bundling existentes como estão, o LLM foi capaz de produzir documentação de API para toda a codebase ou escrever manuais detalhados sobre APIs específicas.
>
> Quanto à perda de informação que ocorre durante a compactação da codebase, espera-se que ela possa ser compensada com uma busca semântica adicional sobre os arquivos originais."
8 comentários
Será que dá para chamar de RAG colocar um arquivo empacotado no prompt ou anexá-lo à aplicação para consultar o LLM? Fico curioso sobre qual parte corresponderia ao retrieval.
Eu também tive uma ideia parecida
Não seria o caso de o LLM fazer a recuperação com base no arquivo empacotado e então trazer o código original?
Interessante. Parece que ele consegue entender razoavelmente bem até mesmo JS minificado. Acho que também seria legal fornecer a estrutura de diretórios como contexto adicional, usando ferramentas apresentadas em https://pt.news.hada.io/topic?id=19552 ou https://pt.news.hada.io/topic?id=19540.
Como ultimamente tenho usado muito LLM para programar, estou sempre pensando em como transmitir informações de forma eficiente, então obrigado por este experimento interessante.
Lá fora também houve tentativas de extrair a sintaxe do codebase em forma de grafo para fazer consultas,
mas o bundling parece ser um método mais fácil de aplicar de forma geral. (se a linguagem oferecer suporte a bundling)
https://x.com/daniel_mac8/status/1908332949251948808
Mas, como o desempenho do Gemini está muito bom ultimamente, acho que seria ainda mais interessante se você comparasse com o o3.
Li com interesse. Impressiona que seja possível extrair a lógica de negócio até esse nível a partir do código-fonte empacotado... Parece que o custo de engenharia reversa de web apps escritos como SPA também pode cair drasticamente.
Opa, fui tentar ler, mas o blog está dando erro 500 no momento.
Parece que meu blog está instável. Se você não conseguir acessar, pode ler o conteúdo aqui no gist.github.com.