8.2 KiB
mindnet – Knowledge Design
Version: 1.4.0 (aktualisiert 2025-10-06)
1. Gesamtziel und Systemverständnis
mindnet ist ein lokales Wissensnetzwerk, das alle meine Notizen, Projekte, Gedanken, Erfahrungen und Pläne als Markdown-Dateien speichert, automatisch importiert, semantisch in Chunks zerlegt und als Graph-Struktur in Qdrant ablegt.
Es ist die Grundlage für ein agentenfähiges, lokal betriebenes LLM-System, das meine Daten verknüpft, abfragt und erweitert.
Zentrale Ziele
- Vollständige Repräsentation persönlichen Wissens in strukturierter, maschinenlesbarer Form
- Reproduzierbare Verarbeitung: Import → Chunking → Embedding → Edges → Graph
- Verlustfreie Roundtrip-Fähigkeit (Import ⇄ Export)
- Erweiterbarkeit für Agenten, RAG-Retriever und semantische Suche
Prinzipien
- Deterministisch: IDs, Hashes und Edges wiederholbar
- Portabel: Markdown + YAML
- Robust: fehlertoleranter Parser
- Idempotent: keine Duplikate bei Re-Import
- Erweiterbar: neue Typen und Edge-Arten ohne Migration
2. YAML-Frontmatter-Schema
| Feld | Typ | Beschreibung |
|---|---|---|
title |
string | Menschlich lesbarer Titel |
id |
string | Eindeutige Note-ID (Slug) |
type |
enum | concept, thought, experience, task, project, journal, person, meeting, milestone |
status |
enum | draft, active, done, archived |
created |
date | ISO-Datum |
updated |
date | Letzte Änderung |
area |
string | Themen- oder Lebensbereich |
project |
string | Zugehöriges Projekt |
tags |
list | Strukturierte Tags (area/…, topic/…) |
depends_on |
list | IDs anderer Notizen |
assigned_to |
list | Beteiligte Personen |
embedding_exclude |
bool | Falls true, keine Embeddings |
hash_mode |
enum | Hash-Modus beim Import (body, frontmatter, full) |
priority |
enum/int | 1–5 oder low / med / high |
effort_min, due |
int/date | Aufwand / Termin |
aliases |
list | Alternative IDs |
lang |
string | ISO-Sprachcode |
source |
string | Herkunft / Referenzquelle |
Pflichtfelder: title, id, type, status, created
Optionale Felder: alle übrigen
3. Dateinamen und Ordner
- Format:
YYYY-MM-DD_title.mdoderslug.md - Strukturierte Ordner:
10_thoughts/,20_concepts/,30_projects/,40_experiences/, …
- Alle Pfade relativ; Unterstriche statt Leerzeichen
4. Link- und Edge-Design
Verlinkungen
- Wikilinks:
[[note-id]]oder[[Titel|note-id]] - Automatische Edges aus Text und Frontmatter
Edge-Typen in Qdrant
| Typ | Bedeutung | Quelle | Scope |
|---|---|---|---|
belongs_to |
Chunk → Note | intern | chunk |
prev / next |
Reihenfolge | intern | chunk |
references |
explizite Wikilinks | Text | chunk |
backlink |
Gegenkante zu references |
abgeleitet | note |
depends_on |
YAML-Abhängigkeiten | YAML | note |
assigned_to |
YAML-Zuweisung | YAML | note |
unresolved |
Ziel fehlt (Stub) | abgeleitet | chunk |
Edge-Schlüssel
source_id,target_id,kind,scope,note_id- Dedup-Schlüssel: Kombination aus
(kind, source_id, target_id, scope)
5. Chunking-Modell
Chunk-Datenstruktur
| Feld | Beschreibung |
|---|---|
note_id |
Zugehörige Note |
chunk_index |
Laufende Nummer |
text |
Originalabschnitt |
window |
Text + Overlap links/rechts |
overlap_left |
Länge des linken Overlaps |
overlap_right |
Länge des rechten Overlaps |
embedding |
384-dimensionaler Vektor |
tokens |
Tokenanzahl (optional) |
Chunking-Regeln (aus chunking_strategy.md)
- Trennung nach Absätzen, Überschriften, Listen, Tabellen
- Token-Zielgröße 350–500 (max 600)
- Overlap: 30–40 % für semantische Kohärenz
- Overlap wird in
windowintegriert, sodasstext ≠ window
6. Hash-Strategie und Änderungsverfolgung
Zweck: Nur bei realer Inhaltsänderung re-indexieren
| Umgebungsvariable | Beschreibung |
|---|---|
MINDNET_HASH_COMPARE |
Vergleichsquelle (Body, Full, Frontmatter) |
MINDNET_HASH_SOURCE |
Rohtext vs. geparst (raw / parsed) |
MINDNET_HASH_NORMALIZE |
Normalisierung (canonical / none) |
Basismodi
body→ Nur Textkörperfrontmatter→ Nur Metadatenfull→ Kombination- Hash = SHA-256(canonicalized_input)
Bei Änderung: Re-Import, neue Embeddings, Edges werden aktualisiert.
7. Qdrant-Speicherstruktur
| Collection | Inhalt | Primärfelder | Embedding |
|---|---|---|---|
mindnet_notes |
Notes mit Fulltext & Hash | note_id |
optional |
mindnet_chunks |
Chunks mit Text, Window, Embedding | chunk_id, note_id |
384 d |
mindnet_edges |
Graphkanten | edge_id, source_id, target_id |
— |
Upsert-Strategie
- Idempotente UUIDv5-IDs
- Keine Duplikate durch deterministische Signaturen
purge-before-upsertzur Bereinigung
Indizes
- notes:
note_id,hash_signature - chunks:
note_id,chunk_index - edges:
(kind, source_id, target_id, scope)
8. Fehler-Toleranz und Parser-Robustheit
- UTF-8 mit Fallback: ersetzt ungültige Bytes (
errors="replace") - Ignoriert Nullbytes, BOM, exotische Zeilenenden
- Erkennt defekte oder leere YAML-Header und überspringt sie
- Logt Problemfälle (
read_markdown failed,make_note_payload returned non-dict) - Bei Fehlern: Import → warn → continue
9. Tests & Validierung
Integrationstests
- Roundtrip: Import → Export → Compare (
compare_vaults.py) - Chunk-Integrität:
verify_chunks_integrity.py - Hash-Audit:
hash_reporter.py - Window-Vergleich:
check_chunks_window_vs_text.py
Erwartete Ergebnisse
- Alle Notes werden erkannt
window ≠ textbei > 60 % der Chunks- Roundtrip-Vergleich liefert „OK“
- Edge-Anzahl entspricht Modell (belongs_to = #Chunks, next/prev ≈ #Chunks – 1)
10. Export & Roundtrip-Verhalten
export_markdown.pyerzeugt identische Markdown-Dateien- Schreibt YAML + Body in korrekter Reihenfolge
- Roundtrip-Prüfung (
compare_vaults.py) validiert:- vollständigen Body
- unveränderte Hash-Signatur
- gleiche Chunkzahl
11. Graph-Schicht und WP-04-Integration
- Qdrant fungiert als Graph-Backend
graph/service.py(WP-04): stellt API für Mehrhop-Abfragen bereit- Unterstützt:
expand(note_id, hops=2)resolve_unresolved()neighbors(kind=…)
- Grundlage für spätere Retriever-Funktionen (LLM / Agenten)
12. Agenten- und LLM-Integration
Retriever-Pipeline
- Suche top-k Chunks (cosine distance)
- Erweiterung um Edges (
references,backlinks) - Kontext-Assembling via
window-Text - Prompt-Generierung
Agent-Use-Cases
- Automatisches Tagging (
type,status) - Vorschläge für neue Edges
- Auflösen von
unresolved-Referenzen - Auto-Import externer Quellen (MediaWiki, PDFs, Webseiten)
13. Erweiterbarkeit
- Neue Edge-Typen:
inspired_by,relates_to,contradicts - Neue Note-Typen:
decision,resource,recommendation - Embedding-Engines austauschbar (MiniLM → LaBSE → E5)
- Versionierte Chunking-Strategien (
chunk_config.py)
14. Qualitätssicherung und Best Practices
- Validierung vor Upsert
- Keine Leer-Chunks
- Vollständige Metadaten in Notes
- Tests in
tests/automatisch ausführbar (run_e2e_roundtrip.sh) - Ergebnis: „Roundtrip OK“ und
verify_chunks_integrity= OK
15. Änderungsverlauf
v1.4.0 (2025-10-06)
- Neu:
windowvstextFeld inmindnet_chunks - Neu: Hash-Modi (
body,frontmatter,full) mit Env-Steuerung - Neu: Baseline-Modus für Vergleich
- Parser → fehlertolerant (UTF-8 replace)
- Roundtrip-Test vollständig integriert
- Graph-Service und Mehrhop-Abfragen (WP-04-Vorbereitung)
purge-before-upsertund--note-scope-refsParameter ergänzt
v1.3.0 (2025-09-09)
- Hash-Normalisierung und Edge-Scope
- Roundtrip-Tests, Agenten-Integration
v1.2.0 (2025-09-02)
- Grundstruktur des Knowledge-Designs