Play Infinite Versions of AI-Generated Pong on the Go

il y a actuellement un beaucoup d’intérêt pour les outils d’IA conçus pour aider les programmeurs à écrire des logiciels. Copilot de GitHub et CodeWhisperer d’Amazon appliquent des techniques d’apprentissage en profondeur développées à l’origine pour générer du texte en langage naturel lors de son adaptation pour générer du code source. L’idée est que les programmeurs peuvent utiliser ces outils comme une sorte d’auto-complétion sur les stéroïdes, en utilisant des invites pour produire des extraits de code que les développeurs peuvent intégrer dans leur logiciel.

En regardant ces outils, je me suis demandé : pourrions-nous passer à l’étape suivante et sortir le programmeur humain de la boucle ? Pouvez-vous rédiger et mettre en œuvre un calendrier de travail à la demande en appuyant simplement sur un bouton ?

Dans mon travail quotidien, j’écris des logiciels embarqués pour les microcontrôleurs, j’ai donc immédiatement pensé à un appareil portable autonome comme plate-forme de démonstration. Un écran et quelques commandes permettraient à l’utilisateur de demander et d’interagir avec un logiciel simple généré par l’IA. Et c’est ainsi que l’idée de l’infini est née
Puer.

j’ai choisi
Puer Pour plusieurs raisons. Le gameplay est simple, expliqué de manière célèbre dans l’original Atari de 1972. Puer borne d’arcade dans un gain de concision : « Évitez de rater la balle pour obtenir le meilleur score. » Un bouton vers le haut et un bouton vers le bas suffisent pour jouer. Comme pour de nombreux jeux Atari classiques créés dans les années 1970 et 1980, Puer il peut être écrit en relativement peu de lignes de code et a été implémenté comme un exercice de programmation de très nombreuses fois. Cela signifie que les référentiels de code source ingérés en tant que données de formation pour les outils d’IA sont riches en Puer exemples, augmentant la probabilité d’obtenir des résultats viables.

J’ai utilisé un Raspberry Pi Pico W à 6 $ comme cœur de mon appareil portable; sa connexion sans fil intégrée permet une connectivité directe aux outils d’IA basés sur le cloud. Pour cela, j’ai monté un module d’affichage Pico LCD 1.14 à 9 $. Ses 240 x 135 pixels de couleur suffisent à Pueret le module intègre deux boutons et un micro joystick à deux axes.

Le langage de programmation que j’ai choisi pour Pico était MicroPython, à la fois parce que c’est ce que j’utilise normalement et parce que c’est un code de langage interprété qui peut être exécuté sans avoir besoin d’un compilateur basé sur PC. L’outil de codage AI que j’ai utilisé était OpenAI Codex. Le Codex OpenAI est accessible via une API qui répond aux requêtes au format HTTP à partir du Web, qui sont faciles à créer et à envoyer à l’aide des bibliothèques urequests et ujson disponibles pour MicroPython. L’utilisation de l’API OpenAI Codex est gratuite pendant la période bêta actuelle, mais l’inscription est obligatoire et les requêtes sont limitées à 20 par minute, toujours plus que suffisant pour accueillir même les plus grands fanatiques. Puer jockey.

Un écran LCD avec un joystick sur le côté gauche et deux boutons sur le côté droit, un microcontrôleur et un câble USB.
Seuls deux modules matériels sont nécessaires : un Rasperry Pi Pico W [bottom left] fournissant une puissance de calcul et une carte enfichable avec un affichage et des commandes simples [top left]. Rien de plus qu’un câble USB est nécessaire pour l’alimentation.Jacques Prévôt

L’étape suivante consistait à créer un programme conteneur. Ce programme est chargé de détecter lorsqu’une nouvelle version de Puer il est demandé en appuyant sur un bouton, et lorsqu’il le fait, il envoie un message au Codex OpenAI, reçoit les résultats et démarre le jeu. Le programme wrapper configure également une couche d’abstraction matérielle, qui gère la connexion physique entre le Pico et le module LCD/contrôle.

L’élément le plus critique de l’ensemble du projet a été de créer le message qui est transmis au Codex OpenAI chaque fois que nous voulons qu’il crache une nouvelle version de
Puer. Le drapeau est un morceau de texte brut avec le squelette le plus basique du code source : quelques lignes décrivant une structure commune à de nombreux jeux vidéo, à savoir une liste de bibliothèques que nous aimerions utiliser et un appel pour traiter des événements (tels que ), un appel pour mettre à jour l’état du jeu en fonction de ces événements et un appel pour afficher l’état mis à jour à l’écran.

Le code qui retourne produit un travail Puer Je joue environ 80% du temps.

La façon d’utiliser ces bibliothèques et de terminer les appels dépend de l’IA. La clé pour transformer cette structure générique en un
Puer game sont des commentaires intégrés, facultatifs dans le code source écrit par l’homme, très utiles pour l’invite. Les commentaires décrivent le gameplay dans un langage simple, par exemple : « Le jeu comprend les classes suivantes… Balle : Cette classe représente la balle. Il a une position, une vitesse et des attributs de débogage. [sic]. Pong : Cette classe représente le jeu lui-même. Il a deux pagaies et une balle. Il sait vérifier quand le match est terminé. » (Mon conteneur et mon code de requête sont disponibles sur Hackaday.io) (Allez sur Hackaday.io pour jouer à un nombre infini de mettreg jeux avec Raspberry Pi Pico W; mon contenant et mon code avis sont sur le site).

Ce qui revient de l’IA, c’est environ 300 lignes de code. Lors de mes premières tentatives, le code n’a pas montré le jeu car la version de la bibliothèque de tampons de trame MicroPython qui fonctionne avec mon module est différente des bibliothèques de tampons de trame sur lesquelles OpenAI Codex s’est entraîné. La solution consistait à ajouter les descriptions des méthodes utilisées par ma bibliothèque sous forme de commentaires rapides, par exemple : « def rectangle(self, x, y, w, h, c) ». Un autre problème était que de nombreux exemples de formation utilisaient des variables globales, alors que mon message initial définissait les variables comme des attributs étendus pour vivre dans des classes individuelles, ce qui est généralement une meilleure pratique. Finalement, j’ai dû abandonner, suivre le courant et déclarer mes variables comme globales.

Neuf exemples de captures d'écran
Les variations de pong créées par le codex OpenAI varient considérablement dans la taille et la couleur de la balle et de la raquette et dans la manière dont les scores sont affichés. Parfois, le code entraîne un jeu injouable, comme dans le coin inférieur droit où les palettes du joueur ont été placées les unes sur les autres.Jacques Prévôt

Le code qui revient de mon invite actuelle produit un viable
Puer Je joue environ 80% du temps. Parfois, le jeu ne fonctionne pas du tout et parfois il produit quelque chose qui tourne mais qui n’est pas tout à fait Puer, comme lorsque vous permettez aux palettes de se déplacer à gauche et à droite ainsi que de haut en bas. Parfois, ce sont deux joueurs humains et d’autres fois, vous jouez contre la machine. Comme cela n’est pas spécifié dans le drapeau, le Codex prend l’une ou l’autre option. Lorsque vous jouez contre la machine, il est toujours intéressant de voir comment Codex a implémenté cette partie de la logique du code.

Alors qui est l’auteur de ce code ? Il existe certainement des litiges juridiques découlant, par exemple, de la manière dont ce code doit être autorisé, car une grande partie de la suite de formation est basée sur un logiciel open source qui impose des conditions de licence spécifiques sur le code qui en est dérivé. Mais les licences et la propriété sont distinctes de la paternité, et concernant ce dernier, je pense que cela appartient au programmeur utilisant l’outil d’IA et vérifiant les résultats, comme ce serait le cas si vous créiez une œuvre avec un programme de peinture créé par une entreprise et utilisé leurs pinceaux et filtres.

Quant à mon projet, la prochaine étape consiste à rechercher des jeux plus complexes. Le tube d’arcade de 1986
Arkanoïde sur demande, quelqu’un ?

Source