Se describe el funcionamiento de GitHub Copilot, que es un asistente por IA de desarrollo. Se comentan las funcionalidades y se dan consejos para obtener los mejores resultados.
GitHub Copilot es un interesante compañero de viaje para los desarrolladores. Descubre cómo funciona y cómo sacarle el máximo partido.
¡Comenzamos!
GitHub Copilot se presentó el 29 de Junio de 2021 como un esfuerzo conjunto entre GitHub y OpenAI. La idea era diseñar una herramienta “que viva dento de Visual Studio Code” y se trataba de dar una evolución al concepto de Pair-Programming: un compañero que asistiese mientras se escribía el código. Esta presentación fue más o menos en la misma época en la que se empezó a saber de GPT-3
Antes de GitHub Copilot, los desarrolladores nos apoyábamos principalmente en la ayuda contextual que nos daban los IDEs, en herramientas específicas de los lenguajes que usábamos o bien en la experiencia de otros desarrolladores, mediante sitios como stackoverflow.com
Sin embargo, el advenimiento de la Inteligencia Artificial nos ayuda haciendo uso de esas experiencias anteriores, pero también de documentación oficial, de nuestro propio código….
GitHub Copilot es una herramienta de pago, pero por suerte nos ofrece un mes de prueba para que podamos evaluar si nos resulta valioso o no. Para ello, basta con registrarnos en GitHub.com
Y luego, en la opción “Your Copilot” comenzar el periodo de 30 días de prueba.
Funcionalidades Básicas
La funcionalidad principal de GitHub Copilot es el autocompletado de código. Copilot, mientras escribes el código, irá sugiriendo posibles continuaciones al mismo. Y ¿Cómo sabe qué sugerir? Copilot es consciente del contexto en el que estás escribiendo, qué archivo es, qué representa, qué otros archivos conforman el proyecto… y se toma el código que ya está en el archivo como parte de la pregunta “¿Cómo continúa este código?” Así, siempre está listo para una nueva sugerencia.
Por ejemplo, si escribimos la firma de una función en C#, automáticamente nos ofrecerá una posible implementación de la misma.
La sugerencia está tomando el contexto, pero no sólo eso; en la botonera que aparece arriba a la derecha vemos que no sólo se ha generado una sugerencia, ¡sino dos! Disponemos de un panel de sugerencias de Copilot donde podemos ver más sugerencias, si las hay, y seleccionar cuál es la que nos interesa más.
Otra característica importante de GitHub Copilot es el chat. El chat nos permite preguntarle a copilot sobre nuestro código, sobre la infraestructura o sobre el propio IDE. Por ejemplo, podríamos preguntarle cómo crear un background service, un patrón de diseño un poco especial:
Podemos preguntarle…
- Tecnologías y arquitectura
- Traducción entre lenguajes
- Optimización
- Debugging
- Testing
- Buenas prácticas
También podemos utilizar el llamado Chat Inline, es decir, una ventana de chat emergente en cierto punto del código. Aquí, Copilot utilizará el punto en el que se invoca al chat (o el texto seleccionado) como parte especial del contexto. Podemos seleccionar una línea o dos y preguntarle específicamente por ellas: “por qué no obtengo este resultado?”. Copilot nos contestará atendiendo a ese contexto.
Copilot Chat
A la hora de chatear con Copilot, hay que tener en cuenta que podemos utilizar ciertos comandos para asegurarnos de que Copilot nos contesta con el resultado que esperamos, y también podemos invocar a participantes que representan elementos del proyecto o del entorno de desarrollo, lo que nos permitirá afinar el contexto que queremos que se tenga en cuenta
Participantes
Los participantes representan “entidades” dentro del entorno de desarrollo. Invocándolas nos aseguramos de que Copilot toma el contexto adecuado y sabe a qué nos referimos. Los participantes se usan al principio de los mensajes a Copilot, y se invocan utilizando el carácter «@»
Así, el participante @workspace se refiere al espacio de trabajo, al código con el que estamos manejándonos. Invocando este participante nos aseguramos de que copilot responde con ejemplos o comandos que aplican al código que tenemos abierto, y no da respuestas generales. Por ejemplo, si le preguntamos “Cómo lanzar el proyecto actual” nos hablará probablemente de cómo se lanza un proyecto en general, nos dará rutas genéricas, etc. Sin embargo si le preguntamos “@workspace cómo lanzar el proyecto actual” nos contestará en función del proyecto que tengamos, cosas como “lanza este proyecto ejecutando tal binario en tal ruta…”
El participante @vscode se refiere al propio IDE. Podemos utilizarlo para preguntarle sobre el funcionamiento del IDE. Cosas como “cómo se debuguea un proyecto de este tipo” o “cómo busco los archivos que contienen cierto texto”. De esta forma, Copilot nos ayuda no sólo con el código.
También podemos usar el participante @terminal que asegurará que Copilot se fije en el terminal integrado y tome como contexto los comandos ejecutados allí y la salida de los mismos. Extremadamente útil cuando un comando se resiste!
Recientemente añadido está el participante @docker que contestará a preguntas referidas a Docker.
Por último, usando el participante @github podemos incluir en el contexto repositorios indexados de GitHub. Esto nos permite referenciar código de otros proyectos, lo que añade una capa de contexto extra ¡ni siquiera necesitamos tener el código abierto!
Comandos
Los comandos son, como decíamos, una orientación sobre qué tipo de salida queremos, es decir, evitará que Copilot se ande por las ramas.
Los comandos se utilizan a menudo en combinación con los participantes. El mismo comando dirigido a un participante distinto tendrá distinto resultado. Los comandos por defecto son:
- /help: ayuda general sobre GitHub Copilot
- /doc: Genera documentación
- /clear: crea una nueva sesión de chat
- @workspace /explain (o /explain): explícame cómo funciona este código
- @workspace /fix (or /fix): dame posibles arreglos al código
- @workspace /tests (or /tests): genera tests unitarios
- @workspace /new (or /new): genera un archivo (o proyecto) nuevo desde cero a partir de plantillas
- @workspace /newNotebook (or /newNotebook): crea un Jupyter Notebook
- @vscode /search (or /search): genera una búsqueda dentro de vscode (en la vista de búsqueda del IDE)
- @vscode /runCommand: ejecuta un comando del IDE
- @terminal /explain: explica funcionalidad o uso de comandos del terminal
Todos estos comandos se usan aportando contexto: por ejemplo puedes pedirle una nueva web en .net, y usando el contexto (los distintos proyectos que tengas abiertos en el workspace) generará toda una nueva estructura de archivos (y su contenido).
Palabras clave
Por último, tenemos también las “palabras clave”, indicadas por el carácter #, que nos permite referenciar de manera precisa algunos elementos. Ahora mismo las disponibles son:
- #codebase: se refiere al contenido del workspace actual. Incluye archivos, carpetas, configuraciones…
- #editor: referencia el código abierto en el editor. Se incluye siempre implícitamente, pero nos permite complejidades más altas
- #file: sirve para referirse a cierto archivo en concreto. La ventana de chat propondrá los archivos a los que pueden hacerse referencia
- #selection: el código seleccionado en el editor activo.
- #terminalLastCommand: el último comando ehecutado en el terminal
- #terminalSelection: es el texto seleccionado en el terminal
- #vscodeAPI: utiliza la documentación de la API de VS Code para responder a preguntas sobre el desarrollo de extensiones
Smart Actions
Se llaman Smart Actions a las opciones que aparecen contextualmente en el código, indicadas por un icono de “chispas”
Copilot adivinará, a partir del código, qué necesidades puedes tener y ofrecerá estas acciones. ¿Hay un error en esta línea? Copilot te ayuda con él.
Buenas Prácticas
Lo más importante a la hora de mejorar la calidad de las respuestas de GitHub Copilot es el contexto. Si le damos el contexto adecuado, Copilot sabrá qué respuesta es la adecuada, y de esta manera nos será más útil.
El contexto se proporciona de varias maneras. La más evidente es haciendo buenas preguntas, es decir, que la pregunta incluya el tipo de respuesta que queremos, o qué nos preocupa del código que tenemos delante. La más importante, sin embargo, es abriendo los archivos relevantes. Copilot los leerá, y eso hará que las respuestas sean más precisas. Si una de tus clases es utilizada como modelo en un controlador de una API, ten el código de la clase abierto cuando preguntes por la API, y eso hará a Copilot tenerla en cuenta a la hora de elaborar una respuesta. Además, otra estrategia es utilizar las referencias, los comandos precedidos por #.
Más allá del chat propiamente dicho, podemos aportar contexto por medio de nuestro código (además, forzándonos a aplicar buenas prácticas de programación): utiliza comentarios significativos, nombra a variables y funciones de forma que sean autoexplicativas y Copilot las entenderá mejor (y tu yo del futuro también 😊).
Si Copilot no acierta con lo que quieres, puedes probar a darle un ejemplo del resultado que esperas. Por ejemplo, si en un archivo tienes varias funciones similares, Copilot utilizará el formato de éstas para sus respuestas. Esto incluye patrones de nombrado de variables, estructura…
Por último, sé higiénico con los chats. En la ventana de chat de GitHub Copilot podemos tener varias conversaciones en danza. Pues bien, las preguntas y respuestas anteriores también afectan al contexto, lo que hace muy interesante tener distintas conversaciones para distintos temas. Así, no se pierde el avance que has hecho conversando con la Inteligencia Artificial y, progresivamente, se irán afinando las respuestas. Evita conversaciones superfluas y, si las tienes, elimínalas para que no afecten al contexto.
Conclusión
Ahora sabes todo lo que hay que saber sobre GitHub Copilot, todos los comandos, participantes y algunos trucos para mejorar la calidad de sus respuestas y con ello tu productividad.
Ahora bien, sólo la experiencia te permitirá afinar con tu propio estilo a la Inteligencia Artificial. No dudes en utilizarla y si tienes alguna duda más… ¡aquí estamos!