222 lines
7.9 KiB
Markdown
222 lines
7.9 KiB
Markdown
|
|
<!-- FILE: konzept_zielbild_kausales_retrieval_mindnet.md -->
|
|||
|
|
---
|
|||
|
|
id: konzept_zielbild_kausales_retrieval_mindnet
|
|||
|
|
title: Konzept & Zielbild – Kausalketten-Prüfung und kausales Retrieval für Mindnet (Qdrant)
|
|||
|
|
type: concept
|
|||
|
|
status: draft
|
|||
|
|
created: 2026-01-13
|
|||
|
|
lang: de
|
|||
|
|
tags:
|
|||
|
|
- mindnet
|
|||
|
|
- obsidian
|
|||
|
|
- knowledge_graph
|
|||
|
|
- causal_chains
|
|||
|
|
- retrieval
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Konzept & Zielbild – Kausalketten-Prüfung und kausales Retrieval für Mindnet (Qdrant)
|
|||
|
|
|
|||
|
|
## Ziel
|
|||
|
|
Mindnet soll zu beliebigen Fragestellungen **die richtigen Notizen** nicht nur über semantische Nähe (Embeddings), sondern über **kausale Relevanz** finden.
|
|||
|
|
Parallel soll ein Authoring-Assistent helfen, Obsidian-Notizen so anzulegen, dass Kausalketten **formal konsistent** und **traversierbar** sind.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Ausgangslage / Problem
|
|||
|
|
- Der Wissensgraph wird in Qdrant gepflegt; aktuelles Retrieval basiert primär auf **Gewichtung + semantischer Nähe**.
|
|||
|
|
- Ergebnis: thematisch nahe Treffer, aber oft **nicht antwortrelevant** (fehlende Ursachen-/Folgenbezüge).
|
|||
|
|
- Obsidian-Notizen enthalten Edges (Vorwärts/Rückwärts); Qualität hängt von:
|
|||
|
|
- korrekter Relation (Kausalität vs Chronologie),
|
|||
|
|
- konsistenten Node-Namen,
|
|||
|
|
- Inversen (gegenläufigen Beziehungen),
|
|||
|
|
- sauberer Typisierung ab.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Grundannahmen
|
|||
|
|
- Viele Antworten benötigen einen **Erklärungspfad** statt eines Einzel-Treffers:
|
|||
|
|
- Ursache → Mechanismus/Transformation → Entscheidung → Wirkung → Rückkopplung
|
|||
|
|
- Kausalität ist im Graph als gerichtete Kanten modelliert und über inverse Typen **bidirektional navigierbar**:
|
|||
|
|
- `resulted_in` ⇄ `caused_by`
|
|||
|
|
- `followed_by` ⇄ `preceeded_by`
|
|||
|
|
- `derived_from` ⇄ `source_of`
|
|||
|
|
- `impacts` ⇄ `impacted_by`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## System-Zielbild (2 Hauptkomponenten)
|
|||
|
|
|
|||
|
|
### 1) Authoring-Assistent (Obsidian Graph Linter + Chain Explorer)
|
|||
|
|
Zweck: Qualitätssicherung beim Erstellen/Ändern von Notizen.
|
|||
|
|
|
|||
|
|
**Kernfunktionen**
|
|||
|
|
- **Formale Prüfungen**
|
|||
|
|
- Canonical Edge vs Alias (Normalisierung nach `edge_vocabulary`)
|
|||
|
|
- Zielnoten existieren / leere Links als `open_question` oder TODO markieren
|
|||
|
|
- Tippfehler/Node-Splitting erkennen (mehrere Schreibweisen desselben Knoten)
|
|||
|
|
- Edge-Typ zulässig für Note-Typ (z.B. keine Kausal-Edges aus `open_question`)
|
|||
|
|
- **Semantische Plausibilität (regelbasiert)**
|
|||
|
|
- Chronologie (`followed_by`) ≠ Kausalität (`resulted_in`)
|
|||
|
|
- Hub-/Index-Noten nutzen primär `related_to/consists_of` statt Kausalität
|
|||
|
|
- Prinzipien bevorzugt `derived_from/based_on` statt pauschal `caused_by`
|
|||
|
|
- **Ketten-Integrität**
|
|||
|
|
- „Gap“-Warnungen (Sprünge ohne Zwischennoten)
|
|||
|
|
- Zyklen ohne Sinn (A caused_by B und B caused_by A)
|
|||
|
|
- Mehrfachursachen transparent markieren
|
|||
|
|
|
|||
|
|
**Outputs**
|
|||
|
|
- Lint-Report pro Note (Fehler/Warnung/Empfehlung)
|
|||
|
|
- Chain-Preview (2–4 Schritte vorwärts/rückwärts)
|
|||
|
|
- Optional: Auto-Fix-Vorschläge (Alias→Canonical, Link-Normalisierung, Inversen ergänzen)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2) Mindnet Retrieval: Hybrid aus Embeddings + Graph Traversal + Reranking
|
|||
|
|
Zweck: Aus einer Frage automatisch eine **kleine, kausal zusammenhängende** Menge von Notizen auswählen.
|
|||
|
|
|
|||
|
|
**Pipeline**
|
|||
|
|
1. **Seed Retrieval (Qdrant Embeddings)**
|
|||
|
|
- Top-K Kandidaten (z.B. 30) als Startpunkte
|
|||
|
|
- Optional: Filter nach Node-Typ (z.B. bei „Welche Entscheidungen…“)
|
|||
|
|
|
|||
|
|
2. **Intent-Klassifikation (Frage → Richtung & Kettenform)**
|
|||
|
|
- Regelbasiert (Start) oder später ML-Classifier
|
|||
|
|
- Output: `{direction, preferred_edges, target_types, max_hops, need_explanation_chain}`
|
|||
|
|
|
|||
|
|
3. **Graph Expansion (Multi-Source Multi-Hop Traversal)**
|
|||
|
|
- Expandiert von Seeds 1–3 Hops (typisch 2–4)
|
|||
|
|
- Richtungslogik:
|
|||
|
|
- „Warum/Ursache“ → rückwärts (`caused_by`, `preceeded_by`, `derived_from`)
|
|||
|
|
- „Folgen/Ergebnis“ → vorwärts (`resulted_in`, `followed_by`, `impacts`)
|
|||
|
|
- „Entwicklung/Veränderung“ → beides (forward + backward)
|
|||
|
|
- Ergebnis: Pfad-Kandidaten (nicht nur Nodes)
|
|||
|
|
|
|||
|
|
4. **Reranking (Antwortrelevanz)**
|
|||
|
|
- Score = Semantik + Pfadqualität + Antwortform-Passung
|
|||
|
|
|
|||
|
|
5. **Antwort-Bausteine (Minimal Explanation Subgraph)**
|
|||
|
|
- Merged Top-Pfade zu einem kleinen Subgraph (z.B. 8–12 Nodes)
|
|||
|
|
- Pruning nach zentralen Knoten und erklärender Kettenform
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Spezifikation: Intent → Traversal Mode (Heuristik)
|
|||
|
|
|
|||
|
|
### Intent-Struktur
|
|||
|
|
- `direction`: `backward | forward | both`
|
|||
|
|
- `preferred_edges`: Menge Edge-Typen
|
|||
|
|
- `target_types`: Menge Node-Typen
|
|||
|
|
- `max_hops`: int
|
|||
|
|
- `need_explanation_chain`: bool
|
|||
|
|
|
|||
|
|
### Heuristik (Deutsch)
|
|||
|
|
- **Warum / Ursache / Auslöser / wodurch / wie kam es dazu**
|
|||
|
|
- direction: backward
|
|||
|
|
- preferred_edges: `{caused_by, preceeded_by, derived_from}`
|
|||
|
|
- target_types: `{experience, decision, strategy, state}`
|
|||
|
|
- max_hops: 2–4
|
|||
|
|
- **Was führte zu / Folgen / Auswirkungen / resultierte in**
|
|||
|
|
- direction: forward
|
|||
|
|
- preferred_edges: `{resulted_in, followed_by, impacts}`
|
|||
|
|
- target_types: `{decision, strategy, state, principle}`
|
|||
|
|
- max_hops: 2–4
|
|||
|
|
- **Entwicklung / Veränderung / Weltbild / Glaubenssatz / Charakter**
|
|||
|
|
- direction: both
|
|||
|
|
- preferred_edges backward: `{caused_by, derived_from}`
|
|||
|
|
- preferred_edges forward: `{resulted_in, impacts}`
|
|||
|
|
- target_types: `{principle, state, strategy, decision}`
|
|||
|
|
- max_hops: 2–4
|
|||
|
|
- need_explanation_chain: true
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Spezifikation: Traversal (Weighted Multi-Hop)
|
|||
|
|
|
|||
|
|
### Gewichte (Startwerte)
|
|||
|
|
**Edge Weights**
|
|||
|
|
- `resulted_in`: 1.00
|
|||
|
|
- `caused_by`: 1.00
|
|||
|
|
- `derived_from`: 0.90
|
|||
|
|
- `source_of`: 0.90
|
|||
|
|
- `impacts`: 0.70
|
|||
|
|
- `impacted_by`: 0.70
|
|||
|
|
- `followed_by`: 0.50
|
|||
|
|
- `preceeded_by`: 0.50
|
|||
|
|
- `related_to`: 0.25
|
|||
|
|
- `part_of/consists_of`: 0.25
|
|||
|
|
|
|||
|
|
**Node-Type Weights**
|
|||
|
|
- `experience`: 1.00
|
|||
|
|
- `decision`: 1.00
|
|||
|
|
- `strategy`: 0.90
|
|||
|
|
- `state`: 0.85
|
|||
|
|
- `principle`: 0.85
|
|||
|
|
- `insight(hub)`: 0.35
|
|||
|
|
- `open_question/hypothesis/white_spot`: 0.00 (Filter)
|
|||
|
|
|
|||
|
|
**Hop Decay**
|
|||
|
|
- `hop_decay(h) = 0.75^h`
|
|||
|
|
|
|||
|
|
### Traversal-Logik (pseudocode-nah)
|
|||
|
|
- Multi-Source-Expansion ab Seeds
|
|||
|
|
- Pfade priorisiert nach kumuliertem Pfadscore
|
|||
|
|
- `visited` verhindert endlose Wiederholungen
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Spezifikation: Reranking (Semantik + Kausalität + Antwortform)
|
|||
|
|
|
|||
|
|
### Final Score
|
|||
|
|
- `final_score(path) = alpha*semantic + beta*coherence + gamma*shape_match`
|
|||
|
|
|
|||
|
|
Startwerte:
|
|||
|
|
- `alpha = 0.55` (Semantik)
|
|||
|
|
- `beta = 0.30` (Kausal-Kohärenz)
|
|||
|
|
- `gamma = 0.15` (Passung zur Frageform)
|
|||
|
|
|
|||
|
|
**Causal Coherence**
|
|||
|
|
- Bonus, wenn Pfad Kausal-Edges enthält (`resulted_in/caused_by/derived_from`)
|
|||
|
|
- Malus, wenn nur Navigation/Chronologie enthalten ist
|
|||
|
|
- Bonus für Kernform: `experience → decision → (state|strategy|principle)`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Output: Minimal Explanation Subgraph (MES)
|
|||
|
|
Ziel: nicht eine Liste, sondern ein erklärendes Subgraph-Set.
|
|||
|
|
|
|||
|
|
**Regeln**
|
|||
|
|
- Top-Pfade (z.B. 3–5) mergen
|
|||
|
|
- max_nodes: 8–12
|
|||
|
|
- Pruning:
|
|||
|
|
- Hubs raus, wenn sie nur Navigation sind
|
|||
|
|
- Decision/Principle/State bevorzugen (Antwortanker)
|
|||
|
|
- Bridge-Nodes behalten (in mehreren Pfaden vorkommend)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Authoring-Regeln (Graph-Hygiene) – harte Leitplanken
|
|||
|
|
1. Kausalität nur auf atomaren Noten (`experience/decision/state/strategy/principle`)
|
|||
|
|
2. Hubs/Indexnoten: primär `related_to/consists_of` (keine „Hub verursacht X“-Kausalität)
|
|||
|
|
3. Inverse Edges müssen erzeugbar sein (oder Build-Step erzeugt sie deterministisch)
|
|||
|
|
4. Chronologie strikt trennen (`followed_by` ≠ `resulted_in`)
|
|||
|
|
5. Prinzipien: `derived_from/based_on` für Herkunft (statt pauschal `caused_by`)
|
|||
|
|
6. Leere Links als `open_question` oder TODO ohne Kausal-Edge
|
|||
|
|
7. Kanonische Dateinamen: Node-Splitting verhindern
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Nutzen / Erfolgskriterien
|
|||
|
|
- **Bessere Answer Relevance**: Mindnet liefert Knoten mit erklärender Kausalstruktur statt nur thematischer Nähe
|
|||
|
|
- **Erklärbarkeit**: Antwort kann mit Pfad(en) begründet werden
|
|||
|
|
- **Debuggability**: Fehlantworten lassen sich auf falsche/fehlende Kanten zurückführen
|
|||
|
|
- **Authoring-Effizienz**: Assistent verhindert typische Edge-Fehler früh
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Offene Punkte (für nächste Iteration)
|
|||
|
|
- Intent-Taxonomie (8–12 Frageklassen) finalisieren und evaluieren
|
|||
|
|
- Welche Edges werden als „kausal“ im engeren Sinne akzeptiert?
|
|||
|
|
- Welche Node-Typen sind Pflichtmetadaten für Mindnet?
|
|||
|
|
- Evaluation: Retrieval-Qualität mit/ohne Traversal (A/B)
|
|||
|
|
|