Etude de cas: Concevoir un programme complexe avec ChatGPT

Dans notre étude de cas, nous devons mettre en place dans un premier temps un formulaire pour questionner directement ChatGPT.
La programmation d'un formulaire en html ne pose pas de problème, la difficulté c'est d'envoyer les données à un programme python en flask qui devra ensuite interroger chatgpt puis renvoyer la réponse à l'utilisateur.
Par la suite, si tout se passe bien, nous allons enrichir le programmes de diverses fonctionnalités comme le traitement d'image, la reconnaissance et la synthèse vocale ...

Les API

La base est de pouvoir communiquer avec des "API". Une API (Application Programming Interface) est un programme permettant à deux applications situées sur des serveurs distants de communiquer entre elles. Google, OpenAi ... offrent tout un panel d'api pour pouvoir réaliser une multitude de tâches.

Sur le principe c'est simple mais la difficulté c'est la première mise en oeuvre sur un exemple simple. En général, vous n'avez pas encore commencé à taper une seule ligne de code et déjà vous galérez dans les montagnes de documentations: création du projet sur le cloud, création de la clef api, récupération du code, bibliothèque à installer etc. Et là en posant la question à chatgpt, le gain de temps est réel: il vous oriente sur la procédure à suivre et franchement, en particulier avec google cloud plus tard, cela m'a fait gagné un temps énorme.
Typiquement, la documentation de la programmation de certains outils a été concue pour être lue et utilisée par des professionnels, vous avez accès à des morceaux de code ici ou là mais rarement un programme tuto complet qui explique de A à Z ce qu'il faut faire.

Codage client vers serveur python

Une fois les premiers tests en local sur l'ordinateur effectué via un programme python qui communique avec OpenAi, la phase 2 est de mettre ce programme en ligne. Et là il faut donc créer un formulaire et envoyer les données au serveur python. Pour créer un formulaire html c'est pas compliqué, d'habitude je fais un copier coller vite fait d'un bout de code dans un ancien programme ou j'utilise un vieux logiciel (frontpage97 !!!) pour me générer le code. Cette fois je demande à chatgpt de le faire et dans la foulée lui dit que je dois envoyer ces données à un programme "python avec flask". Et hop il me sort le code coté client et coté serveur. Ca c'est cool ! Pour rappel, je connais bien python mais très mal l'utilisation de la bibliothèque Flask.

ChatGPT ou réfléchir par soi-même ?

Le format du texte renvoyé par openAi est un peu spécial (format json) et nécessite un traitement. La récupération du texte ne pose pas de problème mais ensuite il faut effectuer un traitement caractère par caractère pour insérer les balises html. Il faut parfois rajouter des espaces ou des passages à la ligne (pour faire tenir dans un format de sortie ).
Ici le problème est de nature algorithmique et c'était plus rapide pour moi de rédiger le code que d'expliquer à chatgpt ce que je veux faire , car il y a beaucoup de contraintes à expliciter et on se rend compte que la maitrise de l'algorithmique fait gagner du temps.
D'une facon plus générale, tout au long du codage, je vais être confronté au choix de "je fais moi même" ou "j'explicite à chat gpt ce que je veux faire". C'est quelque chose qui est tout à fait nouveau dans ma façon de programmer.

Etre concis dans la requête

Et du codage, il va y en avoir. Pour une question technique précise, l'IA d'openAi est génial, mais se précipiter sur chatgpt pour tout n'est évidemment pas la meilleur idée.
Un autre problème c'est la longueur de la réponse de chatGpt. Si la question posée nécessite un long développement, le risque est qu'il s'arrête en cours et vous êtes coincé si vous n'avez pas la maîtrise du code...
La nécessité de poser des questions ciblées vient aussi du fait que parfois le code que vous renvoie chatgpt doit être adapté pour coller à ce que vous voulez faire : Il vaut mieux en effet poser une question (courte) qui renvoie un code court que vous adaptez ensuite que vouloir obtenir la réponse exacte et longue qui peut ensuite poser problème ou vous faire perdre du temps si vous avez à intervenir dessus ultérieurement.

DALLE nous voilà !

Le système de requête de ChatGPT étant fonctionnel, je décide de m'attaquer à l'API DALLE qui permet de générer une image à partir d'une description.
Pour démarrer, pas besoin de chatgpt, le principe d'interrogation est le même et la doc d'openai est suffisante. Cependant, afin de pouvoir travailler avec l'image et intégrer un système de quota, il est nécessaire de générer un cookie: "Peux tu me donner un exemple de création de cookie sous flask" et en quelques secondes j'ai la réponse.
Je connaissais la technique sous php et me souvient que c'était bien plus long pour trouver cela avec google. Ensuite j'avais aussi besoin de générer un identifiant unique et là encore chatgpt me sort le code python voulu très rapidement.

html+css: Merci l'IA !

L'interrogation de l'IA devient vite un réflexe et là où son aide est encore décisive c'est pour générer du code CSS. Le besoin d'avoir un site responsive (adapté ordinateur et mobile), le besoin d'adapter les formats du texte, de générer des effets de styles etc, chatgpt a été utile à tous les niveaux, permettant un gain de temps considérable.
Notons aussi que par moment l'interrogation de chatgpt peut devenir un peu machinal, nous évitant clairement de faire un effort de mémoire mais ce n'est pas pire que faire un copier/coller d'un morceau de code sur internet, c'est juste plus rapide !

Requêtes SQL en python

Là où chatGPT m'a encore permis de gagner un temps énorme c'est pour interroger une base de données, la mettre à jour ou encore insérer des données.
Les requêtes SQL, je connais bien évidemment le principe mais, sauf à le pratiquer régulièrement, je finis par oublier la syntaxe. Ajoutons à cela que la requête doit être faite en python. Avec ChatGPT, cela devient un truc du style : "Donne un exemple de requête SQL pour récupérer la valeur de 'compteur" dont l'ID est 'tartampion' " en python.
Et là c'est magique, vous avez en quelques secondes 5 ou 6 lignes de codes qui m'auraient pris 4 ou 5 fois plus de temps à trouver avec un moteur de recherche classique.

Ecrire ou Décrire ?

Personnellement j'estime que la mémorisation du code informatique se fait par l'usage plus où moins intensif du ou des langages de programmation et un élève qui bloque sur la syntaxe d'une instruction ne devrait pas être pénalisé à partir du moment où il a été capable de formuler correctement la requête en francais. C'était déjà mon avis avant ChatGPT et c'est encore plus une évidence aujourd'hui.
Finalement, être capable de formuler précisément une question ou décrire un algorithme pour obtenir une réponse précise devient une compétence indispensable mais demande aussi une connaissance fine de ce que l'on peut attendre du langage informatique, de ses règles, de ses fondamentaux.
Alors, il faut savoir décrire ou écrire un algo ? les deux mon capitaine !

Complexité du code

Avec l'intelligence artificielle, il est clairement plus facile de produire du code pour arriver à un résultat et la sensation est vraiment fantastique. Galérer pour faire marcher un programme, chercher un malheureux bout de code désespérément sur le net, les forums, cela peut prendre un temps de dingue, vous cherchez, vous trouvez un truc, vous testez, ca marche pas, vous essayez autre chose encore et encore en vain, vous revenez dessus plus tard, le lendemain, parfois la semaine suivante et puis vous multipliez les essais avant de finir par trouver la solution. Et puis arrive ChatGPT qui pond des solutions à une vitesse grand V, sa connaissance très large des langages, des bibliothèques permet de progresser très rapidement, de ne pas rester bloquer, ca change complètement la donne !

Mais le danger arrive quand on a une maitrise insuffisante de ce qui est attendu. En effet, vous pouvez vous laisser embarquer dans tout un dédale de soi-disant solutions qui peuvent vous faire perdre beaucoup de temps, voir même au pis, générer des problèmes collatéraux. Mais nous y reviendons !
Revenons sur le côté "fun": Comme on gagne beaucoup de temps sur le codage, on a l'impression d'être aux commandes d'un buldozer qui avance dans une forêt, peut importe la densité de la végétation, il passe en force !
Comparé à un petit 4*4 obligé de contourner les obstacles ou obligeant son conducteur de couper les arbres à la tronconneuse, c'est le jour et la nuit ! Du coup, pour en revenir à Dalle, la programmation a été bouclée en quelques jours sans blocage majeur.

Dalle : Variante d'image

Pour créer une variante d'image, il faut pouvoir à partir de l'explorateur récupérer une image sur son disque dur local et l'envoyer vers le serveur. Je demande donc à ChatGpt de me donner le code html et javascript pour récupérer un fichier image et l'envoyer vers le serveur python flask. Et il me sort le code direct ! du code ajax dont je ne connaissais que le principe (illustré par le schéma ci-dessus, cliquez sur l'image Ajax vitre...).
Typiquement une requête ajax permet d'envoyer des données au serveur et de récupérer sa réponse de facon asynchrone (pas de blocage de la page). Je l'ai utilisé pour la première fois dans un script paypal, en galérant pas mal à l'époque. Si j'avais dû le faire à nouveau par tatonnement et recherche google, il est fort probable que j'aurais galéré. A ce niveau, il faut vraiment être un spécialiste de javascript pour comprendre toutes les subtilités et les possibilités du langage. De même pour le code coté serveur pour récupérer l'image, chatgpt a été d'une aide précieuse !
Et au final, ce fut l'affaire d'environ 15 heures pour le gros du travail.

Enregistrement et synthèse vocale

Le projet avance à vitesse grand V, c'est grisant mais je veux toujours pousser plus loin ! La phase suivante est de pouvoir enregistrer la voix pour effectuer une traduction dans une langue étrangère. Là encore, chatgpt a été capable de me sortir du code javascript coté client et du code python coté serveur. On a affaire à de l'audio et le traitement est différent que pour un fichier image. J'ai un peu adapter sur la forme mais le fond était là.
Par contre je n'ai pas réussi à lui faire pondre un compresseur mp3 javascript (il a sorti un truc mais ca marchait pas !) Pourtant je sais que ca existe mais le code n'est pas (encore) connu de chatgpt 3.5 . Je n'ai pas réussi à trouver non plus le code via google. En 5 mois de travail avec chatgpt, dans un cas seulement j'ai trouvé un code programme via google que ChatGpt ne connaissait pas (cela concernait un problème de compatibilité du code pour safari).
Dans un cas aussi j'ai été obligé de me débrouiller seul pour résoudre le problème (qui était trop complexe à décrire, je devais faire renvoyer par python du code javascript qui devait lui même etre exécuté par l'explorateur et il y avait un soucis)

ChatGpt : Une solution à tout ?

Si ChatGpt est une aide précieuse, le programmeur doit malgré tout mettre la main à la pate et rester maitre du code et du projet . Et ceci dans 2 cas en particulier: Lorsque vous devez ajouter une fonctionnalité à du code existant cela devient compliqué de lui faire faire des modifications si le code en question est déjà complexe et long et qu'en plus vous le maîtrisez mal. Le deuxième cas c'est qu'il peut parfois vous proposer des solutions complexes comme l'installation de diverses bibliothèques qui nécessitent par exemple une compilation, vous n'avez pas le compilateur il va vous dire de le récupérer, de l'installer et ensuite cela génère d'autres problèmes qu'à chaque fois il va tenter de résoudre en vous embarquant au final sur une voie sans issue... Il faut donc savoir dire stop, faire preuve d'imagination pour réorienter l'IA sur une autre piste et rester maitre à bord de votre projet.
De plus une bonne expérience (formation) de programmeur "sans chatgpt" reste indispensable pour produire un code propre et clair sinon cela peut devenir vite fait du code spaghetti ...

Conclusion

Le sentiment général est que l'aide de ChatGPT est réelle et le gain de temps considérable. Sa maitrise des bibliothèques, des langages de programmation permet de trouver des solutions rapidement aux problèmes standards.
On passe du temps à écrire du code mais beaucoup moins à le chercher, la productivité est vraiment boostée !
Cependant il faut savoir l'utiliser et plus votre niveau en programmation est élevé, mieux ce sera ! En effet, il faut rester maître du projet, si vous ne savez pas bien où vous allez, si vous ne comprenez pas le code qu'il vous renvoie, tôt ou tard vous aurez des problèmes si le projet est conséquent.
Dans le cadre de l'enseignement, on en revient aux fondamentaux:
Etre capable d'écrire un algorithme et aussi de le décrire, comprendre le principe des "class" et de la programmation objet, avoir une expérience de codage approfondie , avoir manipulé plusieurs langages pour savoir lequel utiliser et ce que l'on peut attendre ou pas de la machine, être capable de débuguer, avoir de l'imagination , avoir une vue d'ensemble du projet à travers l'interaction des différents langages...
La liste n'est pas exhautive! Bref, il faut bosser le code pour que vous+chatgpt soit supérieur en valeur ajoutée à chatgpt seul ou à vous seul ...
Et l'avenir proche, c'est quoi ? On parle de version d'IA capable de se débrouiller seul pour atteindre un objectif, en résumer il va rechercher lui-meme les différentes étapes pour atteindre le but que vous lui fixez... peut-etre que l'expert sera juste là pour débuguer en cas de blocage sur certains points à moins que ce soit l'IA lui même qui s'en charge ...