
Aktuelle KI-basierte Code-Erkennungstools, die Summierung, retrieval-augmented generation (RAG) verwenden, und Wissensgraphen sind wie eine Lupe verwenden, um einen Kontinent zu bilden. Sie sind spröde und verpassen oft das größere Bild - besonders für große Codebass.
Inspiriert von Rich SuttonsBitter Unterricht, die ganze Kontextmethode nimmt einen anderen Ansatz. Anstatt die Codebase in Stücke zu zerlegen und Codebase zu bauen, die Stück für Stück mit Teil-und-Konquer und Software-Tricks versteht, umfasst unsere Methode eine ganzheitliche, lernorientierte Lösung. In diesem kurzen Beitrag werden wir untersuchen, warum fragmentierte Methoden kurz fallen und Parallelen zur Entwicklung von AI zeichnen. Wir werden auch einige anfängliche qualitative Ergebnisse mit unserer Methode berichten, wobei eine eingehendere Analyse in einem späteren Beitrag erfolgt. Die Zukunft des Codeverständnisses ist hier, und es setzt sich nicht auf Softwaretricks und menschlich gestaltete Heuristiken.
Die bittere Lektion und warum Shortcuts Fail
Rich Sutton, einer der Gründer des computergestützten Verstärkungslernens (und auch Autor meines Lieblingslehrbuchs), schriebDie Bitterstundeauf seiner persönlichen Website. Es ist eine Erinnerung daran, dass "allgemeine Methoden, die die Berechnung der Hebel nutzen, letztlich die effektivste sind und durch eine große Marge." Die allgemeinen Methoden übertreffen konsequent spezialisierte, menschlich gestaltete Heuristiken und Domänenwissen. KI-Geschichte unterstützt dies mit markanten Beispielen.
- Schach, tiefblau und AlphaZero: 1997, Deep Blau besiegte den Weltchampion, Kasparov. Tief Blau verwendete eine Kombination aus massiver Suche und menschlicher Schachtaktik. Im Jahr 2017 beherrschte DeepMinds AlphaZero Schach von Grund auf durch Selbstspiel. Es übertraf nicht nur alle Menschen, sondern auch Stockfish - das beste Computer Schachprogramm in der Welt - aus dem Wasser. Seitdem haben Stockfish und andere "traditionelle" Schachprogramme auch neurale Netzwerke in ihre Motoren aufgenommen, um wettbewerbsfähig zu bleiben.
- Computer Vision: In den frühen 2000er Jahren hängten Vision-Systeme von der Funktionstechnik ab, wie SIFT oder HOG. Bis 2016 übertrafen tiefe konvolutionale neuronale Netzwerke, wie z.B. ResNet, auf Rohpixeln ausgebildet, diese Methoden mit übermenschlicher Genauigkeit.
- StarCraft und AlphaStar: Im Jahr 2019 dominierte DeepMinds AlphaStar Blizzards StarCraft II durch Modellierung von ganzen Spielzuständen, darunter Hunderte von Einheiten, Karten und Strategien, ohne sich auf selektive Regeln zu verlassen, die professionelle Spieler ausspielen.
- Archäologie: Im Jahr 2022 rekonstruierte Googles DeepMind alte Kneiform-Tabletten durch das Lernen von rohen sprachlichen Mustern, nicht fachkundigen Annahmen.
- Protein Folding: Im Jahr 2023 löste AlphaFold 2 langjährige Protein-Falten-Herausforderungen durch das Lernen aus rohem molekularen Daten, um menschliche chemische Modelle zu umgehen.
Der Takeaway scheint, dass ganzheitliches, verallgemeinertes Lernen aus Rohdaten zusammen mit vielen Compute durchweg clevere Verknüpfungen übertrifft. Wir erwarten auch einen ähnlichen Bogen im KI-Code-Verstehen.
Warum Code Comprehension Struggles für große Codebases
Ab Anfang 2025 kämpfen Code Copilots, wenn der Kontext, mit dem sie arbeiten müssen, mehr als zehntausende von Zeilen Code. KI-Code-Dokumentationsgeneratoren liefern fehlende Ergebnisse für massive Codebases. Dies liegt vor allem an den kleineren (~100k-Token) Kontextfenstern vieler LLMs und den Einschränkungen der gemeinsamen Tricks, die verwendet werden, um es zu überwinden. Tricks wie:
- Summarisierung und Gedächtnis: Ein gemeinsamer Ansatz, um mit großen Kontexten umzugehen, ist, einen Teil davon in Richtung einer rollenden Zusammenfassung von allem zuzuordnen, was bisher gesehen wurde. Dieser Prozess ist durch sein Design verlustig. Für Code-Verstehen, während dieser Ansatz lokale Abhängigkeiten erfassen kann, verpasst es oft Cross-Modul globale Abhängigkeiten über die Codebase.
- Retrieval-Augmented Generation (RAG): RAG setzt auf eine Vektor-Datenbank von Blöcken der Codebase und es ruft die "wichtigsten" Stücke über die Codebase für eine bestimmte Abfrage. RAG kann für spezifische Informationsabrufe nützlich sein, ist aber oft unzuverlässig. Darüber hinaus ist RAG nicht nützlich für Aufgaben, die eine große Anzahl von Stücken benötigen.
- Wissensdiagramme (KG): KGs sind ideal für Fragen, die innerhalb einer bestimmten Domäne, in der das Vokabular von Objekten und Beziehungen beschränkt ist. Sie kämpfen jedoch für große, sich entwickelnde Codebasen.
Kleinere Kontextfenster zwingen Entwickler, Codebasen in Fragmente zu brechen und mit einer begrenzten Anzahl von Fragmenten zu einer Zeit zu arbeiten. Dieser Ansatz verliert die Nuance, da Code ein lebendiges Artefakt ist, mit Mustern, die Tausende von Dateien überspannen. Unser Team erstellte Dokumentation für PyTorch (1,5+ Millionen Zeilen Code) mit Standard-Summarisierungs-basierten Techniken und fand die resultierende Dokumentation von geringer Qualität und fehlenden kritischen Abhängigkeiten. Im Gegensatz dazu produzierte unsere Ganze Kontextmethode deutlichere und genauere Dokumentationen.
Die ganze Kontextmethode
Was, wenn wir uns nicht auf eine wirtschaftliche Verwendung von Token konzentrieren, haben wir uns darauf konzentriert, sie zu maximieren? Wir könnten die Fragmentierung von Codebasen stoppen und sogar die komplexesten Abhängigkeiten erfassen. Die Ganze Kontextmethode macht genau das. Es verwendet LLMs mit den größten Kontextfenstern zur Verfügung, um ganze Repositories zu verarbeiten, einschließlich jeder Datei, Commit und Kommentar, als einen einzigen einheitlichen Kontext. So funktioniert es:
- Volle Aufnahme: Es verarbeitet massive Codebasen, wie PyTorch (1.2M-Linien), in einem Go, Erfassung von Interdependenzen, die fragmentierte Methoden vermissen.
- Commit-Aware Lernen: Es stimmt, seine Geschichten zu begehen, um Absicht und Evolution zu verstehen, jenseits nur statischer Code.
- Living Documentation Hub: Es erzeugt einen interaktiven, abfragbaren Hub, der automatisch aktualisiert, wie die Codebase entwickelt, Entwickler und Betreuer bedient.
Fazit: Die Bitterstunde umarmen
AlphaZero lehrte sich Weltklasse Schach auf Basis allgemeiner Methoden des Lernens, des Selbstspiels und der Suche, zusammen mit massiver Berechnung. Ebenso hängt die Ganze Kontextmethode nicht von handgefertigten Heuristiken, verlustfreien Abstraktionen oder modularen Pipelines ab, die versuchen, das Problem „auszubehalten“. Stattdessen umfasst es die Bitter Lesson: dass wahres Verständnis nicht von der Codierung spröde Domain-Wissen, sondern von der Verwendung skalierbarer Lernsysteme, die die Muster entdecken können, die wir versucht haben, Hand-Engineer.
Code, wie Geister, ist unwiederbringlich komplex. Wie Sutton schreibt, ist die reale Welt mit willkürlicher Struktur gefüllt: Cross-Cutting-Bedenken, Legacy-Hacks, dynamische Interaktionen zwischen Tausenden von Modulen. Der Drang, es mit humanautorisierten Modellen zu vereinfachen, ist eine Falle. Der einzige zuverlässige Weg nach vorn ist es, Systeme zu bauen, die verstehen können, nicht Systeme, die nur unser aktuelles Verständnis enthalten.
In einem zukünftigen Beitrag teilen wir detailliertere Benchmarks und Beispiele über große Codebasen wie PyTorch, Kubernetes und Legacy Enterprise Systems. Aber auch jetzt ist eine Sache klar: Die nächste Generation von Entwickler-Tools wird nicht von clevereren Hacks kommen. Es wird davon kommen, das Ganze zu sehen.
Referenzen
- Sutton, R. S. (2019). Die Bitterstunde ( unvollständige Ideen).
- Silver, D., et al. (2017). Mastering Schach und Shigi durch Selbstspiel mit einem allgemeinen Verstärkungslernalgorithmus (arXiv).
- Vinyals, O., et al. (2019). Grandmaster-Level in StarCraft II mit multiagent Verstärkung Lernen (Nature).
- Jumper, J., et al. (2021). Hochgenaue Proteinstrukturvorhersage mit AlphaFold (Nature).
- Assael, Y., et al. (2022). Wiederherstellung und Zuwendung von alten Texten mit tiefen neuronalen Netzwerken (Natur).