ChatGPT-Tagebuch, Teil 2 Feature-Update für den KI-generierten Browser

Von Mirco Lang Lesedauer: 6 min

Anbieter zum Thema

Das Fundament steht, der mithilfe von ChatGPT programmierte Browser zeigt Webseiten korrekt an – jetzt geht es an die erweiterten Funktionen. Es geht fluffig los, doch die Hürden kommen schnell und heftig.

Der Browser samt Tabs.
Der Browser samt Tabs.
(Bild: Lang / ChatGPT)

Ganz kurz ein Blick zurück: Im ersten Teil des ChatGPT-Tagebuchs habe ich mein Browser-Projekt skizziert und habe mich über diverse Versuche mit GUI-Bibliotheken zu einer funktionierenden Grundversion gehangelt. Letztlich war es wxPython, das erste Erfolge brachte. Auf dem gut eingetretenen Entwicklungsrechner.

Auf einem frischen System wurde es dann aber zum Kampf: wxPython musste erst über pip kompiliert werden – und zwar unter Vorhandensein bestimmter Bibliotheken in bestimmten Versionen. Ansonsten hat man zwar ein laufendes wxPython, aber es fehlen Funktionen. Genau da möchte ich anknüpfen. Das wirft vielleicht die Frage auf, was diese Probleme mit ChatGPT zu tun haben, denn Kompilieren geht ohnehin ständig schief?!

Doch via KI ist es schlimmer. Zum einen basiert ChatGPT auf verhältnismäßig alten Daten und empfiehlt daher bisweilen veraltete Tools und interpretiert Fehlermeldungen falsch. Zum anderen würde man sich bei manueller Herangehensweise wohl näher mit Bibliotheken und deren Abhängigkeiten beschäftigen. Auf dem frischen System hat es mich letztlich mehrere Stunden gekostet, bis wxPython korrekt lief – drei Build-Vorgängen sei Dank.

Feature 1: Chronik

Für mich das am nächsten liegende Feature: Eine simple Chronik soll es ermöglichen, in den besuchten Seiten vor und zurück navigieren zu können. Auch hier soll es wieder nicht auf Firefox- und Chrome-Niveau hinauslaufen, mit Übersichten, Wiederherstellung, Suche und so weiter. Der Browser soll schlicht besuchte URLs speichern und zwei Buttons für die Vorwärts- und Rückwärtsnavigation bieten.

Meine Anweisung:

Okay, keep this code – it works! Add a history of visited urls and two buttons to navigate back and forth in the history.

Browser mit Navigation, hier im Mobile-Format
Browser mit Navigation, hier im Mobile-Format
(Bild: Lang / ChatGPT)

Der erste Part mag nach Verzweiflung klingen, fehlt eigentlich nur noch ein „Danke KI“ …, aber ChatGPT neigt nun mal dazu auch, funktionierenden Code zu vergessen oder neu und schlechter zu reproduzieren. So nervig der letzte Teil mit wxPython endete, so erfreulich beginnt die Feature-Reise: Die History-Navigation funktioniert auf Anhieb tadellos, genau wie gewünscht.

Wundervoll – meine Erwartungshaltung jetzt: Noch 30 Minuten Features befehlen, dann steht der Browser:

Okay, keep this code – it works! Add a function to have multiple tabs. New Tabs should be created with the hotkey "CTRL-T".

Feature 2: Tabs

30 Minuten später stecke ich aber nur in einem Haufen Fehlermeldungen. Nach mehrmaligen Code-Ausgaben hat ChatGPT tatsächlich einmal den vollständigen Code produziert, der beim Start jedoch nur einen Traceback ausgibt, abgeschlossen von:

AttributeError: 'WebBrowser' object has no attribute 'tabs'

Klingt nicht wild, die Fehlermeldung übergeben und umgehend kommt ein neuer Versuch. Mit dem neuen Code startet das Browser-Fenster nun wieder, aber es folgen weitere Fehlermeldungen, die allesamt mit „Gtk-CRITICAL“ und „Gtk-WARNING“ beginnen – klingt schon schlechter als ein vergessenes Attribut.

Bei der Fehlersuche wird ChatGPT wieder mal äußerst allgemein: Ich soll Versionen überprüfen und gegebenenfalls aktualisieren, die Installationspfade prüfen, fehlende Abhängigkeiten sowie die allgemeinen Systemvoraussetzungen. Eigentlich passt auch alles, jedoch führen die vorgeschlagenen Befehle zum Prüfen der Pfade („echo $GTK_PATH“) ins Leere! Es kostet einige Zeit, die richtigen Versionen/Dateien/Pfade zu finden, aber letztlich finden sich die nötigen Hinweise in der ChatGPT-Troubleshooting-Ausgabe.

Warum neben einem relevanten Vorschlag für die Bash gleich drei nicht relevante Lösungen für die Arduino-Plattform ausgespuckt wurden, bleibt wohl OpenAIs Geheimnis. Das spielt aber auch keine Rolle: Keine der Lösungen hilft. Da ich nicht schon wieder Stunden mit der Systemkonfiguration verbringen will, versuche ich es erstmal mit der zweiten Fehlermeldung, die mir den Tabs-Spaß verdirbt:

„WaylandCompositor requires eglBindWaylandDisplayWL, eglUnbindWaylandDisplayWL and eglQueryWaylandBuffer.
Nested Wayland compositor could not initialize EGL“

Wayland – war ja klar. Na gut, es gibt allerlei gute Gründe, warum einige Distributionen mit Gnome-Desktops auf Wayland als Display-Server setzen, persönlich neige ich aber nach wie vor zu X11 – also beachte ich die Meldung nicht sonderlich, melde mich ab und per X11-Session wieder an. Wie zu erwarten: Die Fehlermeldungen verschwinden.

Nun kommt wieder der schon bekannte, regelrecht typische KI-Irrsinn: Nochmals füttere ich ChatGPT mit den auch unter X11 vorkommenden Gtk-Fehlermeldungen – und plötzlich meint mein Helferlein eine ganz andere Ursache als Versionen und Abhängigkeiten auszumachen: Die Größe des Widgets (für die einzelnen Tabs) passe nicht zum Inhalt (den Webseiten).

ChatGPT setzt dafür nun eine initiale Größe. Man spürt es schon: Es wird plötzlich ziemlich detailliert, die Blicke zur Seite werden häufiger, aber letztlich verschwindet diese Fehlermeldung, Was aber bleibt: „AttributeError: 'WebBrowser' object has no attribute 'tabs'“, die erste Fehlermeldung nach der ersten Tabs-Code-Version. Und drei Stunden später bin ich wieder genau dort angelangt. Na toll.

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

Also steht eine Entscheidung an: Projekt abbrechen? Komplett neu via Qt ansetzen? Beides kommt nicht wirklich in Frage, schließlich muss sich das Ganze irgendwie auch rechnen – ganz gleich, ob es sich nun um ein Experiment für eine Artikelserie oder eine „echte“ Entwicklung handelt. Also Verzweiflungsmodus: Ich übergebe ChatGPT nochmals die Fehlermeldung – und was dann geschah, raubt einem… Nein, schon gut, auch ohne reißerischen Slogan ist die Überraschung groß: Die angebotene Lösung funktioniert!

Das Problem hätten erfahrene Python-Entwickler vermutlich ganz fix bemerkt. Hier zunächst der fehlerhafte Code-Block:

class WebBrowser(wx.Frame):
   def __init__(self, *args, **kwargs):
      super().__init__(*args, **kwargs)
      self.init_ui()
      self.tabs = []

Und hier der korrigierte Block:

class WebBrowser(wx.Frame):
   def __init__(self, *args, **kwargs):
      self.tabs = [] # Initialize tabs attribute
      super().__init__(*args, **kwargs)
      self.init_ui()

Die Initialisierung des Tabs-Attributs musste schlich vor den Aufruf von „self.init_ui()“ gesetzt werden, um tatsächlich bekannt zu sein. Ein nettes Detail: ChatGPT setzt gerne Kommentare in den Code – und das ganz allgemein ziemlich gut, besser als manch ein menschlicher Developer.

Warum ChatGPT solch „kleine“ Fehler einbaut, kann ich nur vermuten. In diesem Fall würde ich tippen, dass neue Funktionen teils schlicht an den bestehenden Code angehängt werden. Klar, ChatGPT versteht natürlich keinerlei Inhalte und Zusammenhänge. Eine Funktion zu schreiben: Kein Problem. Eine zweite anhängen? Auch nicht. Aber Funktionen irgendwo einzufügen und zu verweben, verlangt halt nach etwas mehr Kontext – der in diesem Fall über die Fehlermeldung gegeben wird.

Tabs, aber nicht in Fenstergröße
Tabs, aber nicht in Fenstergröße
(Bild: Lang / ChatGPT)

Dieser Fehler hat mich einige Stunden und eine Menge Nerven gekostet und die Tabs sind noch nicht wirklich gut. Wir erinnern uns an die Vergabe einer initialen Größe für das Widget. Tja, das hat zwar eine Fehlermeldung ausradiert, sorgt aber nun dafür, dass das Widget für die Webseitenanzeige auf diesen 800 x 600 Pixeln festhängt und sich nicht an die Größe des umgebenden Fensters anpasst – vorne im Bild zu sehen.

Der folgende Prompt beinhaltet wieder ein wenig Grundlagenkenntnis:

Okay, this works. But the notebook widget ist fixed at 800 x 600 – can this be relative to the window?

Der Browser samt Tabs.
Der Browser samt Tabs.
(Bild: Lang / ChatGPT)

Wer im Leben auch nur fünf Minuten mit HTML verbracht hat, dürfte um die Relevanz von relativen und absoluten Angaben wissen – daher hier auch genau diese Fragestellung. ChatGPT entfernt die absolute Größenangabe daraufhin wieder und fügt folgende Zeile hinzu:

self.panel.SetSizer(self.sizer)

Und schon füllen die Tabs immer das ganze Fenster.

Zum Schluss etwas Positives: Meine ursprüngliche Anfrage hat auch das Tastenkürzel STRG-T zum Erstellen neuer Tabs verlangt – und ChatGPT hat einen „AcceleratorTable“ mit unter anderem diesem Hotkey eingefügt:

# Set up accelerators
self.accel_table = wx.AcceleratorTable([
   (wx.ACCEL_CTRL, ord('T'), wx.ID_NEW),
   (wx.ACCEL_CTRL, ord('W'), wx.ID_CLOSE),
   (wx.ACCEL_CTRL, ord('Q'), wx.ID_EXIT)
   ])
self.SetAcceleratorTable(self.accel_table)

Über STRG+W und STRG+Q lassen sich zudem Tabs beziehungsweise Fenster schließen – nett!

Im nächsten Teil der Serie wird es weniger detailliert, die exakten Fallstricke von ChatGPT dürften bereits klar sein. Dem Browser fehlen aber noch einige Kleinigkeiten. Wie wird es also mit der Statusleiste, Favoriten und Sitzungen laufen?

(ID:49534542)