3 Punkte von GN⁺ 2023-11-01 | 1 Kommentare | Auf WhatsApp teilen
  • Javi Lopez hat mit GPT-4 den Code erstellt und mit Midjourney sowie DALL·E 3 die Grafiken generiert, um Angry Pumpkins, ein 2D-Physikspiel im Stil von Angry Birds, zu entwickeln
  • Das Ergebnis ist im Web spielbar, funktioniert jedoch nicht auf Mobilgeräten; anhand der Anleitung unter dem Spielbildschirm kann man außerdem eigene Level erstellen
  • Die Grafiken wurden größtenteils per KI-Bildgenerierung erstellt; einige Sprites wurden mit Photoshop/Photopea durch Entfernen des Hintergrunds und Zuschneiden für das Spiel angepasst
  • Der Code begann auf Basis von matter.js und p5.js und wurde durch wiederholte Anpassungen mit GPT-4 um Abschussmechanik, Kollisionen, Partikel, Monsterformen und Erkennung indirekter Treffer erweitert
  • Der gesamte Code umfasst etwa 600 Zeilen; obwohl er den Code nicht selbst geschrieben hat, war statt eines fertigen Spiels aus einem einzigen Prompt ein iterativer Prozess nötig, in dem Fehler beschrieben und behoben wurden

Ergebnis: Angry Pumpkins

  • Angry Pumpkins ist ein 2D-Physikspiel ähnlich wie Angry Birds, das mithilfe von GPT-4, Midjourney und DALL·E 3 entwickelt wurde
  • Das spielbare Game ist unter Angry Pumpkins verfügbar
    • Derzeit funktioniert es nicht auf Mobilgeräten
    • Wer die Anleitung unter dem Spielbildschirm liest, erfährt, wie man eigene Level erstellt und spielt
  • Javi Lopez sieht darin eine neue Arbeitsweise, bei der sich Dinge allein mit natürlicher Sprache erschaffen lassen, und betrachtet dies als einen „historischen Moment“

Ablauf bei Grafik- und Code-Erstellung

  • Bildgenerierung und Sprite-Arbeit

    • DALL·E 3 wurde verwendet, um einen Startbildschirm mit Halloween-Atmosphäre, dem Logo „Angry Pumpkins“ und einem Play-Button zu erzeugen
    • Midjourney wurde genutzt, um Spielobjekte wie Friedhofshintergrund, 2D-Gelände, Kürbisfiguren, grüne Monster, Holzkisten, Knochen, Steine und Holzbretter zu erstellen
    • Die Objekte wurden als „sprite stylesheets“ erzeugt und anschließend mit Photoshop/Photopea zugeschnitten und vom Hintergrund befreit
    • Kleinere Details wurden mit Inpainting in Midjourney ergänzt
  • Mit GPT-4 erstellte Spiellogik

    • Der gesamte Quellcode ist in sketch.js öffentlich verfügbar
    • Der Spielcode umfasst etwa 600 Zeilen; Javi Lopez gibt an, keinen Code selbst geschrieben zu haben
    • Der Start-Prompt bestand darin, mit matter.js und p5.js ein einfaches Spiel zu erstellen, bei dem man mit der Maus Winkel und Kraft steuert, einen Ball abschießt und mit 2D-Physik gestapelte Kisten trifft
    • Anschließend bat er wiederholt um Anpassungen wie eine Maus-Abschussmechanik nach Art von Angry Birds, die Behebung des Fehlers Uncaught ReferenceError: Constraint is not defined, Partikeleffekte für Fackeln, die Behandlung runder Monster und die Erkennung indirekter Treffer

Iterative Korrekturen sind wichtiger als ein einzelner Prompt

  • Entscheidend war nicht, ein fertiges Spiel auf einmal anzufordern, sondern mit einer einfachen Funktionsbasis zu beginnen und diese fortlaufend zu erweitern und zu korrigieren
  • Bei Problemen beschrieb er die Fehler jeweils klar und ließ GPT-4 sie beheben
  • GPT-4 ist derzeit noch nicht so weit, ein komplettes Spiel aus einem einzigen Prompt zu erzeugen; zugleich steckt darin die Erwartung, dass man künftig allein per Anfrage AAA-Videospiele erstellen können wird

1 Kommentare

 
GN⁺ 2023-11-01
Meinungen auf Hacker News
  • Ich habe bei Angry Birds als PM gearbeitet, und das hier ist eine wirklich hervorragende Demo.
    Das Original nutzte Box2D und Lua-Scripting, und natürlich mussten Gegner und Levels von Hand erstellt werden.
    Ich erwarte nicht, dass man mit dem aktuellen Stand der Technik ein Hit-Spiel bauen wird; wahrscheinlich ist man eher durch die Grenzen der Technologie eingeschränkt als durch die eigenen Fähigkeiten.
    Trotzdem ist es für schnelle Ideenvalidierung, Prototypen und Game Jams ein Tool, das die Spielregeln verändert, und es sieht auch nach einer guten Scratch-Alternative aus, mit der Kinder mit ihren Ideen spielen können.

  • Ich habe kürzlich ein ähnliches Experiment gemacht, weil ich mit zwei Frameworks, die ich kaum kannte, eine einfache REST-API und ein CRUD-Frontend bauen musste, und habe GPT-4 den gesamten Code erzeugen lassen.
    Es war sehr wahrscheinlich langsamer, als es einfach selbst anhand der Dokumentation zu schreiben, und jemand, der mit den jeweiligen Frameworks vertraut ist, wäre wohl deutlich schneller gewesen.
    Für die komplexeren Teile waren sehr konkrete und lange Prompts nötig; für die gesamte App brauchte ich etwa 5 Stunden, wobei ein beträchtlicher Teil der Zeit damit verging, auf die langsame Ausgabe von ChatGPT zu warten.
    Mit einem vertrauten Framework hätte ich es vermutlich auch in unter 2 Stunden geschafft.
    Es war auf jeden Fall nützlich, um zu prüfen, ob ich es auf die richtige Weise mache; es fühlte sich an, als stünde ein Experte bereit, den man fragen kann.
    Es war auch gut darin, sauber formatierten Boilerplate-Code zu erzeugen, aber ich glaube nicht, dass ich es in der täglichen Entwicklung viel häufiger einsetzen werde als jetzt.
    In den meisten Fällen ist es schneller, das Framework gut zu lernen und den Code selbst zu schreiben.

    • Um zu prüfen, ob etwas die richtige Vorgehensweise ist, war es überraschend gut.
      Ich stelle häufig Fragen wie „Wie sieht eine gute Verzeichnisstruktur für ein Projekt auf der Plattform {foo} aus?“ oder „Wie macht man {x} in {language y} idiomatisch?“
      Es hat den Vorteil, viele Projekte in vielen Sprachen gesehen zu haben, was bei manchen Fragen schon für sich genommen zu ziemlich guten Antworten führt.
    • Meine Erfahrung ist ähnlich.
      Man muss Programmierung weiterhin verstehen; man tippt Code nur eben in natürlichem Englisch.
    • Was oft übersehen wird: Die meisten Menschen haben pro Tag nur ein paar Stunden, in denen sie mit maximaler Produktivität intensiv coden können.
      Selbst wenn man GPT-4 3 Stunden lang beim Codeschreiben betreut, können einem an diesem Tag noch 3 Stunden unverbrauchter Spitzen-Coding-Produktivität bleiben.
    • Ich frage mich, ob ihr GPT-4 über ChatGPT Plus oder über die API nutzt.
      Falls über die API: Mich würde auch interessieren, mit welchen Tools ihr normalerweise darauf zugreift.
    • Statt zu schätzen, wie lange es dauern würde, es selbst zu schreiben, sollte man es besser tatsächlich messen.
      Das Ergebnis könnte überraschend sein.
  • Interessanter als die Flut von Beiträgen à la „Mit ChatGPT in 30 Minuten eine iOS-App gebaut!“
    Solche Beiträge können am Ende nur ein simples Hello World gebaut haben und sind deshalb nicht besonders aussagekräftig; hier wird immerhin ein fertiges Ergebnis gezeigt, und es ist tatsächlich ziemlich beeindruckend
    Was man allerdings im Detail wissen müsste: die benötigte Zeit, die Anzahl der Prompts, wie viele Kurskorrekturen nötig waren und wie versiert die Person in den relevanten Technologien war
    Persönlich habe ich ChatGPT in vielen Situationen als große Hilfe erlebt, aber Codegenerierung gehörte nicht dazu

    • https://twitter.com/javilopen/status/1719363669685916095 ist dazu relevant
      Darin heißt es sinngemäß: „Das Spiel umfasst nur 600 Zeilen, und ich habe keine einzige davon geschrieben, aber [das Coden des Spiels] war der schwierigste Teil“
      Es ist kein Hello World, aber schwer zu sagen, dass es viel schwieriger als eine Einkaufsliste wäre
      Am beeindruckendsten ist trotzdem, dass man Angry Birds mit 600 Zeilen und ein paar Bibliotheken bauen kann
    • Ich habe mit ChatGPT-Codegenerierung eine komplette Website auf Basis von Flask, Python, HTML+JS+CSS und SQLite gebaut, und das war verblüffend
      Der produktiv laufende Code umfasst etwa 5.000 Zeilen und funktioniert vollständig. Es gibt nicht viel Traffic, aber es ist trotzdem eine Produktionsumgebung
      Die Grenzen zu kennen, Prompts besser zu schreiben, mögliche Halluzinationen zu erkennen und nach Risiken zu fragen, ist ein sehr großer Faktor
      Besonders gut war es bei Technologien, die ich kaum kenne. Ich bin Android-Entwickler und nutze es für den Bau von Websites, den ich seit etwa 15 Jahren nicht mehr selbst gemacht habe
      Am coolsten war die Hilfe bei Systemadministration und Serverbetrieb, und die Fähigkeit, gunicorn-Fehler zu debuggen, ist gut
      Wenn das Projekt größer wird und der Kontext verloren geht, muss man den ausgegebenen Code anpassen, aber bei größeren Projekten ist das größte Hindernis die Begrenzung der Kontextlänge, und die dürfte sich bald entschärfen
      Eine kürzlich gebaute Website ist https://cosmictrip.space/, bei der etwa 95 % des Codes von ChatGPT geschrieben wurden; ich generiere die Prompts mit GPT-4 und erstelle dann Weltraumbilder mit DALL-E
      Es ist eine einfache Website, aber ich baue derzeit auch ein offenes Bild-und-Text-AI-Adventure auf Basis von GPT+DALL-E
      Sobald die DALL-E-3-API erscheint, hoffe ich auf einen Release vor dem 6. November; auch bei diesem Adventure stammen über 95 % des Codes von ChatGPT
      Die Codegenerierung funktioniert so gut, dass ich die GPT-4-API in einem Agenten nutze, den ich selbst baue
      Per Function Calling erstelle ich strukturierte Teilaufgaben, lasse den Agenten den Code dafür schreiben und habe außerdem Funktionen eingebaut, um Dateien als Kontext einzubeziehen oder mit dem Code zu chatten
      Es ist noch nicht reif für eine Veröffentlichung, aber die Codegenerierungsfähigkeiten von GPT-4 sind wirklich großartig; man braucht allerdings Prompt-Erfahrung
      Der erste Prompt, den man schreibt, ist wahrscheinlich nicht gut, und ich hoffe, dass der Agent, den ich baue, genau dieses Problem gut löst
      Die Idee ist ein Board im Jira-/Kanban-Stil, auf dem man AI-Coder Aufgaben zuweist, Menschen freigeben und korrigieren, und Tickets automatisch die Spalten wechseln, während die AI die Arbeit überprüft
    • Es gibt viele Open-Source-Klone von Angry Birds, daher ist es nicht ganz so beeindruckend, wie es aussieht
      Ein neues Spiel zu programmieren, für das es nicht Dutzende vorhandener Templates gibt, wäre ein besserer Lackmustest
    • Eine weitere interessante Frage ist: „Wie verhält es sich in all den anderen Fällen, die im Video nicht zu sehen sind?“
    • Ehrlich gesagt fällt es mir etwas schwer, das zu glauben
      GPT-4 ist bei solchen Aufgaben zwar gut, aber meiner Erfahrung nach klappt iterative Verbesserung nicht besonders gut
      Je länger die Unterhaltung wird, desto mehr geht früherer Kontext verloren, und der generierte Code weicht vom bisherigen Verhalten ab
      Zum Beispiel kann „Bitte behebe diesen Bug“ leicht zu einer Lösung führen, die eine andere Funktion kaputtmacht
      Der Code aus dem Thread (1) scheint im Endergebnis (2) vorhanden zu sein; da er ganz oben im Code steht, könnte das bedeuten, dass ChatGPT wiederholt in Einheiten von über 600 Zeilen generieren sollte
      Das ist ziemlich verdächtig
      Dass eine neue Slingshot in Zeile 20 erzeugt wird, nachdem sie in Zeile 500 definiert wurde, ist sehr unwahrscheinlich, sofern man nicht ausdrücklich dazu auffordert
      Hat loadImage('stone2.png'); also zufällig den richtigen Dateinamen und die richtige Sprite-Größe gewählt? Wurde all das im Prompt bereitgestellt und daraus der Code geschrieben? Man müsste die tatsächlich verwendeten Prompts sehen
      Ein deutlich plausibleres Szenario ist, dass die Klassenobjekte relativ unabhängig erzeugt, dann von einem Menschen zu einer großen Datei zusammengesetzt wurden, anschließend alles als Eingabe hineinkopiert wurde und daraus Code-Prompts wie „Schreib diese Funktion“ entstanden
      Es ist nicht unmöglich, dass wirklich nur Prompts verwendet wurden, wie behauptet, aber es fühlt sich so an, als würde der Teil „ich habe alles coden lassen“ für Likes und Reputation stark übertrieben
      Wahrscheinlicher wirkt, dass ein Teil des Codes von Hand geschrieben oder zusammengesetzt und dann als Eingabe genutzt wurde, mit Prompts nach dem Muster „Mach auch das hier“
      Daher kann die Ausgabe zwar „100 % generiert“ sein, aber möglicherweise nicht auf die Art, die Leute annehmen
      Dieser Ansatz bringt GPT-4 dazu, bestehenden Code umzuschreiben, aber wenn man nicht ausdrücklich Kommentare anfordert oder hinzufügt, die die Absicht im gesamten Code erklären, driftet er allmählich von früherer Funktionalität weg
      Ohne Testsuite bemerkt man solche subtilen Abweichungen nicht, und Funktionen gehen kaputt
      Es gibt auch keinen Hinweis darauf, dass der Autor so etwas getan hätte
      Außerdem hat diese Person ein Eigeninteresse (4), weil sie AI-Schulungsmaterial verkauft; es ist also vorteilhaft, wie ein Experte auf diesem Gebiet zu wirken, und als sie auf X gefragt wurde, lieferte sie keine zusätzlichen Details, keine schrittweise Git-History und keine tatsächlich verwendeten Prompts
      Angesichts des Mangels an Details und des schwer glaubwürdigen Ergebnisses ist Skepsis in diesem Fall angemessen
      Mit Modellen wie CodeLlama 34B oder GPT-3.5 ließe sich ein Ergebnis dieser Art zwar erstellen, aber wohl nicht auf die beschriebene Weise
      Selbst bei GPT-4 bin ich nicht sicher, ob es möglich ist. Die Prompts wirken zu dürftig, um echt zu sein (5)
      Ich würde mich aber freuen, wenn das mit mehr Details widerlegt würde, und GPT-4 ist tatsächlich ein gutes Werkzeug
      [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] - „Mache die Monster jetzt rund, und sei sehr vorsichtig: Wende dieselbe Technik an, die es für die rechteckigen bereits gibt, was Skalierung und Kollisionsbereich betrifft, und vermassle es nicht wieder wie zuvor.“

  • Als ich sah, wie mein Sohn wütend immer wieder auf den Lade-Spinner tippte, haben GPT und ich an einem freien Sonntagnachmittag dieses Spiel programmiert
    https://spinner.franzai.com/
    Ich glaube, ein interaktives Lade-Spinner-Spiel könnte ein interessantes UX-Pattern sein
    Es kann Nutzer:innen auch während des Wartens das Feedback geben, dass ihr Verhalten einen Einfluss hat

    • Ein interessanter Ansatz für Ladebildschirme; persönlich hätte ich erwartet, dass viel mehr Spiele so eine Funktion nutzen
      Natürlich meine ich nicht AAA-Spiele, sondern eher Indie-Spiele
      Ich erinnere mich deutlich, die Nachricht gesehen zu haben, dass dieses Patent abgelaufen ist, aber wie sich herausstellt, war dieses „damals“ schon vor 8 Jahren
      https://www.eff.org/deeplinks/2015/12/loading-screen-game-pa...
    • Interessanter Fakt: Für Lade-Minispiele gab es ein Patent, das solche Entwicklungen verhindert hat
      Soweit ich weiß, gehörte es Namco, und man kann es in Ridge Racer sehen
    • Finger-Tapping-Test:
      https://psycnet.apa.org/record/2014-37068-023
    • Ich erinnere mich noch daran, wie ich im Ladebildschirm von Budokai 3 (PS2) wild den Analogstick gedreht und zugesehen habe, wie Saibamen gewachsen sind
  • Dass AI die Entwicklung verändert, steht inzwischen außer Frage
    Allein letzte Woche konnte ich zwei mittelgroße Services bauen, mit Tausenden Zeilen Python-Code, obwohl ich Python seit über 10 Jahren nicht mehr benutzt hatte
    Wirklich beeindruckend ist, dass es meistens besser ist als der Code, den ich selbst geschrieben hätte
    Wenn man ein schönes README.md braucht, gibt man ihm den Quellcode mit Routes, CLI-Argumenten usw., und es generiert eines
    Tests erstellt es auf Wunsch auch. Für Entwickler war es noch nie so einfach
    Bei der Codegenerierung ist GPT-4 GPT-3.5 haushoch überlegen
    GPT-3.5 kopiert ganz ordentlich, wenn man sehr engmaschige Beispiele vorgibt, aber GPT-4 fühlt sich so an, als würde es bis zu einem gewissen Grad „denken“
    Meiner Erfahrung nach scheitert der 32k-Kontext von GPT-4 ziemlich häufig
    Wenn es zum Beispiel mehr als 10.000 Tokens, grob über 30.000 Zeichen, generiert, muss man es unter Umständen ein paar Mal erneut versuchen lassen
    Außerdem ist ChatGPT keine ideale Oberfläche für nicht triviale Aufgaben
    Besser ist es, direkt die API zu verwenden oder etwas wie den Azure OpenAI Chat Playground, wo man den 32k-Kontext nutzen kann
    Mit etwas Eigenwerbung: Ich habe eine Open-Source-App gebaut, die die wiederholte Fleißarbeit beim Prompt-Erstellen automatisiert: https://github.com/codespin-ai/codespin-cli

  • Interessant ist, dass in den letzten 10 Jahren enorme Investitionen in No-Code-Tools geflossen sind, ChatGPT aber inzwischen so gut Code schreibt, dass es für Menschen mit technischem Gespür, die nicht programmieren, wahrscheinlich schneller, flexibler und bei der Usability fast vergleichbar wird
    Kürzlich musste ich mit Mendix eine Demo-App erstellen, die REST-Services konsumiert und bereitstellt, und es dauerte mehrere Tage, die Details herauszufinden
    Hätte ich dasselbe mit ChatGPT in irgendeiner Sprache gemacht, zum Beispiel in bash, wäre es vermutlich in ein paar Minuten erledigt gewesen
    Deployment und Versionsverwaltung lassen sich mit PaaS/IaaS ohne große technische Kompetenz lösen, erst recht im Vergleich zu den Kosten von Enterprise-No-Code-Plattformen
    Vielleicht ist das meine persönliche Voreingenommenheit, aber für ernsthafte Arbeit wirkten No-Code-Plattformen auf mich immer umständlicher, und ich habe sie deshalb nie gemocht; aus ähnlichen Gründen mag ich auch ActiveRecord-ORMs nicht
    Trotzdem sieht es so aus, als würde No-Code ziemlich bald altmodisch werden
    Wer will noch Drag-and-drop machen, wenn man einfach fragen und kopieren/einfügen kann?

    • Konzeptionell wirkt das fast wie eine perfekte Lösung
      No-Code ist einfach, aber starr; Programmieren ist flexibel, aber mühsam und fehleranfällig
      Wenn man in Worten beschreibt, was man will, schnell Code bekommt und dieser Code sauber ist, hat man die Flexibilität, ihn nach Bedarf anzupassen
      In manchen Fällen, wie in diesem Beispiel, ist vielleicht nicht einmal eine Anpassung nötig
      Ich bin gespannt, was kommt
    • Waren es wirklich nur ein paar Minuten? Es wäre gut, wenn du es selbst ausprobierst und echtes Feedback gibst, statt nur zu schätzen
      Es dürfte nicht lange dauern
  • Das ist statistische Plagiatswäsche und ziemlich raffiniert
    Persönlich halte ich es für rechtlich dringlicher, diesen Wasch-Goldrausch zu stoppen, als so zu tun, als würde man HAL aufhalten, während man den heutigen großen Schaufelverkäufern einen Marktgraben baut

  • Es gibt bestimmt Freelancer oder Remote-Arbeiter, die GPT-4 und AI-Tools richtig einsetzen und ihre Produktivität um das 100-Fache gesteigert haben
    Es ist schwer vorstellbar, dass solche genialen Tricks nur im luftleeren Raum existieren
    Wenn man darüber nachdenkt, was in 2 Jahren möglich sein wird, ist der Geist längst aus der Flasche

    • Bei 100x war man vorher vielleicht einfach nicht besonders produktiv
      Falls jemand Tipps kennt, wie man mit ChatGPT seine Produktivität um das „100-Fache“ steigert, bitte teilen
  • Ehrlich gesagt macht mir jedes Mal, wenn ich solche Beiträge sehe, meine Beschäftigungsfähigkeit zunehmend Sorgen
    Ich habe keinen Backup-Plan und viel zu viel Zeit damit verbracht, Software Engineering zu lernen; die Lage sieht nicht gut aus

    • Darüber mache ich mir ehrlich gesagt keine Sorgen
      Wie andere schon gesagt haben: Wenn normale Menschen Produktspezifikationen so detailliert schreiben können, dass ein LLM die benötigte funktionierende Software baut, dann bekommen Programmierer ein Problem
      Aber das klingt ziemlich ähnlich wie Programmieren
      Ich denke, unsere Arbeit wird sich verändern. Wir werden weniger Zeit damit verbringen, Code in die Tastatur zu tippen, und mehr Zeit damit, darüber nachzudenken, was gebaut werden soll
      Es ist sogar gut möglich, dass wir wertvoller werden, weil wir viel mehr schaffen können
  • Ich habe versucht, ein Top-down-Animations-Sprite-Sheet eines Paladins für ein mögliches RPG-Spiel zu bekommen, und der Fehlschlag ist hier zu sehen: https://imgur.com/a/2uJyUT3
    Die tatsächliche Reihenfolge war: Zuerst habe ich Top-down-Varianten ausprobiert, und ganz am Ende habe ich aus Neugier eine Seitenansicht eingegeben

    • Ich habe früher mit Midjourney TTRPG-Token erstellt, und am besten funktionierte es, aerial view zu schreiben
      top down war sehr unzuverlässig; manchmal klappte es, manchmal nicht
      Ich frage mich, ob DALL-E 3 dieselbe Art von Anleitung braucht