Cómo mejora GitHub Copilot la comprensión de tu código

Los ingenieros de OpenAI y GitHub llevan meses trabajando en cómo ampliar el contexto que GitHub Copilot es capaz de procesar cuando genera sugerencias de código. El objetivo concreto es pasar de considerar solo el archivo activo en el editor a analizar el repositorio completo, incluidos ficheros distantes, dependencias y el historial reciente de cambios.

De Codex a Copilot: la historia corta

Cuando OpenAI lanzó GPT-3 en junio de 2020, GitHub identificó una oportunidad clara: un modelo especializado en código podría asistir a los desarrolladores de forma directa. La colaboración con OpenAI produjo Codex, un descendiente de GPT-3 entrenado específicamente en código, que se convirtió en el motor de GitHub Copilot. El asistente llegó en vista previa técnica en junio de 2021 y estuvo disponible de forma general en junio de 2022.

Por qué el contexto marca la diferencia

Un desarrollador humano usa pull requests, issues abiertos, convenciones de nombres y la estructura del proyecto para entender cómo encaja una pieza de código en el conjunto. Para que un LLM haga lo mismo hay que enseñarle qué información priorizar en cada momento, porque los modelos no tienen acceso directo al repositorio: reciben un prompt y generan una respuesta.

El problema es que los transformadores lo suficientemente rápidos para alimentar GitHub Copilot en tiempo real solo procesan unos 6.000 caracteres por petición. Eso limita cuánto contexto cabe en cada consulta y obliga a seleccionar qué fragmentos del código del desarrollador son los más relevantes para cada sugerencia concreta.

Cómo funciona la ingeniería de prompts

Cuando el desarrollador escribe o edita código, Copilot genera prompts en segundo plano de forma continua. Cada prompt es una compilación del código visible en el IDE más el contexto que los algoritmos consideran más relevante en ese momento. El resultado es que el asistente genera sugerencias tanto si el usuario está en medio de una función como si acaba de terminar un comentario o está viendo código complicado que todavía no ha tocado.

La primera versión de Copilot solo consideraba el archivo activo. Ahora los ingenieros experimentan con algoritmos que analizan toda la base de código para generar sugerencias adaptadas al estilo y las convenciones de cada repositorio.

Bases de datos vectoriales y comprensión semántica

Una de las líneas de investigación activa es el uso de bases de datos vectoriales, especialmente para repositorios privados o código propietario. Las herramientas de IA generativa para código usan embeddings (representaciones matemáticas de alta dimensión de fragmentos de código) para recuperar las piezas más relevantes de un repositorio antes de construir el prompt.

La ventaja de los vectores sobre la búsqueda textual clásica es que pueden capturar la semántica y la intención del código, no solo la sintaxis. Buscar «funciones que gestionan autenticación» por similitud semántica devuelve resultados más útiles que buscar la cadena «auth» en el texto.

Esta funcionalidad está diseñada especialmente para clientes empresariales que trabajen con repositorios privados y quieran que Copilot tenga en cuenta el contexto completo de su código sin enviarlo a modelos entrenados en datos públicos. Los usuarios tendrían que activar explícitamente la opción.

Resultados medidos

Un estudio cuantitativo publicado por GitHub el año pasado concluye que los desarrolladores que usan Copilot codifican hasta un 55% más rápido que los que no lo usan. Los participantes describen el efecto principalmente en tareas repetitivas: completar bucles, escribir tests, generar boilerplate. El trabajo de compresión contextual que GitHub está desarrollando apunta a extender ese incremento también a tareas más complejas que requieren entender el proyecto en su conjunto.

Los equipos de I+D de GitHub y GitHub Next trabajan junto con Microsoft Azure AI Platform en estas mejoras. Vale la pena seguir la evolución del enfoque, ya que la sandbox de Codex que OpenAI ha desarrollado para Windows comparte buena parte de la base técnica sobre la que se construye Copilot.

Fuente: blog de GitHub Copilot

Preguntas frecuentes

¿Cuánto contexto puede procesar GitHub Copilot en cada petición?

Los modelos actuales de Copilot procesan unos 6.000 caracteres por petición. Los algoritmos de ingeniería de prompts seleccionan qué partes del código entran dentro de ese límite en cada momento.

¿Qué son los embeddings y para qué sirven en Copilot?

Son representaciones matemáticas de fragmentos de código que capturan su semántica. Permiten buscar código por intención, no solo por texto exacto, lo que mejora la relevancia de las sugerencias.

¿Esta capacidad de analizar todo el repositorio está disponible ya?

A fecha de este artículo (mayo de 2023) está en fase de experimentación, pensada para clientes empresariales con repositorios privados. No es una función de disponibilidad general.

¿Cuánto acelera Copilot el trabajo de un desarrollador?

Según el estudio cuantitativo de GitHub, los desarrolladores que usan Copilot codifican hasta un 55% más rápido en tareas concretas, sobre todo las más repetitivas.

Scroll al inicio