# DocuMind-G4 Dieses Projekt implementiert ein lokales Retrieval-Augmented Generation (RAG) System, das Dokumente aus **Paperless-ngx** synchronisiert, verarbeitet und über eine **Streamlit** Web-UI sowie einen **Telegram Bot** durchsuchbar macht. ## Features * **Delta-Sync mit Paperless-ngx**: Synchronisiert nur neue oder geänderte Dokumente via API und löscht entfernte Dokumente automatisch aus dem Vektor-Speicher. * **Hi-Res PDF Parsing**: Nutzt `unstructured` mit OCR (Tesseract), um Tabellen und komplexe Layouts in PDFs korrekt zu erfassen. * **Parent-Child Retrieval**: Splittet Dokumente intelligent auf (kleine Chunks für die Vektorsuche in ChromaDB, große Chunks/ganze Dokumente für den LLM-Kontext in PostgreSQL/DocStore), um den Kontextverlust zu minimieren. * **Lokales LLM**: Verwendet `granite4:tiny-h` über **Ollama** für maximale Daten-Privatsphäre. * **Multi-Interface**: Bietet eine Web-Oberfläche (Streamlit) mit Metadaten-Filterung (z.B. nach Document ID) und einen zugangsbeschränkten Telegram-Bot. * **Vollständig Dockerisiert**: Alle Komponenten (PostgreSQL, ChromaDB, Ollama, Scheduler, Streamlit, Telegram) laufen isoliert in Containern. --- ## Voraussetzungen * **Docker** und **Docker Compose** müssen installiert sein. * Eine laufende **Paperless-ngx** Instanz. * Ein **Paperless API Token** (kann im Paperless-Admin-Bereich erstellt werden). * Ein **Telegram Bot Token** (über den BotFather in Telegram erstellbar) sowie deine Telegram User-ID. --- ## Setup & Installation **1. Repository vorbereiten** Stelle sicher, dass alle Dateien (`docker-compose.yml`, `Dockerfile`, `requirements.txt`, `init_ollama.sh` und der `src/`-Ordner) korrekt am selben Ort liegen. **2. Skript ausführbar machen (Linux/macOS)** Das Ollama-Startskript benötigt Ausführungsrechte: ```bash chmod +x init_ollama.sh ``` **3. Umgebungsvariablen konfigurieren** Erstelle eine .env Datei im Hauptverzeichnis und fülle sie mit deinen Daten: ``` # Paperless PAPERLESS_URL=http://:8000 PAPERLESS_TOKEN= # Postgres (Standardwerte können belassen werden) POSTGRES_USER=raguser POSTGRES_PASSWORD=ragpass POSTGRES_DB=ragdb POSTGRES_HOST=postgres POSTGRES_PORT=5432 # Chroma & Ollama (Interne Docker-Routings) CHROMA_HOST=chromadb CHROMA_PORT=8000 OLLAMA_BASE_URL=http://ollama:11434 # Telegram TELEGRAM_BOT_TOKEN= ALLOWED_TELEGRAM_USERS= ``` ## Starten & Ausführen Starte das gesamte System im Hintergrund: ```bash docker-compose up -d --build ``` **Was passiert beim ersten Start?** * Die Datenbanken (Postgres, Chroma) werden initialisiert. * Der ollama-Container startet, wartet kurz und lädt automatisch das Modell granite4:tiny-h herunter. * Der scheduler wartet auf 03:00 Uhr nachts für den initialen Ingest (siehe Troubleshooting für einen manuellen Start). * streamlit und der telegram-bot gehen online. **Zugriff:** * Streamlit Web-UI: Öffne http://localhost:8501 in deinem Browser. * Telegram Bot: Suche deinen Bot in Telegram und sende /start. --------------------------------------------------------------------------------------------------------------------------- ## Nützliche Docker-Befehle (Troubleshooting & Logs) Da das System aus vielen Microservices besteht, ist es wichtig zu wissen, wie man die Logs der einzelnen Container ausliest. **Logs des nächtlichen Schedulers ansehen:** Hier siehst du, ob neue Dokumente aus Paperless geladen wurden oder ob Fehler beim PDF-Parsing (OCR) auftraten. ```bash docker-compose logs -f scheduler ``` **Logs des Telegram-Bots ansehen:** Hilfreich, wenn der Bot nicht antwortet oder User-IDs abgewiesen werden. ```bash docker-compose logs -f telegram-bot ``` **Ollama Status prüfen:** Sieh nach, ob das Modell erfolgreich heruntergeladen wurde. ```bash docker-compose logs -f ollama ``` **Manuellen Ingest (Sync) sofort anstoßen:** Falls du nicht bis 03:00 Uhr nachts warten willst, kannst du den Sync-Job manuell im laufenden Scheduler-Container ausführen: ```bash docker exec -it python src/ingest_job.py ``` (Den genauen Containernamen findest du mit docker ps heraus). **System komplett stoppen und Daten behalten:** ```bash docker-compose down ``` **System stoppen und ALLE Daten (Vektoren, DB, Modelle) löschen: Achtung: Dies löscht alle Volumes unwiderruflich.** ```bash docker-compose down -v ```