Ursprünglich auf Französisch verfasst. Von KI übersetzt — der Sinn wurde bewahrt, nicht der Stil.
Hauptgedanke
Eine Vektorsuche, die an ein Code-Repository angeschlossen ist, beantwortet gut die Frage „Wo steht die Regel, die verhindert, dass ein storniertes Element geändert wird?“. Sie holt die Fragmente hervor, die der Frage am nächsten sind, auch solche, die keines ihrer Wörter verwenden, und das gelingt ihr in einer großen Dokumentenmenge ebenso wie in einem umfangreichen Repository.
Sie findet. Sie reist nicht weiter. Die nächste Frage ist aber fast immer eine Frage der Nachbarschaft: Welches Modul ruft dieses hier auf, welche andere Regel betrifft dasselbe Objekt, welches Ereignis löst das eben gelesene aus, welche Oberfläche zeigt dieses Verhalten? Darauf antwortet die Suche nicht, und das ist kein Einstellungsfehler: Ihr Maß ist die Bedeutungsnähe zwischen einem Fragment und der gestellten Frage, nie die Beziehung zwischen zwei Elementen des Korpus.
Zwei Fähigkeiten decken diese Bewegung ab, und sie haben wenig gemeinsam. Ein semantischer Graph verknüpft Begriffe, Module und Ereignisse ausdrücklich und erlaubt es, von einem Knoten zu seinen erklärten Nachbarn zu gehen. Das Durchgehen des Dateisystems — das Verzeichnis auflisten, in dem das Fragment gefunden wurde, die benachbarten Dateien öffnen, die lokale Struktur lesen — ist handfester und oft wirksamer, weil die Verzeichnisstruktur bereits einen Teil der Beziehung enthält, ohne dass jemand sie erklären musste.
Ein System, das allein auf Suche beruht, liefert also genaue Antworten auf das, was man zu fragen wusste, und schweigt über das, was direkt daneben lag.
Warum das wichtig ist
Das erklärt ein häufiges Scheitern: Man schließt ein Modell mit einem Vektorindex an ein Git-Repository an und stellt fest, dass die Antworten oberflächlich bleiben. Das Problem ist nicht die Qualität der Suche, sondern dass nur eine der beiden Fähigkeiten vorhanden ist.
Es liefert auch ein Bewertungskriterium, das nicht beim ersten Treffer stehen bleibt. Ein System zum Befragen beurteilt man nicht danach, wie relevant das Fragment ist, das es hervorholt, sondern danach, was es danach kann: das erreichen, wovon der Fragende nicht wusste, dass er danach fragen müsste.
Nuancen und Grenzen
Die Unterscheidung ist keine Rangordnung. Bei einem kleinen oder sehr einheitlichen Korpus genügt das Finden: Die Nachbarn stehen in derselben Datei, und die Bewegung geschieht beim Lesen.
Und das Weitergehen ersetzt nie das Finden. Ein Graph ohne Einstiegspunkt nützt nichts; die Suche liefert den Startknoten, und ein schlechter Einstieg lässt eine Nachbarschaft erkunden, die mit der Frage nichts zu tun hat.
Schließlich altern die beiden Fähigkeiten nicht gleich. Eine Verzeichnisstruktur ist immer aktuell, denn sie ist das Repository; ein Graph erklärter Beziehungen ist ein weiteres Artefakt, das auseinanderläuft, sobald sich der Code bewegt, ohne dass der Graph neu aufgebaut wird.
Offene Fragen
- Was bestimmt, wann man das Durchwandern der Nachbarschaft beendet — wie viele Sprünge, bevor der mitgebrachte Kontext die Frage nicht mehr erhellt, sondern zu überdecken beginnt?
- Ab wann kostet es bei einem Repository, das sich täglich ändert, mehr, einen Beziehungsgraphen neu aufzubauen, als er gegenüber einem bloßen Durchgehen der Verzeichnisse einbringt?