L'avancée des IA ces dernières années est en train de bouleverser de nombreux domaines, dont le développement informatique. Nous avons voulu faire une petite expérience sur le sujet. Est-il possible de réaliser une application qui utilise nos modules sans savoir programmer, mais en utilisant ChatGPT? Et comme nous allons de voir, la réponse est oui, mais non...
L'objectif à atteindre est une application Windows qui affiche la température de la pièce à l'aide d'un Yocto-Meteo-V2 et qui change l'état de la sortie 1 d'un Yocto-MaxiPowerRelay en fonction de la température. Si la température dépasse les 25°, le relais doit être ouvert, sinon il doit être fermé. Le Yocto-Meteo-V2 et le Yocto-MaxiPowerRelay sont branchés sur les ports USB de l'ordinateur, l'application doit afficher un message d'erreur si un des modules est manquant et doit supporter le hot-plug des modules. Le programme doit être écrit en Python.
On s'est mis dans la peau de quelqu'un qui ne sait pas coder et qui se contente de faire du copier-coller de code entre ChatGPT et l'éditeur. Quand le code ne fonctionnait pas, on expliquait à ChatGPT ce qui ne fonctionnait pas en incluant les éventuels messages d'erreur retournés par application.
Nous avons effectué le même test en français et en anglais. Enfin nous avons utilisé un chat par langue durant le tout, la discussion utilise le même contexte.
Retour d'expérience
Au final, nous sommes arrivés à une application graphique qui fonctionne, mais, comme nous allons le voir, le chemin n'a pas été de tout repos.
Un screenshot des deux applications finales.
Nous n'allons pas retranscrire l'entièreté des deux conversations avec ChatGPT, car ça serait indigeste. Nous allons vous faire un résumé des problèmes que nous avons eus. Si toutefois vous êtes intéressé, les deux conversations ainsi que le code généré sont disponibles dans ce fichier Zip.
Français vs Anglais
Nous sommes partis de la même consigne (le premier paragraphe de cet article), mais une fois nous l'avons écrit en français et l'autre fois en anglais. L'application finale est très différente, mais ChatGPT a rencontré les mêmes problèmes durant l'implémentation de cette application.
Durant le "développement", ChatGPT a fait exactement les mêmes erreurs (voir plus bas), mais en fonction de la langue dans laquelle nous avons interagi, le code proposé est différent. Dans les deux cas, la solution est valide, mais légèrement différente. Aucune n'est mieux que l'autre, juste différente. C'est comme si deux personnes répondaient à la même question.
Quelle que soit la langue utilisée, ChatGPT a fait 4 erreurs qu'il a réussi à corriger avec 1 ou 2 interactions.
Problème No 1: inclure la librairie Yoctopuce
La première est l'ajout de la librairie Python Yoctopuce. Pour qu'un programme Python puisse utiliser nos modules, il faut utiliser notre librairie de programmation. Il est possible d'ajouter cette librairie de programmation de deux manières: avec pip ou manuellement. En fonction de la méthode choisie, le code Python n'est pas tout à fait le même (pour plus de détails, voir notre tutoriel). La première version du code que propose ChatGPT ne fonctionne pas, car il recommande d'installer la librairie en utilisant pip, mais propose du code qui ne fonctionne que si la librairie est installée manuellement dans le même répertoire que l'application.
En expliquant à ChatGPT que le code ne fonctionne pas et en incluant l'erreur, il change d'avis et nous propose d'installer manuellement la librairie. Cette solution n'est pas fausse, mais est plus compliquée que de simplement modifier les 3 lignes de code pour utiliser la version installée par pip. De plus, les explications sur les fichiers à copier sont incomplètes et pas très claires. Au final en 2 à 3 interactions avec ChatGPT, nous arrivons à installer la librairie Yoctopuce.
Une fois la librairie installée, nous avons un code qui affiche sur le terminal la température et qui commute un relais.
Problème No 2: La gestion du hot-plug
Comme nous avions expressément demandé que le code supporte le hot-plug, et que nous sommes taquins, nous débranchons un module pour vérifier et le code plante ou ne fonctionne plus une fois que l'on rebranche le module.
De nouveau, il faut une ou deux interactions avec ChatGPT pour qu'il corrige le problème. Dans les deux langues, la première version du code était trop naïve et l'IA n'avait tout simplement pas traité le cas d'un module absent.
Une fois cette erreur corrigée, nous testons l'application et réalisons qu'il reste en tout cas deux grosses erreurs.
Problème No 3: Utilisation du mauvais relais
Note: Si vous n'avez pas l'habitude d'utiliser les modules Yoctopuce, nous vous conseillons de commencer par lire notre article "Structure logique des modules Yoctopuce" afin de comprend l'erreur que ChatGPT a faite.
À ce stade, l'application fonctionne, mais commute la sortie No 5 du Yocto-MaxiPowerRelay alors que nous avions spécifié qu'il fallait utiliser la sortie No 1. En fait, le code utilisait la méthode FirstRelay qui permet d’énumérer tous relais. ChatGPT a fait la supposition que le premier appel retourne le relais numéro 1, mais rien ne garantit l'ordre d’énumération des fonctions FirtXXX et NextXXX.
En remontant le problème à ChatGPT, il se rend compte du problème et nous propose de résoudre le problème en hard codant le numéro de série du Yocto-MaxiPowerRelay dans le projet, afin de lui permettre d'utiliser le hardwareID du relais 5. Techniquement, cela résout le problème, mais c'est une mauvaise idée, car l'application ne fonctionnera qu'avec ce Yocto-MaxiPowerRelay. Le numéro de série étant par définition unique, tous les autres Yocto-MaxiPowerRelay seront ignorés.
La bonne solution aurait été par exemple:
any_relay = YRelay.FirstRelay()
if any_relay is None:
return "No Yoctopuce device with a relay found"
hwid = any_relay.get_serialNumber() + ".relay1"
relay_to_use = YRelay.FindRelay(hwid)
...
Là, on commence à se dire que ça fait beaucoup, mais il reste un dernier bug...
Problème No 4: Inversion de l'état du relais
En testant le code, on réalise que ce qui est affiché dans les logs est correct, mais que l'état du relais est inversé, en d'autres termes quand l'application dit que le relais est ouvert, il est en réalité fermé et vice versa. ChatGPT a inversé le sens des constantes STATE_A et STATE_B. Étonnamment, c'est l'erreur qu'il a mis le plus de temps à corriger. Il a d'abord inversé les messages de log pour qu'ils soient cohérents avec l'état du relais (mais donc faux). Et il nous a fallu plusieurs interactions pour qu'il corrige le problème.
Points positifs
Par curiosité, nous lui avons demandé de faire une version fenêtrée de cette application, et pour être francs nous avons été étonnés en bien. En une seule phrase, il a modifié le code pour faire une application graphique à l'aide de Python et Tkinter. L'application n'est pas très jolie, mais fonctionne correctement (voir le screenshot).
Autre point positif, nous lui avons demandé de réaliser un fichier README.md pour joindre au code. Là aussi, en seulement quelques secondes, on obtient un fichier tout à fait utilisable. Chose amusante, il mentionne même que le code ne fonctionnera pas sur d'autres modules Yoctopuce, car le numéro de série est hard codé!
Conclusion
Il est facile de lister les erreurs des cette IA et de conclure que cela ne remplacera jamais un vrai développeur (et pour être franc, on est de cet avis). Toutefois, cette technologie est en constante évolution et chaque mois, ChatGPT s'améliore. Et quand on compare où en était l'IA quand Yoctopuce a été fondé, on se demande ce qu'elles seront capables de faire dans 2, 5 ou 10 ans.
Pour en revenir à la question de base "Est-il possible de réaliser une application qui utilise nos modules sans savoir programmer mais en utilisant ChatGPT?", la réponse est non. Actuellement, ChatGPT n'est pas capable de générer un code fiable et maintenable si on ne sait pas programmer.
Il est aussi probable que ChatGPT soit plus performant sur des problèmes plus universels et mieux documentés. Yoctopuce est une toute petite société et même si la documentation est abondante sur notre site, à l'échelle mondiale elle est insignifiante en comparaison de Google, Microsoft, etc. Toutefois, il faut reconnaître que c'est un outil qui peut faire gagner énormément de temps si on sait ce que l'on fait. Par exemple, pour la rédaction du fichier README.md.
Nous avons aussi lu que certains développeurs informatiques font rédiger à ChatGPT une première version du code et le corrigent après. Je ne suis pas convaincu de cette stratégie. Il y a peut-être un gain de temps à court terme, mais je pense que l'on risque de passer à côté de bugs qui apparaîtront bien plus tard et qui prendront plus de temps à être corrigés.
Enfin, il y a quelque chose de l'ordre de l’émotionnel. Programmer, c'est fun! Sous-traiter cette partie à une machine, c'est enlever tout le sel du métier. Si au lieu de demander à ChatGPT de réaliser ce code, l’utilisateur avait lu nos tutoriels et avait expérimenté par soi-même, il aurait probablement mis plus de temps, mais, il aurait aussi appris quelque chose, qu'il pourrait réutiliser dans le futur.
Il nous arrive d'utiliser ChatGPT, mais surtout pour obtenir des exemples d'utilisation ou de la documentation. Et souvent, il est plus efficace qu'une recherche Google. Il est capable de synthétiser plusieurs sources d'informations et en faire un résumé très digeste. Mais nous vérifions TOUJOURS ces informations avec les documentations officielles, et régulièrement ChatGPT invente tout simplement des informations.
Bref, c'est un outil très intéressant, quand on connaît ses limitations et que l'on vérifie ce qu'il fait.