Eine produktionsreife Dokumentenintelligenz-Plattform, die Rechnungs- und Belegdatenextraktion mit OCR und Large Language Models automatisiert. Das System verarbeitet Dokumentenbilder asynchron, extrahiert strukturierte Daten (Händler, Datum, Gesamtbetrag, Positionen) und bietet sowohl REST API als auch Web-UI-Schnittstellen zur Anzeige von Ergebnissen. Vollständig containerisiert mit Docker Compose für einfaches Deployment und Skalierung. (GitHub)
Architekturübersicht
Die Plattform folgt einer Microservices-Architektur mit klarer Trennung der Verantwortlichkeiten:
1. Frontend-Layer (React + Nginx)
React-Anwendung: Moderne Single-Page-Anwendung zum Hochladen von Dokumenten und Anzeigen von Extraktionsergebnissen
Nginx Web-Server: Dient statischen React-Build-Dateien und behandelt Reverse-Proxy
Benutzeroberfläche: Datei-Upload-Komponente, Beleg-Status-Checker und Ergebnisanzeige mit extrahierten Feldern
2. Backend API (FastAPI)
RESTful API: FastAPI-basiertes Backend mit Endpoints für:
POST /receipts/upload: Rechnungs-/Belegbilder hochladen (multipart/form-data)
GET /receipts/{receipt_id}: Verarbeitungsstatus und extrahierte Daten abrufen
GET /health: Health-Check-Endpoint für Monitoring
Async Request Handling: Non-blocking I/O für gleichzeitige Uploads
Dateiverwaltung: Temporäre Speicherung und Validierung hochgeladener Bilder
3. Async Processing Pipeline (Celery + Redis)
Task Queue: Redis als Message Broker für Celery-Tasks
Worker-Prozesse: Celery-Worker behandeln CPU-intensive OCR- und LLM-Verarbeitung
Status-Tracking: Echtzeit-Status-Updates (pending → processing → completed/error)
Skalierbarkeit: Horizontale Skalierung durch Hinzufügen weiterer Celery-Worker
4. OCR-Verarbeitung (Tesseract)
Textextraktion: Tesseract OCR-Engine extrahiert Rohtext aus Rechnungsbildern
Bildvorverarbeitung: Pillow-Bibliothek zur Bildoptimierung (Größenänderung, Kontrast, Graustufen)
Sprachunterstützung: Konfigurierbare OCR-Sprachmodelle
Fehlerbehandlung: Robuste Fehlerbehandlung für qualitativ minderwertige oder beschädigte Bilder
5. KI-Datenextraktion (LLM)
Dual-Mode-Unterstützung:
Cloud-Modus: OpenAI GPT-Modelle (GPT-3.5, GPT-4) via API
Lokaler Modus: Ollama für On-Premise-LLM-Inferenz (z.B. Llama 3, Mistral)
Strukturierte Extraktion: LLM parst OCR-Text zur Extraktion von:
Händler-/Verkäufername
Transaktionsdatum
Gesamtbetrag
Positionen (optional)
Steuerinformationen
Prompt Engineering: Optimierte Prompts für konsistente JSON-Ausgabe
6. Datenpersistenz (PostgreSQL)
Datenbankschema: SQLAlchemy ORM-Modelle für:
Beleg-Metadaten (ID, Upload-Zeitstempel, Status)
Original-Dateipfade
OCR-extrahierter Text (Volltext)
LLM-extrahierte strukturierte Felder (JSON)
Migrationen: Alembic für Datenbankschema-Versionierung und Migrationen
Abfrageoptimierung: Indizierte Felder für schnelle Status-Lookups
Technologie-Stack
Backend & Verarbeitung
FastAPI: Modernes Python-Web-Framework mit automatischer OpenAPI-Dokumentation
Celery: Verteilte Task-Queue für asynchrone Job-Verarbeitung
Redis: In-Memory-Datenspeicher als Celery-Broker und Result-Backend
PostgreSQL: Produktionsreife relationale Datenbank mit ACID-Compliance
SQLAlchemy: Python ORM für Datenbankabstraktion und Query-Building
Alembic: Datenbank-Migrations-Tool für Schema-Management
OCR & Bildverarbeitung
Tesseract OCR: Open-Source-OCR-Engine (via pytesseract Python-Wrapper)
Pillow (PIL): Python-Imaging-Bibliothek für Bildvorverarbeitung und -manipulation
KI/ML
OpenAI API: Cloud-basierter LLM-Service (GPT-3.5, GPT-4) für Datenextraktion
Ollama: Lokaler LLM-Server mit Unterstützung für Modelle wie Llama 3, Mistral, CodeLlama
LangChain (potenziell): Framework für Verkettung von LLM-Operationen und Prompt-Management
Frontend
React: Komponentenbasierte UI-Bibliothek zum Erstellen interaktiver Interfaces
Nginx: Hochperformanter Web-Server und Reverse-Proxy
Infrastruktur
Docker: Containerisierung für konsistentes Deployment über Umgebungen hinweg
Docker Compose: Multi-Container-Orchestrierung für alle Services
Umgebungsvariablen: Sichere Konfigurationsverwaltung via .env-Dateien
Funktionsweise
Verarbeitungs-Workflow
Upload-Phase:
Benutzer lädt Rechnungsbild via React-Frontend hoch
FastAPI empfängt Datei, validiert Format (.png, .jpg)
Datei temporär gespeichert, Beleg-Datensatz in PostgreSQL mit Status "pending" erstellt
Beleg-ID an Benutzer zurückgegeben
OCR-Phase (Celery-Task):
Celery-Worker nimmt OCR-Task aus Redis-Queue auf
Bild vorverarbeitet (Größenänderung, Kontrastverbesserung falls nötig)
Tesseract OCR extrahiert gesamten Text aus Bild
Roher OCR-Text in Datenbank gespeichert
Status auf "processing" aktualisiert
KI-Extraktions-Phase (Celery-Task):
OCR-Text an LLM übergeben (OpenAI oder Ollama basierend auf Konfiguration)
LLM-Prompt weist Extraktion strukturierter Felder an
LLM gibt JSON mit Händler, Datum, Gesamtbetrag etc. zurück
Extrahierte Daten in PostgreSQL gespeichert
Status auf "processed" aktualisiert
Abruf-Phase:
Benutzer fragt Beleg-Status via UI oder API ab
FastAPI ruft Daten aus PostgreSQL ab
Ergebnisse mit formatierten extrahierten Feldern angezeigt
Konfiguration & Setup
Umgebungsvariablen (.env)
# Datenbank-Konfiguration
DATABASE_URL=postgresql://postgres:postgres@db:5432/invoice_db
# Celery-Konfiguration
CELERY_BROKER_URL=redis://redis:6379/0
CELERY_RESULT_BACKEND=redis://redis:6379/0
# LLM-Konfiguration
LLM_MODE=cloud # Optionen: 'cloud' oder 'local'
# OpenAI (wenn LLM_MODE=cloud)
OPENAI_API_KEY=your_openai_api_key_here
# Ollama (wenn LLM_MODE=local)
OLLAMA_BASE_URL=http://host.docker.internal:11434
Deployment
Copy# Alle Services bauen und starten
docker-compose build
docker-compose up -d
# Logs anzeigen
docker-compose logs -f
# Services stoppen
docker-compose down
Potenzielle Verbesserungen & Erweiterungen
1. Erweiterte OCR-Modelle
Upgrade auf Cloud-OCR-Services:
Google Cloud Vision API: Höhere Genauigkeit, Unterstützung für 200+ Sprachen, Handschrifterkennung
AWS Textract: Spezialisiert auf Dokumentenanalyse, Tabellenextraktion, Formularverständnis
Azure Form Recognizer: Vorgefertigte Rechnungsmodelle, automatische Feldextraktion
Vorteile: Bessere Genauigkeit bei qualitativ minderwertigen Bildern, Tabellenextraktion, Mehrsprachunterstützung
2. Erweiterte LLM-Integration
Strukturierte Output-Modelle:
Verwendung von OpenAIs strukturierten Outputs (JSON-Modus) für konsistentes Parsing
Fine-Tuning von Modellen auf rechnungsspezifischen Datensätzen für bessere Genauigkeit
Spezialisierte Modelle:
Anthropic Claude: Besser beim Befolgen komplexer Extraktionsanweisungen
Lokale Fine-Tuned-Modelle: Training auf Rechnungsdatensätzen für domänenspezifische Leistung
Mehrstufige Extraktion:
Erster Durchgang: Grundfelder extrahieren (Händler, Datum, Gesamtbetrag)
Zweiter Durchgang: Positionen, Steueraufschlüsselung, Zahlungsbedingungen extrahieren
3. Dokumentenverständnis-Frameworks
LangChain Document Loaders: Integration in Dokumentenverarbeitungspipelines
LlamaIndex: Aufbau von RAG (Retrieval-Augmented Generation) für kontextbewusste Extraktion
Haystack: End-to-End-NLP-Framework für Dokumenten-QA und -Extraktion
4. Erweiterte Features
Multi-Format-Unterstützung: PDF-Parsing (PyPDF2, pdfplumber), gescannte Dokumente
Batch-Verarbeitung: Mehrere Rechnungen hochladen, parallel verarbeiten
Export-Funktionalität: Export nach CSV, Excel, JSON oder Buchhaltungssoftware-Formaten (QuickBooks, Xero)
Validierung & Verifikation: Kreuzprüfung extrahierter Daten, Kennzeichnung von Anomalien
Duplikaterkennung: Identifizierung doppelter Rechnungen mit Fuzzy-Matching
5. Performance-Optimierungen
Caching: Redis-Cache für häufig abgerufene Belege
Bildoptimierung: Bilder vor OCR komprimieren, um Verarbeitungszeit zu reduzieren
Parallele Verarbeitung: Mehrere Belege gleichzeitig mit Worker-Pools verarbeiten
CDN-Integration: Frontend-Assets via CDN bereitstellen für schnellere Ladezeiten
6. Monitoring & Observability
Logging: Strukturiertes Logging mit Korrelations-IDs für Request-Tracing
Metriken: Prometheus-Metriken für Task-Queue-Tiefe, Verarbeitungszeiten, Fehlerraten
Alerting: Alerts für fehlgeschlagene Extraktionen, Queue-Backups einrichten
Dashboard: Grafana-Dashboard für Echtzeit-System-Monitoring
7. Sicherheitsverbesserungen
Authentifizierung: JWT-basierte Auth für API-Endpoints
Dateivalidierung: Virenscanning, Dateityp-Verifikation
Datenverschlüsselung: Verschlüsselung sensibler Rechnungsdaten im Ruhezustand
Rate Limiting: Missbrauch mit Request-Rate-Limits verhindern
8. Benutzererfahrung
Echtzeit-Updates: WebSocket/SSE für Live-Status-Updates
Fortschrittsanzeigen: OCR- und LLM-Verarbeitungsfortschritt anzeigen
Fehlerwiederherstellung: Fehlgeschlagene Extraktionen wiederholen, manuelle Korrekturoberfläche
Bulk-Operationen: Ordner mit Rechnungen hochladen, alle auf einmal verarbeiten
Anwendungsfälle
Buchhaltungsautomatisierung: Automatisierung der Spesenabrechnungsverarbeitung
AP/AR-Management: Straffung von Workflows für Verbindlichkeiten und Forderungen
Steuervorbereitung: Rechnungsdaten für Steuererklärung extrahieren
Ausgabenverfolgung: Persönliche oder geschäftliche Ausgabenkategorisierung
Audit-Trail: Wartung einer durchsuchbaren Datenbank aller Rechnungen
API-Beispiele
Copy# Rechnung hochladen
curl -X POST http://localhost:8000/receipts/upload \ \
-F "file=@invoice.jpg"
# Antwort: {"receipt_id": "abc123", "status": "pending"}
# Status prüfen
curl http://localhost:8000/receipts/abc123
# Antwort:
# {
# "receipt_id": "abc123",
# "status": "processed",
# "merchant": "Amazon",
# "date": "2024-01-15",
# "total": 129.99
# }
(View on GitHub)