{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 100,\n \"parent_id\": 91,\n \"slug\": \"rag-prozess\",\n \"path\": \"\/prozesse\/rag-prozess\",\n \"title\": \"RAG-Prozess\",\n \"description\": \"Dokumentation des gesamten RAG-Prozesses (Retrieval Augmented Generation) für Chat und Content Studio\",\n \"content\": \"# RAG-Prozess\\n\\n## Status: Aktualisiert 2025-12-27\\n\\n## Übersicht\\n\\nDer RAG-Prozess (Retrieval Augmented Generation) bildet das Herzstück der KI-gestützten Wissensgenerierung. Die Architektur trennt strikt zwischen **Offline-Pipeline** (Wissensaufbau) und **Online-Pipeline** (Wissenskonsum).\\n\\n### Grundprinzip\\n- Die **Offline-Pipeline** erzeugt und strukturiert Wissen (Python-Skripte)\\n- Die **Online-Pipeline** konsumiert Wissen, ohne es zu verändern (PHP-Services)\\n- Zwischen beiden Pipelines besteht **keine Rückkopplung zur Laufzeit**\\n\\n---\\n\\n## Offline-Pipeline: Tatsächlicher Ablauf (IST)\\n\\n**Pfad:** `\/var\/www\/scripts\/pipeline\/`\\n**Orchestrator:** `pipeline.py`\\n**Step-Module:** `step_extract.py`, `step_load.py`, `step_transform.py`, `step_embed.py`, `step_semantic.py`\\n\\n### Phase 0: Detection\\n\\n| Step | Modul | Beschreibung |\\n|------|-------|--------------|\\n| detect | `detect.py` | Dateien scannen, Hash-Vergleich |\\n| queue | `detect.py` | Neue\/geänderte Dateien in Queue |\\n\\n### Phase 1: Extraction (pro Dokument)\\n\\n| Step | Modul | Beschreibung |\\n|------|-------|--------------|\\n| extract | `step_extract.py` → `extract.py` | Text aus PDF\/DOCX\/PPTX\/MD\/TXT |\\n| hash | `step_extract.py` | SHA256 Hash berechnen |\\n| rotation | `orientation.py` | Seitenrotation erkennen (PDF) |\\n\\n### Phase 2: Load\\n\\n| Step | Modul | Beschreibung |\\n|------|-------|--------------|\\n| doc_create | `step_load.py` | Dokument in `documents` anlegen |\\n| page_store | `step_load.py` | Seiten in `document_pages` speichern |\\n\\n### Phase 3: Vision (nur PDF)\\n\\n| Step | Modul | Beschreibung |\\n|------|-------|--------------|\\n| vision | `step_transform.py` → `vision.py` | Seiten mit llama3.2-vision:11b analysieren |\\n| vision_store | `vision.py` | Ergebnisse in `document_pages.vision_analysis` |\\n\\n### Phase 4: Chunking\\n\\n| Step | Modul | Beschreibung |\\n|------|-------|--------------|\\n| chunk | `step_transform.py` → `chunk.py` | Text in semantische Chunks zerlegen |\\n| chunk_store | `step_load.py` | Chunks in `chunks` speichern |\\n\\n### Phase 5: Enrichment (nur PDF)\\n\\n| Step | Modul | Beschreibung |\\n|------|-------|--------------|\\n| enrich | `step_transform.py` → `enrich.py` | Vision-Kontext zu Chunks hinzufügen |\\n\\n### Phase 6: Embedding (Layer 3 - Dokument wird suchbar)\\n\\n| Step | Modul | Beschreibung |\\n|------|-------|--------------|\\n| embed | `step_embed.py` → `embed.py` | Embeddings mit mxbai-embed-large |\\n| qdrant_store | `embed.py` | Vektoren in Qdrant speichern |\\n| status_embedded | `step_load.py` | Status = \\\"embedded\\\" |\\n\\n**Nach Phase 6 ist das Dokument im Chat suchbar!**\\n\\n### Phase 7: Semantic Analysis (Layer 4 - optional\/async)\\n\\n| Step | Modul | Beschreibung |\\n|------|-------|--------------|\\n| entity_extract | `analyzers\/entity_extractor.py` | Entitäten extrahieren (Anthropic\/Ollama) |\\n| entity_store | `analyzers\/entity_extractor.py` | Entitäten in `entities` speichern |\\n| entity_normalize | `analyzers\/entity_normalizer.py` | canonical_name setzen |\\n| relation_extract | `analyzers\/relation_extractor.py` | Relationen extrahieren |\\n| relation_store | `analyzers\/document_analyzer.py` | In `entity_relations` speichern |\\n| taxonomy_classify | `analyzers\/taxonomy_classifier.py` | Taxonomie-Kategorien zuweisen |\\n| ontology_classify | `analyzers\/ontology_classifier.py` | Ontologie-Klassen zuweisen |\\n| chunk_entity_link | `analyzers\/document_analyzer.py` | Chunks mit Entitäten verknüpfen |\\n| chunk_taxonomy | `analyzers\/document_analyzer.py` | Taxonomie auf Chunks propagieren |\\n| entity_taxonomy | `analyzers\/document_analyzer.py` | Taxonomie auf Entitäten |\\n| chunk_semantics | `analyzers\/semantic_analyzer.py` | Chunk-Semantik analysieren |\\n\\n### Phase 8: Finalization\\n\\n| Step | Modul | Beschreibung |\\n|------|-------|--------------|\\n| status_done | `step_load.py` | Status = \\\"done\\\" |\\n\\n---\\n\\n## Datenfluss-Diagramm\\n\\n```\\n┌─────────────────────────────────────────────────────────────────┐\\n│ Phase 0: DETECTION │\\n│ detect.py: scan_directory() → queue_files() │\\n└─────────────────────────────┬───────────────────────────────────┘\\n │\\n ▼\\n┌─────────────────────────────────────────────────────────────────┐\\n│ Phase 1: EXTRACTION │\\n│ step_extract.py → extract.py │\\n│ • Text aus PDF\/DOCX\/PPTX\/MD\/TXT │\\n│ • SHA256 Hash │\\n│ • Rotationserkennung (orientation.py) │\\n└─────────────────────────────┬───────────────────────────────────┘\\n │\\n ▼\\n┌─────────────────────────────────────────────────────────────────┐\\n│ Phase 2: LOAD │\\n│ step_load.py │\\n│ • documents Eintrag erstellen │\\n│ • document_pages speichern │\\n└─────────────────────────────┬───────────────────────────────────┘\\n │\\n ▼ (nur PDF)\\n┌─────────────────────────────────────────────────────────────────┐\\n│ Phase 3: VISION │\\n│ step_transform.py → vision.py │\\n│ • Seiten als Bilder rendern │\\n│ • llama3.2-vision:11b Analyse │\\n│ • Überschriften, Bilder, Tabellen, Layout erkennen │\\n└─────────────────────────────┬───────────────────────────────────┘\\n │\\n ▼\\n┌─────────────────────────────────────────────────────────────────┐\\n│ Phase 4: CHUNKING │\\n│ step_transform.py → chunk.py │\\n│ • Semantisches Chunking nach Struktur │\\n│ • Überlappung: 10% │\\n│ • Min: 100, Max: 2000 Zeichen │\\n└─────────────────────────────┬───────────────────────────────────┘\\n │\\n ▼ (nur PDF)\\n┌─────────────────────────────────────────────────────────────────┐\\n│ Phase 5: ENRICHMENT │\\n│ step_transform.py → enrich.py │\\n│ • Vision-Kontext zu Chunks hinzufügen │\\n└─────────────────────────────┬───────────────────────────────────┘\\n │\\n ▼\\n┌─────────────────────────────────────────────────────────────────┐\\n│ Phase 6: EMBEDDING (Layer 3) │\\n│ step_embed.py → embed.py │\\n│ • mxbai-embed-large (1024 dim) │\\n│ • Qdrant: Collection \\\"documents\\\" │\\n│ • Status: \\\"embedded\\\" ✓ SUCHBAR │\\n└─────────────────────────────┬───────────────────────────────────┘\\n │\\n ▼\\n┌─────────────────────────────────────────────────────────────────┐\\n│ Phase 7: SEMANTIC (Layer 4) - Optional │\\n│ step_semantic.py → analyzers\/* │\\n│ • Entity-Extraktion (Anthropic oder Ollama) │\\n│ • Relationen │\\n│ • Taxonomie-Klassifikation │\\n│ • Ontologie-Zuordnung │\\n│ • Chunk-Semantik (summary, keywords, sentiment) │\\n└─────────────────────────────┬───────────────────────────────────┘\\n │\\n ▼\\n┌─────────────────────────────────────────────────────────────────┐\\n│ Phase 8: FINALIZATION │\\n│ • Status: \\\"done\\\" ✓ │\\n└─────────────────────────────────────────────────────────────────┘\\n```\\n\\n---\\n\\n## Konfiguration\\n\\n**Quelle:** `config.py`\\n\\n| Parameter | Wert | Beschreibung |\\n|-----------|------|--------------|\\n| NEXTCLOUD_PATH | `\/var\/www\/nextcloud\/data\/root\/files\/Documents` | Quellverzeichnis |\\n| SUPPORTED_EXTENSIONS | `[\\\".pdf\\\", \\\".pptx\\\", \\\".docx\\\", \\\".md\\\", \\\".txt\\\"]` | Dateitypen |\\n| EMBEDDING_MODEL | `mxbai-embed-large` | Ollama Embedding-Modell |\\n| EMBEDDING_DIMENSION | `1024` | Vektordimension |\\n| MIN_CHUNK_SIZE | `100` | Min. Chunk-Größe |\\n| MAX_CHUNK_SIZE | `2000` | Max. Chunk-Größe |\\n| CHUNK_OVERLAP_PERCENT | `10` | Überlappung |\\n| OCR_ENABLED | `True` | OCR für Scans |\\n| OCR_LANGUAGE | `deu` | OCR-Sprache |\\n| ROTATION_DETECTION_ENABLED | `True` | Seitenrotation erkennen |\\n| ROTATION_OSD_CONFIDENCE_THRESHOLD | `2.0` | OSD Confidence-Schwelle |\\n| SEMANTIC_SYNC | `True` | Synchrone Semantik-Analyse |\\n| SEMANTIC_USE_ANTHROPIC | `False` | Anthropic oder Ollama |\\n\\n---\\n\\n## Datei-Referenzen\\n\\n### Pipeline-Kern\\n\\n```\\n\/var\/www\/scripts\/pipeline\/\\n├── pipeline.py # Orchestrator\\n├── config.py # Konfiguration\\n├── db.py # Datenbank-Wrapper\\n├── detect.py # Datei-Erkennung\\n├── extract.py # Text-Extraktion\\n├── orientation.py # Rotationserkennung (NEU!)\\n├── chunk.py # Chunking\\n├── embed.py # ... [TRUNCATED-bad3c059d590d82c]"
}
]
}