Handbücher · Wissensgraphen

Build: Den Graphen extrahieren

Lektion 6/910 Min. LesezeitProfi

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.csv schreiben.
  • 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.

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_in hä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?

        Denkfrage

        Ein Fünftel deiner Stichprobe hat die Richtung verdreht. Was tust du?

        Prüf dich selbst

        1. 1Was passiert beim Export mit einem Link auf eine Seite, die es nicht gibt?
        2. 2Wozu dient die Spalte found_in?
        3. 3Du willst einen siebten Kantentyp „kritisiert“ ergänzen. Was spricht dagegen?
        4. 4Der Bericht nach der Extraktion nennt 15 Seiten, im Ordner liegen 14. Was folgerst du?

        Selbst nachweisen

        0 von 3 erledigt

        Quellen

        1. Python unter Windows verwenden · Python Software Foundation, Stand: Nov. 2026

          Python install manager, die Befehle python, py und python3, Abschnitt Troubleshooting zum Store-Aufruf.

        Dein Fortschritt bleibt nur in diesem Browser gespeichert.