5.2 KiB
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
unstructuredmit 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, Paperless-ngx) laufen isoliert in Containern.
Voraussetzungen
- Docker und Docker Compose müssen installiert sein.
- 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, der init-skripts-Ornder und der src/-Ordner) korrekt am selben Ort liegen.
2. Skripte ausführbar machen (Linux/macOS) Die Startskripte benötigt Ausführungsrechte:
chmod +x init-skripts/*
3. Umgebungsvariablen konfigurieren Erstelle eine .env Datei im Hauptverzeichnis und fülle sie mit deinen Daten:
# Paperless
PAPERLESS_ADMIN_USER=admin
PAPERLESS_ADMIN_PASSWORD=ein_sehr_sicheres_admin_passwort
PAPERLESS_ADMIN_MAIL=deine.email@beispiel.de
PAPERLESS_TIME_ZONE=Europe/Berlin
PAPERLESS_UI_LANGUAGE=de
PAPERLESS_OCR_LANGUAGE=deu
PAPERLESS_URL=http://paperless:8000
PAPERLESS_TOKEN=your_api_token_here
# Postgres
POSTGRES_USER=raguser
POSTGRES_PASSWORD=ragpass
POSTGRES_DB=ragdb
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
# Chroma
CHROMA_HOST=chromadb
CHROMA_PORT=8000
# Ollama
OLLAMA_BASE_URL=http://ollama:11434
# Telegram
TELEGRAM_BOT_TOKEN=your_telegram_bot_token
ALLOWED_TELEGRAM_USERS=123456789,987654321
4. Paperless API-Token Um ein API-Token für Paperless zu generieren, führe einfach folgenden Befehl aus:
docker-compose up -d --build
docker compose exec paperless manage.py drf_create_token <dein-benutzername>
docker-compose down
Trage den generierten API-Token nach dem Ausführen dieser Befehle in die .env-Datei ein.
Starten & Ausführen
Starte das gesamte System im Hintergrund:
docker-compose up -d --build
Was passiert beim ersten Start?
-
Die Datenbanken (Postgres, Chroma) werden initialisiert.
-
Paperless-ngx startet und wird initialisiert.
-
Der ollama-Container startet, wartet kurz und lädt automatisch das Modell granite4:tiny-h herunter.
-
Der scheduler wartet auf 01:00 Uhr nachts für den initialen Ingest (siehe Troubleshooting für einen manuellen Start).
-
streamlit und der telegram-bot gehen online.
Zugriff:
-
Paperless-ngx Web-UI: Öffne http://localhost:8000 in deinem Browser.
-
Streamlit Web-UI: Öffne http://localhost:8501 in deinem Browser.
-
Telegram Bot: Suche deinen Bot in Telegram und sende /start.
Sicherheit
Für mehr Sicherheit und eine einfachere Nutzung empfiehlt es sich, Paperless und die Streamlit-App in Produktivumgebungen hinter einem Reverse-Proxy (z. B. Nginx oder Nginx Proxy Manager) zu betreiben.
Die Telegram-Anbindung kann einfach durch Auskommentieren oder Entfernen des Telegram-Containers in der docker-compose.yml deaktiviert werden.
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.
docker-compose logs -f scheduler
Logs des Telegram-Bots ansehen: Hilfreich, wenn der Bot nicht antwortet oder User-IDs abgewiesen werden.
docker-compose logs -f telegram-bot
Ollama Status prüfen: Sieh nach, ob das Modell erfolgreich heruntergeladen wurde.
docker-compose logs -f ollama
Manuellen Ingest (Sync) sofort anstoßen: Falls du nicht bis 01:00 Uhr nachts warten willst, kannst du den Sync-Job manuell im laufenden Scheduler-Container ausführen:
docker exec -it <name_des_scheduler_containers> python src/ingest_job.py
(Den genauen Containernamen findest du mit docker ps heraus).
System komplett stoppen und Daten behalten:
docker-compose down
System stoppen und ALLE Daten (Vektoren, DB, Modelle) löschen: Achtung: Dies löscht alle Volumes unwiderruflich.
docker-compose down -v