2025-12-10 18:55:38 +01:00
# mindnet v2.4 – Pipeline Playbook
2025-12-12 22:54:59 +01:00
**Datei:** `docs/mindnet_pipeline_playbook_v2.6.md`
**Stand:** 2025-12-12
**Status:** **FINAL** (Inkl. Smart Edges & Traffic Control)
2025-12-10 18:55:38 +01:00
**Quellen:** `mindnet_v2_implementation_playbook.md` , `Handbuch.md` , `chunking_strategy.md` , `docs_mindnet_retriever.md` , `mindnet_admin_guide_v2.4.md` .
2025-12-07 12:07:03 +01:00
2025-12-08 18:01:35 +01:00
---
< details >
< summary > 📖 < b > Inhaltsverzeichnis (Klicken zum Öffnen)< / b > < / summary >
2025-12-10 18:55:38 +01:00
- [mindnet v2.4 – Pipeline Playbook ](#mindnet-v24--pipeline-playbook )
2025-12-09 17:11:03 +01:00
- [](#)
2025-12-08 18:01:35 +01:00
- [1. Zweck \& Einordnung ](#1-zweck--einordnung )
- [2. Die Import-Pipeline (Runbook) ](#2-die-import-pipeline-runbook )
2025-12-12 22:54:59 +01:00
- [2.1 Der 13-Schritte-Prozess (Async + Smart) ](#21-der-13-schritte-prozess-async--smart )
2025-12-08 18:01:35 +01:00
- [2.2 Standard-Betrieb (Inkrementell) ](#22-standard-betrieb-inkrementell )
- [2.3 Deployment \& Restart (Systemd) ](#23-deployment--restart-systemd )
- [2.4 Full Rebuild (Clean Slate) ](#24-full-rebuild-clean-slate )
- [3. Chunking \& Payload-Aufbau ](#3-chunking--payload-aufbau )
- [3.1 Chunk-Profile ](#31-chunk-profile )
- [3.2 Payload-Felder ](#32-payload-felder )
- [4. Edge-Erzeugung (Die V2-Logik) ](#4-edge-erzeugung-die-v2-logik )
- [4.1 Prioritäten \& Provenance ](#41-prioritäten--provenance )
2025-12-12 22:54:59 +01:00
- [4.2 Smart Edge Allocation (WP15) ](#42-smart-edge-allocation-wp15 )
- [4.3 Typ-Defaults ](#43-typ-defaults )
2025-12-08 18:01:35 +01:00
- [5. Retriever, Chat \& Generation (RAG Pipeline) ](#5-retriever-chat--generation-rag-pipeline )
- [5.1 Retrieval (Hybrid) ](#51-retrieval-hybrid )
2025-12-10 18:55:38 +01:00
- [5.2 Intent Router (WP06/07) ](#52-intent-router-wp0607 )
2025-12-09 17:11:03 +01:00
- [5.3 Context Enrichment ](#53-context-enrichment )
2025-12-12 22:54:59 +01:00
- [5.4 Generation (LLM) mit Traffic Control ](#54-generation-llm-mit-traffic-control )
2025-12-11 16:58:23 +01:00
- [5.5 Active Intelligence Pipeline (Neu in v2.4) ](#55-active-intelligence-pipeline-neu-in-v24 )
2025-12-08 18:01:35 +01:00
- [6. Feedback \& Lernen (WP04c) ](#6-feedback--lernen-wp04c )
- [7. Quality Gates \& Tests ](#7-quality-gates--tests )
- [7.1 Pflicht-Tests vor Commit ](#71-pflicht-tests-vor-commit )
- [7.2 Smoke-Test (E2E) ](#72-smoke-test-e2e )
- [8. Ausblick \& Roadmap (Technische Skizzen) ](#8-ausblick--roadmap-technische-skizzen )
2025-12-09 17:11:03 +01:00
- [8.1 WP-08: Self-Tuning (Skizze) ](#81-wp-08-self-tuning-skizze )
2025-12-12 22:54:59 +01:00
- [16. Workpackage Status (v2.6.0) ](#16-workpackage-status-v260 )
2025-12-08 18:01:35 +01:00
2025-12-08 18:50:54 +01:00
< / details >
2025-12-07 12:07:03 +01:00
---
## 1. Zweck & Einordnung
2025-12-10 18:55:38 +01:00
Dieses Playbook ist das zentrale operative Handbuch für die **mindnet-Pipeline** . Es beschreibt, wie Daten vom Markdown-Vault in den Wissensgraphen (Qdrant) gelangen, wie der Retriever betrieben wird und wie die **RAG-Generierung** (inkl. Decision Engine & Interviewer) funktioniert.
2025-12-07 12:07:03 +01:00
**Zielgruppe:** Dev/Ops, Tech-Leads.
**Scope:**
2025-12-12 22:54:59 +01:00
* **Ist-Stand (WP01– WP15):** Async Import, Smart Chunking, Edge-Erzeugung, Hybrider Retriever, RAG-Chat (Hybrid Router), Feedback Loop, Frontend, Draft Editor, Active Intelligence.
2025-12-09 17:11:03 +01:00
* **Roadmap (Ausblick):** Technische Skizze für Self-Tuning (WP08).
2025-12-07 12:07:03 +01:00
---
## 2. Die Import-Pipeline (Runbook)
2025-12-08 16:14:52 +01:00
Der Import ist der kritischste Prozess ("Data Ingestion"). Er muss **deterministisch** und **idempotent** sein. Wir nutzen `scripts/import_markdown.py` als zentralen Entrypoint.
2025-12-07 12:07:03 +01:00
2025-12-12 22:54:59 +01:00
### 2.1 Der 13-Schritte-Prozess (Async + Smart)
Seit v2.6 läuft der Import vollständig asynchron, nutzt intelligente Kantenvalidierung (Smart Edges) und drosselt sich selbst ("Traffic Control").
2025-12-07 12:07:03 +01:00
1. **Markdown lesen:** Rekursives Scannen des Vaults.
2. **Frontmatter extrahieren:** Validierung von Pflichtfeldern (`id`, `type` , `title` ).
3. **Typauflösung:** Bestimmung des `type` via `types.yaml` (Prio: Frontmatter > Pfad > Default).
4. **Note-Payload generieren:** Erstellen des JSON-Objekts für `mindnet_notes` .
2025-12-12 22:54:59 +01:00
5. **Chunking anwenden:** Zerlegung des Textes basierend auf dem `chunk_profile` des Typs (z.B. `sliding_smart_edges` ).
6. **Smart Edge Allocation (Neu in WP15):**
2025-12-13 06:37:24 +01:00
* Wenn in `types.yaml` aktiviert (`enable_smart_edge_allocation`):
* Der `SemanticAnalyzer` sendet jeden Chunk an das LLM.
* **Resilienz & Traffic Control:**
* **Priority:** Der Request nutzt `priority="background"` .
* **Semaphore:** Eine globale Semaphore (Limit: 2, konfigurierbar) verhindert System-Überlastung.
* **Retry & Backoff:** Bei Fehlern (Timeouts) wird bis zu 5-mal mit exponentieller Wartezeit wiederholt.
* **JSON Repair:** Der Analyzer erkennt fehlerhaftes JSON (z.B. Dict statt Liste) und repariert es automatisch.
* **Safety Fallback:** Schlagen alle Versuche fehl, werden die Kanten *allen* Chunks zugewiesen, um Datenverlust zu vermeiden.
2025-12-12 22:54:59 +01:00
* Ergebnis: Das LLM filtert irrelevante Links aus dem Chunk ("Broadcasting" verhindern).
7. **Inline-Kanten finden:** Parsing von `[[rel:...]]` im Fließtext.
8. **Callout-Kanten finden:** Parsing von `> [!edge]` Blöcken.
9. **Default-Edges erzeugen:** Anwendung der `edge_defaults` aus der Typ-Registry.
2025-12-13 06:37:24 +01:00
10. **Strukturkanten erzeugen:** `belongs_to` , `next` , `prev` (Sequenz).
2025-12-12 22:54:59 +01:00
11. **Embedding & Upsert (Async):**
2025-12-11 16:58:23 +01:00
* Generierung der Vektoren via `nomic-embed-text` (768 Dim).
2025-12-12 22:54:59 +01:00
12. **Strict Mode:** Der Prozess bricht sofort ab, wenn ein Embedding leer ist oder die Dimension `0` hat.
13. **Diagnose:** Automatischer Check der Integrität nach dem Lauf.
2025-12-07 12:07:03 +01:00
### 2.2 Standard-Betrieb (Inkrementell)
Für regelmäßige Updates (z.B. Cronjob). Erkennt Änderungen via Hash.
export QDRANT_URL="http://localhost:6333"
export COLLECTION_PREFIX="mindnet"
# Import starten (Apply = Schreiben, Purge = Sauberer Upsert)
2025-12-08 16:14:52 +01:00
# Nutzt das Venv der Produktionsumgebung
/home/llmadmin/mindnet/.venv/bin/python3 -m scripts.import_markdown \
2025-12-07 12:07:03 +01:00
--vault ./vault \
--prefix "$COLLECTION_PREFIX" \
--apply \
--purge-before-upsert \
--sync-deletes
* `--apply` : Ohne dieses Flag läuft ein Dry-Run (nur Simulation).
* `--purge-before-upsert` : Löscht vor dem Schreiben einer Note ihre alten Chunks/Edges. Essentiell, um "Geister-Chunks" zu vermeiden, wenn Text gekürzt wurde.
* `--sync-deletes` : Entfernt Notizen aus Qdrant, die im Vault gelöscht wurden.
2025-12-08 16:14:52 +01:00
### 2.3 Deployment & Restart (Systemd)
2025-12-10 10:26:44 +01:00
Nach einem Import oder Code-Update müssen die API-Prozesse neu gestartet werden.
2025-12-08 16:14:52 +01:00
2025-12-10 10:26:44 +01:00
# Neustart des Produktions-Services (API + UI)
2025-12-08 16:14:52 +01:00
sudo systemctl restart mindnet-prod
2025-12-10 10:26:44 +01:00
sudo systemctl restart mindnet-ui-prod
2025-12-09 17:11:03 +01:00
2025-12-08 16:14:52 +01:00
# Prüfung
sudo systemctl status mindnet-prod
### 2.4 Full Rebuild (Clean Slate)
2025-12-12 22:54:59 +01:00
Notwendig bei Änderungen an `types.yaml` (z.B. Smart Edges an/aus) oder beim Wechsel des Embedding-Modells.
2025-12-07 12:07:03 +01:00
2025-12-11 16:58:23 +01:00
**WICHTIG:** Vorher das Modell pullen, sonst schlägt der Import fehl!
# 0. Modell sicherstellen (WICHTIG für v2.4+)
ollama pull nomic-embed-text
# 1. Qdrant Collections löschen und neu anlegen (Wipe inkl. Schema 768d)
2025-12-07 12:07:03 +01:00
python3 -m scripts.reset_qdrant --mode wipe --prefix "mindnet" --yes
# 2. Vollständiger Import aller Dateien
2025-12-11 16:58:23 +01:00
python3 -m scripts.import_markdown --vault ./vault --prefix "mindnet" --apply --force
2025-12-07 12:07:03 +01:00
---
## 3. Chunking & Payload-Aufbau
Das Chunking ist profilbasiert und typgesteuert.
### 3.1 Chunk-Profile
In `types.yaml` definiert. Standard-Profile (in `chunk_config.py` implementiert):
2025-12-13 06:37:24 +01:00
* `sliding_short` : Max 128 Tokens (z.B. für Logs, Chats).
* `sliding_standard` : Max 512 Tokens (Standard für Massendaten).
* `sliding_smart_edges` : Sliding Window, optimiert für LLM-Analyse (Fließtext).
* `structured_smart_edges` : Trennt strikt an Überschriften (für strukturierte Daten).
2025-12-07 12:07:03 +01:00
### 3.2 Payload-Felder
Jeder Chunk erhält zwei Text-Felder:
* `text` : Der reine Inhalt des Chunks (ohne Overlap). Wird dem Nutzer angezeigt.
* `window` : Der Inhalt plus Overlap zu Vorgänger/Nachfolger. Wird für das Embedding genutzt (besserer Kontext).
---
## 4. Edge-Erzeugung (Die V2-Logik)
2025-12-12 22:54:59 +01:00
In v2.6 entstehen Kanten nach strenger Priorität.
2025-12-07 12:07:03 +01:00
### 4.1 Prioritäten & Provenance
Der Importer setzt `provenance` , `rule_id` und `confidence` automatisch:
| Priorität | Quelle | Syntax (Bsp.) | Rule ID | Confidence |
| :--- | :--- | :--- | :--- | :--- |
| **1** | Inline | `[[rel:depends_on X]]` | `inline:rel` | ~0.95 |
| **2** | Callout | `> [!edge] related_to: [[X]]` | `callout:edge` | ~0.90 |
| **3** | Wikilink | `[[X]]` | `explicit:wikilink` | 1.00 |
2025-12-12 22:54:59 +01:00
| **4** | Smart | *(via LLM Filter)* | `smart:llm_filter` | 0.90 |
| **5** | Default | *(via types.yaml)* | `edge_defaults:...` | ~0.70 |
| **6** | Struktur | *(automatisch)* | `structure:...` | 1.00 |
2025-12-07 12:07:03 +01:00
2025-12-12 22:54:59 +01:00
### 4.2 Smart Edge Allocation (WP15)
Dieser Mechanismus löst das Problem, dass Chunks sonst alle Links der Note erben.
* **Prozess:** Der `SemanticAnalyzer` prüft jeden Chunk: "Ist Link X im Kontext von Chunk Y relevant?"
* **Ergebnis:** Kanten werden präzise an den Chunk gebunden, nicht global an die Note.
* **Steuerung:** Das Feature wird in `types.yaml` per Typ aktiviert (`enable_smart_edge_allocation: true`).
### 4.3 Typ-Defaults
2025-12-07 12:07:03 +01:00
Wenn in `types.yaml` für einen Typ `edge_defaults` definiert sind, werden diese **additiv** zu expliziten Links erzeugt.
* *Beispiel:* Note Typ `project` verlinkt `[[Tool A]]` .
* *Ergebnis:* Kante `references` (explizit) UND Kante `depends_on` (Default).
---
2025-12-08 16:14:52 +01:00
## 5. Retriever, Chat & Generation (RAG Pipeline)
2025-12-07 12:07:03 +01:00
2025-12-08 16:14:52 +01:00
Der Datenfluss endet nicht beim Finden. Er geht weiter bis zur Antwort.
2025-12-07 12:07:03 +01:00
2025-12-08 16:14:52 +01:00
### 5.1 Retrieval (Hybrid)
Der `/chat` Endpunkt nutzt **Hybrid Retrieval** (Semantic + Graph), um auch logisch verbundene, aber textlich unterschiedliche Notizen zu finden (z.B. Decisions zu einem Projekt).
2025-12-10 18:55:38 +01:00
### 5.2 Intent Router (WP06/07)
2025-12-12 22:54:59 +01:00
Der Request durchläuft den **Hybrid Router v5** :
1. **Question Detection:** Ist es eine Frage (`?`, W-Wörter)? -> RAG Modus. Interviews werden hier blockiert.
2. **Keyword Scan:** Enthält es Keywords aus `types.yaml` (Objekt, z.B. "Projekt") oder `decision_engine.yaml` (Action, z.B. "erstellen")? -> INTERVIEW Modus.
3. **LLM Fallback:** Wenn unklar, entscheidet das LLM.
2025-12-09 17:11:03 +01:00
### 5.3 Context Enrichment
Der Router (`chat.py`) reichert die gefundenen Chunks mit Metadaten an:
* **Typ-Injection:** `[DECISION]` , `[PROJECT]` .
* **Reasoning-Infos:** `(Score: 0.75)` .
2025-12-08 16:14:52 +01:00
2025-12-12 22:54:59 +01:00
### 5.4 Generation (LLM) mit Traffic Control
2025-12-08 16:14:52 +01:00
* **Engine:** Ollama (lokal).
* **Modell:** `phi3:mini` (Standard).
2025-12-10 18:55:38 +01:00
* **Prompting:** Template wird basierend auf Intent gewählt (`decision_template`, `interview_template` etc.).
2025-12-12 22:54:59 +01:00
* **Traffic Control:** Der `LLMService` unterscheidet:
* **Chat-Requests** (`priority="realtime"`) -> Sofortige Ausführung.
* **Import-Requests** (`priority="background"`) -> Gedrosselt durch Semaphore (Standard: 2).
2025-12-07 12:07:03 +01:00
2025-12-11 16:58:23 +01:00
### 5.5 Active Intelligence Pipeline (Neu in v2.4)
Ein paralleler Datenfluss im Frontend ("Draft Editor") zur Unterstützung des Autors.
1. **Trigger:** User klickt "Analyse starten" oder tippt.
2. **Service:** `ingest/analyze` (Backend).
3. **Discovery:**
* **Sliding Window:** Zerlegt Text in Abschnitte.
* **Embedding:** Vektorisiert Abschnitte via Nomic (Async).
* **Exact Match:** Sucht nach Aliases ("KI-Gedächtnis").
* **Matrix Logic:** Bestimmt Kanten-Typ (`experience` -> `based_on` -> `value` ).
4. **Feedback:** UI zeigt Vorschläge (`[[rel:...]]`) zum Einfügen an.
2025-12-08 16:14:52 +01:00
---
## 6. Feedback & Lernen (WP04c)
Das System schreibt kontinuierlich Logs ("Data Flywheel"):
* `data/logs/search_history.jsonl` : Trainingsdaten (Query + Ergebnisse + Breakdown).
* `data/logs/feedback.jsonl` : Labels (User-Rating zur `query_id` ).
2025-12-07 12:07:03 +01:00
---
2025-12-08 16:14:52 +01:00
## 7. Quality Gates & Tests
2025-12-07 12:07:03 +01:00
Diese Tests garantieren die Stabilität der Pipeline.
2025-12-08 16:14:52 +01:00
### 7.1 Pflicht-Tests vor Commit
2025-12-07 12:07:03 +01:00
1. **Payload Dryrun (Schema-Check):**
Simuliert Import, prüft JSON-Schema Konformität.
python3 -m scripts.payload_dryrun --vault ./test_vault
2. **Full Edge Check (Graph-Integrität):**
2025-12-08 16:14:52 +01:00
Prüft Invarianten (z.B. `next` muss reziprok zu `prev` sein).
2025-12-07 12:07:03 +01:00
python3 -m scripts.edges_full_check
2025-12-08 16:14:52 +01:00
### 7.2 Smoke-Test (E2E)
Prüft am laufenden System (Prod oder Dev), ob Semantik, Graph und Feedback funktionieren.
2025-12-07 12:07:03 +01:00
2025-12-08 16:14:52 +01:00
# Retriever Test
python scripts/test_retriever_smoke.py --mode hybrid --top-k 5
2025-12-11 16:58:23 +01:00
# Intelligence Test (WP11)
curl -X POST "http://localhost:8002/ingest/analyze" -d '{"text": "mindnet", "type": "journal"}'
2025-12-10 10:26:44 +01:00
# Decision Engine Test (WP06)
2025-12-09 17:11:03 +01:00
python tests/test_wp06_decision.py -p 8002 -e EMPATHY -q "Alles ist grau"
2025-12-08 16:14:52 +01:00
# Feedback Test
python tests/test_feedback_smoke.py --url http://localhost:8001/query
2025-12-07 12:07:03 +01:00
---
2025-12-08 16:14:52 +01:00
## 8. Ausblick & Roadmap (Technische Skizzen)
Wie entwickeln wir die Pipeline weiter?
2025-12-07 12:07:03 +01:00
2025-12-09 17:11:03 +01:00
### 8.1 WP-08: Self-Tuning (Skizze)
2025-12-08 16:14:52 +01:00
**Ziel:** Die Gewichte in `retriever.yaml` basierend auf `feedback.jsonl` optimieren.
**Ansatz:** Ein Offline-Learning-Skript `scripts/optimize_weights.py` .
1. **Load:** Liest `search_history.jsonl` und joint mit `feedback.jsonl` via `query_id` .
2. **Analyze:** Korrelation Scores vs. User-Rating.
2025-12-10 10:26:44 +01:00
3. **Optimize:** Vorschlag neuer Gewichte für `retriever.yaml` .
---
2025-12-12 22:54:59 +01:00
## 16. Workpackage Status (v2.6.0)
2025-12-10 10:26:44 +01:00
Aktueller Implementierungsstand der Module.
| WP | Titel | Status | Anmerkung |
| :--- | :--- | :--- | :--- |
| **WP01** | Knowledge Design | 🟢 Live | Typen, Frontmatter definiert. |
| **WP02** | Chunking Strategy | 🟢 Live | Profilbasiertes Chunking aktiv. |
| **WP03** | Edge Logic / Import | 🟢 Live | Neue Importer-Pipeline mit Provenance. |
| **WP04a** | Retriever Scoring | 🟢 Live | Hybrider Score (Semantik + Graph). |
| **WP04b** | Explanation Layer | 🟢 Live | API liefert Reasons & Breakdown. |
| **WP04c** | Feedback Loop | 🟢 Live | Logging (JSONL) & Traceability aktiv. |
| **WP05** | Persönlichkeit / Chat | 🟢 Live | RAG-Integration mit Context Enrichment. |
| **WP06** | Decision Engine | 🟢 Live | Hybrid Router, Strategic Retrieval. |
2025-12-10 18:55:38 +01:00
| **WP07** | Interview Assistent | 🟢 Live | **One-Shot Extractor & Schemas aktiv.** |
2025-12-10 10:26:44 +01:00
| **WP08** | Self-Tuning | 🔴 Geplant | Auto-Adjustment der Gewichte. |
2025-12-10 18:55:38 +01:00
| **WP10** | Chat Interface | 🟢 Live | Web-Interface (Streamlit). |
2025-12-13 06:37:24 +01:00
| **WP10a** | Draft Editor | 🟢 Live | **Interaktives UI für WP07 Drafts.** |
2025-12-12 22:54:59 +01:00
| **WP11** | Backend Intelligence | 🟢 Live | **Async Ingestion, Nomic Embeddings, Matrix Logic.** |
| **WP15** | Smart Edge Allocation | 🟢 Live | **LLM-Filter & Traffic Control aktiv.** |
| **WP16** | Auto-Discovery | 🟡 Geplant | UX & Retrieval Tuning. |
| **WP17** | Conversational Memory | 🟡 Geplant | Dialog-Gedächtnis. |