Aufgabe 3

RAG: Lebensläufe durchsuchen

Zwei optimierte RAG-Systeme befragen, um über 160 Bewerbungs-PDFs mit natürlicher Sprache zu durchsuchen. Erwartete Dauer: ca. 45 Minuten.

Aufgabe 1 Aufgabe 2 Aufgabe 3 Aufgabe 4 Aufgabe 5 Aufgabe 6
i

Hintergrund

160 Fake-Lebensläufe wurden in zwei separate LightRAG-Instanzen hochgeladen. Version 1 und Version 2 unterscheiden sich: Eine nutzt die Standard-Einstellungen, die andere hat einen optimierten Embedding-Prozess (Chunk-Strategie, Normalisierung, Tokenisierung).

Blind-Vergleich: Es ist absichtlich nicht dokumentiert, welche Version welche Konfiguration hat. Die Teilnehmer sollen dies durch den Vergleich selbst herausfinden.
Was ist RAG?

Retrieval-Augmented Generation (RAG) ist ein dreistufiger Prozess: (1) Relevante Dokumente aus einer Wissensbasis abrufen (Retrieve), (2) den LLM-Prompt mit diesem Kontext anreichern (Augment), (3) eine fundierte Antwort generieren (Generate). Die Qualität des Retrievals hängt direkt von der Embedding-Qualität ab.

0

Query-Parameter einstellen

Stellen Sie auf beiden Instanzen identische Query-Parameter ein, bevor Sie die Testfragen stellen:

Parameter Wert
Query Modehybrid
Response FormatMultiple Paragraphs
KG Top K10
Chunk Top K20
Max Entity Tokens6000
Max Relation Tokens8000
Max Total Tokens30000
Enable Rerank
Only Need Context
Only Need Prompt
Stream Response
Wichtig: Query Mode auf hybrid setzen — nicht naive. Naive ignoriert den Knowledge Graph und verwässert den Vergleich.
1

Die 6 Testfragen

Jede Frage wird auf beiden Instanzen mit identischen Parametern gestellt. Notieren Sie die Antworten.

# Frage Was wird getestet
1 Wie viele Lebensläufe sind insgesamt im System gespeichert? Vollständigkeit / Counting
2 Wie viele Personen besitzen einen Führerschein der Klasse B? Attribut-Extraktion
3 Welche fünf Skills oder Kenntnisse kommen am häufigsten vor? Aggregation über Dokumente
4 Wie viele Personen haben einen Hochschulabschluss (Bachelor, Master, Diplom)? Kategorisierung / NER
5 Welche Person hat die meisten Jahre Berufserfahrung, und in welchem Bereich? Entity-Linking + Ranking
6 Liste alle Personen auf, die sowohl Python als auch SQL erwähnen. Multi-Attribut-Filter
2

Ergebnisse dokumentieren

Tragen Sie die Antworten beider Versionen in die folgende Tabelle ein:

# Version 1 Antwort Version 2 Antwort Korrekt/Plausibel? Qualitätsurteil
1 ___ ___ Tatsächlich: 160. RAG zeigt weniger (Top-K Limitation) ___
2____________
3____________
4____________
5____________
6____________
Qualitätskriterien: präziser / vollständiger / halluziniert?
3

Auswertung

Diskutieren Sie im Team die folgenden Fragen:

  1. Bei welchen Fragen war der Unterschied am grössten?
  2. Welche Version hat bessere/vollständigere Antworten geliefert?
  3. Bei welcher Version wurde das Embedding optimiert?
  4. Warum macht die Embedding-Optimierung einen Unterschied bei der Retrieval-Qualität?
Lösung — Erst öffnen wenn alle Aufgaben erledigt sind
Was wurde geändert?
Nur zwei Parameter unterscheiden Version 1 und Version 2:
  • Entity Types: Version 2 hat 13 explizite Entity Types gesetzt (Person, Age, Position, DrivingLicense, etc.). Version 1 hat keine — das LLM entscheidet frei, welche Entitäten es extrahiert.
  • Temperature: Version 2 nutzt Temperature 0.1 (deterministisch), Version 1 nutzt 0.9 (kreativ/variabel).
  • Chunk-Strategie, Normalisierung, Tokenisierung und Spracheinstellung sind bei beiden Versionen identisch (Englisch, Standard-LightRAG-Defaults).
Hinweis: Beide Versionen verwenden noch die englische Spracheinstellung, obwohl die CVs auf Deutsch sind. Dies könnte die Retrieval-Qualität zusätzlich beeinflussen — ein möglicher weiterer Optimierungspunkt.
Hybrid Mode vs. Naive Mode
Warum Hybrid statt Naive?
  • Hybrid = Knowledge Graph + Vektor-Suche kombiniert
  • Naive = nur Vektor-Suche (ignoriert den Knowledge Graph komplett)
  • Der Knowledge Graph verknüpft Entitäten (Personen, Skills, Orte) und ermöglicht strukturierte Abfragen
  • Bei Zähl- und Filterfragen (Fragen 1, 2, 4, 6) macht der Knowledge Graph den grössten Unterschied
Erwartetes Verhalten
Die optimierte Version sollte:
  • Präzisere Zählergebnisse liefern — aber Achtung: RAG retrievet nur Top-K Chunks (hier: KG Top K=10, Chunk Top K=20), NICHT alle 160 Dokumente. Die Antwort auf „Wie viele CVs?“ wird deshalb fast nie 160 ergeben. Das ist eine fundamentale RAG-Limitation, kein Fehler.
  • Bessere Entity-Extraktion bei Attributen wie Führerschein und Abschluss
  • Weniger Halluzinationen bei Aggregations-Fragen
  • Vollständigere Listen bei Multi-Attribut-Filtern (Python + SQL)
Wichtige Erkenntnis: Top-K Limitation bei Zählfragen

Frage 1 („Wie viele CVs?“) wird fast nie die korrekte Antwort 160 ergeben. RAG-Systeme retrieven nur die Top-K relevantesten Chunks (hier: KG Top K=10, Chunk Top K=20) — sie sehen also nie ALLE Dokumente auf einmal. Das ist eine fundamentale Eigenschaft von RAG: Es ist optimiert für Relevanz, nicht für Vollständigkeit. Für exakte Zählungen bräuchte man eine Datenbank-Abfrage, kein RAG.

Auflösung: Version 2 ist die optimierte Version
Version 2 = optimiert. Die optimierte Version (Version 2) unterscheidet sich in zwei zusätzlichen Parametern vom Default-System (Version 1):
Parameter Version 1 (Default) Version 2 (Optimiert)
Entity Types Keine gesetzt (LLM entscheidet frei) Person, Age, Position, DrivingLicense, LicenseIssuingCountry, WorkExperience, Organization, Language, LanguageProficiency, Education, Location, Availability, Vehicle
Temperature (Retrieval) 0.9 0.1
Diskussionsfragen:
  1. Ist die explizite Vorgabe der 13 Entity Types sinnvoll? Fehlen wichtige Typen (z.B. Certification, Salary, Project)? Sind manche überflüssig?
  2. Was bewirkt eine niedrige Temperature (0.1) vs. eine hohe (0.9) beim Retrieval? Wann wäre ein Mittelwert (z.B. 0.3–0.5) besser?
  3. Welche Kombination (Entity Types + Temperature) würdet ihr für einen produktiven CV-Suchservice wählen?
Entity Types & Temperature erklärt
Warum explizite Entity Types?
  • Ohne Entity Types entscheidet das LLM selbst, welche Kategorien es extrahiert — das führt zu inkonsistenten Knowledge Graphs
  • Mit 13 vorgegebenen Typen (Person, Age, Position, DrivingLicense, etc.) wird die Extraktion systematisch und vollständig
  • Besonders bei strukturierten Dokumenten wie CVs ist dies entscheidend: Führerschein, Verfügbarkeit und Fahrzeug werden sonst oft ignoriert
Warum Temperature 0.1 statt 0.9?
  • Temperature 0.1 = deterministisch: Bei gleicher Frage kommt (fast) immer die gleiche Antwort → konsistent, reproduzierbar
  • Temperature 0.9 = kreativ: Mehr Variation, andere Formulierungen — gut für Textgenerierung, schlecht für Faktenextraktion
  • Für einen CV-Suchservice will man präzise, wiederholbare Ergebnisse — daher ist niedrige Temperature die richtige Wahl
Warum diese zwei Parameter so viel ausmachen:

Explizite Entity Types sorgen dafür, dass der Knowledge Graph konsistent aufgebaut wird — z.B. wird „Führerschein Klasse B“ zuverlässig als DrivingLicense-Entity erkannt, statt vom LLM ignoriert zu werden. Niedrige Temperature (0.1) macht die Extraktion reproduzierbar: dieselbe Frage liefert (fast) immer dasselbe Ergebnis, statt bei jedem Durchlauf andere Entitäten zu extrahieren.

Referenzantworten (manuell verifiziert aus allen 160 CVs)
# Frage Referenzantwort RAG-typische Abweichung
1 Wie viele Lebensläufe insgesamt? 160 RAG antwortet typisch 10–30 (Top-K Limitation — sieht nie alle Dokumente)
2 Führerschein Klasse B? 96 Personen RAG findet nur einen Bruchteil; verschiedene Schreibweisen erschweren die Extraktion
3 Top-5-Skills? 1. Defensives Fahren (~30) • 2. Kundeninteraktion (~28) • 3. Python (23) • 4. HACCP/Lebensmittelhygiene (~20) • 5. Routenoptimierung (~20) RAG aggregiert schlecht über viele Dokumente; nennt oft nur Skills aus den Top-K Chunks
4 Hochschulabschluss? ~47 Personen
4 PhD, 11 Master, 17 Bachelor, 15 Diplom
RAG erkennt fremdsprachige Abschlüsse schlecht; „Hotel Management Diploma“ vs. Hochschul-Diplom ist ambig
5 Meiste Berufserfahrung? Thomas Richter (#008) — 30 Jahre, Buchführung/Administration. Danach: Robert Schwarz (#042, ~28 J., ERP/IT), Giuseppe Ferrara (#036, ~27 J., Küche) RAG findet selten die richtige Person; müsste alle CVs vergleichen
6 Python UND SQL? 8 Personen: James Chen (#011), Natalia Ivanova (#041), Amélie Moreau (#045), Priya Sharma (#079), Sophie Dubois (#121), Raj Patel (#147), Wei-Lin Chou (#156), Felix Wagner (#160) RAG findet meist nur 2–4; Multi-Attribut-Filter ist eine RAG-Schwäche
Methodik: Alle 160 PDF-Lebensläufe wurden manuell gelesen und unabhängig von zwei KI-Instanzen (Claude Opus + Codex-Verifier) ausgewertet. Die Ergebnisse wurden abgeglichen und konsolidiert.
Meta-Erkenntnis: Auch grosse Sprachmodelle halluzinieren bei dieser Aufgabe

Bei der Erstellung dieser Referenzantworten wurden zwei unabhängige KI-Instanzen (Claude Opus) eingesetzt: Eine las die CVs in 4 Gruppen à 40 Stück sorgfältig durch, die andere (Codex-Verifier) versuchte alle 160 auf einmal zu analysieren. Ergebnis: Der Codex-Verifier halluzinierte in mehreren Fällen — er behauptete z.B., Personen hätten SQL-Kenntnisse, obwohl deren CV kein SQL erwähnt, oder zählte Führerscheine bei Personen, die gar kein Führerschein-Feld im CV hatten. Die sorgfältigere Analyse (kleinere Batches, mehr Aufmerksamkeit pro CV) war in allen strittigen Fällen korrekt.

Lektion für die Praxis: Das gleiche Problem, das RAG-Systeme bei diesen Fragen haben — unvollständige Erfassung, falsche Zuordnung, Halluzination bei Aggregation — betrifft auch grosse Sprachmodelle direkt. Je mehr Dokumente auf einmal verarbeitet werden, desto höher das Halluzinations-Risiko. Teile-und-Herrsche (Dokumente in Gruppen aufteilen) liefert zuverlässigere Ergebnisse als alles auf einmal zu verarbeiten.