Mejorando las Herramientas de Autocompletado de Código con Perspectivas de Tiempo
Este artículo habla sobre cómo mejorar las herramientas de autocompletado de código al predecir las necesidades de los desarrolladores para sugerencias.
― 8 minilectura
Tabla de contenidos
Las herramientas de autocompletado de código se están volviendo muy importantes en el desarrollo de software. Estas herramientas ayudan a los programadores sugiriendo las siguientes líneas de código basándose en lo que han escrito hasta ahora. Sin embargo, muchas de estas herramientas sugieren completaciones demasiado a menudo o en momentos inapropiados, lo que puede distraer a los Desarrolladores y interrumpir su flujo. Este artículo explora cómo mejorar estas herramientas prediciendo cuándo un desarrollador realmente necesita ayuda con el autocompletado de código.
Antecedentes
Las herramientas de autocompletado de código suelen usar modelos avanzados de aprendizaje automático conocidos como transformers. Estos modelos analizan el código escrito antes del cursor para hacer Sugerencias sobre lo que viene después. Aunque estas sugerencias pueden ser útiles, a menudo vienen con un costo, tanto en recursos computacionales como en cómo afectan la productividad del desarrollador.
Muchos estudios se han centrado en mejorar la calidad de las sugerencias, pero han ignorado en gran medida el timing de estas sugerencias. Es crucial saber cuándo ofrecer ayuda para que los desarrolladores puedan concentrarse en su trabajo sin interrupciones innecesarias.
El Problema
El principal problema es que las herramientas actuales no predicen de manera efectiva cuándo un desarrollador querría una sugerencia. Algunas herramientas se basan en un modelo simple que muestra una sugerencia solo si cree que el desarrollador probablemente la aceptará. Sin embargo, esto se basa principalmente en el contexto del código y no tiene en cuenta otros factores como el comportamiento y las acciones del desarrollador.
El desafío es desarrollar un modelo que pueda determinar con precisión los momentos ideales para ofrecer autocompletados en función de múltiples piezas de información, incluyendo Datos de telemetría de las interacciones del desarrollador con el entorno de desarrollo.
Solución Propuesta
Para abordar este problema, sugerimos un nuevo modelo de filtrado que utiliza una arquitectura de transformer. Nuestro modelo tiene como objetivo determinar cuándo presentar las completaciones basándose en las acciones del desarrollador, el contexto del código circundante y datos de telemetría adicionales.
Recolección de Datos
Recopilamos datos de desarrolladores que utilizan nuestra herramienta de autocompletado de código de código abierto, que está disponible para entornos de desarrollo integrados (IDEs) populares como VSCode y JetBrains. Los datos incluyen varios tipos de interacciones, como cuando los usuarios aceptan sugerencias o cuando solicitan manualmente una completación.
Entrenamiento del Modelo
Nuestro modelo se entrena con estos datos recopilados. Buscamos específicamente dos indicadores de las preferencias de un desarrollador:
- Cuando aceptan una sugerencia.
- Cuando invocan manualmente la herramienta de sugerencias.
Para hacer predicciones precisas, recopilamos información contextual sobre el código que se está escribiendo y datos de telemetría, como cuánto tiempo ha pasado desde que se hizo la última sugerencia.
Evaluación
Primero entrenamos un clasificador que usa solo el contexto del código y luego integramos datos de telemetría en el modelo. De esta manera, podemos ver si usar información adicional mejora el rendimiento de nuestro modelo. También realizamos estudios con usuarios para evaluar cuán bien funcionan nuestros filtros en escenarios del mundo real.
Hallazgos
Nuestros resultados indican que un modelo de transformer más pequeño puede superar significativamente a sistemas anteriores mientras mantiene baja latencia. El modelo predice con éxito cuándo mostrar sugerencias, mejorando el enfoque del desarrollador y la productividad en general.
Desafíos del Autocompletado de Código
Aunque las herramientas de IA pueden mejorar la velocidad de codificación, también introducen nuevos problemas. Los desarrolladores a menudo experimentan distracciones por las constantes sugerencias y pueden enfrentar completaciones irrelevantes. También hay preocupación sobre cómo el código generado por IA afecta la mantenibilidad y calidad del software.
Experiencia del Usuario
A medida que estas herramientas se vuelven más populares, entender la experiencia del usuario se vuelve esencial. Los desarrolladores generalmente caen en diferentes modos de interacción. Algunos saben exactamente lo que quieren y usan la herramienta para ir más rápido, mientras que otros dependen de la herramienta para obtener orientación.
Algunas herramientas, como GitHub Copilot, ofrecen sugerencias, pero muchas de ellas pasan desapercibidas. Los informes indican que un gran porcentaje de las completaciones proporcionadas son ignoradas por los usuarios, lo que cuestiona su efectividad.
Enfoques Actuales
Las herramientas de autocompletado de código existentes, como GitHub Copilot y Amazon CodeWhisperer, generan sugerencias basándose en una enorme cantidad de datos de entrenamiento. Sin embargo, tienden a centrarse únicamente en generar completaciones de alta calidad sin considerar el momento o contexto en el que se hacen las sugerencias.
Algunos estudios recientes han intentado filtrar sugerencias irrelevantes. Estos métodos a menudo se basan en reglas simples que no pueden capturar completamente las complejidades del comportamiento del desarrollador. Además, algunas de estas técnicas añaden tiempo extra al proceso de sugerencias, lo que puede ser contraproducente.
Diseño del Nuevo Modelo
El modelo que proponemos tiene como objetivo integrar mejor diferentes fuentes de información, principalmente combinando datos de telemetría con el contexto de codificación.
Arquitectura
Usamos una arquitectura basada en transformers para nuestro modelo, que es conocida por su excepcional capacidad para entender contextos. Al agregar datos de telemetría, como con qué frecuencia un desarrollador usa el sistema de sugerencias, esperamos crear una herramienta más receptiva.
Variantes de Clasificador
Hemos construido varios modelos que incorporan datos de telemetría en su proceso de toma de decisiones. Experimentamos con diferentes configuraciones para ver cuál produce los mejores resultados en términos de precisión.
Aprendiendo a Predecir
En nuestro estudio, entrenamos específicamente a nuestro modelo para entender cuándo un desarrollador probablemente querrá una sugerencia. Esto implica enseñarle a reconocer patrones tanto en desencadenadores manuales como automáticos para completaciones de código.
Marco Experimental
Para evaluar nuestro enfoque, diseñamos experimentos que evalúan la efectividad de nuestros modelos en comparación con métodos tradicionales. Queremos ver cómo funcionan nuestros filtros en un entorno de codificación real en comparación con las herramientas existentes.
Estudios de Usuarios
Realizamos estudios donde los desarrolladores interactúan con nuestra herramienta de autocompletado de código. Durante estos estudios, medimos con qué frecuencia se aceptan sugerencias y cómo impactan el flujo de trabajo del desarrollador.
Métricas
Para medir el éxito, nos enfocamos en métricas clave como:
- Tasa de aceptación de sugerencias.
- Velocidad del modelo para determinar si presentar una sugerencia.
- Retroalimentación de los desarrolladores sobre la utilidad de las sugerencias.
Resultados y Discusión
Nuestros experimentos muestran resultados prometedores. El modelo que desarrollamos puede predecir cuándo ofrecer autocompletados de código de manera más efectiva que las herramientas existentes. Los desarrolladores involucrados en nuestro estudio reportaron un mayor nivel de satisfacción y productividad.
Equilibrando Calidad y Timing
Uno de los avances significativos de nuestro modelo es su capacidad para priorizar cuándo se necesita una sugerencia. Al optimizar tanto la calidad de la sugerencia como el momento en que se presenta, buscamos reducir las distracciones del usuario y mejorar la experiencia general de codificación.
Impacto a Largo Plazo
Aunque los resultados inmediatos son alentadores, también reconocemos la importancia de estudiar los impactos a largo plazo del uso de herramientas de IA en entornos de codificación. Comprender cómo estas herramientas pueden alinearse mejor con las necesidades de los desarrolladores con el tiempo es crucial para futuros avances.
Conclusión
En conclusión, hemos explorado un nuevo enfoque para el autocompletado de código que se centra no solo en las sugerencias en sí, sino también en cuándo presentarlas. Al utilizar un modelo basado en transformers que integra tanto el contexto del código como datos de telemetría, podemos mejorar la experiencia del usuario para los desarrolladores.
La investigación futura debería apuntar a expandir el conjunto de datos para capturar mejor diferentes comportamientos de los desarrolladores y refinar aún más el modelo. Al hacerlo, podemos asegurar que las herramientas de IA sigan siendo beneficiosas sin convertirse en un obstáculo en el proceso de codificación.
A medida que las prácticas de codificación evolucionan, el desarrollo de herramientas más inteligentes será esencial para mantenerse al día con las necesidades cambiantes de los desarrolladores.
Título: A Transformer-Based Approach for Smart Invocation of Automatic Code Completion
Resumen: 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 actualización: 2024-05-23 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2405.14753
Fuente PDF: https://arxiv.org/pdf/2405.14753
Licencia: https://creativecommons.org/licenses/by/4.0/
Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.
Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.
Enlaces de referencia
- 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