From 4dcdf8880d7fc920015f727f70b64f95106543ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Fr=C3=B6hlich?= Date: Wed, 29 Apr 2026 10:24:59 +0200 Subject: [PATCH] README.md aktualisiert escape Zeichen entfernt, damit die Darstellung richtig ist --- README.md | 78 +++++++++++++++++++++++++++---------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 52469a0..482d8e6 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Anwendungsfälle, plus zwei gemeinsame Module für Extraktion und KI-Normalisier ## Dateistruktur -\`\`\` +``` rag-ingestion/ ├── ingest_V2.py Vollpipeline v2: OCR + KI-Normalisierung (→ Hetzner) ├── ingest_anythingllm.py Einfaches Script v1: nur MD/TXT/PDF (→ Hetzner) @@ -24,7 +24,7 @@ rag-ingestion/ ├── .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 -\`\`\` +``` --- @@ -32,26 +32,26 @@ rag-ingestion/ | 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 | +| `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 +## 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. +**Benötigt:** `extractor.py` und `normalizer.py` im gleichen Verzeichnis. ### Unterstützte Formate -\`.md\` \`.txt\` \`.pdf\` \`.docx\` \`.png\` \`.jpg\` \`.jpeg\` \`.tif\` \`.tiff\` \`.bmp\` \`.webp\` +`.md` `.txt` `.pdf` `.docx` `.png` `.jpg` `.jpeg` `.tif` `.tiff` `.bmp` `.webp` ### Voraussetzungen -\`\`\`bash +```bash # System-Tools (einmalig) brew install tesseract tesseract-lang poppler @@ -61,11 +61,11 @@ pip install -r requirements.txt # .env.ingest konfigurieren cp .env.example .env.ingest nano .env.ingest # ANTHROPIC_API_KEY eintragen -\`\`\` +``` ### Verwendung -\`\`\`bash +```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 @@ -73,71 +73,71 @@ 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.0–1.0, Standard: 0.0) | +| `--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.0–1.0, Standard: 0.0) | -### KI-Normalisierung (\`normalizer.py\`) +### KI-Normalisierung (`normalizer.py`) - **Typ-Erkennung:** Claude Haiku (günstig + schnell) - **Transformation:** Claude Sonnet -- **Fehlende Felder** werden mit \`[FEHLT]\` markiert, nie halluziniert +- **Fehlende Felder** werden mit `[FEHLT]` markiert, nie halluziniert - **Qualitäts-Score:** 0.0–1.0 (Anteil befüllter Pflichtfelder) -Erkannte Typen: \`arbeitszeugnis\`, \`cv\`, \`lebenslauf\`, \`anschreiben\`, -\`projektbeschreibung\`, \`karriereziele\`, \`technologie\`, \`zertifikate\`, -\`referenzen\`, \`elevatorpitch\`, \`rahmenbedingungen\`, \`zielstellen\` +Erkannte Typen: `arbeitszeugnis`, `cv`, `lebenslauf`, `anschreiben`, +`projektbeschreibung`, `karriereziele`, `technologie`, `zertifikate`, +`referenzen`, `elevatorpitch`, `rahmenbedingungen`, `zielstellen` -### OCR-Pipeline (\`extractor.py\`) +### OCR-Pipeline (`extractor.py`) -1. \`pypdf\` versucht Text zu extrahieren +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) +## 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\` +`.md` `.txt` `.pdf` ### Verwendung -\`\`\`bash +```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) +## Tool 3: `ingest_job_matching.py` — Job-Matching-Datenbank (NAS) -Importiert Dokumente direkt in die \`job_matching\`-Datenbank auf dem lokalen 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). +Embeddings via OpenAI `text-embedding-3-small` (kostenpflichtig). ### Verwendung -\`\`\`bash +```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" -\`\`\` +``` --- @@ -147,22 +147,22 @@ python ingest_job_matching.py clear "stellenanzeige.pdf" | 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 | +| `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 | +| `.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 +```bash cd ~/Projekte/rag-ingestion python3 -m venv venv source venv/bin/activate @@ -170,4 +170,4 @@ 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 -\`\`\` +```