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

```bash

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

```bash python ingest_V2.py file ~/Downloads/fremdes_cv.pdf python ingest_V2.py file ~/Desktop/scan.png --dry-run 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" ```

Flags

Flag Beschreibung
`--force` Bestehende Chunks überschreiben
`--no-normalize` KI-Normalisierung überspringen
`--dry-run` Nur extrahieren + normalisieren, nicht in DB speichern
`--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

```bash 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

```bash 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)

```bash 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 ```

S
Description
vectorize Documenta lokal to pgvector
Readme
102 KiB
Languages
Python 100%