Ich musste gerade erst nochmal meinen Beitrag KI-Bullshit (von April 2024!) lesen, um einschätzen zu können, wie sehr ich zurückrudern muss und in welchen Bereichen. Die Antwort: Es ist schwierig.
Dass KI Bullshit ist, ist seit jenem Beitrag mein Credo und hat stark beeinflusst, wie ich Themen rund um KI wahrnehme. So habe ich überzeugt für das „LLM-Verbot“ bei Codeberg gestimmt und boostete zustimmend Beiträge auf Mastodon, die sich gegen LLMs/KI richteten.
Gleichzeitig nahm ich wahr, dass von mir sehr geschätzte Personen wie Kristian „Isotopp“ Köhntopp eine ganz andere, sehr differenzierte Meinung zu LLMs haben. Gerade im Bezug auf das Schreiben von Code. Meine Eindrücke zur Code-Generierung stammten in erster Linie aus phpStorm und der dortigen „Inline Code Completion“, die irgendwie nie korrekt erraten hat, was ich gerade machen möchte. Und die normale Code Completion war ausreichend, für das, was ich von ihr erwarte.
Mir war aber auch bewusst, dass es nicht sehr sinnvoll ist, über etwas zu Meckern, was man nicht kennt. Also hatte ich mir vor einigen Monaten einen Account bei Chat GPT gemacht. Und wusste nicht, was ich ihn (sie? es?) hätte fragen sollen. Die Chatbox blieb mehrere Monate lang leer. Bis ich ein paar Grundideen zu einer Science Fiction Idee reingepackt habe, weil ich einfach wissen wollte, ob die Grundprämisse meiner Idee irgendwie „stimmen“ könnte.
Dabei war mir klar, dass ich das Ergebnis nicht hätte nachvollziehen können (daher das „Fiction“ in Sci-Fi), mir ging es aber darum, ob man etwas Glaubwürdiges hätte schreiben können. Also genau das, wofür LLMs ja gut sein sollen. Und ich muss sagen, ich war sehr positiv überrascht von dem Ergebnis. Danach blieb die Chatbox aber bis heute leer. Ich wusste einfach nicht, was ich sonst hätte fragen sollen. Wenn ich Fakten suche, besuche ich Google und möchte dort zu Webseiten gelangen, die mir das erklären, wonach ich gesucht habe. Das ist mein Vorgehen.
Von Claude oder Codex (oder wer weiß, was noch) geschriebener Code ist mir in der Zwischenzeit aber mehrfach untergekommen. Es ist irgendwie ein offenes Geheimnis, dass die Kollegen diese Tools bei der täglichen Arbeit nutzen. Ich weiß nicht genau wer, auch nicht genau wie und bei einem regelmäßigen Google Meet der KI-Interessierten habe ich mich immer ferngehalten. Ich weiß also auch nicht, was genau sie mit diesen Tools machen. Aber ich verurteile sie dafür schon ein bisschen – das muss ich zugeben – und will deshalb auch gar nicht so genau wissen, wer, wie und was. Konflikte mag ich nämlich auch nicht.
So, und nun habe ich am 1. November Anthropic 22,50 € für ein Abo überwiesen. Du kannst denen noch so oft durch VPN und Adresse in Deutschland mitteilen, dass du aus Deutschland kommst, ich muss die 25% Mehrwertsteuer für Schweden zahlen. Aber sei’s drum, ich hatte mich davon überzeugt, Claude endlich mal zu benutzen, dass das nun auch egal sein sollte.
In den letzten Tagen standen noch ein paar Urlaubstage an und so hielt ich das für die beste Gelegenheit, mich mal intensiver mit der „KI-Unterstützen Code-Generierung“ auseinander zu setzen. Schon seit ein paar Wochen hatte ich mich um ein privates Projekt gekümmert, welches wie Pocket ID funktionieren sollte, nur eben in PHP und nicht mit Passkeys als Zwang.
Das Projekt benutzte bereits Tools wie PHPUnit, PHP Coding Standards Fixer und PHPStan. Meine Meinung nach genügend Leitplanken für Claude, damit der generierte Code nicht zu sehr aus dem Ruder läuft. Alles natürlich mit Git versioniert, damit ich jede Änderung von Claude beobachten konnte. Bei mir lokal hatte ich zu dem pettyID getauften Projekt noch ein WordPress installiert und darin ein Open ID Connect – PlugIn. Damit funktionierte das Login auch bereits, es gab aber noch eine Menge @todo im Code.
Das war mein erster Prompt (inklusive versehentlichem Abdriften ins Deutsche):
Write the admin interface for OAuth clients in this project. The
controller should be under src/Controller/Admin/Oauth2ClientController.php.
All templates for that should unter templates/admin/*. Only users with
ROLE_ADMIN should be able to use this interface. It should consist of
listing, creating, editing and deleting OAuth2Clients. In the form,
use grant types and scopes from the oauth2 connect standard. The
route for the admin interface should be under /admin/oauth.clients/.
For now, we don't need a navigation item to that url. I will add
that later. Use a table list view to display all clients. Install
and use KnpLabs/KnpPaginatorBundle for the pagination.
Nach den ersten paar Prompts gab es ein paar Dinge, die ich in „meinem Code“ gerne anders habe (z.B. keine Konstruktoren in Controllern, statt dessen immer alles pro Action injecten) Dafür fügte ich ein paar Zeilen in die AGENTS.md ein und wies Claude an, den Code nach den neuen Regeln zu überarbeiten. Das ergab in der Folge dann Code, wie ich ihn auch geschrieben hätte.
Ich muss all denen, die schon mit Claude oder Codex gearbeitet haben, nicht erzählen wie es weiterging, sagen wir es so: unter https://id.olbertz.de/ läuft der Dienst nun seit ein paar Tagen und ich habe sowohl dieses Blog, als auch meine linkding- und Forgejo-Instanzen angebunden. Inklusive Passkeys, Dark Mode, Rate Limiting für Login und Zurücksetzungs-Anfragen und anderem „Schnick-Schnack“, denn ich jetzt schon wieder vergessen habe.
Seit meinem sehr vorsichtigem Beginn, bei dem ich wirklich jede Zeile Code überprüft habe, bin ich dann dazu über gegangen, die Liste der geänderten Dateien zu überfliegen. Ein wirkliches Code-Review steht aber noch aus. Deshalb ist dieser Blogpost hier auch noch kein komplettes Zurückrudern des KI-Bullshit Beitrages. Aber zumindest für die privaten Projekte, die ich seitdem mit Claude bearbeitet habe, kann ich sagen, dass ich die Hype-Kollegen voll und ganz verstehe.
Ich habe in den letzten sieben Tagen (es ist wirklich nicht länger her), so viel Spaß am Computer gehabt, wie schon lange nicht mehr. Ich erinnere mich noch an meine Schulzeit, wo ich Stunden um Stunden am Rechner saß und „irgendwas“ gemacht habe. Oder Zeit vor dem Fernseher an der PlayStation. Alles Dinge, die ich in den letzten Jahren nicht mehr mit dieser Begeisterung, wie jetzt in der letzten Woche gemacht habe. Ich sehe darin natürlich auch die Gefahr und werde beobachten, wie sich das weiterentwickelt.
Nach einer intensiven Session direkt nach Zurücksetzen des wöchentlichen Limits war ich plötzlich bei 28% meines neuen Limits und Claude warnte mich fürsorglich, dass meine Tokens nicht bis zum Ende der Woche reichen könnten. Das war mindestens so dramatisch, wie wenn mir einfällt, dass ich keine Milch mehr für das Frühstück am nächsten Morgen im Kühlschrank habe.
Die Möglichkeiten mit diesem (für mich neuem) Werkzeug sind wirklich gigantisch. Ich sinniere schon seit Jahren darüber, das WordPress hier aufzugeben und die ganze Seite auf Kirby umzustellen. Ich habe mir sogar schon eine Lizenz besorgt, um mir mehr Druck zu machen. So ein bisschen bin ich auch schon selbständig voran gekommen. Nach der Hilfe von Claude könnte ich jetzt fast schon online gehen – und dabei habe ich erst am Donnerstag damit angefangen. Das ist wirklich verrückt.
Und so muss ich einsehen, dass es einfach stimmt, wenn man sagt, dass man etwas selbst Ausprobieren muss. Deshalb habe ich ja am 1. November auch meine Kreditkarte gezückt. Mit dem Ergebnis habe ich allerdings nicht gerechnet. Und meine Gedanken dazu sind auch noch längst nicht beendet. Ich habe gestern ebenfalls noch mal den oben verlinkten Beitrag im Blog von Codeberg gelesen. Und musste trotz aller Begeisterung für den Fortschritt an meinem Homepage-Projekt, ertappt nicken. Die letzten Kapitel sind in dieser Geschichte noch nicht geschrieben.













