E2E Sub-D: Citation Property-Verification (Substring im PDF) #54
Labels
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: tobias/gwoe-antragspruefer#54
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Sub-Issue von #50.
Zweck
Sub-Issue D des E2E-Test-Umbrellas. Die kritischste Test-Klasse — verifiziert pro realer Antrag-Analyse in der prod-DB, ob die LLM-Zitate als Substring auf der angegebenen PDF-Seite auffindbar sind.
Adressiert Bug-Klasse 7 (LLM halluziniert "FDP NRW 2022"-Quellen für MV-Anträge) und alle künftigen Prompt-Drifts.
Datei
webapp/tests/integration/test_citations_substring.pyMatch-Strategie (vom User bestätigt: strict substring)
Whitespace-normalisiertes lowercased exact substring matching. Der vom LLM zitierte
textmuss als Substring auf der PDF-Seite vorhanden sein, die inquellereferenziert ist. Toleranz nur für:...am Anfang/Ende werden vor dem Match entfernt)Keine Fuzzy-Matches, kein Jaccard, kein 80%-Overlap. Striktest mögliche Variante, fängt jede Halluzination und jeden Page-Off-by-One-Fehler.
Workflow
gwoe-antraege.dbwahlprogramm_scores(JSON), iteriere überzitatejeder Fraktionquelleparsen →programm_idvia_resolve_quelle_to_programm_id()embeddings.PROGRAMME: Test fail mit "halluzinierte Quelle"quelleextrahieren via_extract_page_number()_pdf_page_text(programm_id, seite)(echtes fitz)_normalized_substring(zitat["text"], page_text)prüfenHelper-Funktionen (neu)
Stichproben-Größe
5 neueste Assessments pro aktivem BL × 10 aktive BL × ~3 Fraktionen × ~2 Zitate ≈ 300 Asserts pro Run. Bei mehr Assessments im prod kann das später skaliert werden.
Negativ-Test (Verifikation dass die Test-Suite überhaupt fängt)
Ein bekanntes Halluzinations-Sample (das alte 8/6390-Assessment vor Commit
bc7f4a6mit der "FDP NRW Wahlprogramm 2022, S. 75"-Halluzination) als Fixture im Repo. Dieses Sample MUSS explizit fehlschlagen, sonst weiß man nicht ob der Test überhaupt funktioniert.Bug-Klassen
Deckt 7 (LLM-Halluzination, alle Varianten), 10 (Source-Erfindung), 17 (Cross-Bundesland-Zitat —
_resolve_quelle_to_programm_id()prüft auch obbundeslandzur erwarteten BL passt).Akzeptanzkriterien
pytest -m integration tests/integration/test_citations_substring.py -vmit min. 50 AssertsSub-D erledigt — tests/integration/test_citations_substring.py + 13 Helper-Unit-Tests grün. Commit
73a7f76. Property-Verification: jedes LLM-Zitat muss als Substring auf der genannten PDF-Seite vorhanden sein. Cross-BL-Check (Bug-Klasse 17) inklusive.