Melhorando o agente com busca semântica

Por Stefan Heule, Emily Jia & Naman Jain em Pesquisa

Quando agentes de código recebem um prompt, retornar a resposta correta exige construir um entendimento da base de código lendo arquivos e buscando informações relevantes.

Uma ferramenta que o agente do Cursor usa é a busca semântica, que recupera trechos de código que correspondem a consultas em linguagem natural, como “onde tratamos da autenticação?”, além da busca baseada em regex fornecida por uma ferramenta como grep.

Para viabilizar a busca semântica, treinamos nosso próprio modelo de embeddings e construímos pipelines de indexação para recuperação rápida. Embora você possa depender exclusivamente do grep e de ferramentas de linha de comando semelhantes para busca, descobrimos que a busca semântica melhora significativamente o desempenho do agente, especialmente em bases de código grandes:

  • Atingindo em média 12,5% mais precisão ao responder perguntas (6,5%–23,5%, dependendo do modelo).

  • Produzindo alterações de código que têm mais chance de serem mantidas nas bases de código.

  • Exigindo menos iterações para que os usuários cheguem a uma solução correta.

  • Aumentando a precisão em todos os modelos que testamos, incluindo todos os modelos de código de última geração.

Avaliações offline

Mantemos um conjunto de dados de avaliação, o Cursor Context Bench, focado em recuperar informações em bases de código com respostas corretas conhecidas. Essa avaliação é executada em todos os modelos mais usados no Cursor, incluindo o nosso próprio Composer.

A comparação analisa o desempenho com dois conjuntos de ferramentas disponíveis: um que inclui busca semântica e outro que não. Em todas as configurações, a busca semântica melhora significativamente os resultados.

Testes A/B online

Também queríamos entender o impacto na experiência do usuário final. Executamos um teste A/B em que ambos os grupos usaram o mesmo modelo, mas o agente de um dos grupos tinha acesso à busca semântica enquanto o outro dependia apenas de ferramentas de busca tradicionais como grep. Analisamos duas métricas:

  • Retenção de código: Código escrito por agentes eficazes tem mais probabilidade de permanecer nas bases de código dos usuários. Observamos que a retenção de código do agente aumenta em 0,3% quando a busca semântica está disponível. Esse efeito aumenta para 2,6% em grandes bases de código com 1.000 arquivos ou mais.

  • Solicitações de usuários insatisfeitos: Código escrito por agentes eficazes não exige interações posteriores ou correções. Observamos um aumento de 2,2% em solicitações de acompanhamento de usuários insatisfeitos quando a busca semântica não estava disponível.

O tamanho do efeito é menor aqui, já que o teste A/B é feito em todas as consultas ao agente e nem todas as solicitações exigem busca.

Modelos de recuperação personalizados

Um dos componentes que possibilita esses resultados é nosso modelo de embedding personalizado. Nossa abordagem usa sessões de agente como dados de treinamento: quando um agente trabalha em uma tarefa, ele faz várias pesquisas e abre arquivos antes de encontrar o código certo. Ao analisar esses traces, conseguimos ver, em retrospecto, o que deveria ter sido recuperado mais cedo na conversa.

Fornecemos esses traces para um LLM, que classifica qual conteúdo teria sido mais útil em cada etapa. Em seguida, treinamos nosso modelo de embedding para alinhar suas pontuações de similaridade com essas classificações geradas pelo LLM. Isso cria um ciclo de feedback em que o modelo aprende com a forma como os agentes realmente executam tarefas de programação, em vez de depender apenas de uma similaridade de código genérica.

Conclusão

A busca semântica é atualmente essencial para obter os melhores resultados, especialmente em grandes bases de código.

Nosso agente faz uso intenso de grep, além de busca semântica, e a combinação dessas duas abordagens leva aos melhores resultados. Continuamos testando e avaliando todas as ferramentas que disponibilizamos ao agente à medida que os modelos melhoram.

Arquivado em: Pesquisa

Autors: Stefan Heule, Emily Jia & Naman Jain

Melhorando o agente com busca semântica · Cursor