Godot offizielle Dokumentation RAG Klassifikator Schema und Architektur
Erstellungsdatum: 21. Juni 2026
Zweck
Es wird eine Referenzarchitektur festgelegt, um die gesamte Sammlung der Godot‑Dokumentation über den Fluss JSONL -> PostgreSQL -> Retriever -> Validator -> Qwen 3.6 zu verbinden. Dieses Dokument ist kein Implementierungsleitfaden zur Erstellung von Trainingsdaten, sondern definiert die Design‑Grundlagen, wie die bereits im Verzeichnis outputs/godot_docs_full/pages gesammelten Markdown‑Dokumente strukturiert und in eine durchsuchbare Referenz‑DB überführt werden sollen.

Aktuelle Eingabedaten
Die gesammelten offiziellen Dokumente befinden sich im Repository unter outputs/godot_docs_full.
| Pfad | Rolle |
|---|---|
outputs/godot_docs_full/pages/ |
Original‑Markdown der einzelnen Godot‑Dokumentationsseiten |
outputs/godot_docs_full/manifest.json |
Original‑URL, lokaler Dateipfad, Sammelstatus, Byte‑Größe |
outputs/godot_docs_full/summary.json |
Gesamtzahl der gesammelten Dateien und Prüfungs‑Zusammenfassung |
outputs/godot_docs_full/urls.txt |
Liste der tatsächlich gesammelten URLs |
outputs/godot_docs_full/searchindex_urls.txt |
Ziel‑URL‑Liste, aus dem Sphinx‑Suchindex rekonstruiert |
outputs/godot_docs_full/failed.json |
Liste fehlgeschlagener Sammlungen |
outputs/godot_docs_full/missing_from_searchindex.txt |
Fehlende Einträge im Vergleich zum Suchindex |
Aktueller Stand:
| Element | Wert |
|---|---|
| Zielseiten des Suchindex | 1568 |
| Gesammelte Seiten | 1570 |
| Seiten‑Dateien | 1570 |
| Fehlgeschlagene Abrufe | 0 |
| Fehlend im Suchindex | 0 |
Gesamte Pipeline
- Der
crawlersammelt die offizielle Godot‑Dokumentation aus dem Internet. - Die Sammelergebnisse werden pro Seite als Markdown gespeichert.
- Das Markdown wird normalisiert und mit Metadaten zu JSONL‑Datensätzen konvertiert.
- Die JSONL‑Datensätze werden in PostgreSQL importiert.
- PostgreSQL speichert Dokument‑Chunks, API‑Mappings und Label‑Prototypen getrennt.
- Wenn ein Nutzer eine Analyse des Godot‑Quellcodes anfordert, strukturiert ein AST‑Parser den Projektcode.
- Der Retriever sucht anhand der Nutzerfrage und der AST‑Analyse in PostgreSQL nach relevanten Belegen.
- Der Validator bündelt Frage, AST‑Ergebnis und Suchbelege und übergibt sie an Qwen 3.6.
- Qwen 3.6 fungiert nicht als End‑Entscheider, sondern erstellt die Antwort anhand der verifizierten Belege.
- Der Validator prüft Beleg‑/Format‑/Verbot‑Muster der Antwort und gibt sie anschließend an den Nutzer zurück.
Umwandlung von Markdown zu JSONL
pages/*.md sind leserfreundliche Originalseiten, aber für RAG zu groß. Daher zerlegt das Umwandlungsskript die Seiten in Abschnitts‑/API‑Member‑/Beispiel‑Einheiten und bewahrt die Original‑URL sowie den Dokumenttyp.
Gemeinsame Normalisierungsregeln
| Schritt | Verarbeitung |
|---|---|
| Datei laden | Das Markdown wird anhand von file, url, status, bytes aus manifest.json gelesen. |
| Inhalt bereinigen | Wiederholte Überschriften, Sphinx‑UI‑Texte, defekte Anker‑Zeichen und überflüssige Leerzeichen werden entfernt. |
| Dokumenttyp klassifizieren | Anhand von URL und Pfad wird in class_reference, tutorial, migration, engine_details, about, other unterschieden. |
| Abschnitt trennen | Auf Basis von Überschriftenhierarchie und Godot‑Klassen‑Referenz‑Mustern werden Chunk‑Kandidaten erstellt. |
| Code‑Blöcke erhalten | GDScript, C#, Shader und CLI‑Beispiele werden nicht aus dem Text entfernt, sondern separat in code_blocks gespeichert. |
| Provenance hinzufügen | Jeder Datensatz erhält Original‑URL, Dateipfad, Original‑Hash und Version des Umwandlungsskripts. |
JSONL‑Ausgabe
| Datei | Zweck | Ziel‑Tabelle |
|---|---|---|
work/godot_rag/jsonl/docs_chunks.jsonl |
Such‑Chunks für offizielle Dokumentations‑Beschreibungen/Tutorials/Referenzen | docs_chunks |
work/godot_rag/jsonl/api_mapping.jsonl |
Godot 3 → 4 API‑Änderungen, Umbenennungen, Deprecations, Ersatz‑Regeln | api_mapping |
work/godot_rag/jsonl/label_prototypes.jsonl |
Prototypen für Klassifizierung/Transformation/Verweigerung/Korrektur | label_prototypes |
work/godot_rag/jsonl/ingest_report.jsonl |
Warnungen, Überspringungen und Qualitäts‑Logs während der Umwandlung | Validierung vor DB‑Import |
docs_chunks.jsonl Schema
{
"chunk_id": "godot-stable:classes/class_node.html#description:0001",
"doc_version": "stable",
"source_url": "https://docs.godotengine.org/en/stable/classes/class_node.html",
"source_file": "outputs/godot_docs_full/pages/classes__class_node__....md",
"source_sha256": "...",
"doc_type": "class_reference",
"symbol": "Node",
"section_path": ["Node", "Description"],
"heading": "Description",
"content": "Nodes are Godot's building blocks...",
"code_blocks": [],
"language_tags": ["gdscript"],
"godot_version_tags": ["4.x", "stable"],
"api_symbols": ["Node", "_ready", "_process", "queue_free"],
"token_count": 420,
"metadata": {
"status": "copied_old",
"bytes": 12345
}
}Erforderliches Feld:
| Feld | Beschreibung |
|---|---|
chunk_id |
Deterministische ID, die sich bei Wiederholungen nicht ändert |
doc_version |
Dokumentversionsangabe, z. B. stable, 4.6 |
source_url |
Original‑URL der offiziellen Dokumentation |
source_file |
Pfad zur Markdown‑Datei im Repository |
source_sha256 |
SHA‑256‑Hash der Original‑Markdown‑Datei |
doc_type |
Dokumenttyp |
symbol |
Repräsentatives Symbol bei Klassen‑/API‑Dokumentation |
section_path |
Überschriftenhierarchie |
content |
Volltext, der für Suche und Embedding verwendet wird |
code_blocks |
Array von Code‑Blöcken, die aus dem Text extrahiert wurden |
api_symbols |
Im Text erkannte Godot‑API‑Symbole |
api_mapping.jsonl Schema
{
"mapping_id": "godot3-to-4:kinematicbody2d-to-characterbody2d",
"source_api": "KinematicBody2D",
"target_api": "CharacterBody2D",
"change_type": "rename_or_replacement",
"godot_from": "3.x",
"godot_to": "4.x",
"confidence": "verified_from_docs",
"evidence_chunk_ids": [
"godot-stable:tutorials/migrating/upgrading_to_godot_4.html#..."
],
"match_terms": ["KinematicBody2D", "CharacterBody2D"],
"notes": "Godot 4 character movement node replacement candidate.",
"negative_patterns": ["do not suggest KinematicBody2D for Godot 4 projects"]
}Prinzip:
| Element | Kriterium |
|---|---|
confidence |
Wenn es eine offizielle Dokumentationsgrundlage gibt, verified_from_docs, Regelkandidaten werden als candidate bezeichnet. |
| Automatischer Export | Kandidaten können aus Migrationsdokumenten und Klassenreferenzen erstellt werden. |
| Genehmigungskriterien | Regeln, die für Training/Labeling verwendet werden, werden nur nach menschlicher Prüfung in den Status approved gehoben. |
| exact index | source_api, target_api, match_terms sind genaue Suchziele. |
label_prototypes.jsonl Schema
{
"prototype_id": "label:godot3-api-in-godot4:kinematicbody2d",
"label": "godot3_api_in_godot4",
"task_type": "version_classification",
"input_pattern": "extends KinematicBody2D",
"expected_finding": "Godot 3 style physics body API detected.",
"recommended_action": "Use CharacterBody2D or CharacterBody3D depending on project dimension.",
"evidence_mapping_ids": [
"godot3-to-4:kinematicbody2d-to-characterbody2d"
],
"evidence_chunk_ids": [],
"severity": "high",
"validator_rules": {
"requires_ast_symbol": "KinematicBody2D",
"forbidden_answer_terms": ["KinematicBody2D is recommended in Godot 4"]
}
}Label‑Vorschläge:
| Label | Bedeutung |
|---|---|
godot4_valid_api |
Verwendung einer für Godot 4 gültigen API |
godot3_api_in_godot4 |
Godot 3‑API ist in einem Godot 4‑Projekt gemischt |
deprecated_or_removed_api |
Verwendung einer veralteten/entfernten API |
migration_required |
Migration von Godot 3 → 4 erforderlich |
ambiguous_version_signal |
Unklare oder kollidierende Versionsinformationen |
non_godot_noise |
Daten, die nichts mit Godot zu tun haben (Python/Web/Unity usw.) |
unsafe_or_obfuscated_code |
Obfuskierter, kontrollierter oder verdächtiger Schadcode |
Entwurf des PostgreSQL‑Schemas
PostgreSQL geht davon aus, dass pgvector verwendet wird. Die Stichwortsuche nutzt tsvector oder einen Trigram‑Index.
docs_chunks
| Spalte | Typ | Beschreibung |
|---|---|---|
id |
bigserial primary key |
interne ID |
chunk_id |
text unique not null |
deterministische ID aus JSONL |
doc_version |
text not null |
Dokumentenversion |
source_url |
text not null |
URL der offiziellen Dokumentation |
source_file |
text not null |
Pfad zur Markdown‑Datei |
source_sha256 |
text not null |
Original‑Hash |
doc_type |
text not null |
Dokumenttyp |
symbol |
text |
repräsentatives API‑/Klassen‑Symbol |
section_path |
jsonb not null |
Hierarchie der Überschriften |
heading |
text |
aktueller Chunk‑Titel |
content |
text not null |
zu durchsuchender Textkörper |
code_blocks |
jsonb not null default '[]' |
Code‑Blöcke |
api_symbols |
text[] not null default '{}' |
extrahierte Symbole |
metadata |
jsonb not null default '{}' |
weitere Metadaten |
embedding |
vector |
Einbettung |
search_tsv |
tsvector |
Stichwortsuche |
created_at |
timestamptz default now() |
Einfügezeitpunkt |
Indizes:
| Index | Zweck |
|---|---|
unique(chunk_id) |
Verhindert doppelte Einfügungen |
ivfflat/hnsw(embedding) |
Semantische Suche |
gin(search_tsv) |
Stichwortsuche |
gin(api_symbols) |
Filter für API‑Symbole |
btree(doc_type, symbol) |
Filter für class/API‑Dokumente |
api_mapping
| Spalte | Typ | Beschreibung |
|---|---|---|
id |
bigserial primary key |
interne ID |
mapping_id |
text unique not null |
deterministische ID |
source_api |
text not null |
vorherige/Problem‑API |
target_api |
text |
empfohlene API |
change_type |
text not null |
rename, removed, behavior_change usw. |
godot_from |
text |
Ausgangsversion |
godot_to |
text |
Zielversion |
confidence |
text not null |
Evidenzstufe |
status |
text not null default 'candidate' |
candidate, approved, rejected |
evidence_chunk_ids |
text[] not null default '{}' |
Beleg‑Chunks aus der offiziellen Dokumentation |
match_terms |
text[] not null default '{}' |
Such‑Keywords |
notes |
text |
Beschreibung |
negative_patterns |
jsonb not null default '[]' |
verbotene Muster |
Indizes:
| Index | Zweck |
|---|---|
unique(mapping_id) |
Duplikatvermeidung |
btree(source_api) |
exakte Suche |
btree(target_api) |
Rückwärtssuche |
gin(match_terms) |
Stichwortsuche |
btree(status, confidence) |
Filter für Genehmigungsregeln |
label_prototypes
| Spalte | Typ | Beschreibung |
|---|---|---|
id |
bigserial primary key |
interne ID |
prototype_id |
text unique not null |
deterministische ID |
label |
text not null |
Klassifizierungslabel |
task_type |
text not null |
classification, migration_fix, patch_generation usw. |
input_pattern |
text not null |
Erkennungsmuster |
expected_finding |
text not null |
erwartetes Ergebnis |
recommended_action |
text |
empfohlene Maßnahme |
evidence_mapping_ids |
text[] not null default '{}' |
API‑Mapping‑Belege |
evidence_chunk_ids |
text[] not null default '{}' |
Dokument‑Chunk‑Belege |
severity |
text not null |
low, medium, high |
validator_rules |
jsonb not null default '{}' |
Validierungsregeln |
embedding |
vector |
Suche nach ähnlichen Fällen |
search_tsv |
tsvector |
Stichwortsuche |
Indizes:
| Index | Zweck |
|---|---|
unique(prototype_id) |
Duplikatvermeidung |
btree(label, task_type) |
Abfrage nach Label |
ivfflat/hnsw(embedding) |
Suche nach ähnlichen Labels |
gin(search_tsv) |
Stichwortsuche |
AST Parser Eingabe/Ausgabe
Der AST Parser wandelt den Quellcode des Benutzers in eine durchsuchbare Struktur um, bevor er ihn direkt an das LLM übergibt. Das anfängliche Ziel sind .gd, .tscn, project.godot.
Eingabe
| Eingabe | Beschreibung |
|---|---|
| Benutzerfrage | z. B.: „Bitte prüfe, ob dieses Projekt für Godot 4 sicher ist.“ |
| Quellcode‑Dateien | .gd, .tscn, .tres, project.godot |
| Projektstruktur | Dateipfade, Szenenverbindungen, Ressourcenpfade |
Ausgabeschema
{
"project_id": "local-analysis-...",
"godot_project": {
"config_version": 5,
"features": ["4.4", "Forward Plus"]
},
"files": [
{
"path": "scripts/player.gd",
"language": "gdscript",
"extends": "CharacterBody2D",
"class_name": "Player",
"symbols": ["CharacterBody2D", "Input", "move_and_slide"],
"annotations": ["@onready"],
"version_signals": ["godot4_annotation_syntax"],
"diagnostics": []
}
],
"version_evidence": {
"godot4": ["config_version=5", "@onready"],
"godot3": []
}
}Initiale Extraktionsfelder:
| Feld | Zweck |
|---|---|
extends |
Node/API‑Version bestimmen |
class_name |
Projektinterne Symbolzuordnung |
annotations |
@onready, @export usw. Godot‑4‑Signale |
legacy_keywords |
onready var, export var, KinematicBody usw. Godot‑3‑Signale |
method_calls |
Dokumentensuche und API‑Mapping‑Abfrage |
scene_dependencies |
Szene‑/Skript‑Verknüpfungsprüfung |
resource_paths |
Fehlende Ressourcen‑ und Asset‑Verknüpfungsprüfung |
Retriever‑Verhalten
Der Retriever ist die Schicht, die vor dem LLM Belege auswählt.
- Absicht und Zielaufgabe aus der Benutzerfrage extrahieren.
- API‑Symbol, Versionssignal und Dateipfad aus dem AST‑Parser‑Ergebnis übernehmen.
- Zunächst ein exaktes Lookup in
api_mappingdurchführen. - In
docs_chunksgleichzeitig API‑Symbol‑Filter + Schlüsselwortsuche + Vektorsuche ausführen. - Ähnliche Labels und Validierungsregeln aus
label_prototypesholen. - Die Suchergebnisse als Beleg‑Bundle sortieren.
Beleg‑Bundle:
{
"query_id": "analysis-...",
"task_type": "version_classification",
"ast_summary": {},
"doc_evidence": [],
"api_mapping_evidence": [],
"label_evidence": [],
"retrieval_scores": {
"exact_api_hits": 2,
"keyword_hits": 8,
"vector_hits": 12
}
}Validator und Qwen 3.6 Rollenaufteilung
Qwen 3.6 ist das Modell, das die gefundenen Belege liest und die Antwort zusammenstellt. Die endgültige Kennzeichnung, die Annahme von Belegen und die Prüfung verbotener Muster übernimmt der Validator.
| Komponente | Verantwortung |
|---|---|
| Retriever | Suche nach relevanten offiziellen Dokumenten/API‑Mappings/Beleg‑IDs |
| Validator | Prüfung auf fehlende Belege, verbotene Muster, Ausgabe‑JSON‑Format |
| Qwen 3.6 | Zusammenstellung von Erklärungen, Korrekturrichtungen und Code‑Vorschlägen für den Nutzer |
Vom Validator zu prüfende Punkte:
| Punkt | Kriterium |
|---|---|
| Vorhandensein von Beleg‑ID | Die im Antworttext genutzte Dokument‑/Mapping‑/Label‑ID muss in den tatsächlichen Suchergebnissen vorhanden sein. |
| Godot‑4‑Standard | In Godot‑4‑Projekten darf nicht zu Godot‑3‑APIs geraten werden. |
| Unsicherheit kennzeichnen | Bei unzureichenden Belegen darf keine definitive Entscheidung getroffen werden; stattdessen wird ambiguous_version_signal verwendet. |
| Code‑Vorschlag prüfen | Vorgeschlagener Code darf nicht mit der erkannten Projekt‑Dimension (2D/3D) kollidieren. |
| JSON‑Format | Die interne Pipeline‑Ausgabe muss parse‑bares JSON sein. |
Einfügereihenfolge
outputs/godot_docs_full/summary.jsonundfailed.jsonprüfen.manifest.jsonundpages/*.mdladen.- Einen Markdown‑Normalisierungs‑Report erstellen.
docs_chunks.jsonlerzeugen.- Aus den migration/class‑Dokumenten
api_mapping.jsonl‑Kandidaten generieren. - Mit genehmigten Regeln und repräsentativen Beispielen
label_prototypes.jsonlerzeugen. - Nur Datensätze, die die JSONL‑Schema‑Validierung bestehen, per Upsert in PostgreSQL einfügen.
- Embeddings erzeugen und den Vektor‑Index aktualisieren.
- Keyword‑Index und Exact‑Index aktualisieren.
- Die Retriever‑Ergebnisse mit Beispiel‑Fragen prüfen.
Qualitäts‑Checkliste
| Phase | Akzeptanzkriterium |
|---|---|
| Sammlung prüfen | failed_count = 0, missing_from_searchindex = 0 |
| Markdown‑Normalisierung | Keine leeren Chunks, Original‑URL erhalten |
| JSONL‑Validierung | Jede Zeile ist JSON‑parsbar, erforderliche Felder vorhanden |
| Duplikat‑Prüfung | Keine Duplikate bei chunk_id, mapping_id, prototype_id |
| Beleg‑Prüfung | api_mapping.evidence_chunk_ids existieren tatsächlich in docs_chunks |
| Such‑Prüfung | Bei repräsentativen API‑Fragen werden sowohl Exact‑Hits als auch Docs‑Hits zurückgegeben |
| Antwort‑Prüfung | Qwen‑Antworten enthalten keine unbegründeten Behauptungen und empfehlen keine Godot‑3‑APIs |
Implementierungs‑Prioritäten
- Bericht zur Struktur‑Analyse von
pages/*.mderstellen - Skript zur Umwandlung in
docs_chunks.jsonlschreiben - Skript zur JSONL‑Schema‑Validierung schreiben
- DDL für PostgreSQL erstellen
- Einfügen von
docs_chunksund Such‑Validierung durchführen - Kandidaten für
api_mappingerzeugen und manuellen Freigabe‑Workflow implementieren - Initiales Label‑Set
label_prototypeserstellen - Minimal‑Felder aus dem AST‑Parser extrahieren
- Ausgabe‑Bundle der Retriever‑Belege erzeugen
- Loop zur Zusammenstellung von Validator‑+ Qwen 3.6‑Antworten verbinden
Kernprinzipien
- Das originale Markdown der offiziellen Dokumentation wird nicht verändert, sondern erhalten.
- JSONL dient als reproduzierbares Zwischenergebnis.
- In der Datenbank müssen Originalpfad, Original‑URL, Hash und Version des Transformations‑Scripts gespeichert werden.
- Das LLM darf keine eigenen Labels erfinden.
- Die Entscheidung zwischen Godot 3 und 4 basiert auf AST‑Signal, API‑Mapping und Belegen aus der offiziellen Dokumentation.
- Unsichere Kandidaten werden nicht sofort als Trainingsdaten verwendet, sondern bleiben im Status
candidate. - Qwen 3.6 ist der Antwort‑Zusammenführer; die Bewertungs‑Kriterien liegen bei Retriever und Validator.
Nächste Schritte
Der nächste Schritt besteht darin, die Markdown‑Struktur von outputs/godot_docs_full/pages stichprobenartig zu analysieren. Da class‑Reference, migration‑ und tutorial‑Dokumente unterschiedliche Strukturen aufweisen, soll zunächst für jeden Dokumenttyp eine eigene Chunk‑Strategie definiert werden, anstatt eine einheitliche Regel anzuwenden.