--- doc_type: technical_reference audience: developer, devops scope: backend, ingestion, smart_edges status: active version: 2.6 context: "Detaillierte technische Beschreibung der Import-Pipeline, Quality Gates und CLI-Befehle." --- # Ingestion Pipeline & Smart Processing **Quellen:** `pipeline_playbook.md`, `Handbuch.md` Die Ingestion transformiert Markdown in den Graphen. Entrypoint: `scripts/import_markdown.py`. ## 1. Der Import-Prozess (13-Schritte-Workflow) Der Prozess ist **asynchron** und **idempotent**. 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`. 4. **Note-Payload generieren:** Erstellen des JSON-Objekts für `mindnet_notes`. 5. **Chunking anwenden:** Zerlegung des Textes basierend auf dem `chunk_profile` (siehe unten). 6. **Smart Edge Allocation (WP15):** * Wenn `enable_smart_edge_allocation: true`: Der `SemanticAnalyzer` sendet Chunks an das LLM. * **Traffic Control:** Request nutzt `priority="background"`. Semaphore (Limit: 2) drosselt die Last. * **Resilienz:** Bei Timeout (Ollama) greift ein Fallback (Broadcasting an alle Chunks). 7. **Inline-Kanten finden:** Parsing von `[[rel:...]]`. 8. **Callout-Kanten finden:** Parsing von `> [!edge]`. 9. **Default-Edges erzeugen:** Anwendung der `edge_defaults` aus Registry. 10. **Strukturkanten erzeugen:** `belongs_to`, `next`, `prev`. 11. **Embedding (Async):** Generierung via `nomic-embed-text` (768d). 12. **Strict Mode:** Abbruch bei leeren Embeddings oder Dimension 0. 13. **Diagnose:** Integritäts-Check nach dem Lauf. --- ## 2. Betrieb & CLI Befehle ### 2.1 Standard-Betrieb (Inkrementell) Für regelmäßige Updates (Cronjob). Erkennt Änderungen via Hash. ```bash export QDRANT_URL="http://localhost:6333" export COLLECTION_PREFIX="mindnet" # Nutzt das Venv der Produktionsumgebung /home/llmadmin/mindnet/.venv/bin/python3 -m scripts.import_markdown \ --vault ./vault \ --prefix "$COLLECTION_PREFIX" \ --apply \ --purge-before-upsert \ --sync-deletes ``` > **[!WARNING] Purge-Before-Upsert** > Das Flag `--purge-before-upsert` ist kritisch. Es löscht vor dem Schreiben einer Note ihre alten Chunks/Edges. Ohne dieses Flag entstehen **"Geister-Chunks"** (alte Textabschnitte, die im Markdown gelöscht wurden, aber im Index verbleiben). ### 2.2 Full Rebuild (Clean Slate) Notwendig bei Änderungen an `types.yaml` oder Modell-Wechsel. ```bash # 0. Modell sicherstellen ollama pull nomic-embed-text # 1. Qdrant Collections löschen (Wipe) python3 -m scripts.reset_qdrant --mode wipe --prefix "mindnet" --yes # 2. Vollständiger Import (Force) python3 -m scripts.import_markdown --vault ./vault --prefix "mindnet" --apply --force ``` --- ## 3. Chunking & Payload Das Chunking ist profilbasiert. | Profil | Max Token | Overlap | Einsatz | | :--- | :--- | :--- | :--- | | `sliding_short` | 128 | 20 | Logs, Chats. | | `sliding_standard` | 512 | 50 | Massendaten. | | `sliding_smart_edges`| 512 | 50 | Wichtige Inhalte (Experience, Project). | | `structured_smart` | n/a | n/a | Trennt strikt an Headings (für ADRs). | **Payload-Felder:** * `text`: Der reine Inhalt (Anzeige). * `window`: Inhalt plus Overlap (für Embedding). --- ## 4. Edge-Erzeugung & Prioritäten Kanten werden nach Vertrauenswürdigkeit (`provenance`) priorisiert. Die höhere Prio gewinnt. | Prio | Quelle | Rule ID | Confidence | | :--- | :--- | :--- | :--- | | **1** | Inline | `inline:rel` | 0.95 | | **2** | Callout | `callout:edge` | 0.90 | | **3** | Wikilink | `explicit:wikilink` | 1.00 | | **4** | Smart Edge | `smart:llm_filter` | 0.90 | | **5** | Type Default | `edge_defaults` | 0.70 | | **6** | Struktur | `structure` | 1.00 | --- ## 5. Quality Gates & Tests Diese Tests garantieren die Stabilität der Pipeline. **1. Payload Dryrun (Schema-Check):** Simuliert Import, prüft JSON-Schema Konformität. ```bash python3 -m scripts.payload_dryrun --vault ./test_vault ``` **2. Full Edge Check (Graph-Integrität):** Prüft Invarianten (z.B. `next` muss reziprok zu `prev` sein). ```bash python3 -m scripts.edges_full_check ```