Mein ChatGPT-Tagebuch, Teil 1 Einen Browser mit ChatGPT programmieren – geht das?

Von Mirco Lang Lesedauer: 5 min

Anbieter zum Thema

Jeder ist ein Entwickler! Ein Versprechen, dass weder WYSIWYG-Editoren noch No-Code-Plattformen wirklich einhalten konnten. Mal schauen, wie es an der AI-Front aussieht.

Erster Erfolg: Browser 1.0 auf Basis von wxPython.
Erster Erfolg: Browser 1.0 auf Basis von wxPython.
(Bild: Lang / ChatGPT)

Es gibt viele KI-basierte Helferlein für die Programmierung, allen voran GitHub Copilot und die zahlreichen OpenAI-Sprachmodelle – wobei der Copilot seit Kurzem selbst auch auf GPT-4 basiert. Das eine große Tool, das maßgeblich für den aktuellen KI-Hype verantwortlich ist, ist freilich ChatGPT. Der OpenAI-Playground mag mehr Optionen bieten, aber die Interaktion über eine Chat-Oberfläche ist halt schön intuitiv.

ChatGPT kann durchaus beim Programmieren helfen: Kleinere Aufgaben als Pair Programmer stemmt die App problemlos, schreibt einzelne Funktionen, korrigiert Syntax und hilft bei Fehlermeldungen. Selbst kleine Demo-Programme wie Taschenrechner lassen sich ohne Programmierkenntnisse basteln. Aber wie sieht es abseits von Demos und Fingerübungen aus?

Ich wollte wissen, ob sich allein mit ChatGPT richtige Anwendungen erschaffen lassen und habe mich auf ein Experiment eingelassen. Nun, so ganz „allein“, den Zahn muss ich gleich ziehen, geht hier nichts: Es müssen schon ein paar Grundkenntnisse in der Entwicklung vorhanden sein, etwa was es mit Bibliotheken auf sich hat und wie solche eingebunden werden. Ansonsten lassen sich kaum plausible Aufgaben für ChatGPT formulieren, insbesondere bei Fehlermeldungen – und die hagelt es!

Ein, zwei Zeilen Code sollte man in seinem Leben ebenfalls schon mal gesehen haben – ChatGPT vergisst etwa gerne mal einzelne Zeilen am Ende und da hilft es ungemein, so etwas erkennen zu können. Aber wirkliche Syntax- und Struktur-Kenntnisse der Sprache sollten nicht erforderlich sein.

Projekt Browser

Nicht, dass die Welt noch einen Webbrowser bräuchte, aber als Projekt bestens geeignet: Es gibt klare Anforderungen, typische Features und letztlich viele Browser-Funktionalitäten bereits über irgendwelche Bibliotheken.

Das Ziel meines Experiments ist selbstredend keine Firefox-Konkurrenz – der mit rund 21 Millionen Zeilen Code nicht gerade übersichtlich ist. Vielmehr soll es ein Basis-Browser mit folgenden Features werden:

  • Aufrufen von URLs
  • Rendern von URLs
  • Chronik mit Vor- und Zurück-Navigation
  • Tabs
  • Favoriten
  • Statusanzeige
  • Sessions
  • Basis: Python

Als Zeitlimit habe ich mir rund zehn Stunden vorgenommen – vermutlich ein wenig knapp. Meine Erwartungshaltung: mittelmäßig hoffnungsvoll! Nach einigem Überlegen und dem kleinen Taschenrechnerprojekt konnte ich mir aber durchaus vorstellen, dass irgendetwas Brauchbares herauskommt.

Mit der Erwartungshaltung, dass die Reise holprig werden könnte, sollte ich nicht ganz falsch liegen. Aber so viel vorweg: Ich komme irgendwo an und auf dem Weg gibt es allerhand zu lernen. Interessanterweise nicht nur über KI und ChatGPT, sondern vor allem über Python.

Schwieriger Anfang

Um nicht ständig zu erwähnen, dass ich Python-Code haben möchte, habe ich ChatGPT zunächst zum Python-Entwickler befördert:

act as a python developer

Das macht die Antworten zwar nicht cleverer, aber zumindest bleibt ChatGPT so die ganze Zeit im Python-Kontext.

ChatGPT ist ja nicht dumm, also hieß mein erster Auftrag schlicht:

write a very basic web browser that can just show a given url, maybe using tkinter

Der tkinter-Vorschlag rührt schlicht daher, dass die Bibliothek beim Taschenrechner gute Dienste geleistet hat. Und zunächst funktioniert das auch, der produzierte Code liefert ein Fenster mit Eingabefeld für die URL und einen Go-Button – wie gewünscht.

Problem: Aus tkinter wird das Modul webbrowser genutzt. Das klingt vernünftig, aber dieses Modul öffnet die angegebene URL lediglich im Standard-Browser des Systems. Nach einer Beschwerde beim KI-Kollegen wird das Modul gewechselt, nun darf tkinter-text ran – und lädt tatsächlich die gewünschte URL ins Fenster. Problem: Es wird nur der HTML-Quelltext angezeigt.

Schon jetzt wird klar, dass ChatGPT übermittelte Prompts – natürlich – sehr wörtlich nimmt. Für mich ist es selbstverständlich, dass ein Webbrowser HTML-Quelltext rendert. ChatGPT reagiert zwar wie selbstverständlich auf den Trigger „web browser“, aber eben auf rein formaler Ebene und verwendet daher die richtigen Module mit passenden Namen und Aufgaben, aber nicht die für Menschen „richtigen“ Optionen und Details.

Egal – eine kurze Bitte, den Quelltext zu rendern sollte doch genügen, oder? Falsch gedacht. Zunächst sieht es noch gut aus, ChatGPT schlägt das Paket „tkinterhtml“ vor, das Widgets für tkinter spendiert, und importiert von dort „HTMLLabel“ zum Rendern. Leider bekomme ich ausschließlich Import-Fehler und miese Ratschläge, bis ich dann nach einer Alternative via „tkhtml“ fragen muss.

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

Achtung: An dieser Stelle habe ich zum ersten Mal mit „Wissen“ eingegriffen. Bei den vielen Fehlermeldungen wollte ich doch lieber auf menschliches Wissen in Foren zurückgreifen und da fiel irgendwo das Stichwort tkhtml als Alternative.

Ob das eine gute Idee war, würde ich aber offenlassen: Zwar hat das tkhtml-Widget „HTMLScrolledText“ nun tatsächlich versucht, die Aufgabe zu erledigen, aber mehr als ein „Failed to load URL“ ist ihm nicht zu entlocken. Zwei konkrete Technologien habe ich ChatGPT zugeworfen, tkinter und tkhtml, und beide wollen partout nicht funktionieren.

Vielleicht sollte ich der KI mehr Spielraum geben? Ich frage also ganz offen nach einer Alternative und ChatGPT empfiehlt „Webview“, eine Bibliothek, die HTML-Seiten gerendert im Fenster anzeigen soll. Klingt wieder super, aber leider hat die KI nun keine Lust mehr auf den kompletten Code und liefert lediglich Demo-Snippets.

Nach einigem Hin und Her funktioniert hier einmal mehr mein Standard-Trick: Ich kopiere den letzten halbwegs funktionierenden Code für tkinter in den Prompt und bitte um Konvertierung in eine Webview-Version. Meistens funktionieren Anweisungen wie „keep this code and add …“ sehr gut, aber wenn nicht, einfach alles in den Prompt kopieren – ist notiert. Jedenfalls belästigt mich auch der Webview-Code lediglich mit Fehlermeldungen.

ChatGPTs mögliche Lösungswege beschränken sich auf unterschiedliche Formulierungen von „Aktualisiere Webview und achte auf korrekte Rechte“. Plattitüden hat der OpenAI-Onkel genauso drauf wie viele Foristen. Aber wie so oft findet sich der korrekte Hinweis doch noch: Wenn nichts funktioniert, soll ich es mit einer anderen Alternative probieren – wahlweise PyQt oder wxPython.

Erster Erfolg: Browser 1.0 auf Basis von wxPython.
Erster Erfolg: Browser 1.0 auf Basis von wxPython.
(Bild: Lang / ChatGPT)

Meine Wahl fällt auf wxPython und endlich kommt etwas Bewegung ins Spiel: Es funktioniert! Mit 48 sauber formatierten Code-Zeilen liefert ChatGPT einen Mini-Browser.

Ein guter Anfang und Zeit, die weiteren Features in einer nächsten Session anzugehen. Wobei, noch nicht ganz: Auf meinem Testsystem, einer seit vielleicht zwei Jahren laufenden Ubuntu-VM mit Version 22.04, funktioniert alles wunderbar. Auf einem frischen Ubuntu zeigt sich, dass wxPython ein ziemliches Biest sein kann.

Die Installation ist alles andere als einfach, da man das Tool über das System-Paketmanagement oder über pip installieren kann, es Abhängigkeiten und etliche Versionen gibt – das übliche Brimborium. Und wenn dann soweit doch alles passt, muss auch noch das Python-Wheel erstellt werden – ein Prozess, der in meiner neuen Test-VM nun schon seit über einer Stunde läuft (und letztlich dreimal wird laufen müssen – so viel zur Zeitplanung).

ChatGPT rückt zwar meistens Informationen zu Abhängigkeiten und Installationen heraus, aber auch das ist ein Punkt, der auf die Liste der Learnings gehört: Man sollte halbwegs geübt im Umgang mit Linux-Fehlermeldungen sein. Zumal die KI bekanntermaßen auf älteren Daten beruht und Tipps zu Versionen und Abhängigkeiten oft entsprechend wenig hilfreich sind.

So geht es weiter: Seitenverlauf und Tabbed Browsing

In der nächsten Runde wird es noch ein wenig spannender: Geplant sind nämlich nicht nur eine schnörkellos funktionierende Navigation in der Chronik der besuchten Seiten, sondern auch der Versuch, Tabs umzusetzen. Ob sich dieser Aufwand wirklich lohnt? Oder werde ich das ganze Projekt doch abbrechen?

(ID:49532798)