Dokumenten-Pipeline mit Belegpflicht auf Datenbankebene.
Ingest aus Chat, Postfach und Objektspeicher, Deduplizierung per sha256, Textextraktion mit OCR-Fallback und Embeddings in pgvector. Ein LLM-Agent klassifiziert und benennt; PostgreSQL lehnt jeden Datums-, Betrags- oder Nummernwert ohne wörtliches Zitat aus der gespeicherten Lesung ab.
Architektur
Dateien laufen über drei Eingangswege in einen n8n-Workflow. Jede Datei erhält eine sha256-Prüfsumme; identische Inhalte werden nicht erneut verarbeitet. PDFs mit Textebene werden lokal ausgelesen, ohne Textebene greift Mistral OCR, Fotos liest ein Sehmodell mit Temperatur 0. Der Text wird in Abschnitte zerlegt und als Vektor in PostgreSQL (pgvector) abgelegt. Ein Agent auf Basis von Hermes Agent ordnet über MCP-Werkzeuge einen von zehn festen Dokumenttypen zu, vergibt einen Dateinamen nach dem Schema JJJJ-MM-TT_Absender_Typ und wählt den Zielordner. Vor jedem Verschieben validiert die Datenbank die extrahierten Werte gegen die gespeicherte Lesung.
Vorher und nachher
Manuell
- Dateinamen wie „Scan_0042.pdf“ ohne Metadaten
- Datum und Absender pro Datei von Hand extrahieren
- Ordnerstruktur ohne festes Schema
- Suche nur über den Dateinamen
Pipeline
- Einheitliches Namensschema JJJJ-MM-TT_Absender_Typ
- Zehn feste Dokumenttypen; bestehende Ordner und Schlagworte haben Vorrang
- Semantische Suche über Embeddings mit Ähnlichkeitsgrenze
- Deduplizierung per sha256 über alle Eingangswege
- Unsichere Felder bleiben im Eingang statt im Archiv
Ablauf
- 01Ingest: Bild oder PDF aus Chat, Mailanhang oder Objektspeicher; Typprüfung und sha256-Fingerabdruck.
- 02Extraktion: Textebene zuerst, Mistral OCR nur ohne Textebene, Sehmodell für Fotos.
- 03Indexierung: Chunking und Embeddings in PostgreSQL mit pgvector.
- 04Klassifikation: Der Agent bestimmt Typ, Felder, Dateiname und Ordner über MCP-Werkzeuge.
- 05Validierung: Die Datenbank prüft jedes Feld gegen ein wörtliches Zitat; bei Ablehnung bleibt die Datei im Eingang.
Kontrollprinzip
Belegpflicht als Datenbankprüfung
Datums-, Betrags- und Nummernfelder bestätigt nicht das Modell, sondern PostgreSQL: Jeder Wert braucht ein wörtliches Zitat aus der gespeicherten Lesung oder eine ausdrückliche menschliche Bestätigung. Zusätzlich muss das Datum im Dateinamen zum erkannten Datum passen. Die Prüfungen laufen in fester Reihenfolge und liefern einen maschinenlesbaren Ablehnungsgrund wie zitat_nicht_gefunden oder name_datum_passt_nicht. Abgelehnte Dateien bleiben im Eingang, der Agent fragt nach.