Wie hilfreich ist KI beim Programmieren, wollte ich wissen. Das Setup: Abends eine Stunde, wenn das Kind zu Bett gegangen ist, unter Einsatz von lokalen und cloudbasierten LLMs. Was dabei herauskam? Ein kleiner Python-Service, ein hübsches Dashboard – und ein kleiner Vergleich zwischen LLMs, jenseits vom Hype.
Ich habe eigentlich schon lange das Bedürfnis, mal wieder richtig zu programmieren. Beruflich ist das inzwischen über zehn Jahre her. Klar, ich bin in Software-Teams geblieben, habe Produktverantwortung übernommen, war nah dran. Natürlich habe ich das Handwerk nie wirklich aufgegeben und in privaten Projekten in meiner Freizeit hier und da unterschiedliche Sachen programmiert und sogar zu einem großen bekannten Open-Source-Projekt was Kleines beigetragen (was mir ein entsprechendes Badge in Github einbrachte). Doch mal ehrlich: Mit Kleinkind ist selbst dafür kaum noch Zeit.
Lokale vs. cloudbasierte LLMs
Dann kam LLM. Oder sagen wir, der Moment, in dem die KI-Welle auch im Alltag spürbar wurde. Ich hatte die Sprachmodelle schon länger genutzt, vor allem für Texte, Bilder, Zusammenfassungen und auch für Prompt-Experimente. Aber irgendwann war der Gedanke da: Was passiert, wenn ich als Quasi-n00b LLMs zum Programmieren nutze? Einfach, um zu sehen, was geht, und weil es vielleicht Spaß macht.
Ich wollte wissen, wie gut die Unterstützung wirklich ist, gerade wenn man abends nur eine Stunde hat, wenn das Kind schläft und man selbst noch halbwegs wach ist. Mein Plan: ein kleiner Python-Service, der Fitnessdaten über Bluetooth LE ausliest und sie in einem Dashboard anzeigt. Nicht bis ins Detail poliert, kein Tutorial, eher ein persönlicher Test, wie weit man mit KI beim Coden kommt.
Zum Einsatz kamen
- Qwen 2.5 Coder (7b)
- DeepSeek Coder (6.7b)
- CodeLlama (7b)
Alle liefen lokal auf meinem Notebook. Dazu habe ich zwei Cloud-Modelle genutzt: ChatGPT und GitHub Copilot, das ebenfalls auf OpenAIs ChatGPT basiert. Als IDE wurde Visual Studio Code mit der Continue-Erweiterung für den LLM-Support verwendet.
Die Kurzfassung: Keines der lokalen Modelle ist so leistungsfähig wie die Cloud-Modelle. Das überrascht nicht. 7 Milliarden Parameter passen halbwegs performant auf einen Laptop. GPT-Modelle laufen mit Hunderten Milliarden. Aber trotzdem: Es ist erstaunlich, wie gut diese Open-Source-Modelle auf einem durchschnittlichen Rechner performen. Und den berühmten Turing-Test könnten sie mit zwei zugedrückten Augen bestehen, da Menschen auch viel Quatsch schreiben.
Wer ist hier der n00b?
Vorweg: Das ist rein anekdotenbasiert und keine empirische Untersuchung, sondern meine persönliche Meinung.
Und was können sie?
Meiner Meinung nach ist QWEN besser als DeepSeek, und DeepSeek wiederum besser als CODELAMA, zumindest wenn es darum geht, bestehenden Code zu erklären, ein paar Hinweise zu geben oder einfachen Code zu erzeugen. Für Boilerplate-Kram und zum Verstehen taugen sie also ganz gut. Aber für sauberes Refactoring oder komplexe Neuentwicklung sind sie eher zu limitiert. Das liegt auch daran, dass beispielsweise eine HTML-Datei mit (in meinem Fall) nur knapp 370 Zeilen bereits die Kontext-Länge überschreitet – so zumindest die Fehlermeldung, wenn man im Agent-Modus arbeiten möchte.
Der Agent-Modus lässt die KI eigenständig im Code arbeiten, statt nur auf vorher gestellte Fragen zu antworten, wie das im Chat-Modus der Fall ist. Schade, wenn das schon bei so kleinen Dateien nicht mehr funktioniert. Daher bleibt bei den lokalen Modellen nur der Chat für Rückfragen und Erklärungen oder aber das Auswählen eines kleinen Bereiches als Kontext für den Agenten. Es sei zudem angemerkt, dass von den getesteten LLMs nur QWEN den Agent-Modus unterstützt.
Copilot hat diese krasse Einschränkung hingegen nicht und spielt damit seine Stärken aus. Gerade bei UI-Designs oder sich wiederholenden Aufgaben ist der Agent-Modus sehr hilfreich und nimmt einem viel Arbeit ab. Manchmal reicht ein kurzer Prompt wie „Bau ein schönes Dashboard für die Daten und füge ein Diagramm für Echtzeitdarstellung ein“ und du bekommst eine hübsche Basis, wie ich sie in dieser kurzen Zeit nie besser hinbekommen hätte!
Problematisch wird es bei komplexen API-Anbindungen oder wenn man auf exakte Spezifikationen besteht. Dann hapert es schnell an der Genauigkeit. So habe ich beispielsweise per Prompt den Agenten darum gebeten, pyftms einzubinden (eine Python-Bibliothek, mit der sich Bluetooth-Fitnessgeräte über das FTMS-Profil auslesen und steuern lassen), und darüber dann den Trainings-Widerstand einzustellen. Hier halluzinierte sich dann der Agent allerdings eine nicht existierende Methode set_resistance_level() zurecht, statt die korrekte set_resistance_level() zu verwenden, wie sie in der Dokumentation beschrieben wird. Natürlich war dabei auch die Signatur nicht richtig. Und dabei hatte ich sogar die URL zur besagten Dokumentation der KI mitgegeben und sie hat es sogar abgerufen!
Ob ich das mit einem ausgeklügelten Prompt vielleicht besser hinbekommen hätte? Vielleicht. Aber dann kann ich auch selbst die Dokumentation nachschlagen und es selber machen.
Übrigens wird das auch zum Teil in der aktuellen Forschung so bestätigt:
Während KI-Modelle zwar in Testsituationen immer besser abschneiden, sich aber nach wie vor schwer mit den deutlich komplexeren Problemen echter Software-Projekte tun. [Quelle: t3n /Macht KI erfahrene Entwickler schneller?]
Und Halluzinationen?
Ja, definitiv. Die kleineren Modelle erfinden häufig Dinge. Aber auch die großen Cloud-Modelle sind davor nicht gefeit, wie bereits weiter oben beschrieben. Man muss nach wie vor prüfen, was da generiert wird. Blind übernehmen funktioniert oft nicht. Manchmal klingt es plausibel und ist trotzdem schlicht falsch.
Am Ende kostet es also sehr viel Zeit, die Halluzination als solche zu erkennen und den Code zu korrigieren. Sehr viel Zeit: Die erwähnte Studie spricht von einem zeitlichen Mehraufwand von bis zu 19 Prozent!
Fairerweise sei aber an dieser Stelle erwähnt, dass es auch Untersuchungen gibt, die von einer erheblichen Produktivitätssteigerung beim Programmieren mit KIs sprechen. Und genau diese Erfahrung konnte ich bei bestimmten Aufgaben (das Frontend z.B.) auch machen.
Fazit
LLMs ersetzen keine Entwickler. Ob das künftig der Fall sein wird – darüber streiten sich die Gelehrten noch. Aber sie können unterstützen. Mal wie ein Junior, mal wie ein erfahrener Assistent, und manchmal wie jemand, der Doku rät, statt sie zu lesen. Trotzdem: Sie helfen, gerade wenn Zeit knapp ist. Und sie senken die Schwelle, um wieder einzusteigen oder Neues auszuprobieren.
Zweite Erkenntnis: Ich brauche wohl einen besseren Rechner, da mich dann doch die Modelle mit Parametern von 13b und 30b neugierig machen und die Arbeitsgeschwindigkeit im lokalen Agent-Modus eher langsam ist im Vergleich zum Chat.
Warum mich die lokal ausgeführten LLMs so stark interessieren? Weil ich damit nicht jedes Prompt durch fremde Server jagen muss. Ich kann einfach experimentieren, ohne dass Code, Ideen oder halbfertige Gedanken irgendwo in einer Cloud landen. Es funktioniert zudem offline (z.B. im Zug in einem Funkloch). #Datenschutz
Ich bleibe jedenfalls motiviert genug, um nach Feierabend wieder ein paar Codezeilen zu schreiben und dabei die unterschiedlichen LLMs weiter auszuprobieren. Der für mich größte Mehrwert liegt darin, dass ich mich nicht mit Grundlagen einer noch für mich neuen Programmiersprache langweilen muss, sondern direkt tief in die spannende Problemlösung eintauchen kann.
PS: Ja, KI war mein Lektor. Irgendwer muss sich ja um die Grammatik kümmern. Oder wie mein kleiner Sohn immer sagt: Papa, jag es durch die KI [sic!]!
PPS: Weil wir schon beim Thema Kind sind: Es gibt eine schöne Maus-Folge, in der erklärt wird, wie die KI Texte generiert. Sehr sehenswert.
