2026-06-14 Rückblick
Gedanken im Bus nach Seoul
Heute habe ich im Bus nach Seoul über die letzte Godot‑4‑Datensatz/RAG‑Pipeline nachgedacht, die ich zuvor entworfen hatte. Am 12. Juni hatte ich überlegt, die offizielle Dokumentation zu crawlen, Godot‑Projekte von GitHub zu sammeln und einen RAG‑Chatbot vorzuschalten, der entscheidet, ob es sich um Godot 3 oder 4 handelt, und daraus Instruktionsdaten erzeugt.
Doch heute wurde mir klar, dass noch viele offene Fragen zu klären sind, damit diese Struktur wirklich funktioniert. Insbesondere besteht zwischen „Dokumente wurden gesammelt“ und „das Modell nutzt diese Dokumente gut“ ein größerer Abstand als erwartet.
Erste Frage: Kann der RAG‑Chatbot den gesamten Kontext bewältigen?
Zunächst dachte ich, wenn man die offizielle Godot‑Dokumentation crawlt und daraus einen RAG‑Chatbot baut, könnte man die gesammelten GitHub‑Projekte klassifizieren oder verifizieren. Aber das Szenario, bei dem man GitHub‑Projekte scraped, in md‑ oder jsonl‑Formate umwandelt und den gesamten Inhalt auf einmal dem Chatbot übergibt, wirft Fragen auf.
Kann das Modell den gesamten Eingabekontext aufnehmen?
Schon ein einziges Godot‑Projekt enthält README, Verzeichnisstruktur, zahlreiche .gd‑Dateien, Szenendateien und Ressourcen‑Pfade. Fügt man noch die durch RAG gefundenen Dokumenten‑Snippets hinzu, kann die Eingabe schnell sehr groß werden. Nur weil die gecrawlten Dokumente existieren, bedeutet das nicht, dass das Modell bei jeder Anfrage das gesamte Projekt und die zugehörigen Dokumente zuverlässig lesen kann.
Letztlich bedeutet das Erstellen eines RAG‑Chatbots nicht, das gesamte Dokument zu übergeben, sondern eine Such‑/Auswahl‑Struktur zu bauen, die entscheidet, welche Dokumenten‑Snippets zu welcher Frage passen. Wenn dieser Teil schwach ist, kann das Modell wichtige Dateien übersehen oder unnötige Dokumente lesen und dabei den eigentlichen Projekt‑Kontext verlieren.
Zweite Frage: Reicht eine Antwort‑Code‑Snippet pro Frage aus?
Die zweite Frage betraf die Form des Instruktionsdatensatzes. Nehmen wir zum Beispiel die Frage „Erstelle eine Karte“. Die Antwort darauf muss nicht nur ein einzelner Code‑Block sein.
Ein LLM muss mehrere Schritte durchlaufen, um eine Antwort zu erzeugen: Die Projektstruktur analysieren, herausfinden, welche Szenen und Skripte vorhanden sind, verfügbare Assets prüfen, den bestehenden Code‑Stil lesen, prüfen, ob er zu Godot 4‑Syntax passt, und schließlich entscheiden, welche Datei und welchen Code man ändern muss.
Die Frage „Erstelle eine Karte“ wirkt nach außen hin wie eine einzige Anforderung, intern erfordert sie jedoch mehrere Inferenz‑Ebenen. Wenn im Trainingsdatensatz nur der finale Code bleibt, bleibt fraglich, ob das Modell die Zwischenschritte erlernen kann.
Ein korrektes Datenset sollte nicht nur den fertigen Code enthalten, sondern auch angeben, welche Datei gelesen werden muss, welche Informationen als Grundlage dienten, warum eine bestimmte API gewählt wurde usw. Besonders wenn man ein Coding‑Agent‑Verhalten erreichen will, könnte ein Fluss wie „Frage → Suche → Bewertung → Modifikation → Validierung“ besser geeignet sein als nur „Frage → Antwort“.
Dritte Frage: Könnte das Chunk‑Processing wieder zu starkes Python‑Gewicht erzeugen?
Die dritte Frage betraf das Sprach‑Gewicht. Selbst wenn man den Prompt „Erstelle eine Karte mit Godot 4“ gibt, könnte das Modell beim Lesen von Projekt‑ oder Dokument‑Chunks, die in kleinere Stücke zerlegt sind, stärker zu Python‑Code‑ oder Python‑artige Problemlösungsmuster neigen.
Allgemeine Coding‑Modelle wurden wahrscheinlich viel intensiver mit Python trainiert. Daher reicht es vielleicht nicht aus, nur das Wort „Godot“ vorzuschalten. Wenn die gefundenen Chunks nicht genügend Godot‑4‑Kontext enthalten oder während der Zwischenschlussfolgerung generische Coding‑Muster aktiviert werden, könnte das Ergebnis wieder zu Python‑ähnlich tendieren.
Deshalb ist es nicht genug, einfach zu sagen „Schreibe das in Godot 4“. Man muss im Prompt‑ und Daten‑Pre‑Processing‑Schritt den Godot‑4‑Kontext deutlich stärker verankern. Zum Beispiel könnte man dem Eingabedaten ein spezielles Godot‑4‑Tag hinzufügen, gemischte Godot‑3‑/andere‑Sprachen‑Daten stärker filtern oder vor der Antwortgenerierung wiederholt die Einschränkung „Diese Aufgabe folgt Godot 4‑GDScript‑Standards“ einfließen lassen.
Zusammenfassung des Tages
Der Kern meiner heutigen Überlegungen ist, dass weder RAG noch reines Crawling die Lösung sind. Wichtiger als das Sammeln vieler Dokumente ist es, zu entwerfen, welchen Kontext das Modell bei einer Anfrage liest und welche Entscheidungen es treffen soll.
Die bisherige Struktur muss weiter in folgende Schritte zerlegt werden:
- Statt das gesamte Projekt auf einmal zu geben, sollte eine nach Datei/Rolle/Abhängigkeit durchsuchbare Struktur geschaffen werden.
- Der Instruktionsdatensatz muss prüfen, ob er nicht nur den finalen Code, sondern auch Such‑ und Bewertungsprozesse enthalten soll.
- Der Godot‑4‑Kontext muss durch Prompt‑Design, Tags, Filter und bevorzugte Daten stärker gesichert werden, damit er nicht während der Inferenz verwässert wird.
Um ein „Godot 4‑Coding‑Modell“ zu bauen, reicht es nicht, nur Godot‑4‑Code zu sammeln. Das Modell muss lernen, in welcher Reihenfolge es ein Projekt liest, wie es erkennt, dass es sich um Godot 4 handelt, und wie es die beste Antwort auswählt – all das muss im Datensatz reflektiert werden.
Rückblick
Heute war kein Tag, an dem ich viel Code geschrieben habe, aber ich habe Lücken im vorherigen Design erneut entdeckt. Im Bus zu grübeln ließ Probleme sichtbar werden, die mir am Schreibtisch entgangen waren. Einen RAG‑Chatbot zu bauen klingt einfach, in der Praxis hängen Such‑Einheiten, Kontext‑Größe, Frage‑/Antwort‑Datenstruktur und Sprach‑Gewichtskontrolle alle zusammen.
Es gibt noch keine Antwort. Aber das Aufkommen von Fragen ist ein gutes Zeichen. Wenn ich sie jetzt festhalte, dient das später als Leitfaden, welche Aspekte beim Aufbau der Pipeline zu prüfen sind.
Als nächstes werde ich konkretisieren, in welchen Einheiten das Projekt‑Kontext‑Chunking erfolgen soll, wie stark der Inferenz‑Prozess im Instruktionsdatensatz abgebildet wird und welche Vorverarbeitungs‑Regeln den Godot‑4‑Kontext stark erhalten.