{
"event": "PreToolUse",
"tool_name": "mcp__mcp-docs__docs_update",
"tool_input": {
"id": 100,
"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 # Embedding\n├── vision.py # Vision-Analyse\n├── enrich.py # Vision-Enrichment\n```\n\n### Step-Module\n\n```\n├── step_extract.py # Extraktions-Step\n├── step_load.py # Lade-Step\n├── step_transform.py # Transform-Step (Vision, Chunk, Enrich)\n├── step_embed.py # Embedding-Step\n└── step_semantic.py # Semantik-Step\n```\n\n### Analyzer-Module\n\n```\n├── analyzers\/\n│ ├── document_analyzer.py # Haupt-Orchestrator\n│ ├── entity_extractor.py # Entitäten\n│ ├── entity_normalizer.p... [TRUNCATED-adefa632906ceec6]"
}
}
{
"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-e210b07690e6c616]"
}
]
}