Utilisation des modèles conversationnels V : Génération de code

1. Introduction

Un des compétences les plus intéressantes des modèles conversationnels est qu’ ils sont assez doués pour l’écriture de code informatique.

A la base, ceci peut sembler surprenant car ces modèles ont plutôt été développés dans le but de converser naturellement avec nous dans nos propres langues. En réalité, les développeurs de ces modèles ont cherché dès le début à rendre ces modèles capables de coder, et leurs jeux de données d’entraînement comprennent une grande quantité de code informatique.

Ceci transforme en pratique un programme comme ChatGPT en une sorte « programmeur conversationnel », et des modèles similaires sont intégrés dans certains sites web à destination de programmeurs chevronnés comme GitHub (qui offre GitHub Copilot, un assistant de programmation dont l’accès est payant).

Ce texte sera organisé en deux parties. Dans la première partie, nous regarderons comment utiliser ChatGPT dans des tâches de programmation élémentaires. Dans la seconde partie, nous réfléchirons aux cas d’utilisation appropriés, les avantages et les limitations de ces nouveaux assistants de programmation.

2. Quelques cas d’utilisation

Les modèles générationnels ont des compétences suffisantes pour rédiger des codes simples mais leur avantage est surtout qu’ils peuvent assister un programmeur dans la création de programmes élémentaires ou de fonctions et routines bien circonscrites, à condition de bien décrire l’algorithme dans le texte de la question, ainsi que le langage de programmation souhaité.

Ces modèles peuvent aussi servir à automatiser des codes de nature répétitifs dont la rédaction à la main est fastidieuse (par exemple pour les interfaces utilisateur graphiques), ou encore proposer des améliorations à un code préalablement fourni, voire identifier des erreurs dedans. Finalement, si vous expliquez le comportement attendu d’un programme, vous pouvez demander la génération automatisée de code de test unitaires (ce qui tombe en général dans la catégorie « barbant »!). Quoi que vous fassiez, attention de toujours rester critiques quant aux propositions qui vous sont faites.

Nous allons passer ces différents cas en revue, en illustrant avec le langage Python :

2.1. Rédiger du code exécutant un algorithme élémentaire

Il suffit de bien décrire ce que l’on veut, y compris le langage et la forme (programme autonome, fonction avec ses arguments…). Nous allons ici demander à ChatGPT le code pour une fonction Python qui retourne une liste de nombres premiers :

Dialogue 1 : Génération d’une fonction de calcul des nombres premiers

Cela semble bien correct. Le modèle en a profité pour créer une autre fonction qui indique si un nombre est premier ou pas. Très bien. Il ne reste qu’à copier le code et le placer dans un fichier source puis l’exploiter.

2.2. Commenter le code

Vous pouvez utiliser le modèle à la fois pour ajouter des commentaires en ligne dans un code que vous lui fournissez, ou encore pour générer des fichiers de documentation séparés (README, description d’interface..).

Commençons par demander à ChatGPT de commenter le code qui a été généré au point précédent.

Dialogue 2 : Insertion de commentaires dans le code

Et voici le fichier README qui décrit succinctement le code:

Dialogue 3 : Génération d’un fichier README

Pas grand chose à redire, cela semble fonctionner correctement. A noter que le modèle à utilisé un format Markdown sans que cela lui ait été demandé.

2.3. Demander la génération d’une batterie de tests unitaires

La bonne pratique de la programmation veut que chaque fonctionnalité codée se voie accompagnée d’une fonction de test unitaire qui s’intègre dans un environnement de test/validation qui va être exécuté à chaque mise à jour du code afin d’éviter toute régression. Demandons donc à ChatGPT de générer un code de ce type pour nos deux fonctions :

Dialogue 4 : Génération de fichiers de test

Ici encore, cela semble correct. Néanmoins, il serait intéressant d’ajouter des tests pour voir comment le programme se comporte si on lui donne en argument une valeur nulle ou négative, voire non-numérique, pour voir la robustesse de la fonction en cas d’argument incorrect. Bien sûr vous pouvez lui demander interactivement de le faire ou bien l’ajouter vous-même à la main.

2.4. Traduire du code d’un langage à l’autre

A titre d’exemple, nous allons traduire la fonction décrite ci-dessus de Python vers Go.

Dialogue 5 : Traduction du code de Python vers Go

Je n’ai pas testé ce code mais ici encore le code semble tenir la route. Il serait néanmoins judicieux de le tester, éventuellement en demandant au modèle de fournir des fonctions de test comme il le suggère par ailleurs lui-même.

2.5. Faire générer un code fastidieux

Pour garder cet exemple simple, nous allons momentanément quitter le monde du Python pour passer au HTML, qui contient souvent des tas de répétitions pénibles à encoder.

Dialogue 6 : Génération d’un texte HTML fastidieux

Ici aussi, c’est correct. Il suffit de sauvegarder le texte dans un fichier à l’extension .htm ou .html et vous pouvez l’ouvrir dans un navigateur.

2.6. Demander des informations sur les librairies appropriées à un projet

Identifier les librairies disponibles les plus utiles à un projet est souvent une des tâches les plus importantes de la rédaction d’un programme. Supposons que je cherche à faire de l’analyse linguistique en python. Il existe des librairies qui vont offrir une série de fonctions de traitement pour me faciliter la tâche. Demandons à ChatGPT ce qu’il peut proposer :

Dialogue 7 : Recherche de librairies

Cela semble un bon point de départ. Bien sûr, vous pouvez approfondir le dialogue et demander des détails sur l’une ou l’autre librairie afin d’orienter votre choix.

3. Réflexions

Les modèles conversationnels ne sont pas (encore ?) en mesure de remplacer un programmeur. Le code qu’ils rédigent est susceptible de contenir des erreurs et il ne faut pas attendre d’eux la création d’une application complexe à partir de rien. Il ne faut pas oublier que ces modèles sont « dressés » à répéter ce qu’ ils ont vu ailleurs – y compris les erreurs éventuelles -, pas à raisonner de manière abstraite…

Cela veut aussi dire que les personnes n’ayant aucune expérience en programmation ne pourront pas recourir à ces modèles pour pallier à leur ignorance. Par contre, le programmeur « occasionnel », celui qui connaît les bases du langage sans être plongé dedans quotidiennement, verra le gain le plus important. Le programmeur expert pourra l’utliser pour confronter ses propres idées mais le gain sera probablement moindre.

Leur autre grande valeur ajoutée est qu’ils ont un bon niveau de connaissance des différentes librairies et packages existants qui sont souvent d’une grande aide à la programmation. Et pour cela, il suffit d’entamer un dialogue avec le modèle en lui demandant ce qu’on cherche et dans quel contexte. Comme pour les autres utilisations de ces modèles, il ne faut pas hésiter à remettre en cause ses propositions ou lui demander de changer d’approche.

Et d’ailleurs, quels langages de programmation ces modèles maîtrisent-ils ? Eh bien la plupart d’entre eux, soit non seulement les suspects habituels (Python, Java, C++, Go, PHP…) mais aussi des langages moins répandus comme le Fortran, le Cobol ou le Lisp. Et si vous hésitez sur le choix d’un langage, vous pouvez lui poser la question…

Une dernière remarque pour mentionner le plugin code interpreter qui est disponible si vous avez l’abonnement ChatGPT+. Je ne l’ ai volontairement pas utilisé dans cet article pour rester généraliste. Ce plugin va permettre à ChatGPT d’exécuter automatiquement du code qu’il génère et de vous montrer le résultat, au lieu de devoir le recopier manuellement dans un éditeur puis l’exécuter. C’est un avantage intéressant si vos scénarios d’utilisation sont fortement orientés vers la programmation ou si vous devez souvent analyser des données.

Utilisation des modèles conversationnels IV : Brainstorming et discussion ouverte

Les modèles conversationnels ne peuvent pas entièrement remplacer votre propre créativité mais il est quand même possible de les utiliser pour enrichir vos idées avec de nouveaux concepts et perspectives.

L’ avantage de ces modèles est qu’ils sont disponibles 24h/24 pour discuter et échanger des idées.

Vous pouvez le faire dans pratiquement tous les domaines de la vie privée et professionnelle : lancer une affaire et/ou la promouvoir, chercher une destination de vacances ou faire des rénovations, essayer de maigrir, se lancer dans le jogging, identifier des idées pour un rapport ou un article…

Deux règles sont importantes lorsqu’on désire avoir une discussion ouverte avec un modèle : définir et circonscrire clairement le sujet de départ et poser des questions ouvertes.

A titre d’exemple, nous allons nous mettre dans la peau d’un jeune de 18 ans qui hésite sur son choix d’études universitaires et désire en parler avec un modèle. Vous allez voir que le modèle fournit des idées constructives et permet au jeune de s’orienter vers un domaine dont j’ignorais jusqu’à l’existence…

Commençons par le contexte et la question initiale :

Dialogue 1 : Ouverture de la discussion

Le modèle fournit des pistes d’étude assez génériques. Certaines le tentent plus que d’autres, qui lui semblent trop austères et rébarbatives. Il veut un travail qui laisse un certain champ pour la créativité.

Dialogue 2 : Progrès de la discussion

Le jeune est intéressé par le journalisme mais cela semble très générique. Comment marier cela avec son intérêt pour les mathématiques et les nouvelles technologies ?

Screenshot
Dialogue 3 : Orientation de la discussion

Le modèle propose une piste intéressante : le data journalisme, mais ce terme est assez obscur. Demandons plus au modèle sur cette filière :

Dialogue 4 : Finalisation de la discussion

Et voilà. Il est bien sûr possible de continuer à questionner jusqu’à épuisement de la fenêtre de contexte mais cela n’ajouterait pas grand’chose à l’idée que je voulais faire passer.

Quand on voit l’échange ci-dessus, le modèle répond de manière tout à fait pertinente et raisonnable, je ne dis pas que c’est systématiquement le cas mais cela reste un outil précieux, surtout si l’on y ajoute la disponibilité à toute heure. Vous pouvez aussi toujours reprendre une conversation là où vous l’avez laissée, même des mois plus tard. Difficile d’obtenir une telle flexibilité d’une personne.

Ceci me pousse à digresser un peu. Notre société accorde une forte prime à la connaissance, la formation et la capacité de les synthétiser vers un but cohérent (appelons cela l’intelligence). Obtenir cette intelligence et cette connaissance requièrent une prédisposition personnelle, de nombreuses années d’études, le support de la famille et d’autres choses auxquelles tout le monde ne peut automatiquement prétendre avoir accès.

Qu’on le veuille ou non, l’intelligence et la connaissance restent un facteur d’inégalité, voire un privilège si l’on étend le raisonnement aux pays en voie de développement. Et je suis convaincu qu’un des avantages de ces technologies c’est qu’elles mettent potentiellement à la disposition de tout le monde un assistant intelligent et cultivé quoique parfois mythomane; et donc elles devraient rendre possible – au moins en théorie- un mécanisme de mitigation de cette inégalité.

Bien sûr, on peut argumenter qu’un recherche Google permet d’obtenir les mêmes informations, mais cela demande un effort cognitif de l’utilisateur nettement plus important. C’est pourquoi, je pense que l’impact de des modèles conversationnels sera significatif, surtout dans les régions où l’accès à la connaissance est le plus difficile.

Utilisation des modèles conversationnels III : Génération de textes

Nous allons maintenant nous amuser un peu et exploiter les capacités créatives des modèles conversationnels. Celles-ci sont très diverses et je vais montrer à travers quatre exemples d’utilisation de ChatGPT à quel point ces outils peuvent s’avérer précieux, surtout lorsqu’on est en manque d’inspiration…

Nous allons successivement demander l’aide de ChatGPT pour écrire une lettre de motivation pour un stage étudiant, rédiger un email promotionnel, proposer la trame d’un roman et enfin écrire les paroles d’une chanson.

1. Création d’une lettre de motivation

Vous êtes comme moi et trouvez aussi qu’il n’y a rien de plus barbant que d’écrire une lettre de motivation pleine de lieux communs ? Ca tombe bien, les modèles conversationnels peuvent nous aider. Essayons avec une lettre de motivation pour un stage en entreprise pour un étudiant en école d’ingénieur.

Il est intéressant de voir que je n’ai pas donné beaucoup de détails sur le parcours de demandeur et notre ami informatique n’a pas pu s’empêcher d’inventer une université de toutes pièces ! C’est un exemple d’hallucination: le modèle n’hésite pas à combler les blances pour que le texte soit plus plausible.

Par contre, sa connaissance générale lui a permis d’inférer correctement que la protonthérapie était destinée au traitement du cancer.

Personnellement, je trouve le texte tout à fait utilisable moyennnant quelques aménagements. Et cela peut être adapté pratiquement à toutes les sauces, moyennant fourniture de suffisamment d’éléments de contexte : une toiture qui fuit, une demande d’informations à la commune, une lettre de résiliation….

2. Création d’un email promotionnel

Cet exemple est assez proche du précédent mais il est intéressant car les sociétés font souvent appel à des rédacteurs professionnels qui réalisent des textes à la demande, notamment pour les activités de marketing et promotions, communication sur les réseaux sociaux, descriptions de produits, articles de blogs….

Je vais prendre l’exemple d’un email promotionnel pour une magasin de chaussures de sport qui offre une réduction de 15% pendant le weekend de l’Ascension.

Franchement, j’ai obtenu ce résultat du premier coup et je trouve cela tout à fait honorable, avec mention spéciale pour le *post-scriptum*

3. Ecrire les paroles d’une chanson

Passons maintenant à une activité plus créative : la rédaction des paroles d’une chanson. Dans l’exemple suivant, je demande au modèle de proposer les paroles d’une chanson, tout en spécifiant quelques éléments de contexte.

Il est intéressant de constater que le modèle propose un refrain répété trois fois, et que les phrases riment sans que je l’aie explicitement demandé.

Et si ça ne convient pas, il suffit de demander au modèle de regénérer la réponse jusqu’à obtenir satisfaction…

Voici le résultat :

Ici encore, le résultat au premier essai est tout à fait honorable.

Note : Je me suis inspiré de Tarde em Itapua de Vinicius de Moraes, et vous pouvez écouter ici ce chef d’oeuvre. Bien sûr, le texte original est en Portugais.

4. Proposer une trame de roman

Nous allons maintenant chercher l’inspiration auprès du modèle pour une histoire de fiction, puis demander une organisation du livre en chapitres. Le grand avantage de ce genre de démarche c’est que la tendance du modèle à halluciner n’est plus un problème, bien au contraire !

Commençons par demander au modèle d’enrichir la trame de départ. Si vous n’avez vraiement aucune idée, vous pouvez demander au modèle de proposer des idées mais c’est un peu facile….autant avoir quand même un minimum de valeur ajoutée !

Et maintenant, laissons le modèle proposer une structuration en chapitres :

Et vous ne devez pas vous arrêter là. Vous pouvez demander au modèle d’approfondir le contexte et la personnalité des personnages, puis demander des idées de trame pour chacun des chapitres….et au passage demander que ce soit fait au format markdown comme présenté au chapitre précédent…

Remarque : il est possible de rendre les modèles conversationnels plus aléatoires (et donc en principe plus créatifs) en modifiant certains de leurs paramètres comme la température du modèle. Je reviendrai sur cette technique avancée dans un article ultérieur de la série.

Utilisation des modèles conversationnels II : transformation de documents

Dans cet article, je couvre la transformation de documents, à travers trois cas d’utilisation courants : édition et réécriture, traduction et reformatage.

1. Edition et réécriture de texte

Avec les modèles conversationnels, il est facile de demander une correction orthographique ou une réécriture du texte. Rien d’extraordinaire à cela. Ce qui est intéressant c’est qu’il est également possible de modifier le style du texte pour le faire mieux convenir aux besoins. Suivant les circonstances, vous pouvez demander la réécriture d’un exte dans un style plus formel, plus solennel, plus humoristique, plus romantique… et il est même possible de demander au système de réécrire le texte dans le style d’un auteur particulier. Tout ceci offre de nombreuses perspectives, dont il serait tentant d’abuser comme je le fais ci-dessous :

Dialogue 1 : Modification du style d’un texte

De manière moins innocente, il est possible de demander la réécriture d’un texte afin de l’orienter dans une direction particulière, ou d’inflencer le message qu’il porte dans une certaine direction. Cette capabilité présente un risque important d’exploitation à des fins de manipulation ou de désinformation et constitue un des risques principaux liés au déploiement de ces modèles généralistes.

2. Traduction

Les modèles conversationnels étant multilingues, il est possible de demander des traductions, voire de combiner une traduction avec une autre demande afin de gagner du temps.

Cette fonctionnalité étant déjà largement répandue sur internet, les modèles conversationnels n’offrent pas de gain majeur, si ce n’est la possibilité de combiner éventuellement deux étapes en une. Je ne m’étendrai donc pas plus sur ce sujet, si ce n’est pour dire que, selon les quelques études comparatives que j’ai pu voir, ChatGPT semble traduire avec un style plus fluide mais moins précis que les programmes plus spécialisés tels que Deepl ou Google Translate.

3. Reformatage de texte

Cette capacité est semblable à la réécriture de texte, sauf qu’au lieu de vouloir modifier le contenu du texte, nous allone cette fois tenter d’en modifier la présentation.

Je vais utiliser le format Markdown pour illustrer cette possibilité. Le format Markdown dont vous pourrez trouver une description ici, se prête particulièrement bien à ce genre d’activité, puisqu’il est lui-même de nature textuelle et que ChatGPT le maîtrise convenablement.

Beaucoup plus simple à utiliser que le HTML, Le format Markdown est très populaire sur le web pour la rédaction de blogs, d’articles…et c’est d’ailleurs le format que j’utilise pour la rédaction de mes articles, qui sont ensuite convertis en HTML par WordPress. Markdown va vous permettre de créer par le truchement de ChatGPT un texte proprement formaté (chapitres, liste numérotée, puces, souligné/italique, hyperliens…). Markdown est très facile à apprendre et différent éditeurs sont disponibles sur le web.

Le Markdown doit être considéré comme un format source qui va pouvoir être ensuite être transformé automatiquement vers des formats de publication comme PDF, LaTeX, EPUB, DOCX, RTF, ODT… par l’intermédiaire de programmes comme Pandoc.

Dialogue 2 : Formatage d’un texte

Il vous suffit alors de cliquer sur Copy code pour obtenir le texte avec ses élements de formatage que vous pouvez ensuite copier dans un traitement de texte capable d’interpréter le format Markdown (par exemple en sauvegardant dans un fichier d’extension .md).

Si vous combinez cette capabilité avec celle de génération de contenu original que nous verrons dans le prochain article, le champ des possibles, tant en termes de création que d’inspiration, devient vraiment très large.

4. Formatage de données

Il est possible de faire quelque chose d’équivalent en structurant des données désorganisées, rendant possible leur traitement ultérieur par des programmes spécialisés (Excel, python…). Il s’agit ici d’une activité différente mais apparentée à la génération de programmes informatiques, qui sera traitée dans un article séparé.

Il est important de demander au modèle de traduire dans un format précis, et qui est lui-même un format textuel tel que CSV, XML ou JSON.

Dialogue 3 : Structuration de données et exportation au format CSV

Il ne vous reste alors qu’à appuyer sur Copy code et sauvegarder dans un fichier CSV. Vous êtrs alors libres de contoinuer le traitement comme bon vous semble (Excel, programme Python…).

Une remarque : gardez en mémoire que le texte généré fait partie de la fenêtre de contexte et donc le volume de données qui peut être traité reste limité.

Utilisation des modèles conversationnels I : analyse de texte et demande d’ informations

Cet article est le premier d’une série qui vont couvrir les utilisations possibles de ChatGPT dans la vie de tous les jours. Aujourd’hui, nous commençons par les applications analytiques sur un texte, qui sont ici regroupées en trois cas concrets : demande de résumé, extraction d’informations, exploitation des connaissances propres du modèle. La possibilité assez fascinante de dialoguer avec un document est également évoquée.

Dans les prochains articles, je couvrirai successivement les applications transformatives (traduction, réécriture), puis les applications génératives (création). Ensuite, je couvrirai la création automatisée de programmes informatiques, pour terminer sur quelques réflexions sur l’exploitation pratique de ces modèles.

1. Demander le résumé d’un texte

Résumer un texte est une tâche tout à fait à la mesure des modèles génératifs, qui se débrouillent en général assez bien dans ce genre d’exercise. Afin d’obtenir les résultats désirés, il est vivement conseillé de bien circonscrire le texte à résumer au moyen de délimiteurs (« … » ou autres), puis de bien qualifier le type de résumé que vous désirez.

Cette qualification peut se faire de nombreuses manières, dont voici quelques exemples :

  • limiter la longueur de la réponse, par exemple : ‘résumer en 200 mots maximum’
  • orienter le résumé, par exemple: ‘résumer le projet de manière positive et favorable à son extension ‘
  • spécifier un style particulier, par exemple : ‘résumer dans le style d’un enfant de huit ans’
  • changer la langue : « résumer en Anglais »
Dialogue 1 : Résumé d’un texte

Attention cependant que ceci ne fonctionne pour des textes de taille inférieure à celle de la fenêtre de contexte, réponse comprise. En pratique, nous sommes limités à des textes d’ environ une dizaine de pages et un long article ou un livre sont encore hors d’ atteinte. Je vous renvoie au texte précédent qui traite plus en détail des fenêtres de contexte.

2. Analyse d’un texte

Il s’agit ici de demander au modèle une ou plusieurs questions spécifiques relatives à un texte fourni. Ceci va faire appel aux capacités de raisonnement et d’analyse du modèle. Attention que les résultats ne sont pas toujours fiables. Si le système semble confus, n’hésitez pas à lui demander d’expliquer son raisonnement étape par étape et/ou à lui montrer des exemples de problèmes similaires résolus.

Dialogue 2 : Analyse d’un texte

Une chose assez merveilleuse est que vous pouvez dialoguer interactivement avec le système au sujet du texte et poser de multiples questions. Cette capacité laisse entrevoir d’énormes potentialités, notamment en termes d’éducation (imaginez que vous pouvez poser interactivement des question à un syllabus de cours !).

Il existe aujourd’hui des sites web comme celui-ci sur lequel vous pouvez télécharger un fichier pdf puis dialoguer avec. Si vous possédez l’abonnement ChatGPT Plus, le plugin AskYourPDF permet d’en faire autant.

3. Extraction de la connaissance propre du modèle

Les Grands Modèles de Langage ont été entraînés sur un volume de données gigantesque qui dépasse de très loin ce qu’un être humain peut lire au cours d’une vie entière. Le modèle possède donc une base de connaissances extrêmement large qui en fait une sorte de Pic de la Mirandole sans qu’il soit nécessaire de lui fournir un quelconque texte en entrée, et qui est ouverte à vos questions et dialogues.

Attention cependant que la véracité de la réponse n’est pas garantie, il vous revient donc vérifier l’exactitude de la réponse avant toute exploitation du résultat !

Dialogue 3 : Exploitation des connaissances propres du modèle

Une autre limitation de ces modèles est liée au fait que les bases de données d’entraînement ont été collectées à un moment précis dans le temps, et le système ignore tout ce qui s’est déroulé ensuite. Sa connaissance des événements récents est donc sujette à caution. Les nouveaux modèles comme ChatGPT4 et Bing Chat permettent de pallier à cet inconvénient en lançant automatiquement des recherches sur le Web pour s’assurer que leur réponse est à jour (ils indiquent d’ailleurs dans le dialogue les recherches qu’ ils lancent).