- „Ein verwirrendes Experiment, das meine Denkweise über KI-gestützte Codeanalyse verändert hat“
- Es wurde beobachtet, dass bestehende KI bei der Analyse von React-Codebasen häufig scheitert
- Die Ursache lag offenbar darin, dass sie nur zeilenweise analysiert – ähnlich wie Junior-Entwickler, die Code zum ersten Mal lesen
Der Unterschied zwischen Bootcamp-Zeit und Senior-Mindset
- Als Junior liest man Dateien der Reihe nach, Zeile für Zeile, und verliert dabei oft schnell den Überblick
- Senior-Entwickler gehen bei großen PRs eher so vor
- Sie prüfen zuerst die zentralen Dateien
- Sie erfassen Änderungen gebündelt nach Funktionalität
- Sie verstehen zuerst die Gesamtarchitektur und betrachten danach die Details der Implementierung
- Es wurde beschlossen, diesen Ansatz auf KI anzuwenden
Das Experiment
- Es wurde ein Ansatz ausprobiert, bei dem Dateien nach Funktionalität gruppiert und der KI zuerst Kontextinformationen zu diesen Gruppen gegeben werden
- Im Beispielcode wird ein
FileGroup-Interface definiert, und Dateien werden nach zugehöriger Funktion sowie Dateigröße gebündelt verarbeitet
- Für jede Gruppe wird ein Prompt aufgebaut, der der KI Hinweise gibt wie „Welcher Funktionsbereich ist das?“ und „Worauf sollte besonders geachtet werden?“
Der Moment der überraschenden Veränderung
- Zuvor antwortete die KI nur schlicht mit Aussagen wie „Enthält JWT-Token-Authentifizierungslogik“
- Danach lieferte sie Einsichten auf Senior-Niveau, etwa zu „Auswirkungen auf WebSocket-Verbindungen“ oder zur „Möglichkeit von Race Conditions in kürzlich zusammengeführten PRs“
- Die KI begann, auf Probleme unter Berücksichtigung des Gesamtkontexts des Systems hinzuweisen
Was sich tatsächlich verändert hat
- Entscheidend war nicht der Einsatz komplexerer Machine-Learning-Modelle, sondern dass der KI die Denk-Reihenfolge eines Senior-Entwicklers gegeben wurde
- Kontext zuerst: Zunächst wird das Gesamtsystem verstanden
- Pattern Matching: Ähnliche Dateien werden gruppiert, um wiederkehrende Logik zu finden
- Impact-Analyse: Die Auswirkungen von Änderungen auf das gesamte System werden erkannt
- Historienverständnis: Auch Gründe und Kontext früherer Codeänderungen werden nachverfolgt
Unerwartete Nebeneffekte
- Statt nur die gewünschten Stellen zu korrigieren, wurden auch folgende Einsichten erkannt
- Identifikation doppelter Codeblöcke durch Copy-and-Paste
- Warnungen bei inkonsistenten Error-Handling-Mustern
- Erkennung potenzieller Performance-Bottlenecks
- Vorschläge zur Verbesserung der Architektur auf Basis von Nutzungsmustern
Warum das wichtig ist
- Aktuelle KI-basierte IDEs konzentrieren sich stark auf das automatische Generieren von Code
- Doch bloße Vorschläge ohne Kontext des Gesamtsystems können so riskant sein wie ein „Junior-Entwickler, der gerade erst ins Team gekommen ist“
- Wirklich entscheidend ist ein „tiefes Verständnis des Codes“
Offene Fragen
- Wie entschieden werden soll, wann Kontext (historische Informationen) aktualisiert und wann er beibehalten wird
- Wie reagiert werden soll, wenn widersprüchliche Muster gefunden werden
- Wie Analyseergebnisse mit hoher Unsicherheit den Nutzern angezeigt werden sollen
Die weitere Richtung
- Es wird darüber nachgedacht, ob sich der KI auch folgende Fähigkeiten eines Senior-Entwicklers vermitteln lassen
- Die Fähigkeit, Technical Debt frühzeitig zu erkennen
- Die Kompetenz, proaktiv Architekturverbesserungen vorzuschlagen
- Die Fähigkeit, Sicherheitsprobleme aus Nutzungsmustern zu erkennen
- Das Gespür für informelle Regeln innerhalb des Teams
- Das letztliche Ziel ist nicht, einfach „mehr Code“ zu erzeugen, sondern „der KI beizubringen, den gesamten Code wie ein Senior-Entwickler tiefgehend zu verstehen“
3 Kommentare
Sind Fragen zur Analyse und Verbesserung einer Codebasis nicht ohnehin weitgehend standardisiert? Der Autor wirkt ziemlich aufgedreht.
Das wirkt so, als würde in Cursor ähnlich wie in Notepad eine Erklärung zum gesamten Projekt gegeben.
Hacker-News-Kommentare
In den Kommentaren sind die Leute kritisch. Dieser Beitrag behandelt kurze, positive Ergebnisse zu den Möglichkeiten eines neuen Tools und enthält ehrliche und vernünftige Gedanken.
Ein weiteres Beispiel dafür, dass LLMs Erstaunliches leisten. Allerdings ist es sehr schwierig, ein System zu bauen, das für alle Eingaben konsistent und präzise funktioniert.
Daraus lassen sich Lehren für bessere Agentensysteme beim Schreiben von Code ziehen.
Als ich die erste Zeile des Beitrags gelesen habe, fühlte ich mich wie ein Außerirdischer. Ich müsste den ganzen Beitrag lesen, aber bestehenden Code sequentiell zu lesen, wirkt seltsam.
Die Bedeutung des menschlichen Faktors wird betont. Ohne ein kontextuelles Verständnis der Codebase lässt sich die Bedeutung von AI-Warnungen nicht erkennen.
Es ist schwer zu verhindern, dass AI APIs erfindet, die es nicht gibt. Wenn es gut funktioniert, ist es großartig, aber meistens funktioniert es nicht gut.
Code-Kontext und Verständnis sind wichtig, um die Qualität von von LLMs erzeugtem Code zu verbessern.
Wie bei John McCarthys Beschwerde ist das eher eine Anekdote als ein Experiment oder Beweis.
Die Ergebnisse sind beeindruckend. Es gibt Kritik an Stil und Einheitlichkeit, aber das Ergebnis wirkt nützlich.
Es scheint, als fehle im Beitrag ein wichtiger Teil dieser Technologie. Es gibt keine Implementierung von
getFileContext()undshouldStartNewGroup().