Files
ai.bewerbung---vectorize-do…/README.md
T
cbazza 009e9b7bad feat: --output Flag für dry-run + Dokumentation aktualisiert
- ingest_V2.py: --output Flag zum Speichern des normalisierten Markdowns
- Auto-Output: <originalname>_normalized.md wenn kein --output angegeben
- README: --output in Flags-Tabelle + Verwendungsbeispiele ergänzt
2026-04-29 11:08:26 +02:00

6.8 KiB
Raw Blame History

RAG Ingestion Tools

Lokale Python-Tools zum Importieren von Dokumenten in pgvector-Datenbanken. Drei eigenständige Ingestion-Scripts für unterschiedliche Zieldatenbanken und Anwendungsfälle, plus zwei gemeinsame Module für Extraktion und KI-Normalisierung.


Dateistruktur

rag-ingestion/
├── ingest_V2.py             Vollpipeline v2: OCR + KI-Normalisierung (→ Hetzner)
├── ingest_anythingllm.py    Einfaches Script v1: nur MD/TXT/PDF (→ Hetzner)
├── ingest_job_matching.py   Job-Matching Script: direkt auf NAS (→ NAS Port 5433)
│
├── extractor.py             Modul: Text-Extraktion + OCR (wird von ingest_V2 genutzt)
├── normalizer.py            Modul: KI-Normalisierung via Claude (wird von ingest_V2 genutzt)
│
├── templates/
│   ├── *_TEMPLATE.md        Ziel-Strukturvorlagen (leer)
│   └── ausgefuellt/         Ausgefüllte Referenzbeispiele (Few-Shot für KI, nicht in Git)
│
├── .env.ingest              Secrets für ingest_V2.py (nicht in Git)
├── .env.job_matching        Secrets für ingest_job_matching.py (nicht in Git)
└── .env.example             Vorlage für .env.ingest

Übersicht

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

Tool 1: ingest_V2.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.

Benötigt: extractor.py und normalizer.py im gleichen Verzeichnis.

Unterstützte Formate

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

Voraussetzungen

# System-Tools (einmalig)
brew install tesseract tesseract-lang poppler

# Python-Pakete
pip install -r requirements.txt

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

Verwendung

python ingest_V2.py file ~/Downloads/fremdes_cv.pdf
python ingest_V2.py file ~/Desktop/scan.png --dry-run

# Dry-Run + normalisiertes Markdown automatisch speichern (<dateiname>_normalized.md)
python ingest_V2.py file ~/Downloads/cv.pdf --dry-run

# Dry-Run + normalisiertes Markdown in bestimmte Datei speichern
python ingest_V2.py file ~/Downloads/cv.pdf --dry-run --output ~/Desktop/cv_normalisiert.md
python ingest_V2.py file ~/templates/ausgefuellt/mein_cv.md --no-normalize
python ingest_V2.py dir ~/Dokumente/bewerbungsunterlagen/ --force
python ingest_V2.py watch ~/Desktop/scan-eingang/
python ingest_V2.py list
python ingest_V2.py delete "fremdes_cv.pdf"

Datenbank verwalten

# Alle importierten Dokumente anzeigen
# Zeigt: Titel, Dokumenttyp, Qualitäts-Score, Format, Anzahl Chunks, Datum
python ingest_V2.py list

# Ausgabe-Beispiel:
#   Titel                                         Typ                  Score    Fmt  Chunks  Datum
#   ─────────────────────────────────────────────────────────────────────────────────────────────
#   Arbeitszeugnis Sopra Financial Technology...  arbeitszeugnis         95%   .pdf       3  2026-04-28

# Einzelnes Dokument löschen (alle Chunks)
python ingest_V2.py delete "Arbeitszeugnis Sopra Financial Technology GmbH.pdf"

# Hinweis: Der Titel entspricht exakt dem Dateinamen wie er beim Import verwendet wurde

Flags

Flag Beschreibung
--force Bestehende Chunks überschreiben
--no-normalize KI-Normalisierung überspringen
--dry-run Nur extrahieren + normalisieren, nicht in DB speichern
--output <pfad> Normalisiertes Markdown als Datei speichern (nur mit --dry-run)
--quality-min 0.5 Mindest-Qualitäts-Score (0.01.0, Standard: 0.0)

KI-Normalisierung (normalizer.py)

  • Typ-Erkennung: Claude Haiku (günstig + schnell)
  • Transformation: Claude Sonnet
  • Fehlende Felder werden mit [FEHLT] markiert, nie halluziniert
  • Qualitäts-Score: 0.01.0 (Anteil befüllter Pflichtfelder)

Erkannte Typen: arbeitszeugnis, cv, lebenslauf, anschreiben, projektbeschreibung, karriereziele, technologie, zertifikate, referenzen, elevatorpitch, rahmenbedingungen, zielstellen

OCR-Pipeline (extractor.py)

  1. pypdf versucht Text zu extrahieren
  2. Weniger als 150 Zeichen → OCR-Fallback via Tesseract (300 DPI)
  3. Bilder (PNG, JPG etc.) → direkt OCR

Tool 2: ingest_anythingllm.py — Einfaches Ingestion-Script (v1)

Schlankes Tool ohne OCR und ohne KI-Normalisierung. Geeignet für eigene, bereits fertig strukturierte Dokumente (z.B. ausgefüllte Templates).

Unterstützte Formate

.md .txt .pdf

Verwendung

python ingest_anythingllm.py file ~/Dokumente/Lebenslauf.md
python ingest_anythingllm.py file ~/Dokumente/Lebenslauf.md --force
python ingest_anythingllm.py dir ~/Dokumente/bewerbung/
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.

Embeddings via OpenAI text-embedding-3-small (kostenpflichtig).

Verwendung

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

Gemeinsame Infrastruktur

Embedding-Modelle

Tool Modell Dimensionen Kosten
ingest_V2.py multilingual-e5-small (lokal) 384 kostenlos
ingest_anythingllm.py multilingual-e5-small (lokal) 384 kostenlos
ingest_job_matching.py OpenAI text-embedding-3-small 1536 kostenpflichtig

Umgebungsvariablen

Datei Verwendet von Inhalt
.env.ingest ingest_V2.py, ingest_anythingllm.py ANTHROPIC_API_KEY, SSH, DB
.env.job_matching ingest_job_matching.py OPENAI_API_KEY, NAS-DB

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 poppler   # nur für ingest_V2.py
cp .env.example .env.ingest
nano .env.ingest   # ANTHROPIC_API_KEY + SSH + DB-Zugangsdaten eintragen