Wissensgraph – Visualisierung des Wiki-Wissens

Words
679
Reading
4 min
Listen
Play
1M

Hallo zusammen,

ich kann ja meine Finger nicht still halten und muss unbedingt alles ausprobieren, über was ich so stolpere und was mich fasziniert. Da ich momentan die Zeit dazu habe, habe ich mich mal an die Visualisierung meines persönlichen Wikis gemacht. Herausgekommen ist ein interaktiver Wissensgraph, der alle ~2445 Markdown-Seiten meines Wikis als Knoten darstellt und die Verbindungen zwischen den Seiten (Wiki-Links und semantische Ähnlichkeit) als Kanten visualisiert.

Was sind Kanten in dem Zusammenhang? Kanten sind die Verbindungen zwischen den Knoten (Wiki-Seiten). Es gibt zwei Arten von Kanten:

  1. Wiki-Links: Wenn eine Seite auf eine andere Seite verlinkt, dann gibt es eine Kante zwischen diesen beiden Seiten.
  2. Semantische Ähnlichkeit: Wenn zwei Seiten inhaltlich ähnlich sind, z.B. weil sie ähnliche Themen behandeln, dann gibt es auch eine Kante zwischen diesen beiden Seiten.

Herausgekommen ist ein interaktiver Graph, der die Struktur meines LLM-Wikis auf einen Blick zeigt und es ermöglicht, neue Zusammenhänge zu entdecken. Die Knoten sind farbcodiert nach thematischen Clustern (Communities), die durch einen Label-Propagation-Algorithmus erkannt wurden. So kann man z.B. auf einen Blick sehen, welche Seiten thematisch zusammengehören und welche eher isoliert sind:

grafik.png

Die Installation selber hat für mich mein Openclaw Agent übernommen. Der Prompt dafür lautete:

Bitte schau dir die Videos: https://www.youtube.com/watch?v=mHSOsy_usAg und https://www.youtube.com/watch?v=u2b6Gfpe_U4 an. Ist da etwas dabei, dass unsere Arbeit vereinfachen oder verbessern könnte? Wir haben ja ein LLM-Wiki und Meilisearch. Das sit schon ganz gut, aber könnte es noch besser gehen? Außerdem würde ich gerne eine Verlinkung/Bedeutungsnähe grafisch als Vektorwolke sehen.

Daraufhin bekam ich folgenden Plan:

Der Plan ist fertig und liegt als Datei: plans/wiki-search-graph-upgrade.md.

Kurzzusammenfassung:

Phase 1  Meilisearch reparieren (läuft aktuell nicht, muss erst wieder funktionieren)

Phase 2  qmd installieren (lokale Hybrid-Suche: BM25 + Embeddings + Reranking)

 npm install -g @tobilu/qmd
 Collection auf wiki_contents/ anlegen
 Embeddings generieren
 qmd als HTTP-Server auf Port 7701
 Systemd-Service für Autostart
 Integration in index.html (Such-UI mit Auswahl Meilisearch / qmd-Hybrid / qmd-Semantic)

Phase 3  Wissensgraph (Vektorwolke)

 Python-Script generate_knowledge_graph.py:
   Extrahiert alle Wiki-Links aus den .md-Dateien
   Generiert Embeddings (sentence-transformers, all-MiniLM-L6-v2)
   Erkennt Communities (Louvain-Clustering)
 graph.html mit d3.js Force-Directed Graph:
   Nodes = Wiki-Seiten, Größe = Verlinkungsgrad
   Durchgezogene Linien = explizite Links, gestrichelt = semantische Nähe
   Farben = thematische Cluster
   Klickbar  öffnet viewer.html
   Suche/Filter im Graphen

Phase 4  UI-Integration

 Such-UI mit Methoden-Auswahl (Meilisearch/qmd/qmd-semantic)
 Graph-Button in Toolbar von viewer.html + index.html
 Globale Navigation

Phase 5  Dokumentation

 Jeder Befehl dokumentiert (für Nachvollziehbarkeit)
 Neue Wiki-Entities für qmd + Wissensgraph

Geschätzt: 10-15h verteilt

Die Visualisierung ist nun bei mir lokal unter http://raspi4/wiki/graph.html (2D) und http://raspi4/wiki/graph3d.html (3D) erreichbar.
Alles was jetzt folgt, ist die Auflistung der Komponenten, die bei der Umsetzung dieses Plans auf meinem Raspberry Pi 4 beteiligt sind, bzw. angelegt wurden. Da das für einen Blog zu technisch ist (mittlerweile lesen so was ja eigentlich nur noch Bots ;-)), habe ich das Fazit schon mal hier hochgezogen:

Fazit

Ich habe nun eine geile grafische Darstellung all meiner je erstellten und gesammelten Werke: Von Tagebüchern (die ersten habe ich in den 90ern erstellt) über Dokumentationen, philosophischen Betrachtungen, Sketchnotes,...
Ich kann direkt sehen, welche Themen nah beieinander liegen und da mal so ein bischen rumklicken.
Es erweitert dadurch die Übersicht, wo ich überall so dran arbeite.
Die Performance hält sich in Grenzen, ist aber ok.
Die Suchfunktion ist über Meilisearch deutlich schneller, aber sie funktioniert.

Wie oft ich es nutzen werde, wird sich zeigen.

Demnächst wieder mehr hier auf diesem Kanal, so stay tuned,

Achim Mertens


ANHANG


Technischer Aufbau

1. Datengrundlage

Alle .md-Dateien unter /home/achim/.openclaw/workspace/AchimsDaten/wiki_contents/ werden eingelesen – ca. 2445 Seiten.

2. Graph-Generierung

Script: /home/achim/.openclaw/agents/helbardor/generate_knowledge_graph.py

Pipeline:

  1. Dateien einlesen – Rekursiv alle .md-Dateien aus wiki_contents/ parsen
  2. Wiki-Links extrahieren[[Link]]-Syntax aus Markdown parsen → 608 explizite Kanten
  3. ONNX-Embeddings berechnen – MiniLM (Xenova/all-MiniLM-L6-v2, quantisiert, ~23MB) via onnxruntime auf ARM64-CPU
  4. Semantische Ähnlichkeit – Kosinus-Ähnlichkeit zwischen allen Seiten → 355.902 Kanten (Schwellwert > 0.5)
  5. Communities erkennen – Label-Propagation-Algorithmus → 50 thematische Cluster
  6. graph_data.json bauen – 40MB JSON mit Knoten, Kanten, Kategorien, Community-Farben

Ausgabe: /var/www/html/wiki/graph_data.json (wird von beiden Visualisierungen gelesen)

grafik.png
Auszug aus graph_data.json

3. Visualisierung (2D)

Datei: /var/www/html/wiki/graph.html
Technik: d3.js v7 (Force-Directed Graph, SVG)
Features:

  • Farbcodierte Knoten (50 Communities)
  • Orange Linien = Wiki-Links, gestrichelte graue Linien = semantische Ähnlichkeit
  • Hover-Tooltip mit Details
  • Klick öffnet Wiki-Seite
  • Suche + Filter (min. Verbindungen, Wiki-Links/Semantik-Toggle)
  • Zoom + Drag

4. Visualisierung (3D)

Datei: /var/www/html/wiki/graph3d.html
Technik: Three.js via 3d-force-graph (WebGL, GPU-beschleunigt)
Features:

  • Gleiche Daten wie 2D-Version
  • Maus-Drag = 3D-Rotation der Punktwolke
  • Maus-Scroll = Zoomen
  • Klick öffnet Wiki-Seite
  • Suche + Filter (identisch zur 2D-Version)
  • Deutlich performanter als SVG (WebGL statt DOM)

Nutzung

Regeneration

Wenn neue Inhalte zum Wiki hinzugefügt werden:

cd /home/achim/.openclaw/agents/helbardor
source /home/achim/kgraph_env/bin/activate
python3 generate_knowledge_graph.py

Dauer: ca. 15 Minuten (ONNX-Embeddings auf ARM64-CPU).


qmd – Hybrid-Suche für das Wiki

Beschreibung

qmd ("Quick Markdown Search") ist eine hybride Suchmaschine für Markdown-Dateien, die sowohl Keyword- als auch semantische Suche kombiniert. Läuft auf dem Raspi5 als HTTP-Dienst auf Port 7701.

Technischer Aufbau

Installation

sudo npm install -g @tobilu/qmd

Version: 2.5.3, 265 Pakete.

Collection

wiki mit 2410-2445 Dateien (alle .md-Dateien aus wiki_contents/).

Einschränkung

qmd embed (Vektoreinbettungen) funktioniert auf ARM64-CPU nicht zuverlässig – das LLM-Embedding-Modell (embeddinggemma-300M-Q8_0.gguf) bricht nach ~35 Minuten mit "LLM session expired" ab. Daher wird stattdessen ein eigener Python-HTTP-Server verwendet.

Eigenständiger qmd-Server

Script: /home/achim/.openclaw/agents/helbardor/qmd_search_server.py
Port: 7701
Systemd: qmd-search.service
Nginx-Proxy: /wiki/qmd/http://127.0.0.1:7701/

Endpunkte

  • /wiki/qmd/health – Gesundheitscheck
  • /wiki/qmd/status – Status der Collection
  • /wiki/qmd/search?q=...&mode=keyword|hybrid|semantic – Suche mit drei Modi

Integration

Über die Meilisearch-Suche auf der Wiki-Startseite wird parallel auch der qmd-Dienst angesprochen. Die Suche in der Wiki-Startseite (/wiki/index.html) nutzt Meilisearch als primären Suchindex.

Wissensgraph – Visualisierung des Wiki-Wissens | Ecency