Melhorando Ferramentas de Completação de Código com Insights de Tempo
Esse artigo fala sobre como melhorar as ferramentas de autocompletar código prevendo o que os desenvolvedores precisam como sugestões.
― 7 min ler
Índice
Ferramentas de completude de código tão se tornando bem importantes no desenvolvimento de software. Essas ferramentas ajudam os programadores sugerindo as próximas linhas de código com base no que eles já escreveram até agora. Mas, muitas dessas ferramentas sugerem coisas com muita frequência ou nos momentos errados, o que pode distrair os Desenvolvedores e atrapalhar o fluxo de trabalho deles. Esse artigo explora como melhorar essas ferramentas prevendo quando um desenvolvedor realmente precisa de ajuda com a completude de código.
Contexto
As ferramentas de completude de código geralmente usam modelos avançados de aprendizado de máquina conhecidos como transformers. Esses modelos analisam o código escrito antes do cursor para fazer Sugestões sobre o que vem a seguir. Embora essas sugestões possam ser úteis, elas frequentemente vêm com um custo, tanto em termos de recursos computacionais quanto em como afetam a produtividade do desenvolvedor.
Muitos estudos se concentraram em melhorar a qualidade das sugestões, mas ignoraram em grande parte o timing dessas sugestões. É crucial saber quando oferecer ajuda para que os desenvolvedores possam focar no trabalho sem interrupções desnecessárias.
O Problema
O principal problema é que as ferramentas atuais não conseguem prever efetivamente quando um desenvolvedor gostaria de uma sugestão. Algumas ferramentas dependem de um modelo simples que mostra uma sugestão apenas se acredita que o desenvolvedor é provável de aceitá-la. No entanto, isso se baseia principalmente no contexto do código e não leva em consideração outros fatores, como o comportamento e as ações do desenvolvedor.
O desafio é desenvolver um modelo que possa determinar com precisão os momentos ideais para oferecer completude de código com base em várias informações, incluindo dados de telemetria das interações do desenvolvedor com o ambiente de desenvolvimento.
Solução Proposta
Para resolver esse problema, sugerimos um novo modelo de filtragem que utiliza uma arquitetura de transformer. Nosso modelo visa determinar quando apresentar as completudes com base nas ações do desenvolvedor, no contexto do código ao redor e em dados adicionais de telemetria.
Coleta de Dados
Coletamos dados de desenvolvedores que usam nossa ferramenta de completude de código de código aberto, disponível para IDEs populares como VSCode e JetBrains. Os dados incluem vários tipos de interações, como quando os usuários aceitam sugestões ou quando pedem manualmente uma completude.
Treinamento do Modelo
Nosso modelo é treinado com esses dados coletados. Nós especificamente buscamos dois indicadores das preferências de um desenvolvedor:
- Quando eles aceitam uma sugestão.
- Quando eles invocam manualmente a ferramenta de sugestão.
Para fazer previsões precisas, coletamos informações contextuais sobre o código que está sendo escrito e dados de telemetria, como quanto tempo passou desde a última sugestão.
Avaliação
Primeiro, treinamos um classificador que usa apenas o contexto do código e depois integramos dados de telemetria ao modelo. Assim, podemos ver se usar informações adicionais melhora o desempenho do nosso modelo. Também realizamos estudos com usuários para avaliar quão bem nossos filtros funcionam em cenários do mundo real.
Descobertas
Nossos resultados indicam que um modelo transformer menor pode superar significativamente os sistemas anteriores, mantendo baixa latência. O modelo prevê com sucesso quando exibir sugestões, melhorando o foco do desenvolvedor e a produtividade geral.
Desafios de Completude de Código
Embora ferramentas de IA possam melhorar a velocidade da codificação, elas também introduzem novos problemas. Os desenvolvedores frequentemente enfrentam distrações devido a sugestões constantes e podem se deparar com completudes irrelevantes. Também há preocupação sobre como o código gerado por IA afeta a manutenibilidade e a qualidade do software.
Experiência do Usuário
À medida que essas ferramentas se tornam mais populares, entender a experiência do usuário se torna essencial. Os desenvolvedores geralmente caem em diferentes modos de interação. Alguns sabem exatamente o que querem e usam a ferramenta para acelerar, enquanto outros contam com a ferramenta para obter orientação.
Algumas ferramentas, como o GitHub Copilot, oferecem sugestões, mas muitas delas passam despercebidas. Relatórios indicam que uma grande porcentagem das completudes fornecidas é ignorada pelos usuários, o que questiona sua eficácia.
Abordagens Atuais
As ferramentas de completude de código existentes, como GitHub Copilot e Amazon CodeWhisperer, geram sugestões com base em uma vasta quantidade de dados de treinamento. No entanto, elas tendem a se concentrar apenas em gerar completudes de alta qualidade sem considerar o timing ou o contexto em que as sugestões são feitas.
Alguns estudos recentes tentaram filtrar sugestões irrelevantes. Esses métodos geralmente dependem de regras simples que não conseguem capturar totalmente as complexidades do comportamento do desenvolvedor. Além disso, algumas dessas técnicas adicionam tempo extra ao processo de sugestão, o que pode ser contraproducente.
Design do Novo Modelo
O modelo que propomos visa integrar melhor diferentes fontes de informação, principalmente combinando dados de telemetria com o contexto de codificação.
Arquitetura
Usamos uma arquitetura baseada em transformer para nosso modelo, que é conhecida por sua excepcional capacidade de entender o contexto. Ao adicionar dados de telemetria - como com que frequência um desenvolvedor usa o sistema de sugestões - esperamos criar uma ferramenta mais responsiva.
Variantes de Classificador
Construímos vários modelos que incorporam dados de telemetria em seu processo de tomada de decisão. Experimentamos diferentes configurações para ver qual produzia os melhores resultados em termos de precisão.
Aprendendo a Prever
No nosso estudo, treinamos especificamente nosso modelo para entender quando um desenvolvedor é propenso a querer uma sugestão. Isso envolve ensiná-lo a reconhecer padrões tanto em gatilhos manuais quanto automáticos para completudes de código.
Quadro Experimental
Para avaliar nossa abordagem, projetamos experimentos que avaliam a eficácia de nossos modelos em comparação com métodos tradicionais. Queremos ver como nossos filtros se saem em um ambiente de codificação real em comparação com ferramentas existentes.
Estudos com Usuários
Realizamos estudos com usuários onde os desenvolvedores interagem com nossa ferramenta de completude de código. Durante esses estudos, medimos com que frequência as sugestões são aceitas e como elas impactam o fluxo de trabalho do desenvolvedor.
Métricas
Para avaliar o sucesso, focamos em métricas-chave, como:
- Taxa de aceitação das sugestões.
- Velocidade do modelo em determinar se deve apresentar uma sugestão.
- Feedback dos desenvolvedores sobre a utilidade das sugestões.
Resultados e Discussão
Nossos experimentos mostram resultados promissores. O modelo que desenvolvemos pode prever quando oferecer completudes de código de forma mais eficaz do que as ferramentas existentes. Os desenvolvedores envolvidos no nosso estudo relataram um nível maior de satisfação e produtividade.
Equilibrando Qualidade e Timing
Um dos avanços significativos do nosso modelo é sua capacidade de priorizar quando uma sugestão é necessária. Ao otimizar tanto a qualidade da sugestão quanto o momento em que ela é apresentada, buscamos reduzir as distrações do usuário e melhorar a experiência de codificação geral.
Impacto a Longo Prazo
Enquanto os resultados imediatos são encorajadores, também reconhecemos a importância de estudar os impactos a longo prazo do uso de ferramentas de IA em ambientes de codificação. Entender como essas ferramentas podem alinhar melhor com as necessidades dos desenvolvedores ao longo do tempo é crucial para avanços futuros.
Conclusão
Em conclusão, exploramos uma nova abordagem para a completude de código que foca não apenas nas sugestões em si, mas também em quando apresentá-las. Usando um modelo baseado em transformer que integra tanto o contexto do código quanto dados de telemetria, podemos aprimorar a experiência do usuário para os desenvolvedores.
Pesquisas futuras devem buscar expandir o conjunto de dados para capturar melhor os diferentes comportamentos dos desenvolvedores e refinar ainda mais o modelo. Ao fazer isso, podemos garantir que as ferramentas de IA continuem sendo benéficas sem se tornarem um obstáculo no processo de codificação.
À medida que as práticas de codificação evoluem, o desenvolvimento de ferramentas mais inteligentes será essencial para acompanhar as necessidades em mudança dos desenvolvedores.
Título: A Transformer-Based Approach for Smart Invocation of Automatic Code Completion
Resumo: Transformer-based language models are highly effective for code completion, with much research dedicated to enhancing the content of these completions. Despite their effectiveness, these models come with high operational costs and can be intrusive, especially when they suggest too often and interrupt developers who are concentrating on their work. Current research largely overlooks how these models interact with developers in practice and neglects to address when a developer should receive completion suggestions. To tackle this issue, we developed a machine learning model that can accurately predict when to invoke a code completion tool given the code context and available telemetry data. To do so, we collect a dataset of 200k developer interactions with our cross-IDE code completion plugin and train several invocation filtering models. Our results indicate that our small-scale transformer model significantly outperforms the baseline while maintaining low enough latency. We further explore the search space for integrating additional telemetry data into a pre-trained transformer directly and obtain promising results. To further demonstrate our approach's practical potential, we deployed the model in an online environment with 34 developers and provided real-world insights based on 74k actual invocations.
Autores: Aral de Moor, Arie van Deursen, Maliheh Izadi
Última atualização: 2024-05-23 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2405.14753
Fonte PDF: https://arxiv.org/pdf/2405.14753
Licença: https://creativecommons.org/licenses/by/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.
Ligações de referência
- https://github.com/ar4l/curating-code-completions
- https://huggingface.co/collections/AISE-TUDelft/smart-invocation-of-code-completion-66473ddf6fa6cf6e541f750c
- https://tex.stackexchange.com/questions/300340/topsep-itemsep-partopsep-and-parsep-what-does-each-of-them-mean-and-wha
- https://dl.acm.org/ccs.cfm
- https://code4me.me
- https://anonymous.4open.science/r/curating-code-completions
- https://huggingface.co/AISE-TUDelft
- https://github.com/features/copilot
- https://aws.amazon.com/codewhisperer/
- https://www.tabnine.com/
- https://codeium.com/
- https://sourcegraph.com/cody
- https://www.jetbrains.com/ai/
- https://cloud.google.com/gemini/docs/codeassist/overview
- https://github.blog/2023-12-29-github-copilot-chat-now-generally-available-for-organizations-and-individuals/
- https://www.gitclear.com/
- https://github.com/vllm-project/vllm
- https://huggingface.co/huggingface/CodeBERTa-small-v1
- https://doi.org/10.5281/zenodo.10935342
- https://pytorch.org
- https://scikit-learn.org
- https://www.jetbrains.com/fleet/
- https://github.com/openai/tiktoken
- https://huggingface.co/sentence-transformers/all-mpnet-base-v2