3 points par GN⁺ 2023-11-01 | 1 commentaires | Partager sur WhatsApp
  • Javi Lopez a créé Angry Pumpkins, un jeu de physique 2D dans le style d’Angry Birds, en générant le code avec GPT-4 et les graphismes avec Midjourney et DALL·E 3
  • Le résultat est jouable sur le web, mais ne fonctionne pas sur mobile ; il est aussi possible de créer ses propres niveaux en suivant les explications sous l’écran du jeu
  • Les graphismes ont été majoritairement produits par génération d’images par IA, puis certains sprites ont été retouchés dans Photoshop/Photopea pour supprimer l’arrière-plan et les recadrer afin de les adapter au jeu
  • Le code a démarré sur une base matter.js et p5.js, puis a été enrichi de manière itérative avec GPT-4 pour le mode de lancement, les collisions, les particules, la forme des monstres et la détection des impacts indirects
  • Le code complet fait environ 600 lignes ; il n’a pas écrit le code lui-même, mais il a fallu un processus itératif d’explication des erreurs et de correction, plutôt qu’obtenir un jeu terminé en un seul prompt

Résultat d’Angry Pumpkins

  • Angry Pumpkins est un jeu de physique 2D similaire à Angry Birds, réalisé avec GPT-4, Midjourney et DALL·E 3
  • Le jeu jouable est disponible sur Angry Pumpkins
    • Il ne fonctionne actuellement pas sur mobile
    • En lisant les explications sous l’écran du jeu, on peut voir comment créer et jouer ses propres niveaux
  • Javi Lopez estime qu’une nouvelle manière de créer uniquement à partir du langage naturel devient possible, et y voit un « moment historique »

Flux de création des graphismes et du code

  • Génération d’images et travail sur les sprites

    • DALL·E 3 a été utilisé pour générer l’écran d’accueil à l’ambiance Halloween, le logo « Angry Pumpkins » et l’écran titre avec bouton Play
    • Midjourney a servi à créer l’arrière-plan de cimetière, le terrain 2D, le personnage citrouille, le monstre vert, la caisse en bois, les os, les pierres et les planches en bois
    • Les objets ont ensuite été produits sous forme de « sprite stylesheets », puis recadrés et détourés dans Photoshop/Photopea
    • Les petits détails ont été complétés avec l’inpainting de Midjourney
  • Logique du jeu créée avec GPT-4

    • Le code source complet est publié dans sketch.js
    • Le code du jeu fait environ 600 lignes, et Javi Lopez précise n’avoir écrit aucune ligne lui-même
    • Le prompt de départ consistait à créer, avec matter.js et p5.js, un jeu simple où l’on tire une balle en réglant l’angle et la puissance à la souris pour frapper des caisses empilées avec une physique 2D
    • Il a ensuite demandé à plusieurs reprises un mode de lancement à la Angry Birds avec la souris, la correction de l’erreur Uncaught ReferenceError: Constraint is not defined, un effet de particules de torche, la gestion de monstres circulaires et la détection des impacts indirects

Les itérations comptent plus qu’un prompt unique

  • L’essentiel n’est pas de demander un jeu terminé d’un seul coup, mais de partir d’un comportement simple puis de l’étendre et de le corriger en continu
  • Chaque fois qu’un problème survenait, il décrivait clairement l’erreur afin que GPT-4 la corrige
  • Aujourd’hui, GPT-4 n’en est pas encore au stade où il peut générer un jeu complet à partir d’un seul prompt, mais l’idée qu’il sera possible à l’avenir de créer un jeu vidéo AAA sur simple demande transparaît déjà

1 commentaires

 
GN⁺ 2023-11-01
Avis sur Hacker News
  • J’ai travaillé comme PM sur Angry Birds, et c’est vraiment une excellente démo
    L’original utilisait Box2D et du scripting Lua, et bien sûr il fallait aussi créer les ennemis et les niveaux à la main
    Vu l’état actuel de la technologie, je ne m’attendrais pas à ce qu’elle produise un jeu à succès, et il y a de fortes chances d’être davantage limité par la technologie que par ses propres compétences
    Cela dit, pour valider rapidement des idées, faire des prototypes ou participer à des game jams, c’est un outil qui change la donne, et ça semble aussi être une bonne alternative à Scratch pour que des enfants puissent jouer avec leurs idées

  • J’ai fait une expérience similaire récemment, où je devais créer une API REST basique et un frontend CRUD avec deux frameworks que je ne connaissais pas bien, et j’ai laissé GPT-4 générer tout le code
    C’était probablement plus lent que de simplement lire la documentation et coder moi-même, et quelqu’un de familier avec ces frameworks aurait sans doute été bien plus rapide
    Les parties complexes demandaient des prompts très spécifiques et assez longs, et il a fallu environ 5 heures pour construire toute l’application, dont une bonne partie passée à attendre les sorties lentes de ChatGPT
    Avec un framework que je connais, ça aurait sans doute été bouclé en moins de 2 heures
    En revanche, c’était clairement utile pour vérifier si je faisais les choses correctement, comme si un expert disponible pour répondre à mes questions restait en attente
    C’était aussi pratique pour générer du code boilerplate bien formaté, mais je ne pense pas l’utiliser davantage qu’aujourd’hui dans le développement quotidien
    Dans la plupart des cas, il est plus rapide de bien apprendre le framework et d’écrire soi-même le code

    • Pour vérifier si c’était la bonne manière de faire, c’était étonnamment efficace
      Je me retrouve souvent à poser des questions du type : « Quelle structure de répertoires convient bien à un projet sur la plateforme {foo} ? » ou « Quelle est la manière idiomatique de faire {x} en {language y} ? »
      Comme il a vu énormément de projets dans plusieurs langages, cet avantage mène parfois à de très bonnes réponses à lui seul
    • Mon expérience est similaire
      Il faut toujours comprendre la programmation, on ne fait que taper du code en anglais naturel
    • Ce qu’on oublie souvent, c’est que la plupart des gens ne peuvent coder à leur niveau de productivité maximal que pendant quelques heures par jour
      Même si on passe 3 heures à superviser GPT-4 pendant qu’il écrit du code, il se peut qu’il nous reste encore, ce jour-là, 3 heures de productivité de codage maximale non « consommées »
    • Je me demande si vous utilisez GPT-4 via ChatGPT Plus ou via l’API
      Si c’est via l’API, je serais aussi curieux de savoir avec quels outils vous y accédez en général
    • Au lieu d’estimer le temps qu’il faudrait pour l’écrire soi-même, mieux vaut le mesurer réellement
      Le résultat pourrait vous surprendre
  • C’est plus intéressant que le déluge de posts du genre « J’ai créé une app iOS avec ChatGPT en 30 minutes ! »
    Ce genre de post n’a souvent pas beaucoup de valeur, parce qu’il peut s’agir d’un simple Hello World, alors qu’ici on a au moins un résultat fini à montrer, et c’est effectivement assez impressionnant
    Cela dit, les détails qu’il faut connaître sont le temps passé, le nombre de prompts, le nombre de réorientations nécessaires, et le niveau de maîtrise de l’auteur sur les technologies concernées
    Personnellement, j’ai trouvé que ChatGPT m’a beaucoup aidé dans plusieurs situations, mais la génération de code n’en faisait pas partie

    • https://twitter.com/javilopen/status/1719363669685916095 est lié au sujet
      Il y est dit que « le jeu ne fait que 600 lignes et je n’en ai écrit aucune, mais [le code du jeu] était la partie la plus difficile »
      Ce n’est pas un Hello World, mais difficile aussi de dire que c’est bien plus complexe qu’une liste de courses
      Malgré tout, le plus impressionnant reste qu’on puisse faire Angry Birds avec 600 lignes et quelques bibliothèques
    • J’ai déjà essayé de créer un site complet basé sur Flask, Python, HTML+JS+CSS et SQLite avec la génération de code de ChatGPT, et c’était bluffant
      Le code en production fait environ 5 000 lignes et tout fonctionne. Il n’y a pas beaucoup de trafic, mais c’est tout de même en environnement réel
      Comprendre les limites, mieux écrire ses prompts, repérer les risques d’hallucination et demander quels sont les dangers joue énormément
      C’était particulièrement utile sur des technologies que je maîtrisais mal. Je suis développeur Android, et je m’en sers pour créer des sites web, ce que je n’avais pas fait moi-même depuis une quinzaine d’années
      La partie la plus impressionnante, c’est l’aide sur l’administration système et l’exploitation serveur, avec une bonne capacité à déboguer les erreurs gunicorn
      Quand le projet grossit et que le modèle perd le contexte, il faut modifier le code généré, mais sur les gros projets, le principal obstacle reste la limite de longueur du contexte, qui devrait sans doute être atténuée bientôt
      Le site que j’ai créé récemment, https://cosmictrip.space/, a été écrit à environ 95 % par ChatGPT, et j’ai utilisé GPT-4 pour générer les prompts puis DALL-E pour créer les images spatiales
      C’est un site simple, mais je développe aussi en ce moment un jeu d’aventure IA ouvert basé sur GPT+DALL-E avec images et texte
      Si l’API DALL-E 3 sort, j’espère un lancement avant le 6 novembre, et là aussi plus de 95 % du code est écrit par ChatGPT
      La génération de code marche si bien que j’utilise l’API GPT-4 dans l’agent que je construis moi-même
      Avec les appels de fonctions, je crée des sous-tâches structurées, je fais écrire ce code par l’agent, et j’y ai aussi ajouté la possibilité d’inclure des fichiers comme contexte ou de dialoguer avec le code
      Ce n’est pas encore prêt à être rendu public, mais les capacités de génération de code de GPT-4 sont vraiment remarquables, même s’il faut de l’expérience en prompting
      Il y a peu de chances que le premier prompt soit bon, donc j’espère que l’agent que je développe réglera bien ce problème
      L’idée, c’est un tableau de style Jira/Kanban où l’on assigne des tâches à un codeur IA, un humain approuve ou corrige, et l’IA vérifie le travail pendant que les tickets passent automatiquement d’une colonne à l’autre
    • Il existe beaucoup de clones open source d’Angry Birds, donc ce n’est pas aussi impressionnant que ça en a l’air
      Un meilleur test décisif serait de programmer un nouveau jeu sans dizaines de modèles existants
    • Une autre question intéressante est : « Comment cela se comporte-t-il dans tous les autres cas qui n’apparaissent pas dans la vidéo ? »
    • Honnêtement, c’est difficile à croire
      GPT-4 est bon pour ce genre de travail, mais d’après mon expérience, il ne gère pas bien l’amélioration itérative
      Plus la conversation s’allonge, plus il perd le contexte précédent, et le code généré s’éloigne du comportement antérieur
      Par exemple, un simple « corrige ce bug » peut facilement aboutir à une solution qui casse d’autres fonctionnalités
      Le code du fil (1) semble présent dans le résultat final (2), et comme il se trouve tout en haut du code, cela pourrait vouloir dire qu’on a fait régénérer à ChatGPT des blocs de plus de 600 lignes à chaque itération
      C’est franchement suspect
      Définir quelque chose à la ligne 500 puis créer un nouveau Slingshot à la ligne 20 est très improbable, sauf instruction explicite en ce sens
      loadImage('stone2.png'); a aussi, par hasard, choisi le bon nom de fichier et la bonne taille de sprite ? Tout cela lui a été fourni dans le prompt avant qu’il écrive le code ? Il faut montrer les prompts réellement utilisés
      Un scénario bien plus plausible serait d’avoir généré les objets de classe de façon relativement indépendante, puis qu’un humain les ait assemblés dans un gros fichier, ait recopié l’ensemble en entrée, puis créé des prompts sur le code du genre « écris-moi une fonction comme celle-ci »
      Il n’est pas impossible que seuls des prompts aient été utilisés, comme l’affirmation le prétend, mais on a l’impression que la partie « j’ai tout fait coder » est fortement exagérée pour obtenir des likes et de la réputation
      Il semble plus probable qu’une partie du code ait été écrite ou assemblée à la main, puis fournie en entrée avant de demander « fais aussi ceci »
      Donc le résultat est peut-être « 100 % généré », mais pas de la manière que les gens imaginent
      Cette approche pousse GPT-4 à réécrire du code existant, mais sans demander explicitement ou ajouter des commentaires expliquant l’intention dans l’ensemble du code, il dérive progressivement des fonctionnalités précédentes
      Sans suite de tests, on ne remarque pas cette dérive subtile et des fonctionnalités finissent par casser
      Rien n’indique non plus que l’auteur ait fait ce travail
      En plus, cette personne a un intérêt direct à vendre des contenus de formation sur l’IA (4), donc elle a intérêt à paraître experte dans ce domaine, et lorsqu’on lui a posé des questions sur X, elle n’a pas fourni plus de détails, ni d’historique Git étape par étape, ni les prompts réellement utilisés
      Vu le manque de détails et le résultat difficile à croire, il est raisonnable de rester sceptique dans ce cas précis
      On pourrait peut-être produire ce type de résultat avec des modèles comme CodeLlama 34B ou GPT-3.5, mais pas de la manière décrite
      Je ne suis même pas certain que ce soit possible avec GPT-4. Les prompts paraissent trop vagues pour être plausibles (5)
      Cela dit, j’aimerais qu’on me contredise avec davantage de détails, et GPT-4 reste bel et bien un bon outil
      [1] - https://nitter.net/pic/orig/media%2FF9xoI8mXgAAn7v9.jpg
      [2] - https://bestaiprompts.art/angry-pumpkins/sketch.js

[3] - https://nitter.net/javilopen/status/1719363669685916095#m
[4] - https://javilopen.substack.com/
[5] - « Maintenant, rends les monstres circulaires, et fais très attention : applique la même technique qui existe déjà pour les rectangulaires concernant la mise à l’échelle et la zone de collision, et ne bâcle pas ça comme la dernière fois. »

  • En voyant son fils taper sans arrêt sur le spinner de chargement comme s’il était en colère, il a codé ce jeu avec GPT pendant un dimanche après-midi tranquille
    https://spinner.franzai.com/
    Il pense qu’un jeu de spinner de chargement interactif pourrait devenir un pattern UX intéressant
    Cela peut donner un retour à l’utilisateur en montrant que son action a un effet même pendant l’attente

    • C’est une approche intéressante de l’écran de chargement, et personnellement je pensais qu’il y aurait bien plus de jeux utilisant ce genre de fonctionnalité
      Bien sûr, plutôt du côté des jeux indé que des AAA
      Je me souvenais très bien avoir vu à l’époque une actu disant que ce brevet avait expiré, mais en vérifiant je me suis rendu compte que cet « à l’époque » remonte déjà à 8 ans
      https://www.eff.org/deeplinks/2015/12/loading-screen-game-pa...
    • Fait amusant : il existait un brevet qui a longtemps empêché le développement de mini-jeux de chargement
      Il appartenait, si je ne me trompe pas, à Namco, et on pouvait le voir dans Ridge Racer
    • Test de tapotement des doigts :
      https://psycnet.apa.org/record/2014-37068-023
    • Je me souviens de l’écran de chargement de Budokai 3 (PS2), où l’on faisait tourner le stick analogique frénétiquement pour voir grandir les Saibamen
  • Il n’y a désormais plus guère de doute sur le fait que l’IA va transformer le développement
    Rien que la semaine dernière, j’ai pu créer deux services de taille intermédiaire, représentant des milliers de lignes de code Python, alors que cela faisait plus de 10 ans que je n’avais pas utilisé Python
    Ce qui est vraiment impressionnant, c’est que le résultat est généralement meilleur que le code que j’aurais écrit moi-même
    Si vous avez besoin d’un beau README.md, il suffit de lui donner le code source avec les routes, les arguments CLI, etc., et il le génère
    Il peut aussi écrire les tests si vous le souhaitez. Cela n’a jamais été aussi facile pour les développeurs
    Pour la génération de code, GPT-4 surpasse totalement GPT-3.5
    GPT-3.5 s’en sort correctement pour copier si on lui donne des exemples très détaillés, mais GPT-4 donne davantage l’impression de « réfléchir »
    D’après mon expérience, le contexte 32k de GPT-4 échoue assez souvent
    Par exemple, si vous générez plus de 10 000 tokens, soit environ plus de 30 000 caractères, il faudra peut-être relancer plusieurs fois
    Et ChatGPT n’est pas une interface idéale pour tout ce qui n’est pas trivial
    Mieux vaut utiliser directement l’API ou quelque chose comme Azure OpenAI Chat Playground, qui permet le contexte 32k
    Petite autopromo : j’ai créé une app open source pour automatiser le travail répétitif de génération de prompts : https://github.com/codespin-ai/codespin-cli

  • Des investissements énormes ont été injectés dans les outils no-code ces 10 dernières années, et il est intéressant de voir qu’avec ChatGPT qui écrit désormais du code si bien, cela devient probablement plus rapide, plus flexible, et d’une ergonomie assez comparable pour les personnes ayant un certain sens technique mais ne codant pas
    J’ai récemment dû créer une app de démonstration avec Mendix pour consommer et publier des services REST, et il m’a fallu plusieurs jours pour comprendre les détails
    Faire la même chose avec ChatGPT, dans n’importe quel langage, par exemple en bash, aurait sans doute pris quelques minutes
    Le déploiement et la gestion des versions peuvent être largement pris en charge via du PaaS/IaaS sans gros niveau technique, surtout en comparaison du coût des plateformes no-code d’entreprise
    C’est peut-être un biais personnel, mais j’ai toujours détesté les plateformes no-code pour des tâches sérieuses, parce qu’elles me semblent encore plus pénibles, et pour des raisons similaires je n’aime pas non plus l’ORM ActiveRecord
    Malgré tout, le no-code semble bien parti pour devenir obsolète assez vite
    Quand il suffit de demander puis de faire un copier-coller, qui a encore envie de faire du drag-and-drop ?

    • Conceptuellement, cela ressemble à une solution presque parfaite
      Le no-code est simple mais rigide, tandis que le code est flexible mais fastidieux et sujet aux erreurs
      Exprimer rapidement ce que l’on veut en langage naturel pour obtenir du code, puis disposer de la souplesse nécessaire pour l’ajuster si ce code est propre, c’est très puissant
      Dans certains cas, comme ici, il n’est peut-être même pas nécessaire de l’ajuster
      La suite donne envie
    • Était-ce vraiment quelques minutes ? Ce serait bien d’essayer soi-même et d’apporter un retour réel plutôt qu’une supposition
      Cela ne devrait pas prendre bien longtemps
  • C’est un blanchiment statistique du plagiat, et c’est assez impressionnant
    Personnellement, je pense qu’empêcher la ruée vers l’or du blanchiment est une priorité juridique plus urgente que de faire semblant de stopper HAL tout en créant en pratique des douves de marché pour les grands vendeurs de pioches actuels

  • Il doit sûrement déjà exister des freelances ou travailleurs à distance qui ont augmenté leur productivité de 100x en utilisant correctement GPT-4 et les outils d’IA
    J’ai du mal à imaginer qu’un hack aussi puissant n’existe que dans le vide
    Quand on pense à ce qui sera possible dans deux ans, le génie est déjà sorti de la bouteille

    • Si c’est vraiment 100x, c’est peut-être qu’ils n’étaient pas si productifs au départ
      Si quelqu’un connaît des astuces pour multiplier sa productivité par « 100 » avec ChatGPT, j’aimerais bien qu’il les partage
  • Honnêtement, chaque fois que je vois ce genre de post, je m’inquiète de plus en plus pour mon employabilité
    Je n’ai pas de plan B et j’ai passé beaucoup trop de temps à apprendre l’ingénierie logicielle, donc la situation ne semble pas très rassurante

    • Franchement, ce point ne m’inquiète pas vraiment
      Comme d’autres l’ont dit, le jour où des gens ordinaires sauront rédiger des spécifications produit assez détaillées pour qu’un LLM fabrique le logiciel fonctionnel dont ils ont besoin, les programmeurs auront effectivement des soucis
      Mais cela ressemble déjà beaucoup à de la programmation
      Je pense que notre travail va changer. Nous passerons moins de temps à taper du code au clavier, et plus de temps à réfléchir à ce qu’il faut construire
      Nous avons même de bonnes chances de devenir plus précieux, parce que nous pourrons accomplir bien davantage
  • J’ai essayé d’obtenir une sprite sheet d’animation top-down de paladin pour un éventuel RPG, et voici la suite de l’échec : https://imgur.com/a/2uJyUT3
    En réalité, j’ai d’abord essayé des variantes en vue du dessus, et à la fin j’ai ajouté une vue de côté, juste par curiosité

    • J’avais fait des jetons de TTRPG avec Midjourney il y a quelque temps, et la formule qui marchait le mieux consistait à écrire aerial view
      top down fonctionnait parfois, mais c’était très instable
      Je me demande si DALL-E 3 a besoin du même type d’indications