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

200 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
# 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
```bash
# 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
```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
```