docs: Zielplattformen + Verwendungszweck klar dokumentiert, SVG eingebunden

- README: Übersichtstabelle mit Wofür/Zielplattform für alle drei Tools
- README: Entscheidungshilfe welches Tool wann verwenden
- README: Architektur-Diagramm (SVG) bei ingest_V2.py eingebunden
- ingest_V2.py: --output Flag für dry-run
This commit is contained in:
cbazza committed 2026-04-29 11:13:22 +02:00
1 parent 009e9b7bad
commit def206261a
1 file changed
+56 -27
+56 -27
View File
@@ -1,8 +1,24 @@
# RAG Ingestion Tools # RAG Ingestion Tools
Lokale Python-Tools zum Importieren von Dokumenten in pgvector-Datenbanken. Lokale Python-Tools zum Importieren von Dokumenten in pgvector-Vektordatenbanken.
Drei eigenständige Ingestion-Scripts für unterschiedliche Zieldatenbanken und Drei eigenständige Scripts für unterschiedliche Zielplattformen und Anwendungsfälle,
Anwendungsfälle, plus zwei gemeinsame Module für Extraktion und KI-Normalisierung. 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) ├── extractor.py Modul: Text-Extraktion + OCR (wird von ingest_V2 genutzt)
├── normalizer.py Modul: KI-Normalisierung via Claude (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/ ├── templates/
│ ├── *_TEMPLATE.md Ziel-Strukturvorlagen (leer) │ ├── *_TEMPLATE.md Ziel-Strukturvorlagen (leer)
│ └── ausgefuellt/ Ausgefüllte Referenzbeispiele (Few-Shot für KI, nicht in Git) │ └── 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.job_matching Secrets für ingest_job_matching.py (nicht in Git)
└── .env.example Vorlage für .env.ingest └── .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 ## Tool 1: `ingest_V2.py` — Vollpipeline mit OCR + KI-Normalisierung
Das Haupt-Tool der neuen Generation. Verarbeitet beliebige Dokumente (inkl. Scans **Verwendungszweck:** Verarbeitung beliebiger Fremddokumente — gescannte PDFs, Bilder,
und Bilder) und normalisiert sie via Claude KI in die einheitliche Template-Struktur. 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. **Benötigt:** `extractor.py` und `normalizer.py` im gleichen Verzeichnis.
### Architektur
![OCR → RAG Ingestion Pipeline](architektur/ocr_rag_pipeline.svg)
### Unterstützte Formate ### 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`
@@ -66,7 +82,10 @@ nano .env.ingest # ANTHROPIC_API_KEY eintragen
### Verwendung ### Verwendung
```bash ```bash
# Einzelne Datei importieren (mit KI-Normalisierung)
python ingest_V2.py file ~/Downloads/fremdes_cv.pdf 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 python ingest_V2.py file ~/Desktop/scan.png --dry-run
# Dry-Run + normalisiertes Markdown automatisch speichern (<dateiname>_normalized.md) # Dry-Run + normalisiertes Markdown automatisch speichern (<dateiname>_normalized.md)
@@ -74,11 +93,15 @@ python ingest_V2.py file ~/Downloads/cv.pdf --dry-run
# Dry-Run + normalisiertes Markdown in bestimmte Datei speichern # 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 ~/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 python ingest_V2.py file ~/templates/ausgefuellt/mein_cv.md --no-normalize
# Ganzes Verzeichnis importieren
python ingest_V2.py dir ~/Dokumente/bewerbungsunterlagen/ --force 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 watch ~/Desktop/scan-eingang/
python ingest_V2.py list
python ingest_V2.py delete "fremdes_cv.pdf"
``` ```
### Datenbank verwalten ### Datenbank verwalten
@@ -90,16 +113,14 @@ python ingest_V2.py list
# Ausgabe-Beispiel: # Ausgabe-Beispiel:
# Titel Typ Score Fmt Chunks Datum # Titel Typ Score Fmt Chunks Datum
# ───────────────────────────────────────────────────────────────────────────────────────────── # ──────────────────────────────────────────────────────────────────────────────────────────
# Arbeitszeugnis Sopra Financial Technology... arbeitszeugnis 95% .pdf 3 2026-04-28 # Arbeitszeugnis Sopra Financial Technology... arbeitszeugnis 95% .pdf 3 2026-04-28
# Einzelnes Dokument löschen (alle Chunks) # Einzelnes Dokument löschen (alle Chunks)
# Hinweis: Titel = exakter Dateiname wie beim Import
python ingest_V2.py delete "Arbeitszeugnis Sopra Financial Technology GmbH.pdf" 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 ### Flags
| Flag | Beschreibung | | Flag | Beschreibung |
@@ -131,8 +152,12 @@ Erkannte Typen: `arbeitszeugnis`, `cv`, `lebenslauf`, `anschreiben`,
## 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, **Verwendungszweck:** Schnelles Einpflegen von eigenen, bereits fertig strukturierten
bereits fertig strukturierte Dokumente (z.B. ausgefüllte Templates). 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 ### Unterstützte Formate
@@ -151,10 +176,14 @@ 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 **Verwendungszweck:** Einpflegen von Stellenanzeigen und Profil-Dokumenten in die
(192.168.178.128, Port 5433). Kein SSH-Tunnel erforderlich. 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 ### Verwendung