Zum Inhalt springen

Alle Projekte

Baitz Doks

Liest Rechnungen und Belege aus, ohne dass sie das Gerät verlassen: vollständig lokal, auf einem normalen Notebook, ohne GPU.

Öffentlich unter der Apache-Lizenz 2.0. In Stufe 3 von 4: Das lokale Sprachmodell und die Ordnerüberwachung sind gebaut, die Vorlagenerkennung folgt.

Quellcode: github.com/MarcusBaitz/doc-extractor

Ein Morgen in einer Steuerkanzlei in einer Minute, mit Ton und deutschen Untertiteln.

Das Problem

Die häufigste Frage bei KI-Projekten ist nicht, ob KI funktioniert, sondern wohin die Daten dabei fließen. Für Belege, Verträge und Patientendokumente ist die ehrlichste Antwort oft: Sie dürfen das Haus nicht verlassen. Also tippt jemand Rechnungsnummer, Datum und Betrag ab, Beleg für Beleg.

Der Ansatz

Doks ist eine Desktop-Anwendung, die Belege vollständig lokal liest. Zu jeder Angabe zeigt sie die Stelle im Beleg, an der sie steht. Was sicher erkannt ist, geht direkt weiter; nur was nicht eindeutig ist, landet zur Prüfung bei einem Menschen.

Entscheidend ist, wie die Lokalität durchgesetzt wird: nicht per Konfigurationsschalter, der sich unbemerkt umgehen ließe, sondern technisch. Jeder ausgehende Netzwerkzugriff läuft durch genau eine Stelle im Code. Das Frontend hat keinen HTTP-Client, der Verarbeitungsdienst keine Netzwerkbibliothek, und drei Prüfungen in der CI setzen das bei jedem Commit durch. Diese Prüfung ist negativ getestet: Ein testweise eingebauter Netzwerkaufruf lässt den Build nachweislich scheitern.

  • Drei Prozesse, eine Richtung: React-Frontend, Rust-Shell als Nadelöhr, Python-Sidecar auf localhost mit Sitzungstoken.
  • Gemessen statt versprochen: 12 bis 16 ms je PDF-Seite mit Text-Layer, gegen ein Budget von 100 ms.
  • Zielhardware ist ein normales Notebook mit 16 GB RAM, keine GPU, kein Serverschrank.
  • Ein Wert vom lokalen Sprachmodell zählt nur, wenn er wörtlich im Beleg steht; sonst wird er verworfen.
  • Ehrliches Fehlverhalten: Ein Bild ohne OCR meldet sich als „kein Text“, statt eine leere Extraktion als Erfolg auszugeben.

So sieht es aus

Sechs erfundene Eingangsrechnungen an eine Steuerkanzlei, mit einer Vorlage gelesen. Fünf sind sicher erkannt, eine schreibt ihren Endbetrag anders als üblich und wartet deshalb auf Prüfung. Die Beispiele liegen mit ihrem Generator im Repository.

  • Übersicht von Baitz Doks: sechs Eingangsrechnungen gelesen, eine wartet auf Prüfung, fünf sind zum Ablegen als Tabelle bereit
  • Prüfen in Baitz Doks: links die Rechnung mit markierten Fundstellen, rechts die eine offene Angabe Gesamtbetrag und alle übrigen Angaben als sicher erkannt
  • Neue Vorlage in Baitz Doks: links der Musterbeleg mit beschrifteten Markierungen, rechts die im Beleg gefundenen Angaben zum Ankreuzen
  • Prüfen in Baitz Doks im dunklen Erscheinungsbild
  • Die Übersicht: Was sicher erkannt ist, liegt zum Ablegen bereit. Zu tun gibt es nur etwas, wenn eine Angabe nicht eindeutig war. (Helles Theme)
Architektur von Baitz Doks: React-Frontend, Rust-Shell und Python-Dienst auf dem eigenen Rechner; jeder ausgehende Zugriff muss durch Egress::request, standardmäßig im Modus Air-gap
Die Architektur aus dem Repository, englisch beschriftet: Jeder ausgehende Netzwerkzugriff muss durch eine einzige Funktion, und deren Grundeinstellung ist Air-gap.

Stand

Stufe 2 ist abgeschlossen: Laden, Anzeigen und Indizieren von PDF, Excel und Bildern funktionieren, ebenso das Auslesen der Werte, jeweils mit der Stelle im Beleg, an der ein Wert gefunden wurde. In Stufe 3 sind ein lokales Sprachmodell über llama.cpp und überwachte Eingangsordner gebaut. Beim Einrichten einer Vorlage liest Doks den Musterbeleg vorab aus und schlägt alle gefundenen Angaben zum Ankreuzen vor; Rechnungspositionen kommen als Liste mit Summenprobe und landen Zeile für Zeile in der Tabelle. Offen ist noch, dass Doks die passende Vorlage selbst erkennt. Export, Stapelverarbeitung und Installer folgen in Stufe 4. Die Oberfläche ist standardmäßig deutsch, Englisch lässt sich in den Einstellungen wählen.

Open Source

Der Quellcode liegt öffentlich auf GitHub unter MarcusBaitz/doc-extractor und steht unter der Apache-Lizenz 2.0. Jeder darf Doks verwenden, verändern und weitergeben, auch kommerziell.

Technik: Tauri, Rust, Python, Local AI, SQLite

Fragen zu diesem Projekt oder zu einem ähnlichen Vorhaben?

Anfrage senden