Die Navigation in einem umfangreichen Codebestand stellt für KI-Softwareentwickler (AI SWEs) eine fundamentale Herausforderung dar. Ähnlich wie menschliche Entwickler benötigen KI-gestützte Systeme die Fähigkeit, effizient durch komplexe Codebasen zu navigieren, Definitionen zu finden, Verweise zu verfolgen oder den Quellcode kontextuell zu verstehen. Diese Fähigkeiten sind essenziell, um eine produktive Interaktion mit dem Code zu ermöglichen und letztlich den Entwicklungsprozess mit KI-Unterstützung zu revolutionieren. Bei Engines haben wir uns intensiv mit der Frage beschäftigt, wie solche Systeme optimal gestaltet sein sollten. Dabei haben wir aktuelle Forschungsansätze analysiert, verschiedene bestehende Technologien evaluiert und schlussendlich eine eigene Lösung entwickelt.
In diesem Beitrag erläutern wir die Erkenntnisse, die wir auf diesem Weg gewonnen haben, und geben einen Ausblick auf die zukünftige Entwicklung in diesem spannenden Bereich. Die Vielfalt der Zugangsweisen zur Code-Navigation für KI-basierte Softwareentwickler ist beeindruckend. Forschungsprojekte wie SWE-Agent setzen auf einfache String-Suchen im gesamten Codebestand und zeigen dem KI-Modell jeweils Ausschnitte mit hundert Codezeilen an, um Kontext zu liefern. Diese Methode ist zwar unkompliziert und benötigt keine tiefen statischen Analysen, erreicht jedoch schnell Grenzen bei sehr großen Codebasen oder bei komplexen Zusammenhängen im Code. Im Gegensatz dazu verfolgt CodeMonkey einen ganz anderen Ansatz: Hier werden sämtliche Dateien der Codebasis in ein kleines KI-Modell eingespeist, das diese heruntergebrochen und nach Relevanz für die jeweilige Anfrage sortiert.
Dies verbessert die Fokussierung auf wichtige Dateien, kann aber bei enormen Codebasen aufgrund der Masse an Daten an Effizienz verlieren. Zusätzlich ist Moatless erwähnenswert, das eine semantische Suche nutzt, um genau zu bestimmen, welche Dateien für eine Codeänderung relevant sind, was die Präzision gegenüber reinen Textsuchen deutlich verbessert. Inspiriert von Ansätzen wie OpenHands haben wir uns entschieden, Code-Navigation als Werkzeug bereitzustellen, das vom Agenten aktiv genutzt werden kann. Im Kern bieten wir zwei Hauptfunktionen: "Alle Referenzen finden" und "Zur Definition springen". Dieses Interface ähnelt einem Sprachserverprotokoll (Language Server Protocol, LSP).
Doch der Weg zu einer robusten Lösung ist komplexer, als zunächst angenommen. Verschiedene bestehende Systeme bieten unterschiedliche Vorteile, bringen aber auch ihre eigenen Herausforderungen mit, die wir im Folgenden genauer vorstellen. Unsere Vision für ein modernes Code-Navigationssystem für KI-Softwareingenieure fußt auf mehreren Grundprinzipien. Das System soll skalierbar sein und höchstens einmal pro Commit neu indexieren. Weiterhin soll es inkrementell arbeiten können, also Codeänderungen kontinuierlich und ohne komplettes Neuindizieren verarbeiten.
Flexibilität ist uns wichtig: Die Navigation soll für beliebige Commit-Hashes verfügbar sein, um auch ältere oder spezifische Entwicklungsstände zu berücksichtigen. Nicht zuletzt steht eine permissive Lizenzierung im Vordergrund, damit das System leicht an verschiedene Bedürfnisse angepasst und erweitert werden kann. Eines der untersuchten Tools ist lsproxy, eine speziell für KI-SWEs entwickelte LSP-Bibliothek. Sie identifiziert automatisch die Programmiersprache und startet den passenden Sprachserver. Die Entwickler erweitern das System beständig um weitere Sprachen, was eine wachsende Sprachunterstützung verspricht.
Trotz dieses Potenzials stellt die AGPL-Lizenz eine Hürde dar, da eine kommerzielle Nutzung eine vertragliche Bindung erfordert, was langfristig Ressourcenbindung und Abhängigkeiten nach sich ziehen kann. Stack Graphs stellen einen innovativen Ansatz dar, geboren im Hause GitHub für deren webbasierte Code-Navigation. Durch statische Analyse erzeugen sie eine Datenstruktur, die ausgerichtet auf Incrementalität und schnellem Querying ist. Ein großer Vorteil dieser Methode liegt in ihrer Sprachunabhängigkeit: Sie benötigt wenig bis keine spezifische Konfiguration für die jeweilige Programmiersprache und basiert auf Tree-sitter zum Parsen von Einzeldateien. Allerdings erfordern Stack Graphs pro Sprache umfangreiche und komplexe Grammatikdateien (.
tsg). Der Wartungsaufwand für diese Dateien und die derzeitige Begrenzung auf wenige Sprachen wie Rust, Python, Java sowie JavaScript/TypeScript schränken die praktische Nutzbarkeit ein. Außerdem ist das Hinzufügen neuer Sprachen mit hohem Entwicklungsaufwand verbunden, weshalb wir uns gegen diesen Ansatz entschieden haben. Ein weiterer Kandidat war Glean, das bei Meta (ehemals Facebook) als Produktionssystem für Codeindexierung im Einsatz ist. Glean nutzt ein deklaratives Abfragesystem namens Angle, das komplexe Fragen zur Codebasis beantwortet und dadurch präzise Navigation unterstützt.
Es erfüllt viele Anforderungen, die wir an ein modernes Navigationssystem stellen: inkrementelles Indexieren, hohe Skalierbarkeit bei gigantischen Codebasen, Flexibilität und Unterstützung beliebiger Commits. Allerdings ist Glean eng auf Metas interne Infrastruktur zugeschnitten, nutzt proprietäre Komponenten wie ein Thrift-basiertes RPC-System und erfordert für vollständige Funktionalität speziell angepasste Parser pro Sprache. Open-Source-Versionen von Glean beinhalten derzeit hauptsächlich Parser für C++ und sind dadurch eingeschränkt hinsichtlich Mehrsprachigkeit. Die Zugänglichkeit und Anpassbarkeit für den allgemeinen Einsatz sind somit noch limitiert. Multilspy ist eine Python-Bibliothek, die einen Wrapper um LSP-Server verschiedener Sprachen bietet und damit eine einfache Installation und Nutzung ermöglicht.
Die Bibliothek eignet sich gut zum schnellen Ausprobieren und unterstützt diverse Sprachen durch automatisches Herunterladen der passenden Serverpakete. Nachteile liegen darin, dass das Herunterladen externer Binärdateien in manchen Umgebungen unerwünscht sein kann, und dass der LSP-Server an die Laufzeit des eigenen Python-Prozesses gebunden ist, was den Betrieb in Produktionsumgebungen erschwert. Sourcegraph, als etabliertes Produkt, bietet eine umfassende API für präzise Code-Navigation über viele Sprachen hinweg und kann auf großen Repositories eingesetzt werden. Doch auch hier ist die professionelle Nutzung mit Enterprise-Lizenzierung verbunden, was die Integration in offene, modular aufgebaute KI-Entwicklungsumgebungen erschwert und einschränkt. Nach Abwägung all dieser Möglichkeiten sind wir zu dem Schluss gekommen, dass es bislang keine wirklich optimale Open-Source-Lösung für präzise, flexible und skalierbare Code-Navigation gibt, die alle unsere Anforderungen abdeckt.
Deshalb haben wir uns entschieden, multilspy mit zusätzlichen Features zu ergänzen, um eine robuste und einfach nutzbare Grundlage zu schaffen. Dabei haben wir eine Serverkomponente mit Multiprotocol Communication Protocol (MCP) Unterstützung entwickelt und bieten die komplette Lösung in einem Docker-Container an, um einfache Bereitstellung und Sandbox-Umgebungen zu gewährleisten. Diese Erweiterungen finden sich in unserem GitHub-Repository engines-dev/piston und bilden damit einen ersten Schritt hin zu einer offenen und anpassbaren Plattform für KI-gestützte Softwareentwicklung. Die Herausforderung, Code-Kontext für KI-Entwickler zuverlässig verfügbar zu machen, steht erst am Anfang ihrer Entwicklung. Die von uns gewonnenen Erfahrungen zeigen, dass ein ideales System neben Skalierbarkeit und Mehrsprachigkeit insbesondere flexible Schnittstellen und inkrementelle Indexierung benötigen wird.
Die Balance zwischen präziser Analyse und praktikabler Implementierung ist entscheidend. Darüber hinaus wird die Offenheit der Lizenzierung eine wichtige Rolle für eine breite Adoption spielen. Für Entwickler und Unternehmen, die darauf abzielen, KI-Systeme zur Softwareentwicklung zu nutzen, ist die Wahl der richtigen Code-Navigationsinfrastruktur essentiell. Durch die Kombination bestehender Technologien und gezielter Erweiterungen kann ein nachhaltiges Fundament geschaffen werden, das durch fortlaufende Forschungs- und Entwicklungsarbeit verbessert wird. Wir bei Engines freuen uns auf den Austausch mit anderen Teams und Experten, die an ähnlichen Herausforderungen arbeiten.
Der Austausch von Wissen und Praxis wird entscheidend sein, um die nächste Generation KI-gestützter Entwicklungswerkzeuge erfolgreich zu gestalten und die Softwareentwicklung grundlegend zu verändern.