cbazza 4fea148d61 feat: v2 pipeline mit OCR + KI-Normalisierung
- extractor.py: Text-Extraktion für MD/TXT/PDF/DOCX/Bilder inkl. OCR (Tesseract)
- normalizer.py: KI-Normalisierung via Claude Haiku (Typ-Erkennung) + Sonnet (Transformation)
- ingest.py: Vollpipeline v2 mit watch, delete, dry-run, quality-min Flags
- ingest_anythingllm.py: Einfaches Script v1 (nur MD/TXT/PDF, kein OCR)
- README.md: Alle drei Tools dokumentiert
2026-04-28 11:21:53 +02:00
2026-02-27 10:59:36 +01:00
2026-02-27 10:59:36 +01:00
2026-02-27 10:59:36 +01:00

RAG Ingestion Tools

Lokale Python-Tools zum Importieren von Dokumenten in pgvector-Datenbanken. Drei eigenständige Tools für unterschiedliche Zieldatenbanken und Anwendungsfälle.


Übersicht

Tool Zieldatenbank Verbindung Besonderheit
ingest.py Hetzner (anythingllm) SSH-Tunnel OCR + KI-Normalisierung
ingest_anythingllm.py Hetzner (anythingllm) SSH-Tunnel Einfach, nur MD/TXT/PDF
ingest_job_matching.py NAS 192.168.178.128 Direkt (Port 5433) Job-Matching-Datenbank

Tool 1: ingest.py — Vollpipeline mit OCR + KI-Normalisierung

Das Haupt-Tool der neuen Generation. Verarbeitet beliebige Dokumente (inkl. Scans und Bilder) und normalisiert sie via Claude KI in die einheitliche Template-Struktur.

Abhängigkeiten: extractor.py, normalizer.py (müssen im gleichen Verzeichnis liegen)

Unterstützte Formate

.md .txt .pdf .docx .png .jpg .jpeg .tif .tiff .bmp .webp

Voraussetzungen

# Tesseract (OCR, einmalig)
brew install tesseract tesseract-lang

# Python-Pakete
pip install -r requirements.txt

# .env konfigurieren
cp .env.example .env
# ANTHROPIC_API_KEY eintragen

Verwendung

# Einzelne Datei (mit KI-Normalisierung)
python ingest.py file ~/Downloads/fremdes_cv.pdf

# Erst testen ohne DB-Speicherung
python ingest.py file ~/Desktop/scan.png --dry-run

# Ohne KI-Normalisierung (z.B. eigene fertige Templates)
python ingest.py file ~/templates/ausgefuellt/mein_cv.md --no-normalize

# Ganzes Verzeichnis
python ingest.py dir ~/Dokumente/bewerbungsunterlagen/ --force

# Ordner live beobachten (neue Dateien automatisch verarbeiten)
python ingest.py watch ~/Desktop/scan-eingang/

# DB-Inhalt anzeigen
python ingest.py list

# Dokument löschen
python ingest.py delete "fremdes_cv.pdf"

Flags

Flag Beschreibung
--force Bestehende Chunks überschreiben
--no-normalize KI-Normalisierung überspringen
--dry-run Nur extrahieren + normalisieren, nicht speichern
--quality-min 0.5 Mindest-Qualitäts-Score (0.01.0)

KI-Normalisierung

Erkennt den Dokumenttyp automatisch und transformiert den Inhalt in die passende Template-Struktur aus templates/. Nutzt die ausgefüllten Beispiele aus templates/ausgefuellt/ als Few-Shot-Referenz.

  • Typ-Erkennung: Claude Haiku (günstig + schnell)
  • Transformation: Claude Sonnet
  • Fehlende Felder werden mit [FEHLT] markiert, nicht halluziniert

Tool 2: ingest_anythingllm.py — Einfaches Ingestion-Script

Schlankes Tool ohne OCR und ohne KI-Normalisierung. Direkte Übernahme von MD/TXT/PDF-Dateien in die anythingllm-Datenbank auf dem Hetzner-Server.

Geeignet für: eigene, bereits fertig strukturierte Dokumente.

Unterstützte Formate

.md .txt .pdf

Voraussetzungen

pip install openai psycopg2-binary pgvector sshtunnel python-dotenv pypdf tiktoken sentence-transformers
cp .env.example .env
# OPENAI_API_KEY eintragen (wird nur für Client-Init benötigt, Embeddings laufen lokal)

Verwendung

# Einzelne Datei
python ingest_anythingllm.py file ~/Dokumente/Lebenslauf.md

# Mit --force (bestehende Chunks überschreiben)
python ingest_anythingllm.py file ~/Dokumente/Lebenslauf.md --force

# Ganzes Verzeichnis
python ingest_anythingllm.py dir ~/Dokumente/bewerbung/

# DB-Inhalt anzeigen
python ingest_anythingllm.py list

Tool 3: ingest_job_matching.py — Job-Matching-Datenbank (NAS)

Importiert Dokumente direkt in die job_matching-Datenbank auf dem lokalen NAS (192.168.178.128, Port 5433). Kein SSH-Tunnel erforderlich.

Voraussetzungen

pip install -r requirements.txt
cp .env.job_matching .env.job_matching.local
# Werte in .env.job_matching.local anpassen

Verwendung

python ingest_job_matching.py file ~/Dokumente/stellenanzeige.pdf
python ingest_job_matching.py dir ~/Dokumente/stellen/
python ingest_job_matching.py list

Gemeinsame Infrastruktur

Embedding-Modell

Alle Tools verwenden intfloat/multilingual-e5-small (384 Dimensionen) lokal. Wird beim ersten Aufruf automatisch heruntergeladen (~120 MB).

Templates

templates/
├── *_TEMPLATE.md          Ziel-Strukturvorlagen (leer)
└── ausgefuellt/           Ausgefüllte Referenzbeispiele (für KI-Few-Shot)

Umgebungsvariablen

Datei Verwendet von
.env ingest.py, ingest_anythingllm.py
.env.job_matching ingest_job_matching.py

Setup (komplett, einmalig)

cd ~/Projekte/rag-ingestion
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
brew install tesseract tesseract-lang   # nur für ingest.py (OCR)
cp .env.example .env
nano .env                               # API-Keys + DB-Zugangsdaten eintragen
S
Description
vectorize Documenta lokal to pgvector
Readme
102 KiB
Languages
Python 100%