RAG de código: o índice certo precisa representar a versão certa
O relato da JetBrains mostra por que snapshots, filtros e atualização incremental importam tanto quanto embeddings na busca para agentes.
A JetBrains descreveu a camada de armazenamento e recuperação do Air Context, incluindo filtros, snapshots, atualização incremental e combinação de índices locais e remotos.[8] A equipe combina busca aproximada com comparação exata em candidatos selecionados e usa reranking para organizar os resultados.[8] O ponto importante para um RAG de código não é simplesmente encontrar algo parecido, mas encontrar o trecho correto no estado correto do projeto.
O que muda para quem desenvolve
Segundo o relato, restringir a travessia de um grafo HNSW pode desconectá-lo e esconder candidatos válidos.[8] Pós-filtrar, por outro lado, pode deixar poucos resultados úteis; varreduras iterativas do pgvector mitigam esse problema com possível custo de latência.[8] Filtro não é um detalhe acrescentado depois da escolha do índice.
A equipe organiza snapshots para reaproveitar subárvores e deduplicar embeddings pelo hash do conteúdo.[8] Ingestão e construção do índice são desacopladas, e um snapshot só se torna pesquisável quando está pronto.[8] Essa disciplina oferece uma resposta concreta à pergunta que todo resultado deveria permitir: “qual versão do repositório sustenta esta resposta?”.
Código ainda não enviado ao remoto é atendido por um índice local com USearch, e candidatos locais e remotos são combinados por reranking.[8] Para quem constrói ferramentas próprias, isso sugere tratar mudanças locais como uma camada explícita, em vez de misturá-las silenciosamente ao estado compartilhado.
Como aplicar
Monte uma avaliação pequena com perguntas cujo arquivo e trecho de resposta já sejam conhecidos. Inclua casos com símbolos de nomes parecidos, código removido e duas branches com implementações diferentes. Compare busca textual, vetorial e uma etapa de reranking usando o mesmo conjunto.
Registre identidade do snapshot, candidatos recuperados, tempo e acerto final. Depois altere um arquivo e remova outro. O experimento deve verificar se o índice abandona a resposta antiga, não apenas se encontra a nova.
Para permissões, crie dois conjuntos de arquivos com acessos diferentes e exija que resultados proibidos não apareçam no contexto entregue ao agente. Minha recomendação é tratar autorização como condição determinística de aceitação, nunca como pontuação que compete com relevância.
Cuidados e limites
A JetBrains descreve subagentes somente leitura, com contexto separado e limite explícito de passos, para situações em que uma consulta não basta.[8] Adote um orçamento semelhante antes de permitir buscas indefinidas. Meça o custo por tarefa resolvida, não só a qualidade de um ranking isolado.
O texto antecipa até 70% menos turnos em determinadas avaliações a serem detalhadas depois, sem apresentar esse ganho como universal.[8] Não converta esse número em previsão para seu projeto. Um sistema que recupera rapidamente código antigo ou inacessível continua entregando contexto errado, apenas com mais eficiência.
Fonte
[8] Fonte: JetBrains Blog