Cleaning README and some minor details.
This commit is contained in:
2
.env
2
.env
@@ -5,7 +5,7 @@ PAPERLESS_ADMIN_MAIL=deine.email@beispiel.de
|
|||||||
PAPERLESS_TIME_ZONE=Europe/Berlin
|
PAPERLESS_TIME_ZONE=Europe/Berlin
|
||||||
PAPERLESS_UI_LANGUAGE=de
|
PAPERLESS_UI_LANGUAGE=de
|
||||||
PAPERLESS_OCR_LANGUAGE=deu
|
PAPERLESS_OCR_LANGUAGE=deu
|
||||||
PAPERLESS_URL=http://your-paperless-ip:8000
|
PAPERLESS_URL=http://paperless:8000
|
||||||
PAPERLESS_TOKEN=your_api_token_here
|
PAPERLESS_TOKEN=your_api_token_here
|
||||||
|
|
||||||
# Postgres
|
# Postgres
|
||||||
|
|||||||
60
README.md
60
README.md
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
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.
|
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
|
## 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.
|
* **Delta-Sync mit Paperless-ngx**: Synchronisiert nur neue oder geänderte Dokumente via API und löscht entfernte Dokumente automatisch aus dem Vektor-Speicher.
|
||||||
@@ -11,14 +9,13 @@ Dieses Projekt implementiert ein lokales Retrieval-Augmented Generation (RAG) Sy
|
|||||||
* **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.
|
* **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.
|
* **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.
|
* **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.
|
* **Vollständig Dockerisiert**: Alle Komponenten (PostgreSQL, ChromaDB, Ollama, Scheduler, Streamlit, Telegram, Paperless-ngx) laufen isoliert in Containern.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Voraussetzungen
|
## Voraussetzungen
|
||||||
|
|
||||||
* **Docker** und **Docker Compose** müssen installiert sein.
|
* **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 **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.
|
* Ein **Telegram Bot Token** (über den BotFather in Telegram erstellbar) sowie deine Telegram User-ID.
|
||||||
|
|
||||||
@@ -27,38 +24,55 @@ Dieses Projekt implementiert ein lokales Retrieval-Augmented Generation (RAG) Sy
|
|||||||
## Setup & Installation
|
## Setup & Installation
|
||||||
|
|
||||||
**1. Repository vorbereiten**
|
**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.
|
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. Skript ausführbar machen (Linux/macOS)**
|
**2. Skripte ausführbar machen (Linux/macOS)**
|
||||||
Das Ollama-Startskript benötigt Ausführungsrechte:
|
Die Startskripte benötigt Ausführungsrechte:
|
||||||
```bash
|
```bash
|
||||||
chmod +x init_ollama.sh
|
chmod +x init-skripts/*
|
||||||
```
|
```
|
||||||
**3. Umgebungsvariablen konfigurieren**
|
**3. Umgebungsvariablen konfigurieren**
|
||||||
Erstelle eine .env Datei im Hauptverzeichnis und fülle sie mit deinen Daten:
|
Erstelle eine .env Datei im Hauptverzeichnis und fülle sie mit deinen Daten:
|
||||||
|
|
||||||
```
|
```
|
||||||
# Paperless
|
# Paperless
|
||||||
PAPERLESS_URL=http://<DEINE-PAPERLESS-IP>:8000
|
PAPERLESS_ADMIN_USER=admin
|
||||||
PAPERLESS_TOKEN=<DEIN_PAPERLESS_TOKEN>
|
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 (Standardwerte können belassen werden)
|
# Postgres
|
||||||
POSTGRES_USER=raguser
|
POSTGRES_USER=raguser
|
||||||
POSTGRES_PASSWORD=ragpass
|
POSTGRES_PASSWORD=ragpass
|
||||||
POSTGRES_DB=ragdb
|
POSTGRES_DB=ragdb
|
||||||
POSTGRES_HOST=postgres
|
POSTGRES_HOST=postgres
|
||||||
POSTGRES_PORT=5432
|
POSTGRES_PORT=5432
|
||||||
|
|
||||||
# Chroma & Ollama (Interne Docker-Routings)
|
# Chroma
|
||||||
CHROMA_HOST=chromadb
|
CHROMA_HOST=chromadb
|
||||||
CHROMA_PORT=8000
|
CHROMA_PORT=8000
|
||||||
|
|
||||||
|
# Ollama
|
||||||
OLLAMA_BASE_URL=http://ollama:11434
|
OLLAMA_BASE_URL=http://ollama:11434
|
||||||
|
|
||||||
# Telegram
|
# Telegram
|
||||||
TELEGRAM_BOT_TOKEN=<DEIN_TELEGRAM_TOKEN>
|
TELEGRAM_BOT_TOKEN=your_telegram_bot_token
|
||||||
ALLOWED_TELEGRAM_USERS=<DEINE_USER_ID>
|
ALLOWED_TELEGRAM_USERS=123456789,987654321
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**4. Paperless API-Token**
|
||||||
|
Um ein API-Token für Paperless zu generieren, führe einfach folgenden Befehl aus:
|
||||||
|
```bash
|
||||||
|
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
|
## Starten & Ausführen
|
||||||
|
|
||||||
Starte das gesamte System im Hintergrund:
|
Starte das gesamte System im Hintergrund:
|
||||||
@@ -70,19 +84,31 @@ docker-compose up -d --build
|
|||||||
|
|
||||||
* Die Datenbanken (Postgres, Chroma) werden initialisiert.
|
* 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 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).
|
* 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.
|
* streamlit und der telegram-bot gehen online.
|
||||||
|
|
||||||
**Zugriff:**
|
**Zugriff:**
|
||||||
|
|
||||||
|
* Paperless-ngx Web-UI: Öffne http://localhost:8000 in deinem Browser.
|
||||||
|
|
||||||
* Streamlit Web-UI: Öffne http://localhost:8501 in deinem Browser.
|
* Streamlit Web-UI: Öffne http://localhost:8501 in deinem Browser.
|
||||||
|
|
||||||
* Telegram Bot: Suche deinen Bot in Telegram und sende /start.
|
* 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)
|
## Nützliche Docker-Befehle (Troubleshooting & Logs)
|
||||||
|
|
||||||
@@ -107,7 +133,7 @@ docker-compose logs -f ollama
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Manuellen Ingest (Sync) sofort anstoßen:**
|
**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:
|
Falls du nicht bis 01:00 Uhr nachts warten willst, kannst du den Sync-Job manuell im laufenden Scheduler-Container ausführen:
|
||||||
```bash
|
```bash
|
||||||
docker exec -it <name_des_scheduler_containers> python src/ingest_job.py
|
docker exec -it <name_des_scheduler_containers> python src/ingest_job.py
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
|||||||
if not check_auth(update):
|
if not check_auth(update):
|
||||||
await update.message.reply_text("Zugriff verweigert.")
|
await update.message.reply_text("Zugriff verweigert.")
|
||||||
return
|
return
|
||||||
await update.message.reply_text("Hallo! Ich bin dein Paperless RAG-Bot. Frag mich etwas.")
|
await update.message.reply_text("Hallo! Ich bin dein DocuMind-G4 RAG-Bot. Frag mich etwas.")
|
||||||
|
|
||||||
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
if not check_auth(update):
|
if not check_auth(update):
|
||||||
|
|||||||
Reference in New Issue
Block a user