diff --git a/README.md b/README.md index b781cf3..662b03e 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,24 @@ # 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. +Lokale Python-Tools zum Importieren von Dokumenten in pgvector-Vektordatenbanken. +Drei eigenständige Scripts für unterschiedliche Zielplattformen und Anwendungsfälle, +plus zwei gemeinsame Module für Extraktion und KI-Normalisierung. + +--- + +## Übersicht & Zielplattformen + +| Tool | Wofür? | Zielplattform | Verbindung | .env-Datei | +|---|---|---|---|---| +| `ingest_V2.py` | Fremde Dokumente, Scans, Bilder — mit automatischer Strukturierung | Hetzner · anythingllm DB | SSH-Tunnel | `.env.ingest` | +| `ingest_anythingllm.py` | Eigene, bereits strukturierte Dokumente (Templates) | Hetzner · anythingllm DB | SSH-Tunnel | `.env.ingest` | +| `ingest_job_matching.py` | Stellenanzeigen & Profil-Dokumente für Job-Matching | NAS · job_matching DB | Direkt (Port 5433) | `.env.job_matching` | + +**Wann welches Tool?** + +- Du hast ein **fremdes CV, einen Scan oder ein Bild** → `ingest_V2.py` (OCR + KI-Normalisierung) +- Du hast ein **eigenes, fertiges Markdown-Dokument** (z.B. ausgefülltes Template) → `ingest_anythingllm.py` +- Du willst **Stellenanzeigen oder Profil-Dokumente** für Job-Matching einpflegen → `ingest_job_matching.py` --- @@ -17,34 +33,34 @@ rag-ingestion/ ├── extractor.py Modul: Text-Extraktion + OCR (wird von ingest_V2 genutzt) ├── normalizer.py Modul: KI-Normalisierung via Claude (wird von ingest_V2 genutzt) │ +├── architektur/ +│ └── ocr_rag_pipeline.svg Architektur-Diagramm der ingest_V2 Pipeline +│ ├── 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.ingest Secrets für ingest_V2.py + ingest_anythingllm.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. +**Verwendungszweck:** Verarbeitung beliebiger Fremddokumente — gescannte PDFs, Bilder, +DOCX-Dateien, fremde CVs — die zunächst per OCR extrahiert und dann via Claude KI +automatisch in die einheitliche Template-Struktur transformiert werden. + +**Zielplattform:** pgvector-Datenbank (`anythingllm`) auf Hetzner-Server via SSH-Tunnel. **Benötigt:** `extractor.py` und `normalizer.py` im gleichen Verzeichnis. +### Architektur + +![OCR → RAG Ingestion Pipeline](architektur/ocr_rag_pipeline.svg) + ### Unterstützte Formate `.md` `.txt` `.pdf` `.docx` `.png` `.jpg` `.jpeg` `.tif` `.tiff` `.bmp` `.webp` @@ -66,7 +82,10 @@ nano .env.ingest # ANTHROPIC_API_KEY eintragen ### Verwendung ```bash +# Einzelne Datei importieren (mit KI-Normalisierung) python ingest_V2.py file ~/Downloads/fremdes_cv.pdf + +# Dry-Run: erst testen, nichts in DB schreiben python ingest_V2.py file ~/Desktop/scan.png --dry-run # Dry-Run + normalisiertes Markdown automatisch speichern (_normalized.md) @@ -74,11 +93,15 @@ 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 + +# Ohne KI-Normalisierung (für bereits strukturierte Dokumente) python ingest_V2.py file ~/templates/ausgefuellt/mein_cv.md --no-normalize + +# Ganzes Verzeichnis importieren python ingest_V2.py dir ~/Dokumente/bewerbungsunterlagen/ --force + +# Ordner live beobachten (neue Dateien automatisch verarbeiten) python ingest_V2.py watch ~/Desktop/scan-eingang/ -python ingest_V2.py list -python ingest_V2.py delete "fremdes_cv.pdf" ``` ### Datenbank verwalten @@ -89,17 +112,15 @@ python ingest_V2.py delete "fremdes_cv.pdf" python ingest_V2.py list # Ausgabe-Beispiel: -# Titel Typ Score Fmt Chunks Datum -# ───────────────────────────────────────────────────────────────────────────────────────────── -# Arbeitszeugnis Sopra Financial Technology... arbeitszeugnis 95% .pdf 3 2026-04-28 +# Titel Typ Score Fmt Chunks Datum +# ────────────────────────────────────────────────────────────────────────────────────────── +# Arbeitszeugnis Sopra Financial Technology... arbeitszeugnis 95% .pdf 3 2026-04-28 # Einzelnes Dokument löschen (alle Chunks) +# Hinweis: Titel = exakter Dateiname wie beim Import 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 | @@ -131,8 +152,12 @@ Erkannte Typen: `arbeitszeugnis`, `cv`, `lebenslauf`, `anschreiben`, ## 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). +**Verwendungszweck:** Schnelles Einpflegen von eigenen, bereits fertig strukturierten +Dokumenten — z.B. ausgefüllte Templates, eigene Markdown-Dateien oder einfache PDFs +die keiner OCR oder KI-Normalisierung bedürfen. + +**Zielplattform:** pgvector-Datenbank (`anythingllm`) auf Hetzner-Server via SSH-Tunnel. +Gleiche Zieldatenbank wie `ingest_V2.py` — unterschiedlicher Verarbeitungsweg. ### Unterstützte Formate @@ -151,10 +176,14 @@ 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. +**Verwendungszweck:** Einpflegen von Stellenanzeigen und Profil-Dokumenten in die +dedizierte Job-Matching-Datenbank. Diese Datenbank wird von einem separaten +Job-Matching-Workflow genutzt um Stellenanzeigen mit dem eigenen Profil abzugleichen. -Embeddings via OpenAI `text-embedding-3-small` (kostenpflichtig). +**Zielplattform:** pgvector-Datenbank (`job_matching`) direkt auf dem lokalen NAS +(192.168.178.128, Port 5433) — kein SSH-Tunnel erforderlich, nur im lokalen Netzwerk erreichbar. + +Embeddings via OpenAI `text-embedding-3-small` (1536 Dimensionen, kostenpflichtig). ### Verwendung