VT2021 GitHubCopilot fiche

Github Copilot est un outil d'intelligence artificielle développé par Github qui vous aide à écrire du code plus rapidement en complétant automatiquement le code.



=GitHub Copilot=

Abstract
"GitHub Copilot is an AI pair programmer that helps you write code faster and with less work. GitHub Copilot draws context from comments and code, and suggests individual lines and whole functions instantly. GitHub Copilot is powered by OpenAI Codex, a new AI system created by OpenAI. The GitHub Copilot technical preview is available as an extension for Visual Studio Code, Neovim, and the JetBrains suite of IDEs." - Documentation officielle de GitHub Copilot

Résumé
"GitHub Copilot est un outil d'IA qui vous aide à écrire du code plus rapidement et avec moins de travail. GitHub Copilot tire un contexte à partir de commentaires et du code, et suggère instantanément des lignes individuelles et des fonctions entières. GitHub Copilot est alimenté par OpenAI Codex, un nouveau système d'IA créé par OpenAI. L'aperçu technique de GitHub Copilot est disponible sous forme d'extension pour Visual Studio Code, Neovim et la suite d'IDE JetBrains." - Documentation officielle de GitHub Copilot

Acteurs
Les entreprises derrière Github Copilot sont Microsoft, Github et OpenAI. OpenAI est une organisation à but non-lucratif créée en 2015 par Elon Musk et Sam Altman. Cette organisation fait de la recherche dans l’intelligence artificielle et c’est elle qui est derrière le modèle de langage de Github Copilot. Dans ce projet commun, Github a fourni les données pour entraîner le modèle et OpenAI a fourni le modèle en lui-même qui est basé sur GPT-3.

Concurrence
La concurrence la plus proche de Github Copilot vient des sociétés fournissant des IA améliorant les résultats de la complétion automatique des IDE. Deux des acteurs les plus importants dans ce domaine sont tabnine et kite. Les solutions qu’ils proposent permettent la complétion automatique et prennent en compte le contexte permettant ainsi de proposer des complétions plus pertinentes.

Cela dit, même si ces 2 outils sont ce qu’il y a de plus proche actuellement à Github Copilot, la réalité est qu’ils proposent des services très différents : là où ces outils se feront discret et ferons des suggestions d’une ligne au plus dans l’interface d’auto complétion. Github Copilot a pour ambition de changer notre manière de coder, affichant directement dans notre éditeur ses suggestions et pouvant générer entièrement le corps d’une fonction lorsque le développeur écrit sa signature.

Fonctionnement




Github Copilot se présente sous la forme d’une extension à installer dans son IDE de choix. Cette extension est disponible notamment sous VS Code, NeoVim et les IDE de Jetbrains.

Cette extension communique avec les serveurs de Github Copilot pour générer du code à partir d’un contexte contenant : le nom du fichier courant, le contenu du fichier courant et la position du curseur dans ce fichier. À partir de ça, les services de Github Copilot peuvent donner une séquence de mots au modèle de langage qui génèrera ainsi le code.

Un modèle de langage est un modèle statistique permettant de trouver à partir d’une séquence de mots la probabilité que certains mots suivent cette séquence. Par exemple, si on donne en entrée “Je suis” à un modèle de langage il pourrait renvoyer : "à la montagne.” car il pense que c’est la séquence de mots la plus probable. Dans le cas de Github Copilot, son modèle de langage s’appelle OpenAI codex, ce modèle est basé sur GPT-3 et a été entraîné sur un set de données contenant notamment du code venant de répertoire public de Github.

OpenAI codex peut prendre comme contexte 14kb de Python ce qui est plus de 3 fois plus que GPT-3. Donc l’architecture du modèle n’est pas exactement la même. Les séquences de texte en entrée peuvent être du code ou du texte dans de multiples langues, nous avons personnellement pu tester pour l’anglais et le français, et les résultats générés étaient de qualité très proche. Cependant comme la grande majorité des répertoires de code utilise l’anglais, il est préférable de fournir des séquences d'entrée en anglais pour avoir les meilleurs résultats. OpenAI codex peut générer du code dans de multiples langages notamment Python, C, JavaScript, Go, Perl, PHP, Ruby, Swift, TypeScript, il peut aussi générer du code baser sur certains frameworks comme React.

Critique
Même s'il s'agit actuellement d'une technical review, l’outil reste assez impresionnant et bluffant sur du code populaire : javascript / python / java / ... (code très présent sur github), ça reste assez bluffant, surtout quand on commence à écrire un commentaire et que l’on voit le code se générer devant vos yeux.

Aspect Juridique
Le fait d’exploiter des tonnes de code sous licence GPL pour alimenter un produit commercial peut poser de sérieuses questions d’éthique, notamment sur l’aspect violation de licence. GitHub indique « qu’entraîner des modèles de machine learning sur des données publiques est considéré comme une utilisation acceptable au sein de la communauté du machine learning ». On peut se poser légitiment la question de "Est-ce que le fait de d’utiliser un outil de génération de code donne vraiment le droit d’auteur sur votre code ?". Github assure que l'utilisateur qui utilise l'outil de génération a bien les droits, mais cette partie reste flou. Le débat n'est pas encore résolu. Néanmoins, il y a des alternatives et quelques solutions pouvant résoudre ce problème à termes. Parmi celles ci on retrouve : - Détecter si le code est utilisable ou pas (en fonction de sa license) - Entrainer l'IA uniquement avec les codes sources d'un projet / ou du code d'une entreprise.

Remplacement des développeurs
Les développeurs coûtent cher aux entreprises. On peut légitimement se demander si cet outil ne causerait pas la perte des développeurs. Bien que l'outil soit assez bluffant, ce genre de solution doit être vu comme un outil et non un danger. Il permet d'alléger le temps de recherche / déboggage du développeur. Pour produire du code correct, il faut connaître la technologie utilisée. Il est impossible d'utiliser GitHub Copilot sans avoir pratiqué de code. L'expertise et les compétences du développeur sont trop importantes pour pouvoir s'en passer. On peut plutôt voir cet outil comme un remplacement de Stackoverflow plutôt qu'un remplaçant des développeurs. Selon le CEO de GitHub, « les problèmes que nous mettions plusieurs jours à corriger pourraient diminuer en nombre, mais il y aura toujours des problèmes que les humains devront résoudre. »

Retour Utilisateur
Github Copylot nous permet de ne pas avoir à mémoriser un tas de choses triviaux sur le code. Quand on code, il y a beaucoup de choses que l’on doit mémoriser ou alors qu’on a besoin de rechercher sur google.
 * Mémorisation d'éléments triviaux

L'effet "Woah!" de l'outil est accentué par son potentiel de prédiction. Il permet de générer jusqu'à 10 solutions différentes et permet même de prédire à l'avance les commentaires permettant de décrire eux même le code attendu.
 * Prédiction de code

Le développeur prend la place du reviewer de code en utilisant cet outil. La lecture de code est une compétence importante que beaucoup d'entre nous ne pratiquent pas assez à l’école. Cela nous force à lire du code et à raisonner à ce sujet et à se demander est ce que cela va réellement produire le résultat souhaité. Mais c’est à une seule condition, c’est de vraiment prendre le temps de lire ce code. L'outil peut devenir très dangereux pour des développeurs juniors qui se reposeraient trop sur ce système et laisserait l'outil générer des failles de sécurité dans leur code.
 * Review de code

Bilan
Il ne fait aucun doute qu'il fonctionne parfaitement pour les tâches simples sur des projets à petite échelle. À grande échelle, sur des projets plus conséquents, on aperçoit très rapidement les limites de l'outil notamment dans des applications qui se produisent dans un contexte de découplage backend/frontend, ou qui concernent un ensemble de microservices. Si la tâche n'est pas clairement définie et que le programmeur doit faire preuve de créativité, GitHub Copilot ne sera pas aussi utile.

On peut aussi se questionner sur le code qui est généré, GitHub Copilot a besoin d'une supervision totale. Il faut que la balance entre le temps gagnée sur l'écriture de code soit supérieur au temps perdue à la relecture.

Il sera très intéressant de suivre l'avancement du projet au cours des prochaines années quand celui-ci aura bien été rodé afin d'atteindre un niveau de satisfaction suffisant.

=Demonstration=

Une démonstration de GitHub Copilot est accessible à ce lien : VT2021-GitHubCopilot_demo

=Sources=
 * 1) GitHub Copilot Official documentation: Site de github copilot
 * 2) OpenAI Codex Official documentation: Site de OpenAI Codex
 * 3) Foosspot: Condamner github copilot pour avoir entraîné openAI codex sur du code GPL
 * 4) Arxiv: Papier scientifique transformers
 * 5) Daleonai: Article transformers
 * 6) LeDataScientist: Article francais transformer
 * 7) Youtube: The Truth about Github Copilot // AI Programming First Look
 * 8) Youtube: Can GitHub Copilot center a div?
 * 9) Youtube: Github Copilot and React
 * 10) Youtube: Découverte de Github Copilot
 * 11) LesJoiesduCode : GitHub présente Copilot, une IA qui écrit du code pour vous

=Veille Technologique 2021=
 * Année : VT2022
 * Sujet : GitHub Copilot
 * Slides : [[Media:File:VT2021_GitHubCopilot_presentation.pdf|Slides]]
 * Auteurs :
 * Antoine BLANQUET - antoine.blanquet@etu.univ-grenobles-alpes.fr
 * Hugo PRAT-CAPILLA - hugo.prat-capilla@etu.univ-grenobles-alpes.fr