Score-Bewertungen ohne Zitate (BUND 21/3660 + fehlende linke/afd-Grundsatzprogramme) #63
Labels
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: tobias/gwoe-antragspruefer#63
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?
Befund
BUND 21/3660(Linke-Antrag "Kostenfreies, gesundes und leckeres Mittagessen in allen Schulen und Kitas") zeigt im Report Scores zu Wahl- und Parteiprogrammen, aber null Zitate für mehrere Fraktionen — obwohl die Begründungen so klingen, als hätte das LLM konkrete Programmstellen im Kopf.Aktueller DB-Inhalt (
assessments WHERE drucksache='21/3660'):WP-Begründung Linke: "Der Antrag entspricht exakt dem Kernziel der Linken nach 'sozialer Umverteilung', 'gesellschaftlicher Daseinsvorsorge' u..." — klingt überzeugt, kein Beleg.
Ursachen (zwei verschiedene Bug-Klassen)
1. Fehlende Grundsatzprogramme im PROGRAMME-Index
grep -E '(linke|afd)-grundsatz' app/embeddings.py→Aber:
Auf Bundestags-Ebene werden ausschließlich Grundsatzprogramme (
bundesland=NULL) retrievt, weil kein bundesland-spezifisches Wahlprogramm passt. Die Folge:reconstruct_zitatedropped alles, was der LLM aus Trainingswissen zu Linke-Positionen schreibt2. Substring-Match scheitert auch wenn Chunks existieren
GRÜNE hat
gruene-grundsatzregistriert. Trotzdem 0 Zitate. Hypothese: der LLM hat aus den Chunks paraphrasiert statt wörtlich zu zitieren, und der Substring/5-Wort-Anker-Match inreconstruct_zitate(ADR 0001) schlägt fehl → Zitat wird verworfen. Das ist genau die Drift-Toleranz-Lücke, die ADR 0001 in den "Negativ"-Konsequenzen explizit benennt.Score bleibt trotzdem hoch, weil das LLM den Score unabhängig von den Citations vergibt. Resultat: Score-Bewertungen ohne Quellen, was die Vertrauenswürdigkeit des Reports unterminiert.
Empfohlene Lösungswege (separat planbar)
A — PROGRAMME-Index erweitern (low-hanging)
Beide fehlenden Grundsatzprogramme als PDF beschaffen + indexieren:
Beide sind öffentlich auf den jeweiligen Bundespartei-Websites verfügbar. Indexieren:
index_programm("linke-grundsatz", referenzen_dir)analog zu den existierenden 4 Grundsatzprogrammen.Schließt Teil 1 der Bug-Klasse vollständig.
B — UI-Transparenz für leere Citation-Sets
Wenn
wahlprogramm.score >= 7aberlen(zitate) == 0: deutlich im Report anzeigen:Differenzierung zwischen den zwei Ursachen:
Server kann das durch einen Rückgabewert von
reconstruct_zitateunterscheiden (vorher-Anzahl vs. nachher-Anzahl der Zitate pro Block + ob Chunks für die Partei existierten).C — LLM-Prompt: Force-Honesty bei fehlenden Quellen
Im
format_quotes_for_promptOutput explizit pro Partei vermerken, ob Chunks da sind oder nicht. Im System-Prompt eine harte Regel:Verhindert das Phänomen strukturell für künftige Analysen. Bestehende Assessments müssen re-analysiert werden, um den Effekt zu sehen.
Acceptance Criteria
linke-grundsatzundafd-grundsatzin PROGRAMME registriert + im Container indexiertformat_quotes_for_promptmarkiert leere Partei-Blöcke;analyzer.get_system_promptweist LLM an, dann NULL zu setzenRefs
webapp/docs/adr/0001-llm-citation-binding.md) — der "Negativ"-Abschnitt benennt genau diese Drift-Toleranz-LückeResolved. AfD-Grundsatzprogramm 2016 (128 Chunks via Wayback) + DIE LINKE Erfurter Programm 2011 (111 Chunks via originalsozial.de) indexiert. Alle 6 Grundsatzprogramme (CDU, SPD, GRUENE, FDP, AfD, LINKE) jetzt im Index.