Spielen Sie unterwegs unbegrenzte Versionen von KI-generiertem Pong

Derzeit gibt es eine großes Interesse an KI-Tools, die Programmierern beim Schreiben von Software helfen sollen. Copilot von GitHub und CodeWhisperer von Amazon wenden Deep-Learning-Techniken an, die ursprünglich für die Generierung von Text in natürlicher Sprache entwickelt wurden, indem sie sie anpassen, um Quellcode zu generieren. Die Idee ist, dass Programmierer diese Tools als eine Art Auto-Vervollständigung auf Steroiden verwenden können, indem sie Eingabeaufforderungen verwenden, um Code-Blöcke zu produzieren, die Entwickler in ihre Software integrieren können.

Als ich mir diese Tools ansah, fragte ich mich: Können wir den nächsten Schritt machen und den menschlichen Programmierer aus der Schleife nehmen? Könnte ein Arbeitsprogramm mit nur einem Knopfdruck geschrieben und bei Bedarf bereitgestellt werden?

In meinem Hauptberuf schreibe ich eingebettete Software für Mikrocontroller, daher dachte ich sofort an ein eigenständiges Handheld-Gerät als Demoplattform. Ein Bildschirm und ein paar Steuerelemente würden es dem Benutzer ermöglichen, einfache KI-generierte Software anzufordern und mit ihr zu interagieren. Und so wurde die Idee des Unendlichen geboren
Pong.

Ich entschied mich
Pong wegen vielen Gründen. Das Gameplay ist einfach, berühmt erklärt auf Ataris Original 1972 Pong Spielhallenschrank in einem Triumph der Prägnanz: „Vermeide fehlenden Ball für Highscore.“ Eine Auf- und eine Ab-Taste sind alles, was zum Spielen benötigt wird. Wie bei vielen klassischen Atari-Spielen, die in den 1970er und 1980er Jahren entwickelt wurden, Pong kann in relativ wenigen Codezeilen geschrieben werden und wurde viele, viele Male als Programmierübung implementiert. Das bedeutet, dass die Quellcode-Repositories, die als Trainingsdaten für die KI-Tools aufgenommen werden, reich an Daten sind Pong Beispiele, was die Wahrscheinlichkeit erhöht, dass tragfähige Ergebnisse erzielt werden.

Ich habe einen US $ 6 Raspberry Pi Pico W als Herzstück meines Handheld-Geräts verwendet – seine integrierte drahtlose Verbindung ermöglicht eine direkte Verbindung zu Cloud-basierten KI-Tools. Dazu montierte ich ein $ 9 Pico LCD 1.14 Anzeigemodul. Seine 240 x 135 Farbpixel sind ausreichend für Pongund das Modul integriert zwei Tasten und einen zweiachsigen Mikrojoystick.

Lesen Sie auch  Wie Fitbit-, Apple Watch- und KI-Daten zum Schutz der öffentlichen Gesundheit beitragen könnten

Meine Wahl der Programmiersprache für den Pico war MicroPython, weil es das ist, was ich normalerweise verwende, und weil es sich um einen interpretierten Sprachcode handelt, der ohne die Notwendigkeit eines PC-basierten Compilers ausgeführt werden kann. Das von mir verwendete KI-Codierungstool war der OpenAI Codex. Auf den OpenAI-Codex kann über eine API zugegriffen werden, die auf Abfragen im HTTP-Format des Webs antwortet, die mithilfe der für MicroPython verfügbaren urequests- und ujson-Bibliotheken einfach zu erstellen und zu senden sind. Die Nutzung der OpenAI Codex-API ist während der aktuellen Beta-Phase kostenlos, aber eine Registrierung ist erforderlich, und Abfragen sind auf 20 pro Minute begrenzt – immer noch mehr als genug, um selbst die Fanatischsten unterzubringen Pong Jockey.

Ein LCD-Bildschirm mit einem Joystick auf der linken Seite und zwei Tasten auf der rechten Seite, einem Mikrocontroller und einem USB-Kabel.
Es werden nur zwei Hardwaremodule benötigt – ein Rasperry Pi Pico W [bottom left] das die Rechenleistung und eine Steckplatine mit Bildschirm und einfachen Bedienelementen liefert [top left]. Außer einem USB-Kabel zur Stromversorgung wird nichts weiter benötigt.James Provost

Der nächste Schritt bestand darin, ein Containerprogramm zu erstellen. Dieses Programm ist dafür verantwortlich, zu erkennen, wann eine neue Version von Pong wird über einen Tastendruck angefordert und sendet eine Eingabeaufforderung an den OpenAI-Codex, empfängt die Ergebnisse und startet das Spiel. Das Containerprogramm richtet auch eine Hardware-Abstraktionsschicht ein, die die physische Verbindung zwischen dem Pico und dem LCD-/Steuermodul handhabt.

Das kritischste Element des gesamten Projekts war die Erstellung der Eingabeaufforderung, die jedes Mal an den OpenAI-Codex übertragen wird, wenn wir möchten, dass er eine neue Version von ausspuckt
Pong. Die Eingabeaufforderung ist ein Stück einfacher Text mit dem geringsten Skelett des Quellcodes – ein paar Zeilen, die eine Struktur umreißen, die vielen Videospielen gemeinsam ist, nämlich eine Liste von Bibliotheken, die wir verwenden möchten, und ein Aufruf zum Verarbeiten von Ereignissen (z. B. Tastendrücken). ), einen Aufruf zum Aktualisieren des Spielstatus basierend auf diesen Ereignissen und einen Aufruf zum Anzeigen des aktualisierten Status auf dem Bildschirm.

Lesen Sie auch  Tim Cook sah sich schwierigen Fragen gegenüber, als das Zeugnis in der Gerichtsverhandlung von Epic gegen Apple zusammengefasst wurde

Der zurückkommende Code erzeugt eine funktionsfähige Pong Spiel etwa 80 Prozent der Zeit.

Wie diese Bibliotheken verwendet und die Aufrufe ausgefüllt werden, liegt bei der KI. Der Schlüssel zur Umwandlung dieser generischen Struktur in eine
Pong Spiel sind die eingebetteten Kommentare – optional im von Menschen geschriebenen Quellcode, wirklich nützlich in Eingabeaufforderungen. Die Kommentare beschreiben das Gameplay in einfachem Englisch – zum Beispiel: „Das Spiel umfasst die folgenden Klassen … Ball: Diese Klasse repräsentiert den Ball. Es hat eine Position, eine Geschwindigkeit und ein Debug-Attribut [sic]. Pong: Diese Klasse repräsentiert das Spiel selbst. Es hat zwei Schläger und einen Ball. Es weiß, wie man überprüft, wann das Spiel vorbei ist.“ (Mein Container und mein Eingabeaufforderungscode sind auf Hackaday.io verfügbar) (Gehen Sie zu Hackaday.io, um unendlich viele zu spielen Pong Spiele mit dem Raspberry Pi Pico W; mein Container und mein Eingabeaufforderungscode sind auf der Website.)

Was von der KI zurückkommt, sind etwa 300 Codezeilen. Bei meinen frühen Versuchen konnte der Code das Spiel nicht anzeigen, weil die Version der MicroPython-Framebuffer-Bibliothek, die mit meinem Modul funktioniert, sich von den Framebuffer-Bibliotheken unterscheidet, mit denen der OpenAI-Codex trainiert wurde. Die Lösung bestand darin, die Beschreibungen der Methoden, die meine Bibliothek verwendet, als Aufforderungskommentare hinzuzufügen, zum Beispiel: „def Rechteck(selbst, x, y, w, h, c)“. Ein weiteres Problem war, dass viele der Trainingsbeispiele globale Variablen verwendeten, während meine anfängliche Eingabeaufforderung Variablen als Attribute definierte, die innerhalb einzelner Klassen leben sollten, was im Allgemeinen eine bessere Vorgehensweise ist. Irgendwann musste ich aufgeben, mit dem Strom schwimmen und meine Variablen als global deklarieren.

Lesen Sie auch  Der letzte verbliebene Gletscher von Metro Vancouver verschwindet schnell

Neun Beispiel-Screenshots
Die vom OpenAI-Codex erstellten Variationen von Pong variieren stark in Ball- und Schlägergröße und -farbe sowie in der Art und Weise, wie Punktzahlen angezeigt werden. Manchmal führt der Code zu einem unspielbaren Spiel, wie z. B. in der unteren rechten Ecke, wo die Spieler-Paddles übereinander platziert wurden.James Provost

Der Code, der von meiner aktuellen Eingabeaufforderung zurückkommt, erzeugt eine funktionsfähige
Pong Spiel etwa 80 Prozent der Zeit. Manchmal funktioniert das Spiel überhaupt nicht, und manchmal produziert es etwas, das läuft, aber nicht ganz funktioniert Pong, z. B. wenn die Paddel zusätzlich nach oben und unten nach links und rechts bewegt werden können. Manchmal sind es zwei menschliche Spieler, und manchmal spielt man gegen die Maschine. Da es in der Eingabeaufforderung nicht angegeben ist, nimmt Codex eine der beiden Optionen. Wenn Sie gegen die Maschine spielen, ist es immer interessant zu sehen, wie Codex diesen Teil der Codelogik implementiert hat.

Wer ist also der Autor dieses Codes? Sicherlich gibt es Rechtsstreitigkeiten, beispielsweise darüber, wie dieser Code lizenziert werden soll, da ein Großteil des Trainingssets auf Open-Source-Software basiert, die dem daraus abgeleiteten Code bestimmte Lizenzbedingungen auferlegt. Aber Lizenzen und Eigentum sind von der Urheberschaft getrennt, und in Bezug auf letztere gehört sie meiner Meinung nach dem Programmierer, der das KI-Tool verwendet und die Ergebnisse überprüft, wie es der Fall wäre, wenn Sie Kunstwerke mit einem Malprogramm einer Firma erstellen und benutzten ihre Pinsel und Filter.

Was mein Projekt betrifft, besteht der nächste Schritt darin, komplexere Spiele zu betrachten. Der Arcade-Hit von 1986
Arkanoid auf Anfrage, irgendjemand?

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.