Handbücher · Wissensgraphen
Build: Den Graphen extrahieren
Lernziele
- Du exportierst die Wikilinks deines Vaults als Kantenliste
edges.csv. - Du lässt Claude Code mit einem festen Schema aus sechs Kantentypen die Datei
typed_edges.csvschreiben. - Du prüfst eine Stichprobe der typisierten Kanten gegen die Seiten und behebst Fehler im Prompt.
Dieser Build passt in einen Abend und hat drei Teile. Am Ende liegt über dem Vault, den dein AgentEin System, in dem ein Sprachmodell seinen nächsten Schritt selbst wählt: Es ruft Werkzeuge auf, wertet das Ergebnis aus und macht weiter, bis das Ziel erreicht ist.Im Glossar ohnehin pflegt, eine Graph-Schicht, die du abfragen kannst. Diese Lektion bringt dich von einem Ordner voller Markdown zu zwei Dateien mit Kanten. Den Graphen abfragen lädt sie in NetworkX, und Den Graphen in den Loop holen gibt die Abfragen an den Agenten.
Die Idee stammt aus Warum Wissensgraphen: Ein Wiki mit gepflegten Links ist schon ein Wissensgraph · engl. knowledge graphEin Graph, in dem Entitäten die Knoten sind und ihre Beziehungen typisierte Kanten. Fragen nach Zusammenhängen werden so zu Wegen durch den Graphen.Im Glossar. Ihm fehlen nur Typen. Jede Kante sagt „hängt zusammen“, und wie die Seiten zusammenhängen, steht nirgends. Der Plan hat deshalb zwei Schritte: Ein Skript exportiert die einfachen Links, danach typisiert Claude Code die Beziehungen in einem Durchgang über alle Seiten.
Der Link-Graph mit einem Befehl
Das Skript scripts/graph_export.py aus dem Werkzeugkasten des Kurses braucht nur die Standardbibliothek von Python. Du kennst es aus der Lektion Den Graphen exportieren. Starte es im obersten Ordner des Vaults:
python3 scripts/graph_export.py . edges.csv
Auf dem Mac heißt der Befehl python3. Unter Windows nimmst du python oder py. Öffnet der Befehl dort den Microsoft Store, ist Python noch nicht eingerichtet. Das Skript liest jede Seite außerhalb versteckter Ordner und der Ordner raw, templates und scripts. Es löst [[Wikilinks]] gegen die Dateinamen auf, ohne auf Groß- und Kleinschreibung zu achten, und schreibt:
source,target
GraphRAG,RAG
Lost in the Middle,RAG
Links auf Seiten, die es nicht gibt, lässt das Skript weg. Für diesen Build ist das richtig: Eine Kante ins Leere ist eine Lücke, die du schließen solltest. Mit --format graphml entsteht stattdessen eine Datei für Gephi. Was du damit anfängst, steht in Werkzeuge.
Wir haben den Export an einem Test-Vault mit 14 Seiten zu RAG und Graphen ausprobiert. Er meldete 16 Knoten und 40 Kanten. Die zwei zusätzlichen Knoten sind index und log, und 14 der 40 Kanten führen vom Index zu jeder Seite. Das Abfrage-Skript in der nächsten Lektion filtert beide heraus.
Erst das Schema
Die Lektion Graphen mit LLMs bauen sagt: Leg die Ontologie · engl. ontologyDie festgelegten Typen eines Graphen: welche Arten von Entitäten und welche Beziehungen es geben darf. Sie hält die Extraktion einheitlich.Im Glossar fest, bevor du extrahierst. Das gilt auch für einen einzelnen Vault. Für einen Bestand, dessen Seiten Personen, Werkzeuge, Paper und Thesen sind, reichen nach unserer Einschätzung sechs Kantentypen. Jeder weitere Typ ist eine weitere falsche Wahl pro Link. Nimm einen siebten erst auf, wenn der sechste sich bewährt hat.
| Typ | Richtung |
|---|---|
built (gebaut) |
Person → Werkzeug |
authored (verfasst) |
Person → Paper oder These |
uses (nutzt) |
Seite → Werkzeug |
supports (stützt) |
Paper oder These → These |
contradicts (widerspricht) |
Paper oder These → These |
extends (erweitert) |
Seite → Seite |
Die Typnamen bleiben englisch, weil sie als Werte in einer Datei landen. supports, contradicts und extends kennst du aus der Lektion Typisierte Links.
Der Extraktions-Prompt
Starte Claude Code im obersten Ordner des Vaults und gib diesen Auftrag:
Lies jede Markdown-Seite unter wiki/, ohne templates und raw.
Baue auf den einfachen Wikilinks eine Liste typisierter Kanten auf.
Notiere für jede Seite ihren Typ aus dem Frontmatter (person, tool,
claim, concept, paper, note). Schreib dann eine Zeile pro Beziehung,
die der Text belegt, und nutze nur diese Kantentypen:
built person -> tool
authored person -> paper oder claim
uses Seite -> tool
supports paper oder claim -> claim
contradicts paper oder claim -> claim
extends Seite -> Seite
Regeln:
- Quelle und Ziel müssen beide existierende Seitennamen sein, genau
wie die Dateinamen geschrieben, ohne .md.
- Halte nur fest, was eine Seite aussagt. Ist die Beziehung deine
Schlussfolgerung und keine Aussage der Seite, lass sie weg.
- Hänge die Zeilen an typed_edges.csv an, mit der Kopfzeile
source,target,type,found_in. found_in ist die Seite, auf der die
Beziehung steht.
Arbeite in Stapeln von zwanzig Seiten und hänge nach jedem Stapel an,
damit ein Abbruch die bisherige Arbeit behält. Melde am Ende die
Zeilenzahl und die fünf am stärksten verbundenen Knoten.Zeilen 1-2
Nur die Seiten unter wiki/. Rohmaterial und Vorlagen enthalten kein geprüftes Wissen und bleiben draußen.
Zwei Zeilen tragen die meiste Arbeit. Die Pflicht auf existierende Seitennamen hält beide Dateien im selben Namensraum, und erst dadurch lassen sie sich in einen gemeinsamen Graphen laden. Die Regel „Halte nur fest, was eine Seite aussagt“ ist die Regel für typisierte Links aus dem Vault. Ohne sie füllt das Modell Lücken mit Vermutungen, und der Graph sieht danach genauso sicher aus wie vorher.
Was herauskommt
In unserem Test-Vault lief der Prompt mit Claude Code 2.1.322 und dem Modell Haiku. Der Lauf kostete 0,03 USD und schrieb neun Zeilen (Stand: Nov. 2026). Ein Auszug:
source,target,type,found_in
Jerry Liu,LlamaIndex,built,Jerry Liu
RAG,LlamaIndex,uses,RAG
Lost in the Middle,Lange Kontexte ersetzen RAG,contradicts,Lost in the Middle
Die Spalte found_in ist die Provenienz · engl. provenanceDie Herkunft einer Angabe: aus welcher Quelle, Seite oder welchem Satz sie stammt. In einem Wissensgraphen hält die Provenienz fest, warum eine Kante existiert.Im Glossar. Sie beantwortet die Frage, warum der Graph etwas glaubt. Willst du mehr davon, verlange JSONL: ein Objekt pro Zeile mit denselben Feldern und einem zusätzlichen Feld quote für den Satz, aus dem die Kante stammt. Die nächste Lektion lädt CSV, also bleibt CSV die Hauptausgabe.
Erst lesen, dann vertrauen
Bevor du weitermachst, prüfst du zwanzig Zeilen gegen die Seiten, aus denen sie stammen. Rechne mit ein paar Kanten, die formal belegt, aber nutzlos sind, und mit der einen oder anderen verdrehten Richtung. In unserem Lauf meldete das Modell 15 Seiten, im Ordner lagen 14. Die Kante Wissensgraph → Neo4j vom Typ uses stützt sich auf den Satz „Speichern lässt er sich in Neo4j“. Das Modell nannte sie selbst als Stelle, an der es über den Wortlaut hinausging.
Was ist mit dieser Kante?
Jede Zeile stammt aus einer typisierten Kantenliste. Ordne sie ein.
Noch offen (6)
- Jerry Liu → LlamaIndex, built. Die Seite Jerry Liu sagt, er hat LlamaIndex mitgegründet.
- Lost in the Middle → Nelson Liu, authored.
- Lost in the Middle → Lange Kontexte ersetzen RAG, contradicts. Das Paper steht auf der Seite der These als Gegenbeleg.
- Jerry Liu → Lost in the Middle, authored, found_in RAG. Beide Seiten hängen über RAG zusammen.
- Graphen helfen bei Multi-Hop-Fragen → From Local to Global, supports.
- GraphRAG → RAG, extends. Die Seite GraphRAG sagt, es erweitert RAG um einen Wissensgraphen.
Stimmt (0)
Richtung verdreht (0)
Nicht belegt (0)
Findest du solche Fehler, korrigierst du den Prompt und lässt ihn neu laufen. Die Zeilen von Hand zu reparieren hilft nur einmal. Ein Durchgang über ein paar hundert Seiten dauert Minuten. Danach lädst du das Ergebnis in Den Graphen abfragen.
Merksätze
- Die Wikilinks liefern den Graphen schon. Der Export macht daraus
edges.csv, Links ins Leere fallen weg. - Das Schema kommt vor der Extraktion. Sechs Kantentypen mit fester Richtung reichen für Personen, Werkzeuge, Paper und Thesen.
- Existierende Seitennamen als Endpunkte halten beide Dateien in einem Namensraum.
- „Nur Belegtes“ verhindert, dass das Modell seine Vermutungen als Kanten ablegt.
found_inhält fest, woher jede Kante kommt. - Eine Stichprobe von zwanzig Zeilen gehört vor jede weitere Nutzung. Fehler behebst du im Prompt.
Prüf dich selbst
Denkfrage
Warum verlangt der Prompt, dass Quelle und Ziel exakt die Dateinamen ohne .md sind?
Nur dann landen die typisierten Kanten im selben Namensraum wie die Kanten aus dem Export. Das Abfrage-Skript lädt beide Dateien in einen Graphen. Schreibt das Modell „Lost in the Middle (Paper)“, entsteht ein zweiter Knoten, und die typisierte Kante hängt an keiner bekannten Seite.
Denkfrage
Ein Fünftel deiner Stichprobe hat die Richtung verdreht. Was tust du?
Du änderst den Prompt, zum Beispiel mit einem Beispiel pro Kantentyp oder einer ausdrücklichen Regel zur Richtung, und lässt den Durchgang neu laufen. Repariertest du die Zeilen von Hand, wäre der Fehler beim nächsten Lauf wieder da.
Prüf dich selbst
Selbst nachweisen
0 von 3 erledigt
Quellen
- Python unter Windows verwenden
Python install manager, die Befehle python, py und python3, Abschnitt Troubleshooting zum Store-Aufruf.