LLM-Codegenerierung kann zu geringerem Vertrauen führen
(jaysthoughts.com)- In letzter Zeit werden LLM-basierte Codegenerierung und entsprechende Werkzeuge unter Entwicklern zunehmend häufiger genutzt
- Durch automatisch erzeugten Code wachsen die Bedenken hinsichtlich Codequalität und Zuverlässigkeit
- Entwickler erleben aufgrund mangelnden Codeverständnisses und unzureichender Validierung eine steigende Schwierigkeit bei der Projektwartung
- Die zunehmende Nutzung nicht vertrauenswürdigen Codes wirkt sich auf das gesamte Software-Ökosystem aus
- Mit dem technischen Fortschritt wird die Notwendigkeit betont, Maßnahmen zur Sicherung der Zuverlässigkeit zu schaffen
Überblick
Jay behandelt in seinem Blog die Auswirkungen der jüngst aufgekommenen LLM-(Large Language Model)-basierten Codegenerierungstechnologie auf die Softwareentwicklung in der Praxis. Zwar steigern die Fortschritte dieser Werkzeuge die Entwicklungseffizienz, zugleich rücken jedoch Fragen der Zuverlässigkeit und Qualität des Codes in den Vordergrund.
Der Aufstieg der LLM-Codegenerierungstechnologie
- In der Entwicklungspraxis verbreiten sich Werkzeuge zur automatischen Codegenerierung mit LLMs rasant
- Bei der Umsetzung komplexer Funktionen oder repetitiver Codieraufgaben bieten sie hohe Produktivität
- Sie ermöglichen schnelle Prototypenerstellung und verringern die Hürde beim Erlernen neuer Sprachen
Zuverlässigkeitsprobleme
- Von LLMs erzeugter Code funktioniert nicht immer wie beabsichtigt
- Da Absicht und Entwurfslogik innerhalb des Codes unklar sein können, werden Verständnis und Validierung erschwert
- Wenn Review- und Testprozesse unzureichend sind, können unerwartete Bugs oder Schwachstellen entstehen
Projektwartung und Auswirkungen auf das Ökosystem
- Bei automatisch erzeugtem Code treten Probleme wie mangelnde Dokumentation und unzureichende Erklärungen auf
- Entwickler haben Schwierigkeiten, die Funktionsweise des Codes nachzuvollziehen, wodurch die Wartungskomplexität zunimmt
- Es besteht das Risiko, dass eine Kultur der Entwicklung zuverlässiger Software beschädigt wird
Fazit und Empfehlungen
- LLM-basierte Codegenerierung ist innovativ, doch die Sicherung der Zuverlässigkeit ist eine zentrale Aufgabe
- Bei der Einführung automatisch erzeugten Codes werden stärkere Validierung und systematische Code-Reviews besonders wichtig
- Langfristig ist es entscheidend, Standards zum Schutz des Vertrauens im Computing-Ökosystem zu schaffen
1 Kommentare
Hacker-News-Meinungen
archive.is-Link geteilt, funktioniert auch in alten Browsern, und JavaScript wird nur benötigt, um CloudSnare zu umgehen
Ein Freund von mir sagt immer: „Innovation geschieht mit der Geschwindigkeit des Vertrauens.“ Seit dem Auftauchen von GPT3 geht mir dieser Satz nicht mehr aus dem Kopf. Verifikation ist teuer, und Vertrauen ist ein zentrales Mittel, um diese Kosten zu senken. Aber ich weiß nicht, wie man bei LLMs Vertrauen aufbauen soll. Sie gehen sowohl mit Code als auch mit natürlicher Sprache unglaublich flüssig um, verirren sich dabei aber gleichzeitig in Richtungen, die man bei einem Menschen als böswillig ansehen würde
Ich habe dieses Thema in der Firma auf unerwartete Weise erlebt. Unter Druck auf schnelle Ergebnisse haben ein Kollege und ich ein großes Refactoring von mir gemergt, obwohl der PR noch provisorisch war. Danach trat in ungetestetem Code ein Bug auf. Beim Debuggen gab der Kollege zu, dass er gedacht hatte, ich hätte mit AI programmiert, und dass es ihn frustriert habe, den AI-erzeugten Code im Nachhinein verstehen zu müssen. Dabei war der Code sorgfältig von Hand geschrieben, und die Ursache des Bugs waren kleine Fehler beim simplen API-Änderungsprozess. Gerade diese Erfahrung hat es uns ermöglicht, Spannungen rund um Vertrauen ganz natürlich offenzulegen und konstruktiv darüber zu sprechen. Rückblickend war diese Erfahrung des Vertrauensaufbaus auf diese Weise bedeutsam, und in einem anderen Umfeld hätte sich das viel komplizierter verheddern können. Man hat das Gefühl, immer vorsichtig sein zu müssen
Ich verstehe die Grundannahme nicht so recht. Vertrauen darin, dass jemand guten Code schreibt, kommt doch aus realer Erfahrung damit, dass diese Person selbst programmiert hat und das Ergebnis gut war. Wenn jemand mit einem LLM arbeitet und trotzdem nur fehlerfreien Code liefert, vertraue ich ihm, und wenn jemand mit einem LLM arbeitet und Bugs liefert, dann eben nicht. Ich sehe nicht, was daran anders sein soll als bei reinem Denken im eigenen Kopf
Wir leben bereits in dieser Zeit. Ich sehe viel zu oft Formulierungen wie „Entschuldigung, dass ich das übersehen habe, du hast recht.“ Bestimmt 8 oder 9 von 10 Malen. Gleichzeitig sehe ich oft Leute, die von LLMs erzeugten Code gedankenlos per Copy-and-paste einfügen und dann wütend werden, wenn das Ergebnis hinter den Erwartungen zurückbleibt. Ehrlich gesagt ist mir das lieber. Etwas klar Kaputtes ist besser als etwas, das nur oberflächlich richtig aussieht
Frühere Abstraktionswerkzeuge reduzierten Komplexität und setzten dabei die „Korrektheit“ der jeweiligen Abstraktion grundsätzlich voraus. Natürlich waren sie nicht perfekt und hatten Bugs, aber das waren Implementierungsprobleme, keine wesentlichen Irrtümer. Sobald etwas gepatcht war, wurde es robuster. LLMs dagegen sind probabilistische Vorhersagemaschinen und liefern nur für gewisse Zeit eine annähernde Korrektheit. Was der Autor hier übersieht, ist, dass man auch mit unvollkommenen probabilistischen Agenten vertrauenswürdige deterministische Systeme bauen kann. Ein Beispiel: Ich vertraue einem Garbage-Collection-Tool nicht, weil ich dem Autor glaube, sondern weil das Tool selbst ausreichend getestet ist und nachweislich wie gewünscht funktioniert. In Zukunft dürfte Test-Driven Development noch wichtiger werden. Nicht Vertrauen, sondern Verifikation
Ablehnung gegenüber LLMs bringt nichts. Derzeit steigern LLMs die Produktivität von Entwicklern. Zumindest für weniger erfahrene Entwickler sind sie besonders nützlich. Werkzeuge, die die Produktivität stark erhöhen, werden nicht verschwinden, egal was irgendwer sagt. Selbst wenn große Ausfälle auftreten und wichtige Services wegen gravierender Bugs lange down sind, stoppt Technologie nicht, solange Produktivität zählt. Realistisch ist nur, die Schwächen zu lösen oder abzumildern und mit der Technologie zu gehen. Wenn Maßnahmen zur Abmilderung die Produktivitätsgewinne beeinträchtigen, werden sie umgangen werden, und am Ende werden sich Ergänzungen durchsetzen, die mit der Technologie harmonieren
Statt Richtlinien wie „versprich, dass eingereichter Code kein LLM-Produkt ist, originell und vollständig verstanden“ oder „meistens nur Handarbeit erlaubt“ sollte man sich auf das Ergebnis konzentrieren. Es ist sinnvoll zu verlangen, dass Beitragende ihre Änderungen gut verstehen. Aber Regeln wie „Junioren sollen LLM-Tools eine Zeit lang vermeiden oder dürfen sie nicht benutzen“ finde ich nicht gut. LLMs helfen enorm bei chaotischen Onboarding-Problemen rund um das Setup von Umgebungen. Außerdem sind sie gut, um Code und Dokumentation zu erschließen, und auch als nützliche Werkzeuge für Textsuche und Zusammenfassungen
Vom Begriff „AI Cliff“ — also dem plötzlichen Einbruch der LLM-Genauigkeit — habe ich zum ersten Mal gehört. Mich würde interessieren, ob andere das auch erlebt haben
Der Autor des Originalbeitrags sagt zwar, er werde nicht mehrere Beiträge zusammenfassen, aber faktisch scheint er genau das zu tun. Trotzdem fände ich es gut, wenn Dateien mit AI-generiertem Code im PR markiert würden. LLM-Code und menschlicher Code haben unterschiedliche Fehlermuster, daher könnte man Reviews gezielter durchführen und Zeit sparen. Mich würde interessieren, ob jemand so eine Richtlinie schon in großen Organisationen erlebt hat oder ob es dafür bereits Automatisierungs-Tools gibt. Wenn Unternehmen den Anteil von LLM-generiertem Code messen, gibt es vielleicht für detaillierte Metriken längst solche Werkzeuge