Erfahrungsbericht zu KI-gestützter Code-Generierung Ganze Anwendungen mit ChatGPT entwickeln

Von Mirco Lang 6 min Lesedauer

Wie gut lässt sich mit ChatGPT eigentlich wirklich entwickeln? Also nicht bloß eine kleine Funktion, sondern ein ganzes Programm? Und warum hat das Ganze etwas von Kleinkind-Erziehung?

Das Ergebnis einer einzelnen Anweisung – nicht einmal schlecht.
Das Ergebnis einer einzelnen Anweisung – nicht einmal schlecht.
(Bild: Lang)

Der aktuelle KI-Hype ist sicherlich nur der Anfang, zu spektakulär sind die vielen hübschen DALL-E- und vor allem Midjourney-Bilder, zu gut die Antworten einiger Sprachmodelle. Aber man stößt letztlich doch schnell an Grenzen.

Bis heute ist es mir nicht gelungen, ein Bild von Köln ohne Dom aus einer KI zu kitzeln. Ein Gesicht ohne Augen? Nein, offenbar verstehen DALL-E & Co. nicht, was „ohne“ bedeutet – logisch, denn ein Verstehen gibt es da nicht, allenfalls Assoziationen. Und dennoch lässt sich KI als künstlerisches Werkzeug verwenden.

Nun ist Kunst nichts Präzises, da gibt es kein hartes „richtig oder falsch“. Bei Code sieht das schon ganz anders aus. KIs sollten sich auf dem Feld der Programmierung dennoch deutlich wohler fühlen. Eine Programmiersprache wie Python ist im Grunde doch recht überschaubar – verglichen mit menschlicher Grammatik, Kunst oder visueller Wahrnehmung.

Es versteht sich von selbst, dass ChatGPT bei simplen Fragen helfen kann, etwa: „Wie deklariere ich Variablen in Python?“ Den Autor hat interessiert, ob ChatGPT auch ein komplettes Programm bauen kann – einen simplen Taschenrechner.

Ein solcher vereint nämlich alles Wichtige: Eine interaktive graphische Benutzerschnittstelle, Eingaben, Berechnungen und Ausgaben. Der Rechner sollte die Grundrechenarten beherrschen plus eine Log-Datei anlegen plus 19 Prozent von etwas berechnen können. Und das Ganze sollte am Ende als EXE-Datei unter Windows laufen. Auf in eine Schlacht mit einem hochbegabten Kleinkind.

ChatGPT, mach!

Am Ende werden es 50 Anweisungen/Prompts für ChatGPT werden und es beginnt damit, dass ich dem Bot quasi einen Kontext vorgegeben habe:

„Act as a python developer.“

Dieser Tipp stammt von einem selbsternannten Prompt-Experten – der seine Expertise auch zum Kauf anbietet. Die nächste Anweisung war dann sehr konkret, aber allgemein gehalten:

„Write a basic calculator with a simple gui“

Erste Reaktion: ChatGPT liefert ein halbes Skript – ähnlich, wie es auch beim Generieren von Marketing-Texten und dergleichen vorkommen kann. Dieses Verhalten sollte sich durch die ganze Session ziehen. Der simple Hinweis …

„This seems to be only part of the code“

… hat die KI dann aber veranlasst, auch den Rest zu zeigen.

Das Ergebnis einer einzelnen Anweisung – nicht einmal schlecht.
Das Ergebnis einer einzelnen Anweisung – nicht einmal schlecht.
(Bild: Lang)

Nichtdestotrotz erstaunlich: ChatGPT hat aus dem Stand einen lauffähigen „Taschenrechner“ gebaut – wenn auch nur mit Addition. Für den Bau der grafischen Nutzeroberfläche wird auf die Bibliothek Tkinter zurückgegriffen, worauf ChatGPT vor der Code-Ausgabe hinweist. Sehr nützlich, da diese zunächst installiert werden möchte.

Der Rechner ohne vorherigen „Rollenwechsel“.
Der Rechner ohne vorherigen „Rollenwechsel“.
(Bild: Lang)

Noch einmal kurz zur Aussage des Prompt-Experten: Die gleiche Aufgabe hat der Autor (später) nochmal in einem neuen Chat gestellt, ohne den Vorab-Kontext, dafür mit der Prompt-Ergänzung „… python based“. Das Ergebnis war: Sehr überraschend! Heraus kam nämlich ein Taschenrechner mit allen vier Grundrechenarten, realisiert mit nur 44 statt 77 Zeilen Code. Zudem ließ sich bei dieser Variante auch mit dem Ergebnis weiterrechnen, was bei Version 1 nicht ging.

Was lernen wir daraus? Vorsicht bei vermeintlichem Expertenwissen und ChatGPTs Launenhaftigkeit nicht unterschätzen – ein und derselbe Prompt bringt immer wieder andere Ergebnisse.

Finalisierung Version 1

Weiter ging es allerdings mit der ersten Version des Rechners, die nun die sonstigen Rechenarten lernen sollte:

„Add calculations for substraction, multiplication and division“

Dazu hatte ChatGPT scheinbar wenig Lust: Wieder kam nur ein halbes Skript, dieses Mal hat es ganze 7 Aufforderungen gebraucht, um die KI dazu zu bringen, die zweite Skripthälfte auszugeben – der ganze Code am Stück ließ sich ihr nicht entlocken.

Ja, es ist im Übrigen genauso lästig, einer KI etwas Zigmal sagen zu müssen, wie einem bockigen Kleinkind oder überforderten Kollegen. Naja, fast – ChatGPT entschuldigt sich zumindest ständig.

Da der Basisrechner nun fertig war, sollte er als EXE für Windows zur Verfügung stehen. Und auf die Frage …

„How to compile this as a windows executable“

… hat ChatGPT kurz und richtig geantwortet:

pip install pyinstaller
pyinstaller --onefile your_script_name.py

Bravo! Das mag eine triviale Aufgabe sein, aber wenn es ums Kompilieren geht, landet man meistens doch in der Fehlerhölle.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Erweiterung 1: Logging

Das Wichtigste war nun erledigt, Zeit für mehr Features. Ein simpler Log sollte her:

„Add a function to log all operations to a log file called "calcing.log"“

Logging funktioniert, der Rechner selbst ist kaputt.
Logging funktioniert, der Rechner selbst ist kaputt.
(Bild: Lang)

Nun hat es zunächst 8 Versuche gebraucht, bis ein komplettes Skript ausgegeben wurde – samt funktionierendem Logging! Leider hat ChatGPT, wie im Bild zu sehen, zwischenzeitlich den kompletten Rechner umgebaut. Die nächsten 3 Versuche hat ChatGPT wieder diesen Rechner gebaut – und zusätzlich immer nur einen Teil des Skripts ausgegeben.

Langsam wurde das Nervenkostüm doch merklich belastet. Aber gut, um den Bot wieder auf die richtige Spur zu bringen, hat der Autor eine weitere Anfrage gestellt:

„And again you used the wrong code.

Add the logging functionality to this previously produced code:

… code …“

Nur 3 Versuche später gab es endlich den kompletten Code. Allerdings funktionierte etwas mit dem Logging nicht richtig und es ging ein Dutzend Prompts lang ums Troubleshooting. Darunter hilfreichere Tipps, aber auch Ausflüge ins Absurde:

import randomdef shuffle_string(string):
   # Convert the string to a list of characters
   chars = list(string)

Äh, bitte? Irgendwann war wohl auch der Bot genervt und hat den Taschenrechner komplett ignoriert und stattdessen ein Progrämmchen zum Umbauen von Strings produziert. Aber es gab wie erwähnt auch sehr gute Hinweise:

import logging# configure logging
logging.basicConfig(filename='example.log', level=logging.DEBUG)
# log some messages
logging.debug('Debug message')
logging.info('Info message')
logging.warning('Warning message')
logging.error('Error message')
logging.critical('Critical message')
# close logging handlers
logging.shutdown()

Diese kleine Logging-Demo passte zwar nicht wirklich zur Anfrage und eigentlich sollte ChatGPT auch keine Lehrstunde veranstalten, sondern programmieren, aber im Rahmen des Bugfixings war das dennoch sehr nützlich.

Erweiterung 2: Mehrwertsteuer

Eine komplette Prozentrechnung wollte der Autor ChatGPT nicht abverlangen. Aber zumindest für die Berechnung der Mehrwertsteuer von 19 Prozent sollte es einen Button geben:

„Okay, i put the code together and everything works fine. Now add percentage calculation to the final code:

… code …“

Da Erfahrung klug macht, wurde der vorhandene Code direkt mit in den Prompt kopiert. Es folgte dennoch die zu vermeidende Odyssee:

  • 2 mal unvollständiger Code
  • Code zum der kleinsten positiven Integer
  • Code für einen abgespeckten Rechner
  • 3 mal unvollständiger Code
  • Code für irgendetwas völlig anderes
  • 2 mal unvollständiger Code
  • Code für eine Klasse „dog“ mit der Ausgabe „Woof woof!“
  • Code für eine Teilen-Funktion
  • 1 mal unvollständiger Code
  • Code für Faktorierung
  • 2 mal unvollständiger Code
  • Code zum Nummern-Raten
  • X mal unvollständiger Code
  • ChatGPT hat plötzlich den Context (Code) vergessen

Und dann endlich der Prompt, der zum Quasi-Erfolg führen sollte:

„Okay, you missed it too often. let's start from scratch. To the following code, add a button to calculate 19 percent of the given number. show the updated parts only.“

Taschenrechner mit Log und Mehrwertsteuer – Ziel erreicht.
Taschenrechner mit Log und Mehrwertsteuer – Ziel erreicht.
(Bild: Lang)

Wir merken, die Ansprache wird „menschlicher“ – einige Anfragen enthielten sogar ein „please“. Die Ausgabe war jedenfalls korrekt, es galt allerdings noch, die Code-Schnipsel an die richtigen Stellen im Skript zu kopieren.

Am Ende bleibt zu sagen: Das alles funktioniert ziemlich gut – mit viel Geduld und bei überschaubaren Projekten. Letztlich musste der Autor zwar ein klein wenig eingreifen und Code-Fragmente manuell in das Skript kopieren, aber ChatGPT hat es fast von allein geschafft.

Im Grunde kann man ChatGPT beinahe schon den No-Code-Plattformen zuordnen. Allerdings ist es nur eine Frage der Zeit, bis man an den Punkt kommt, da man doch verstehen muss, was ChatGPT da versucht zu tun.

Was es zu lernen gab? Vor allem, dass ChatGPT ziemlich unzuverlässig ist. Ständig werden nur Code-Teile ausgegeben, manchmal produzieren unterschiedliche Prompts identische Antworten und identische Prompts unterschiedliche, der Kontext wird immer wieder mal vergessen. Aber auch, dass es sich lohnt, Prompts präzise zu formulieren. Wenn man Features, Variablen und die GUI präzise beschreibt, wird ChatGPT diese „Wünsche“ berücksichtigen.

(ID:49425318)