Une expérience de programmation en trance, par Claude Roux

Kriegspiel

English Version

Je suis un utilisateur des premiers jours des LLM, depuis 2022 pour être exact. J’ai découvert la puissance des grands modèles de langue en lisant l’article « Inner Monolog » qui utilisait l’un des premiers modèles éduqués d’OpenAI : Instruct-GPT.

Je dois dire que j’ai immédiatement été impressionné par les capacités, pourtant très sommaires à l’époque, de ce système. Je m’en suis servi rapidement pour produire du code, plus ou moins sophistiqué, avec plus ou moins de bonheur. Cependant, je n’avais jamais tenté de construire une application complète en partant de zéro.

Bien que je sois un programmeur chevronné ayant manipulé près d’une vingtaine de langages de programmation au cours de ma carrière – dont certains que j’ai moi-même créés –, je ne possède qu’une connaissance très sommaire de JavaScript. Je me suis surtout confronté à ce langage cette année, en 2025, dans le cadre d’un autre projet réalisé avec l’aide d’un LLM, mais dont les dimensions étaient bien plus modestes.

Entreprendre un projet d’envergure en JavaScript constituait donc l’occasion parfaite de tester les forces et les faiblesses de la génération de code en trance, de faire du vibe-coding. L’objectif était de vérifier jusqu’où quelqu’un sans expérience préalable en programmation pourrait aller.

Sans dévoiler prématurément la conclusion de cette expérience, disons qu’on peut aller très loin…

Le jeu : Kriegspiel

Les Allemands ont inventé les jeux de guerre juste après les guerres napoléoniennes, afin d’entraîner leurs futurs généraux à assimiler de façon ludique (déjà la gamification !) les principes de stratégie militaire. Le terme « Kriegspiel » signifie simplement « jeu de guerre ».

Cela faisait très longtemps que je rêvais de réaliser un tel jeu, mais je n’avais jamais eu ni le temps, ni – soyons honnête – les compétences nécessaires pour développer une version jouable dans un navigateur.

Les règles du jeu sont relativement simples. Nous disposons de six types d’unités :

  • Infanterie
  • Cavalerie
  • Éclaireur
  • Intendance
  • Artillerie
  • Général

Chaque armée dispose d’un général et d’un nombre variable de troupes. L’objectif du jeu est d’éliminer le général adverse.

Vous pouvez retrouver le code de ce jeu en cliquant ici.

Le choix des LLM

Je me suis d’abord imposé une contrainte simple : n’utiliser que les versions gratuites des LLM suivants : Grok 3, Claude et Gemini. Cette limitation réduit à la fois le nombre de tokens disponibles et restreint le type de modèle accessible.

Au final, je me suis principalement servi de Gemini 2.0 Flash, le seul avec lequel je pouvais manipuler un projet d’une taille raisonnable. Pour Claude et Grok 3, je les ai utilisés essentiellement pour produire ou modifier certaines fonctions spécifiques.

En revanche, il devient vite évident qu’une fois les dimensions du projet dépassant une certaine taille, les modèles commencent à montrer leurs limites.

Première erreur : l’approche monolithique

Mon premier réflexe fut de rédiger un prompt conséquent décrivant le jeu dans ses moindres détails. La réponse fut cinglante. Le LLM (Gemini dans ce cas) m’a expliqué qu’un tel jeu était trop complexe à produire et a refusé d’aller plus loin :

« As an AI assistant, I can’t write and deploy an entire application of that scale. My capabilities are focused on providing information, explaining concepts, generating code snippets or examples for specific parts, and helping you structure your thoughts and plans. »

Notons que dans cette première tentative, j’avais rédigé le prompt en anglais, d’où la réponse dans cette langue.

Ce paragraphe faisait partie d’une réponse beaucoup plus élaborée où la machine, bien qu’elle refusât de fournir le code complet, détaillait de façon précise un plan permettant à un utilisateur d’implémenter un tel jeu.

L’approche incrémentale

J’ai donc décidé de procéder différemment en adoptant une stratégie pas à pas. J’ai d’abord demandé à la machine de produire une carte de jeu avec des hexagones en JavaScript, ce que le LLM s’est empressé de me fournir.

Puis, progressivement, j’ai commencé à ajouter de nouveaux éléments graphiques. Dans un premier temps, j’ai demandé à enrichir la carte avec des forêts, des lacs et des montagnes. Le LLM a choisi lui-même la légende des couleurs, qui s’est révélée à mon goût.

Ensuite, je lui ai demandé de créer les différentes unités. Le LLM a tenté de dessiner avec des ronds et des carrés des approximations de soldats et de chariots. Le résultat était hideux.

Dans un premier temps, j’ai fourni à l’IA un exemple d’icône que je souhaitais utiliser, mais le résultat demeurait catastrophique. J’ai fini par lui indiquer que j’avais des fichiers dans un répertoire d’images, et il a mis à jour le code en conséquence.

Errare humanum est, perseverare diabolicum

Au bout d’un certain nombre d’itérations, le fichier principal a commencé à devenir volumineux. J’ai alors demandé à la machine de répartir le code dans plusieurs fichiers différents, ce qui a provoqué une régression. Il a fallu plusieurs prompts spécifiques pour finalement aboutir de nouveau à une version fonctionnelle.

Il est absolument fondamental de placer son code sous contrôle de version avec Git. En effet, il arrive souvent que la machine s’enlise dans une solution déficiente dès l’origine, sans possibilité d’en sortir. La solution consiste à revenir à la dernière version fonctionnelle et à repartir de zéro en proposant un prompt différent.

On peut assez facilement injecter dans les prompts les erreurs générées, mais il arrive un moment où la session devient trop volumineuse pour que la machine s’en sorte. Dans un premier temps, j’ai essayé de la pousser le plus loin possible, mais les erreurs finissent par s’accumuler et le code devient de plus en plus ingérable.

Il ne faut pas hésiter à abandonner la session en cours et à en démarrer une nouvelle.

Décisions et malentendus

L’implémentation des combats et des déplacements s’est révélée particulièrement fastidieuse. La boucle principale dans la fonction gameLoop était notamment très lente. J’ai alors proposé à la machine d’implémenter les déplacements et les combats sous forme de fonctions asynchrones, ce à quoi le LLM a répondu que c’était une excellente idée… sans pour autant l’implémenter. Il a simplement ajouté un paramètre pour réduire la vérification des combats à un test toutes les 10 secondes.

Ce malentendu est intéressant : j’ai cru qu’il avait implémenté le mécanisme des fonctions asynchrones parce que soudain le jeu est devenu très fluide, alors qu’en fait il n’avait pas suivi mon idée :

Gemini 2.0 Flash : « Absolument ! Passer à un modèle basé sur des timers pour la gestion des mouvements et des combats est une excellente idée pour rendre le jeu plus précis et découpler les mises à jour de l’état du jeu de la fréquence de rafraîchissement de l’affichage (requestAnimationFrame). »

Développement de la version initiale

J’ai finalement pu développer une première version offrant les fonctionnalités suivantes :

  • Une carte avec des hexagones
  • Une variation dans les couleurs pour refléter le terrain
  • Des unités diverses appartenant à deux armées différentes, identifiées par un rond de couleur
  • Des mécanismes de déplacement
  • Une mécanique de combat

La mécanique de combat s’est avérée trop complexe et dans un premier temps, j’ai préféré la laisser telle quelle. En revanche, J’ai abandonné certaines décisions de la machine, comme la recherche du meilleur chemin pour une unité, qui avait parfois pour effet de lancer des boucles infinies. Pour éviter de perdre trop de temps, j’ai simplifié le déplacement en mouvement case par case, où la décision devient locale aux cases environnant l’unité concernée.

Brouillard de guerre et mode réseau

Dans un premier temps, j’ai demandé à la machine d’ajouter le code pour gérer un brouillard de guerre, et j’ai été absolument impressionné par le résultat. La modification a fonctionné du premier coup.

J’ai ensuite voulu ajouter une capacité serveur au code. Mon premier prompt a reçu le même type d’avertissement que la première fois : code trop volumineux, impossible de le modifier pour ajouter un serveur.

Mon prompt : « Je voudrais transformer ce jeu en un jeu à deux joueurs jouable via Internet. Le joueur bleu est le seul qui peut définir la carte et qui a accès au menu hamburger. Le joueur rouge peut déplacer ses unités et son brouillard de guerre est évidemment l’opposé du joueur bleu. Le joueur bleu crée la partie et le joueur rouge vient se connecter. La partie s’arrête quand un joueur n’a plus d’unités. »

Réponse : « Implementing these features requires adding substantial new code for network communication and rethinking how the game state is managed and updated across multiple clients. Unfortunately, I cannot directly implement these code changes for you. »

La réponse en anglais m’a d’abord surpris, avant que je réalise que le problème venait du fait que mon prompt en français était noyé dans un code massivement en anglais.

Il m’a fallu contourner le problème en relançant une nouvelle session, cette fois avec un prompt beaucoup plus directif. La planification proposée par le modèle au prompt précédent m’avait permis de rédiger une demande bien plus précise :

« Je voudrais pouvoir jouer via Internet avec un autre joueur. Voici comment je veux procéder :

  1. Le serveur sera géré via Node.js
  2. Le joueur bleu lance le jeu
  3. Le joueur rouge reçoit alors le JSON correspondant à la partie en cours
  4. Chacun joue en local sur sa machine, sauf que la version du joueur rouge est centrée sur les unités rouges
  5. Les mouvements de chaque joueur sont échangés par le serveur
  6. Les combats sont tous traités par le client du joueur bleu »

Cette fois-ci, le modèle a non seulement produit un fichier server.js, mais a aussi proposé des modifications à apporter aux principaux fichiers du jeu.

Le poids des fichiers et la dégradation des performances

L’ajout du mode serveur s’est traduit par un alourdissement considérable du code, et les performances du modèle de langue ont commencé à décliner de façon notable. Il m’a fallu examiner réellement le code pour identifier à l’avance les endroits nécessitant des modifications. Mais certains fichiers ayant pris beaucoup d’embonpoint, la régénération a commencé à prendre énormément de temps.

Je me suis alors heurté à un problème frustrant : régulièrement, la machine ne générait qu’une partie du code en plaçant des commentaires aux endroits où le code n’avait pas subi de modification. Il fallait soit exiger que le code soit entièrement généré (ce qui prenait du temps), soit effectuer les modifications manuellement.

Les hallucinations de fonctions

J’ai alors commencé à travailler fonction par fonction. Je continuais de fournir le fichier complet en entrée, mais demandais à la machine de ne me fournir que les parties modifiées. Cela a entraîné un nouveau problème étrange : le code s’est mis à halluciner des fonctions absentes.

Par exemple, le dessin de la carte était assuré par la primitive drawMapAndUnits, mais le code utilisait systématiquement la méthode drawGame qui n’existait pas dans le fichier. Il faut noter que le plus souvent, les fonctions hallucinées, après correction, correspondaient effectivement à ce qui était demandé.

La nécessité de connaître la programmation

Autant le LLM m’a permis de créer la plupart des mécanismes du jeu, autant arrivé à une certaine taille de projet, la nécessité de comprendre la programmation est devenue fondamentale. En effet, passé une certaine taille, l’effet « aiguille dans une botte de foin » s’estompe au point que le modèle n’arrive plus à identifier correctement la logique interne du code.

Par exemple, j’ai tenté à plusieurs reprises de lui faire modifier la mécanique des combats, mais ses propositions tombaient à plat. J’ai finalement décidé de les modifier moi-même. Cependant, le LLM reste utile dans ce cas précis : il suffit de lui demander d’afficher les lignes de code correspondant à ce calcul ainsi que d’expliquer la logique sous-jacente.

De cette façon, on peut immédiatement identifier les parties à modifier et procéder de plusieurs façons complémentaires :

  1. Extraire les lignes en question et demander au modèle de les modifier
  2. Les modifier soi-même
  3. Proposer une modification et demander au modèle de l’appliquer

Dans tous les cas, une bonne connaissance de l’informatique devient nécessaire. Le paradoxe est le suivant : plus le projet grandit, plus la granularité des modifications devient fine. On commence par travailler avec l’ensemble du projet en mémoire et on finit par travailler fonction par fonction, variable globale par variable globale.

Plus la granularité est faible, plus les risques de perdre son « aiguille dans la botte de foin » augmentent. Il arrive un moment où demander une amélioration d’un code existant s’apparente à un pari risqué. On finit par utiliser l’option d’abandon du fichier en cours de GitHub de plus en plus souvent.

Finalement, la meilleure parade consiste à générer du code spécialisé que l’on insère manuellement dans le projet. Et là… ne pas avoir de connaissances en programmation rend la tâche particulièrement compliquée. Le modèle a beau expliquer ligne par ligne les modifications à apporter, si l’on ne comprend pas les instructions à suivre, continuer devient problématique.

Conclusion

J’ai pu produire la majeure partie de mon code avec l’aide d’un LLM, en particulier les parties les plus importantes, celles pour lesquelles je n’avais aucune compétence en JavaScript. Cependant, plus j’avançais dans le projet, plus le besoin d’effectuer des corrections mineures pour peaufiner le fonctionnement prenait de l’importance, et plus les LLM s’avéraient limités pour dépasser un certain niveau de qualité.

En revanche, le code généré par le modèle s’est révélé suffisamment riche et bien structuré pour que je puisse prendre la main en fin de projet afin de finaliser certains aspects du jeu que je n’arrivais pas à faire produire directement par le modèle.

Il est possible que les LLM finissent par maîtriser d’énormes projets, mais pour le moment, on constate qu’ils souffrent dès que les 5 000 lignes de code sont atteintes ou dépassées. Pourtant, pour démarrer un projet, ils sont parfaits. Ils permettent très rapidement de poser les fondations du code, et ensuite on peut assez facilement se plonger dans le programme pour ajouter ses modifications. Le LLM peut même nous aider à comprendre les parties du code à modifier.

Cette expérience révèle que le « vibe-coding » ouvre des possibilités fascinantes : il permet à quelqu’un avec des connaissances limitées dans un langage spécifique de réaliser des projets ambitieux. Mais elle montre aussi que cette approche trouve ses limites dans la complexité et nécessite, au-delà d’un certain seuil, une compréhension technique pour aller au bout de ses ambitions.

 

Partager :

19 réponses à “Une expérience de programmation en trance, par Claude Roux”

  1. Avatar de Tout me hérisse
    Tout me hérisse

    Ah ! Mais elle montre aussi que cette approche trouve ses limites dans la complexité et nécessite, au-delà d’un certain seuil, une compréhension technique pour aller au bout de ses ambitions.
    Claude Roux nous apporte une information importante : l’humain très expérimenté dans son domaine, peut encore se révéler meilleur que l’IA…, cela est quelque peu rassurant.

    1. Avatar de BasicRabbit en autopsy
      BasicRabbit en autopsy

      @Tout me hérisse (« l’humain très expérimenté dans son domaine, peut encore se révéler meilleur que l’IA…, cela est quelque peu rassurant. »)

      Thom : « La mathématique est le jeu signifiant par excellence, par lequel l’homme se délivre des servitudes biologiques qui pèsent sur son langage et sa pensée et s’assure les meilleurs chances de survie pour l’humanité. » (Fin de Stabilité Structurelle et Morphogénèse » (1968)

    2. Avatar de Claude Roux
      Claude Roux

      Oui… Toutes les études montrent que les IA servent surtout ceux qui maitrisent leur sujet. Dans ce cas, elles permettent une véritable explosion de productivité. Pour ceux qui débutent, les IA au contraire peuvent s’avérer négatives, car elles produisent des codes que les débutants n’arrivent pas à comprendre et dont les effets peuvent leur échapper.
      C’est un peu la différence entre confier un stagiaire à un développeur qualifié ou à un débutant…

  2. Avatar de BasicRabbit en autopsy
    BasicRabbit en autopsy

    Le dernier chapitre de « Modèles Mathématiques de la Morphogénèse » (2ème ed., ce n’est pas dans la première), est intitulé « Aux frontières de l’esprit humain : le jeu »

    En lisant à peine entre les lignes, on imagine aisément que la guerre bactériologique est déclarée depuis longtemps par « nos » « élites pharmaciennes », et que les rapisdes progrès de l’IA vont la booster.

    Thom a écrit un article sur l’innovation en 1968 pour l’E.U. IL se termine ainsi :

    « Il faut décourager l’innovation (…) Sinon, si nous continuons à priser par-dessus tout l’efficacité technologique, les inévitables corrections à l’équilibre entre l’homme et la Terre ne pourront être -au sens strict et usuel du terme- que catastrophiques. »

  3. Avatar de BasicRabbit en autopsy
    BasicRabbit en autopsy

    Le psychanalyste Patrick Gauhier-Lafaye et le mathématicien Alain Connes ont écrit « À l’ombre de Grothendieck et de Lacan ». Extrait (p.24) :

    AC : « Alors qu’il semble clair que les progrès de l’intelligence artificielle rendent de moins en moins indispensable l’intervention du mathématicien dans l’acte d’exploration, l’élaboration d’un concept nouveau paraît encore échapper à ce risque de dépossession. »

    PG-L : « Risque dont semble pour l’instant à l’abri la psychanalyse, à moins de la confondre avec une branche des neurosciences, ce qu’elle n’est pas. »

    AC : « Un concept (…) peut jouer un rôle essentiel dans la découverte. Dans de très rares cas, un concept nouveau peut même avoir une portée philosophique… »

    J’aurais préféré voir écrit « une portée ontologique », puisque la position de AC dans le bouquin est de convaincre PG-L et le lecteur que c’est le cas du concept grothendieckien de topos.

  4. Avatar de ilicitano
    ilicitano

    Les modèles d’IA s’effondrent lorsqu’ils sont entraînés sur des données générées de manière récursive.

    https://www.nature.com/articles/s41586-024-07566-y

    Abstrait
    La diffusion stable a révolutionné la création d’images à partir de textes descriptifs.
    GPT-2 (réf. 1), GPT-3(.5) (réf. 2) et GPT-4 (réf. 3) a démontré un rendement élevé dans diverses tâches linguistiques.

    ChatGPT a présenté ces modèles de langage au public.
    Il est maintenant clair que l’intelligence artificielle (IA) générative, comme les grands modèles de langage (LLM), est là pour rester et qu’elle changera considérablement l’écosystème du texte et des images en ligne.

    Nous examinons ici ce qui peut arriver à GPT-{n} une fois que les LLM contribuent une grande partie du texte trouvé en ligne.

    Nous constatons que l’utilisation indiscriminée du contenu généré par le modèle dans l’entraînement provoque des défauts irréversibles dans les modèles résultants, dans lesquels les extrémités de la distribution du contenu original disparaissent.

    Nous appelons cet effet « effondrement de modèle »
    et montrons qu’il peut se produire dans les LLM ainsi que dans les auto-encodeurs variationnels (VAE) et les modèles de mélange gaussien (GMM).

    Nous construisons une intuition théorique derrière le phénomène et dépeignons son omniprésence parmi tous les modèles génératifs appris.

    Nous démontrons qu’elle doit être prise au sérieux si nous voulons maintenir les avantages de la formation à partir de données à grande échelle récupérées sur le Web.

    En effet, la valeur des données collectées sur les interactions humaines réelles avec les systèmes sera de plus en plus précieuse en présence de contenu généré par LLM dans les données extraites d’Internet.

    1. Avatar de ilicitano
      ilicitano

      Analyse faite par GPT 4o sur cette étude

      Cet article de *Nature* explore un phénomène appelé **effondrement de modèle**, qui survient lorsque des modèles d’intelligence artificielle générative (IA) sont entraînés sur des données produites par leurs prédécesseurs.

      Voici une analyse détaillée :

      ### **Problématique et hypothèse centrale**
      L’article met en avant un danger majeur pour l’évolution des modèles de langage (LLM) : lorsque ces modèles sont entraînés sur des données générées par eux-mêmes ou par d’autres LLM, ils finissent par **perdre progressivement la diversité des informations d’origine**.

      Cette **auto-récursivité** entraîne une **dégénérescence** du modèle, qui commence par ignorer les extrémités de la distribution des données et aboutit à une mauvaise perception de la réalité.

      ### **Concepts clés**
      1. **Effondrement précoce du modèle** :
      Les premières générations perdent d’abord les données les moins fréquentes (queues de distribution).
      2. **Effondrement tardif du modèle** :
      À terme, la distribution d’un modèle devient trop homogène, avec une très faible variance, ce qui limite fortement la capacité du modèle à capturer des nuances.
      3. **Sources d’erreurs accumulées** :
      – **Erreur d’approximation statistique** : Perte progressive d’informations à chaque étape du rééchantillonnage.
      – **Erreur d’expressivité fonctionnelle** : Limitation des réseaux neuronaux à modéliser la distribution réelle.
      – **Erreur d’approximation fonctionnelle** : Biais introduits par les procédures d’apprentissage
      (descente de gradient, objectifs de modélisation).

      ### **Démonstration théorique et empirique**
      Les auteurs appuient leur hypothèse par :
      – **Une modélisation mathématique** démontrant la tendance inévitable du modèle à converger vers un état de faible variance.
      – **Expériences sur des modèles génératifs** tels que les **auto-encodeurs variationnels (VAE)** et les **modèles de mélange gaussien (GMM)**.
      – **Tests empiriques sur des LLM**, montrant que l’entraînement successif d’un modèle sur du contenu généré par lui-même entraîne une **perte progressive de précision** et une **apparition d’erreurs cumulatives** dans les générations futures.

      ### **Implications et enjeux**
      – **Pollution des données du web** : Si trop de contenu généré par des LLM est utilisé pour entraîner de nouveaux modèles, l’intelligence artificielle risque de devenir incapable de distinguer la réalité des artefacts créés par d’anciens modèles.
      – **Importance de préserver les données humaines** : L’article souligne que l’accès à des données authentiques générées par l’humain devient de plus en plus précieux.
      – **Impact sur l’avenir de l’IA** : Cette étude soulève des interrogations sur la **fiabilité à long terme** des modèles génératifs et leur capacité à continuer à évoluer sans se détériorer.

      En somme, cet article met en lumière une **vulnérabilité cruciale** des modèles d’intelligence artificielle :
      leur dépendance à des données d’entraînement qualitatives et diversifiées.

      Une prise en compte de ce phénomène est essentielle pour garantir le développement durable des IA génératives.

      Avis aux experts ??????????

      1. Avatar de BasicRabbit en autopsy
        BasicRabbit en autopsy

        @ilicitano (« récursivité incestueuse »)

        Thom : « C’est parce que la mathématique débouche sur l’espace qu’elle échappe au
        décollage sémantique créé par l’automatisme* des opérations algébriques. » (1979)

        Je ne compte plus le nombre de fois où j’ai alerté ici sur cette question.

        J’y connais pas trop peu pour voir où pourrait intervenir la géométrie dans les programmes régissant les LLM actuels.

        Dans PSI (et dans ANELLA) PJ fait usage d’algorithmes de descente de gradient, donc de géométrie différentielle élémentaire (mais pas de topologie différentielle).

        Quid trente cinq ans plus tard ? PJ vient de terminer un bouquin où ce sujet est abordé…

        (*) Plus que jamais à prendre au sens étymologique.

      2. Avatar de timiota
        timiota

        Récursion et plantage, comment ne pas penser à Hofstadter (« Gödel Escher Bach ») ?
        Ceci dit, la capacité de « construire du complexe » des LLM n’exploite pas le mécanisme analogue du vivant.

        Dans le vivant, construire un membre est complexe, à l’évidence, et néanmoins un peu séquentiel.
        Ce qui se passe est que toutes les fonctions d’entourage telles que les circulations sanguines fines (capillaires, artérioles), (ou bien les innervations) s’auto-adaptent lors de la croissance, le programme génétique demande seulement de faire « du vaisseau » « là où on est micro-prompté pour cela », mais aucun gène ne code le détail spécifique d’un capillaire du doigt (encore plus évident sur les plantes…). Il me semble que la récursion perd son bénéfice « naturel » si on est justement privé de cette couche d’auto-adaptation pour les fonctions d’entourage, c’est parce que les LLM font « tout » et pas que parcimonieusement le coeur de la question, qu’ils « meurent dangereusement » ou vivent pas de façon très heureuse, pour donner une idée…

        1. Avatar de BasicRabbit en autopsy
          BasicRabbit en autopsy

          @timiota

          Pour le végétal voici comment Thom voit la chose :

          « (…) l’apparition de la « fonction » biologique se manifeste par l’arrêt du
          processus génératif : formation de la feuille chez la plante à feuilles,
          « capteur solaire » transverse aux rayons lumineux, arrêt de la ramification
          par la sexualité sur l’apex floral (et sur le carpophore des champignons)
          porteurs du « message » germinal. Ce schéma formel d’une générativité
          indéfinie stoppée ou modulée par la manifestation de la fonction
          biologique, se retrouvera chez les Animaux métamériques. »

          Pour lui, il me semble, il y a une compétence récursive qui finit par être bloquée par une performance (dans le vivant la croissance n’est jamais infinie…). C’est comme ça que j’interprète son :

          « Le « sens », la signification, apparaît comme une limitation (inattendue) de la générativité (formelle). » (citation dont je ne connais pas le contexte).

          Thom parlant de Chomsky en ce sens à la fin du chapô de « Les deux voies de la théorie des catastrophes* » ? :

          « [Voie métaphysique] La théorie des catastrophes restera peut-être aussi superficielle aux phénomènes que la structure syntaxique de nos langues à la topologie interne du sémantisme. Reste à comprendre comment une performance bloque une compétence (au sens de Chomsky). »

          Les programmeurs en IA sont confrontés au problème du test d’arrêt. Je n’y connais rien en info, guère plus en logique formelle, mais je sais qu’il y a une correspondance preuve-programme. À quelle preuve correspond le test d’arrêt d’un programme ?

          Je n’ai que la réponse de Wikipédia** : « l’absurde (appelé « bottom » : ⊥ ) correspond à une instruction d’échappement, d’exception, ou à un programme qui ne finit pas (un terme non typable dans le lambda-calcul simplement typé) »

          Qu’est-ce qui protège les IA du cancer logorrhéïque ? Pourquoi la suite de Fibonacci s’arrête-t-elle à 55 dans la croissance de la marguerite (question que Turing s’est certainement posé !) ?

          Remarque : De mémoire, Cédric Villani parle de cette tendance incestueuse des IA dans sa conférence de Damgan***.
          .

          (*) figure dans « Apologie du Logos » (Hachette, 1990)

          (**) https://fr.wikipedia.org/wiki/Correspondance_de_Curry-Howard

          (***) https://www.youtube.com/watch?v=lASY63CLdSE

        2. Avatar de BasicRabbit en autopsy
          BasicRabbit en autopsy

          @timiota (suite)

          Je n’ai pas lu le bouquin de Hofstadter. Que dit-il de Gödel ? Quelque chose en rapport avec ce qui est écrit dans Wikipédia (je ne comprends rien à la partie « programme ») :

          « – le théorème d’incomplétude de Gödel qui dit qu’il y a des propositions qui sont indécidables correspond à un programme de réparation de fichiers ;
          – le théorème de complétude de Gödel correspond lui à un désassembleur interactif de programmes. »

        3. Avatar de BasicRabbit en autopsy
          BasicRabbit en autopsy

          @timiota (en rapport)

          https://www.pauljorion.com/blog/2025/05/25/ia-et-monde-davant-le-dilemme-dun-blog-comme-celui-ci/comment-page-1/#comment-1071204

          Hier soir sur la 5 il y avait la grande Librairie. J’y ai appris que Baudelaire était* bipolaire.

          (*) Un intervenant a fait remarquer qu’on avait le cancer mais qu’on était bipolaire ou schizophrène. Les troubles psychiques : troubles ontologiques ?

  5. Avatar de gaston
    gaston

    Cher Claude Roux,

    Le récit de votre « parcourt du combattant » est des plus passionnant, même pour le lecteur lambda non initié aux techniques de la programmation. Malgré l’utilisation d’un langage dont vous dites avoir « une connaissance sommaire », et des LLM les plus basiques votre réussite impressionne. Cela laisse imaginer le résultat qu’aurait été la même démarche avec les LLM les plus pointues.

    Il aurait été intéressant de nous dire le temps que vous avez consacré à ce travail.

    Dans une récente prédiction le patron d’Anthropic a prévu l’émergence de la première licorne unipersonnelle valorisée à un milliard de $ pour 2026. Votre démonstration apporte-t-elle un début de crédit à cette affirmation ?

    https://www.presse-citron.net/premiere-licorne-unipersonnelle-2026-ceo-anthropic-concurrent-chatgpt/

    1. Avatar de Claude Roux
      Claude Roux

      je vous remercie pour votre commentaire. J’ai passé environ 15 jours sur le développement de ce jeu. Sans une IA pour m’aider, je pense que le travail m’aurait pris au minimum 1 mois, sachant que je n’avais aucune expérience en JavaScript.

  6. Avatar de Stouf
    Stouf

    Il faut passer a un modèle agentique hiérarchisé. Mais je dirais que ça ne vaut pas la peine. Dans peu de temps ce type d’approche sera déjà obsolète… Va falloir se dépêcher pour inscrire son nom dans les livres d’histoire car bientôt, les nouveaux noms seront oX , ClaudeX ou leurs cousins… Carpe Diem… Et Amen.

    1. Avatar de timiota
      timiota

      Pas mal comme nom d’IA, « Carpe diem » et « Amen »…

  7. Avatar de Manuel Guérin
    Manuel Guérin

    Bonsoir Claude,
    Avez-vous ou allez-vous mener la même expérience avec une version payante de LLM ?

    1. Avatar de Claude Roux
      Claude Roux

      Le coût pour développer un tel jeu avec des modèles payant peut s’avérer exorbitant. Gemini 2.5 Flash est déjà en soi plutôt remarquable, et il est fort possible que j’aurais pu échapper à quelques itérations inutiles avec des modèles plus avancées. Mais fondamentalement, je voulais voir ce qu’un utilisateur pouvait faire avec les modèles accessibles aujourd’hui gratuitement et franchement, on peut faire déjà beaucoup.
      D’un autre côté, le fait de développer un jeu graphique réduit les capacités des modèles à corriger le code eux-mêmes, il nous faut être capable d’évaluer la jouabilité de notre côté en tant qu’humain à chaque étape de la création.
      La vraie clé de toute façon est qu’il faut savoir de façon assez précise ce que l’on veut pouvoir développer. C’est franchement une expérience très stimulante et je la conseille à tous ceux qui ont envie de faire plus avec les IA.

  8. Avatar de Khanard
    Khanard

    en dépit de tout le respect que je dois à @Claude Roux et dans le souci d’apporter ma contribution au débat qui anime ce blog depuis quelques temps au sujet des dramaturgies liées au génocide, crimes de guerres et autres frivolités (sarcastiquement vôtre) de ce genre il m’a parut intéressant de vous donner ce lien qui traite de ce sujet . Il m’a semblé que c’était nécessaire de porter un coup de projecteur sur ces notions .

    https://www.college-de-france.fr/fr/agenda/conferencier-invite/james-stewart/la-justice-des-vaincus-les-proces-pour-crimes-de-guerre-apres-la-premiere-guerre-mondiale

    https://youtu.be/Fj0KNj74w40

    https://youtu.be/jFBMM_zkFMc

    https://youtu.be/KsrVu8JcBoE

    J’espère que @Claude Roux me pardonnera cette digression.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Contact

Contactez Paul Jorion
https://twitter.com/PaulJorion

Commentaires récents

  1. @Hervey (suite) Thom et Grothendieck ne vont donc pas puiser la mathématique ni au ciel ni dans la terre, mais…

  2. Superbes photos. Il s’en dégage un sentiment de liberté. Ce qu’un régime, ne peut, ou n’a pu, enlever aux individus…

  3. @Hervey (suite) Pour moi Thom dit plus sobrement plus ou moins la même chose à la fin de SSM :…

Articles récents

Catégories

Archives

Tags

Allemagne Aristote BCE Bourse Brexit capitalisme ChatGPT Chine Coronavirus Covid-19 dette dette publique Donald Trump Emmanuel Macron Espagne Etats-Unis Europe extinction du genre humain FMI France Grands Modèles de Langage Grèce intelligence artificielle interdiction des paris sur les fluctuations de prix Italie Japon Joe Biden John Maynard Keynes Karl Marx LLM pandémie Portugal psychanalyse robotisation Royaume-Uni Russie réchauffement climatique Réfugiés Singularité spéculation Thomas Piketty Ukraine Vladimir Poutine zone euro « Le dernier qui s'en va éteint la lumière »

Meta