RAG-System für Rechnungsverarbeitung im Schweizer E-Commerce

Prozess-Audit und Zieldefinition

Ein Schweizer E-Commerce-Unternehmen mit 120 Mitarbeitern stand vor einem klassischen Problem: Die Buchhaltung verbrachte 40 % ihrer Arbeitszeit mit der manuellen Erfassung von Lieferantenrechnungen. Jede Rechnung erforderte 15 Minuten für die Dateneingabe, und die Fehlerquote lag bei 5 %. Das Team brauchte eine Lösung, die die Routinearbeit eliminiert, ohne die bestehende ERP-Landschaft zu ersetzen.

Die Entscheidung fiel auf ein Retrieval-Augmented Generation (RAG)-System, das auf pgvector basiert. Der Prozess-Audit identifizierte die Rechnungsverarbeitung als den Workflow mit dem höchsten Automatisierungspotenzial. Das Ziel: Die Zykluszeit auf unter 5 Minuten pro Rechnung senken und die Fehlerquote auf unter 1 % reduzieren. Die Implementierung sollte in 4 Wochen abgeschlossen sein, um den Pilotbetrieb vor dem Quartalsende zu starten.

Architektur: pgvector und Custom-REST-APIs

Die Architektur setzt auf drei Kernkomponenten: Eine pgvector-Instanz in der bestehenden PostgreSQL-Datenbank, ein LLM (OpenAI GPT-4o) für die Textverarbeitung und Custom-REST-APIs für die Integration. Die Rechnungen werden als PDFs in ein S3-Bucket geladen, wo ein OCR-Service den Text extrahiert. Die Vektoren werden in pgvector gespeichert, um ähnliche Rechnungen und Kontextinformationen abzurufen.

Die REST-APIs verbinden das System mit dem ERP (SAP Business One) und der Buchhaltungssoftware. Webhooks senden Ereignisse wie ‘Rechnung extrahiert’ oder ‘Freigabe erforderlich’ an die zuständigen Systeme. Die Daten bleiben im Schweizer Rechenzentrum, was die ISO 27001-Anforderungen erfüllt. Die Vektordatenbank wird verschlüsselt, und der Zugriff erfolgt über rollenbasierte Berechtigungen.

RAG-Pipeline für die Rechnungsverarbeitung

Das RAG-System klassifiziert jede Rechnung automatisch: Lieferantenname, Rechnungsnummer, Netto-Betrag, MWST-Satz und Fälligkeitsdatum. Die Vektordurchsuchung in pgvector findet ähnliche Rechnungen aus der Vergangenheit, um Kontext zu liefern. Das LLM extrahiert die strukturierten Felder und vergleicht sie mit den ERP-Daten.

Bei Unstimmigkeiten – z. B. wenn der Betrag von der letzten Rechnung abweicht – fordert das System eine menschliche Freigabe an. Die Person prüft die extrahierten Daten und bestätigt oder korrigiert sie. Dieser Human-in-the-Loop-Ansatz reduziert das Risiko von Fehlern und erfüllt die Compliance-Anforderungen. Die Freigabe erfolgt über ein Web-Interface, das direkt in die Buchhaltungssoftware integriert ist.

Pilotbetrieb und Skalierung

Die Baseline-Messung vor dem Pilotbetrieb ergab: 15 Minuten pro Rechnung, 5 % Fehlerquote, 40 % der Buchhaltungszeit für manuelle Eingaben. Nach 4 Wochen Pilotbetrieb: 3 Minuten pro Rechnung, 0,4 % Fehlerquote, 12 % der Buchhaltungszeit für manuelle Eingaben.

Die Skalierung erfolgt durch die Erhöhung der pgvector-Instanz und die Anpassung der API-Limits. Da die Architektur model-agnostisch ist, können bei steigenden Anforderungen leistungsfähigere LLMs oder lokale Modelle auf eigener Hardware eingesetzt werden. Die Webhooks und REST-APIs bleiben unverändert. Das dedizierte AI-Team überwacht die Systemleistung und optimiert die Vektordurchsuchung kontinuierlich.

Compliance und ISO 27001

Die ISO 27001-Konformität wird durch mehrere Maßnahmen gewährleistet: Die Daten verbleiben im Schweizer Rechenzentrum, die Vektordatenbank ist verschlüsselt, und der Zugriff erfolgt über rollenbasierte Berechtigungen. Regelmäßige Penetrationstests und Audits sind Teil des Betriebs.

Die Custom-REST-APIs und Webhooks werden über API-Gateways abgesichert, die Rate-Limiting und Authentifizierung (OAuth 2.0) implementieren. Die LLM-APIs werden über sichere Verbindungen (TLS 1.3) aufgerufen, und die Prompts werden vor der Übertragung validiert. Die Human-in-the-Loop-Freigaben werden protokolliert, um die Nachvollziehbarkeit zu gewährleisten. Diese Maßnahmen erfüllen die Anforderungen der ISO 27001 und der Schweizer Datenschutzverordnung (DSG).

Kommentare

Leave a Reply

Your email address will not be published. Required fields are marked *