News

Finalización de código de línea completa en los JetBrains IDEs: todo lo que necesita saber

Read this post in other languages:

La programación con IA sigue siendo un tema muy controvertido, pero no se puede negar que cada vez más desarrolladores están empezando a incorporar la IA en sus flujos de trabajo diarios. Tanto si ya ha elegido su bando en el debate como si aún no tiene una opinión clara, tenemos una nueva funcionalidad en la versión 2024.1 de los JetBrains IDEs que podría despertar su interés: la finalización de código de línea completa. Está basada en la IA y se ejecuta localmente sin enviar ningún dato a través de Internet.

En este artículo del blog, le explicaremos qué es la finalización de código de línea completa, cómo funciona, qué lenguajes son compatibles y cómo puede hacernos llegar sus comentarios al respecto.

¿Qué es la finalización de código de línea completa en los JetBrains IDEs?

Este nuevo tipo de finalización de código se añadió a los JetBrains IDEs en la última actualización 2024.1. Como puede ver a continuación, adopta la forma de sugerencias de una sola línea en tonos grises que completan las líneas basándose en el contexto del archivo actual:

Estas sugerencias se basan en modelos lingüísticos especializados que hemos entrenado específicamente para diferentes lenguajes y marcos de trabajo. Los modelos se ejecutan localmente sin enviar código a través de Internet.

La finalización de código de línea completa está disponible actualmente para Java, Kotlin, Python, JavaScript, TypeScript, CSS, PHP, Go yRuby dentro de los JetBrains IDEs correspondientes: IntelliJ IDEA Ultimate, PyCharm Professional, WebStorm, PhpStorm, GoLand y RubyMine. A lo largo de los próximos meses, tenemos previsto ampliar la funcionalidad a C#, Rust y C++, por lo que también llegará a Rider, RustRover y CLion.

Tenga en cuenta que la finalización de código de línea completa se incluye con su suscripción activa a los JetBrains IDEs sin coste adicional; solo debe asegurarse de que tiene la versión 2024.1 o posterior. Si aún no dispone de una suscripción, también puede utilizar esta funcionalidad durante los 30 días de prueba gratuita.

¿Cómo funciona la finalización de línea completa?

Con la finalización de código de línea completa, teníamos en mente dos objetivos principales. La primera es obvia: ayudarle a ahorrar tiempo y aumentar su velocidad de codificación. Pero más allá de eso, también queríamos ofrecer una solución que abordara las limitaciones que tienen ciertas organizaciones cuando se trata de utilizar soluciones de IA conectadas a la nube.

He aquí un resumen de cómo la finalización de código de línea completa ayuda a cumplir estos dos objetivos:

  • Funciona de forma local y está disponible sin conexión. Esto significa que puede aprovechar la funcionalidad aunque no tenga conexión a Internet.
  • No envía ningún dato de su máquina a través de Internet. Los modelos lingüísticos en los que se basa la finalización de código de línea completa se ejecutan localmente, lo que es estupendo por dos razones. En primer lugar, su código permanece seguro, ya que nunca sale de su máquina. En segundo lugar, no hay gastos adicionales relacionados con la nube, por eso esta función no tiene ningún coste adicional.
  • Está profundamente integrado en los JetBrains IDEs. Todas las sugerencias tendrán el formato adecuado, y el IDE comprobará que los paréntesis y las comillas estén equilibrados. Además, utilizamos la potencia del análisis estático y nuestra comprensión del código para filtrar las sugerencias incorrectas. Para cada lenguaje compatible se sugiere su propio conjunto de comprobaciones de corrección del código. Las más básicas, como la comprobación de referencias no resueltas, se implementan en la mayoría de los lenguajes para garantizar que el IDE no sugiera variables y métodos que no existan. También se admite la función de importación automática.
  • Se ha diseñado para que su flujo de trabajo sea lo más fluido posible. Utilizamos un filtrado inteligente para evitar mostrar sugerencias que tienden a ser canceladas explícitamente o borradas justo después de haber sido añadidas.

Para obtener más detalles técnicos, consulte esta sección a continuación.

Finalización de código de línea completa vs. AI Assistant

Hay dos formas de sacar partido de la funcionalidad de la IA en los JetBrains IDE: la finalización de código de línea completa y JetBrains AI Assistant. Somos conscientes de que esto puede resultar confuso, así que veamos más de cerca qué tienen en común y en qué se diferencian.

Tanto la finalización de código de línea completa como JetBrains AI Assistant tienen como objetivo ayudarle a trabajar más rápido. Ambos van también más allá de la finalización estándar que ya está disponible en los JetBrains IDE desde hace algún tiempo. Sin embargo, JetBrains AI Assistant ofrece un conjunto de funciones más completo, que incluye un chat inteligente contextual y la capacidad de generar pruebas o escribir documentación.

Consulte la tabla siguiente para comparar las dos funcionalidades de la IA:

Tenga la seguridad de que nunca entrenamos ninguna de nuestras funcionalidades de IA con el código de los clientes. Si su empresa tiene una normativa estricta en materia de privacidad de datos, pero aun así desea acelerar sus flujos de trabajo con la IA, la finalización de código de línea completa puede ser una mejor opción para usted.

Entre bastidores

La columna vertebral de la finalización de código de línea completa es un modelo de lenguaje específico del lenguaje de programación, que se entrena internamente utilizando un conjunto de datos de código fuente abierto con licencias permisivas. En el modelo lingüístico se introduce el código que precede al signo de intercalación, aunque para algunos lenguajes también añadimos contenido de archivos relacionados. El resultado es la continuación de la línea actual sugerida por el modelo, que se muestra en gris.

La inferencia del modelo lingüístico se ejecuta en su máquina local. Para garantizar la generación más eficiente, la inferencia del modelo se ejecuta en un proceso por separado y está muy optimizada para la arquitectura de la máquina de destino. Por ejemplo, si utiliza la arquitectura x86-64, el modelo se ejecutará en la CPU, mientras que si utiliza la arquitectura ARM64, el modelo utilizará la potencia de la GPU de su ordenador.

Una vez generada la sugerencia, se aplica una serie de pasos de postprocesamiento. En primer lugar, comprobamos si esta sugerencia es sintáctica y semánticamente correcta y, a continuación, realizamos un filtrado inteligente, formateo, equilibrado de paréntesis y otras manipulaciones diversas. El postprocesamiento es crucial para la experiencia del usuario, por lo que hacemos todo lo posible para mostrar solo sugerencias valiosas que no perturben su flujo de trabajo.

Por último, puede que también se pregunte por qué nos hemos decidido por las sugerencias de una sola línea. La longitud de las sugerencias de finalización de la IA es un compromiso. Aunque las sugerencias más largas tienden a reducir el número de teclas que pulsar, lo cual es bueno, también aumentan el número de revisiones necesarias por su parte. Teniendo en cuenta lo anterior, decidimos que completar una sola línea de código sería un compromiso justo.

Esta decisión nos permitió reducir el tamaño del modelo sin que disminuyera significativamente la calidad de la sugerencia. En la versión 2024.1 de los JetBrains IDEs, utilizamos un modelo de lenguaje que tiene 100 millones de parámetros, con un tamaño de contexto máximo de 1536 tokens, lo que equivale aproximadamente a 170 líneas de código.

Cómo adaptar la funcionalidad

Puede configurar la finalización de código de línea completa en Settings | Editor | General | Code Completion ; todos los ajustes se encuentran ahí, en la sección Machine Learning-Assisted Completion:

Si desea desactivar la funcionalidad, puede hacerlo desmarcando la casilla Enable Full Line suggestions. Alternativamente, puede desactivar el complemento que posibilita esta funcionalidad. Para ello, vaya a Settings | Plugins, cambie a la pestaña Installed y busque Full line code completion.

Cómo transmitirnos su opinión

La finalización de código de línea completa sigue en desarrollo activo, por lo que le animamos a que comparta su opinión con nosotros. Puede hacerlo dejando un comentario en este artículo del blog. También puede votar las incidencias existentes aquí o crear una nueva iniciando sesión y pulsando el botón New Issue en la esquina superior derecha.

Eso es todo por hoy. Pruebe la finalización de código de línea completa y díganos qué le parece. Seguiremos mejorando esta funcionalidad, siendo por ahora nuestras principales prioridades la compatibilidad con C#, Rust y C++, así como una mejor integración con la finalización de código multilínea de AI Assistant. ¡Manténgase al día de las últimas noticias!

Artículo original en inglés de:

Luiz Di Bella

Ekaterina Ryabukha

image description

Discover more