AI

ChatGPT - Programme von der künstlichen Intelligenz

6 Min. Lesezeit
Freitag, 24. Februar 2023

2302_ChatGPT_Programme_Screenshot_Chat_1

Nach den interessanten Beiträgen meiner hochgeschätzten Kollegin "Krissi" Kristina Preuer möchte ich mich heute mit einem weiteren Aspekt im Zusammenhang mit ChatGPT beginnen. Die Erzeugung von Code durch die Künstliche Intelligenz ist ein spannendes Thema. Was ist aber davon zu halten, kann der erzeugte Code wirklich was von ihm gefordert wurde? Kann uns die künstliche Intelligenz vielleicht noch weiter unterstützen?

Bitte nicht vergessen, das Erzeugen von Code durch die Künstliche Intelligenz wirft selbst wieder Fragen zum Copyright auf, dazu mehr auch im vorhergehenden Beitrag von Kristina.

Neben dem äußerst aristokratisch anmutenden Ansatz "von der" künstlichen Intelligenz als Programmierer zu sprechen, ist es eine eigene Herausforderung über diesen Ansatz selbst als Programmierer schon nur nachzudenken. Bisher wurde zumeist darüber spekuliert, dass die Roboter und Automationen "nur" einfache Jobs und wiederkehrende Tätigkeiten ersetzen können. Dies ist aber eine kreative Tätigkeit – geht das überhaupt?

Als ich gleich zu Beginn des ChatGPT-Hypes ausprobieren wollte, dem Bot ein Spiel programmieren zu lassen, hat "Chatty" mich darauf hingewiesen, dass das Problem zu kompliziert sei und ich doch bitte selbst programmieren lernen sollte. Es gab mir gleich den Hinweis auf eine hilfreiche Library, die ich verwenden sollte. War nicht sehr hilfreich, aber dafür sehr lustig. Inzwischen hat sich das schon wieder verbessert.

Nutzloses oder nützliches

Was fällt einem als Erstes ein, wenn man ein Programm schreiben lassen will? Zumeist die nutzlosen Dinge: Spiele, kleinere Programme, lustige Ausgaben. ChatGPT kann aber viel mehr, das sagen zumindest viele im Internet.

Der Test war für mich erst mal ein Minesweeper-Programm. Ich bin Data Scientist, deshalb habe ich mich für die Programmiersprache Python entschieden. Da es für diese Sprache bereits viele Informationen im Internet gab und gibt, ist es erwartbar, dass "Chatty" ein guter Python-Programmierer sein könnte.

Das erste Ergebnis ist lauffähig und erzeugt wirklich Code für eine Funktion mit dem Namen "play_minesweeper". Leider ist das Programm nicht das Spiel selbst. Es ist sich dieser Tatsache sehr wohl bewusst, es schreibt dazu selbst:

"Dieser Code erstellt ein Brett mit der angegebenen Anzahl an Zeilen und Spalten und platziert die angegebene Anzahl an Minen zufällig auf dem Brett. Es aktualisiert dann das Brett, indem es die Anzahl der Minen in den umliegenden 8 Quadraten für jedes Quadrat zählt, das keine Mine enthält. Schließlich druckt es das aktualisierte Brett aus."

2302_ChatGPT_Programme_Screenshot_Program_1
Figure 1- Ein Spiel, das nicht spielen will

Erstes Fazit:

1)           Komplexer erzeugter Code ist lauffähig und macht das, was "Chatty" sagt 😀
2)           Code macht nicht exakt das, was ich verlangte 🥺

Der zweite Schritt ist dann einfach zu sagen: Ich möchte aber bitte spielen. Für "Chatty" kein Problem, es fügt ein paar, scheinbar richtige Zeilen ein (eine Spielschleife) und die Gewinn- bzw. Ende-Bedingung. E Voilá. Oder? 

2302_ChatGPT_Programme_Screenshot_Chat_2

Der Code ist wieder fehlerfrei, der Code ist lauffähig, aber es hat vergessen das Programm zu starten. Das ist eigentlich nicht schwierig, aber schon essenziell. Zusätzlich ist ein grober Fehler enthalten, das Spiel ist so programmiert, dass es von einem unbekannten Minenfeld ausgeht (also "?") auf den leeren Feldern stehen. Erst durch das Betreten eines Feldes wird der Status geprüft.

Es fehlen die grundsätzliche Initialisierung des begehbaren Feldes und die Logik, was genau beim Betreten passieren soll, also welche Felder aufgedeckt werden sollen. Eine essenzielle Logik fehlt also, diese komplexe Tatsache ist dem Chatbot nicht mitgeteilt worden und es fehlt ihm daher auch in der Antwort. Das Spiel ist also grundsätzlich nutzlos. Leider.

2302_ChatGPT_Programme_Screenshot_Program_2
Figure 2- Ein etwas fades Spiel

Das Programm zeigt einen das Spielfeld vor (!) dem ersten Zug und man hat nach dem ersten Zug immer gewonnen, wenn man nicht bewusst auf eine Miene tritt.

Was kann man daraus lernen?

Das Modell kann sehr viel, es ist jedoch sehr allgemein gebildet. Es kann viele verschiedene Dinge verbinden, kann aber darüber hinaus keine komplexen Tatsachen für die Programmierung kombinieren. Noch nicht, würde ich sagen. Es ist nur eine Frage der Zeit, wie lange derartige Kombinationen dauern. Wenn man also die Aufgaben in sehr kleine Bereiche zerteilt, dann kann man rasch Code erzeugen, der dann in der Folge getestet und überarbeitet werden kann. Man beginnt damit nicht bei einem leeren Stand, sondern startet mit funktionsfähigen Codebausteinen.

Wieviel Mensch brauche ich noch, um zu programmieren?

Mindestens einen. Das war zugegebenermaßen eine einfache Antwort, aber man braucht jemanden der zumindest testet, ob die Komplexität erfasst wurde und ob das Problem gelöst wurde. Das sollte der User selbst auch können, bei großen Projekten ist das schon nicht mehr so leicht. Man stelle sich vor, man lässt eine ganze ERP - Suite von Chatty programmieren. Das geht im ersten Schritt sicherlich nicht, in kleineren Schritten wäre das denkbar. Man muss aber viel testen und prüfen, ob die Vorgänge richtig sind.

Warum funktioniert das mit Bildern, was macht das bei Code schwieriger

Das ist vielleicht schneller erklärt als es scheint. Der Code muss in sich komplexe Aufgaben erledigen können. Also beispielsweise bei langfristiger Speicherung auch in Datenbanken Daten ablegen und wieder abrufen. Dabei ist die zeitliche Komponente wohl die komplexeste. Andere Gründe sind vielleicht in legislativen Fragen (was muss ich wie machen) oder auch einfach nur in einer mehrdimensionalen Abhängigkeit von Vorgängen zu finden. D.h. die künstliche Intelligenz muss den Vorgang als mehrdimensional erkennen und dann auch als solches abfertigen lassen in einem Programm.

Das einfache Beispiel von oben ist das Spiel. In der ersten Version fehlt "ein Spiel". Es fehlt die Spielschleife. Erst nach der Präzision "ich möchte damit spielen" wird sie geliefert. Grundsätzlich hat es erst damit die Notwendigkeit einer "Game Loop" erkannt, hat diese halbwegs richtig implementiert, aber es fehlt die Verbindung von der Game Loop zum Spielziel. Die KI hat das Ergebnis sofort ausgegeben und dann gefragt "Wohin willst du gehen?" Sie nimmt das Ergebnis vorne weg und damit den Zweck oder die Dimension des Spiels heraus. Wenn man ihr dies erklären würde, könnte es vielleicht funktionieren. Das Problem müsste also - wie oben schon angedeutet - in viele kleinere Teilprobleme zerlegt werden.

Was kann ich nun damit machen?

Chatty kann sprechen und Texte mehr oder weniger fehlerfrei ausgeben. Dazu gab und gibt es schon genügend Beiträge. Im Detail hat es auch hier schon Schwierigkeiten von "erfundenen" und tatsächlichen Inhalten zu unterscheiden. Ganz besonders dort, wo es eigentlich wichtig ist, in den Quellenangaben beispielsweise. Es kann uns in Zukunft bei der Erzeugung von Dokumenten zur Beschreibung von Aufgaben, zum Requirements Engineering oder ähnlichen unterstützen und ist dort ein durchaus veritabler Assistent. Aber auch nicht mehr. Es muss das Erzeugnis geprüft werden und zwar von einer Person mit genügend Sachkenntnis, um die Ausgaben zu verifizieren.

Gleiches gilt für die Zukunft des Programmierens. Man kann die Programme erzeugen lassen. Nicht komplett und schon gar nicht unreflektiert. Man muss die Aufgaben aufteilen und eingängig testen. Möglicherweise eignen sich die zuvor erzeugten Dokumente dazu die notwendigen Tests zu implementieren. Auch die Tests selbst, Unit Tests beispielsweise, könnten so von ihm implementiert werden. Jeder Code muss jedoch (noch) von einer Person geprüft werden. Sei es als Programmierer, der den Code ansieht oder als Tester des Programms.

Zu den genannten Ansätzen haben wir auch einige Beiträge im Netz gefunden. Man kann ChatGPT Code reviewen lassen, Code optimieren lassen und – das finde ich am interessantesten – Code testen lassen. D.h. es schreibt dazu immer wieder den Code um oder auch neue Codestücke um die geforderten Aufgaben zu lösen. (Folgen Sie bspw. folgendem Thread auf Twitter https://twitter.com/svpino/status/1624392842780241926)

Was bleibt uns zu sagen?

Naja, die Richtung stimmt. Es wird unsere Produktivität steigern. Vielleicht auch einige Ressourcen freispielen, um sich mehr um die Funktion des Produkts zu kümmern. Es birgt aber das Risiko, dass Fehler immer öfter vorkommen. Innovative Lösungen sind (noch) nicht zu erwarten. Chatty macht die Dinge deshalb, weil es sie bereits einmal „gesehen“ hat. Das muss man immer berücksichtigen.

 

---

 

Beispiel für ähnliche "Probleme" beim Codegenieren.
https://www.youtube.com/watch?v=lWG5qCDG3pQ

Beispiel für Code testen, Code generieren, Code prüfen, Code optimieren
https://twitter.com/svpino/status/1624392842780241926