Initial Commit of Local files
This commit is contained in:
125
README.md
Normal file
125
README.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# 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://<DEINE-PAPERLESS-IP>:8000
|
||||
PAPERLESS_TOKEN=<DEIN_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=<DEIN_TELEGRAM_TOKEN>
|
||||
ALLOWED_TELEGRAM_USERS=<DEINE_USER_ID>
|
||||
```
|
||||
|
||||
## 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 <name_des_scheduler_containers> 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
|
||||
```
|
||||
Reference in New Issue
Block a user