Antwort auf die QA-Runde 1 — Einordnung, Korrekturen, Kontext¶
Von Marco/Lenny-Team an Chris, Stand 2026-08-11.
Bezug: lenny_qa_runde1.md (354 eindeutige Fälle) und die Runde-2-Notizen.
Kurz vorweg: Diese QA war die nützlichste Rückmeldung, die Lenny bisher bekommen hat. Mehrere Vorschläge daraus sind eins zu eins gebaut und live — und in zwei Fällen war deine Analyse besser als unsere. Gleichzeitig gibt es Befunde, die eine Architektur-Annahme voraussetzen, die so nicht stimmt. Beides steht hier, damit die nächste Runde noch mehr trifft.
1. Was durch diese QA gebaut wurde (alles live)¶
| Deine Idee | Umsetzung |
|---|---|
| Ausgabe-Prüfung vor dem geprüft-Siegel (Befund 1) | Output-Gate am Antwort-Chokepunkt: wirkt eine Antwort mechanisch kaputt und trägt ein Vertrauens-Siegel, wird sie auf Kandidat herabgestuft. |
| Korrigierte Survival-Invariante („der erfragte Begriff muss überleben") | Genau so gebaut. Sie fängt „Luziferjahr", was kein Lexikon kann. |
| Warnung vor Umlaut-Pluralen vor dem Scharfschalten | Beide Seiten werden normalisiert (ä→a, ß→ss), Präfix-Vergleich. „Verträge"/„Länder" behalten ihr Siegel. |
| Klammerzusätze + mehrwortige Begriffe | Klammer wird gestrippt, Vergleich je Wort. Deine vier Soll-Ergebnisse stimmen 1:1. |
| Ereignis-Log statt reiner Zahlenreihe | --note schreibt Maßnahmen mit KPI-Stempel in dieselbe Zeitreihe. |
Backlog nach relation_type aufteilen |
Gemacht — Ergebnis unten (dein „dann liegen lassen" war richtig). |
Besonders hervorzuheben: Dein Zurückziehen des Wörterbuch-Abgleichs zugunsten der Invariante war der stärkste einzelne Beitrag. Und die Umlaut-Warnung kam genau rechtzeitig — ohne sie hätten wir korrekte Plural-Antworten abgewertet und das Gate wäre nach zwei Wochen entnervt abgeschaltet worden.
2. Der eine Befund, der alles umsortiert¶
Wir haben deine 354 Fälle nach dem Antwort-Pfad aufgeteilt — erkennbar an der Fußzeile, die du dankenswerterweise mitprotokolliert hast:
| Pfad (Fußzeile) | Fälle | Anteil |
|---|---|---|
| „Teilweise auf Lennys geprüftem Wissen" | 135 | 38,1 % |
| „NICHT durch Lennys geprüftes Wissen gedeckt" | 116 | 32,8 % |
| „Sprachlich vom Sprachmodell formuliert…" | 46 | 13,0 % |
| „Unsicher – kein geprüftes Wissen" (Verweigerung) | 43 | 12,1 % |
| deterministischer Renderer (Lennys eigene Sprache) | 3 | 0,8 % |
Lies das so: 84 % der Antworten hat ein Sprachmodell formuliert. Nur 3 von 354 kamen aus Lennys eigenem, regelbasiertem Satzbau.
Das ordnet die Grammatik-Befunde neu ein. Die 248 (bzw. 269) Grammatikfehler sind zum allergrößten Teil Fehler des Sprachmodells, nicht von Lennys Regelwerk. Wir hatten geplant, Kasus-, Flexions- und Konjugationsregeln in den deterministischen Renderer zu bauen — das hätten wir an 0,8 % der Antworten gemessen. Der Plan wurde deshalb bewusst zurückgestellt.
Nebenbei: Die drei deterministischen Fälle (#1 Betriebssystem, #105 Resilienz,
224 Datenstruktur) zeigten alle denselben Fehler, den fehlenden Artikel¶
(„Resilienz ist Fähigkeit."). Der ist inzwischen behoben — der Renderer sagt jetzt „eine Fähigkeit".
3. Korrekturen und Präzisierungen¶
3.1 Die kaputten Begriffe stehen NICHT im Graphen¶
„luzidjahr", „Luziferjahr", „einmondigphasenreiches satellit" wirken wie beschädigte Wissensfragmente. Wir haben den Live-Bestand dreimal read-only durchsucht:
luzid,luzifer,einmondig→ 0 Fragmente- Die echten Fragmente sind sauber: „Lichtjahr ist Längenmaß.", „Lichtjahr ist Licht."
- Term-Überlebens-Test über 7973 Einwort-Wissensfragmente: 5 Treffer (0,06 %), alle legitim
Die Verstümmelung entsteht zur Antwortzeit im Sprachmodell. Es bekommt die (dünne, aber korrekte) Erdung und erfindet „luzidjahr" daraus. Ein Daten-Cleanup wäre also ins Leere gelaufen — es gibt nichts zu heilen. Die Verteidigung ist das Output-Gate (live), die Lösung ist der Ersatz des Sprachmodells als Formulierer.
3.2 Der Judge war nie „zu streng"¶
Der Eindruck „18 Kandidaten → 0 verifiziert" legt eine zu hohe Schwelle nahe. Die Messung zeigte etwas anderes: vier technische Fehler ließen Ausfälle wie inhaltliche Ablehnungen aussehen.
- Ein fehlgeschlagener LLM-Aufruf zählte still als NEIN.
- Die Konfidenz wurde durch die Zahl der Versuche geteilt statt durch die der Antworten — zwei Timeouts kippten ein einstimmiges JA unter die Schwelle.
- Ein technischer Ausfall schrieb die Kategorie für 14 Tage ins Backoff-Gedächtnis, ohne dass je geurteilt wurde.
- Das Sprachmodell liefert Werte transliteriert („Koerper"), Wikipedia schreibt „Körper" — die Passagensuche fand nichts und verwarf den Kandidaten in 0 Sekunden, ohne den Judge zu fragen.
Alle vier behoben. Die Schwelle 0,60 blieb unangetastet — Präzision vor Recall. Eine Stichprobe zeigte danach: der Judge urteilt korrekt (eine Annahme mit voller Konfidenz, zwei berechtigte Ablehnungen).
3.3 Zum Backlog („370 user_confirmation_required")¶
Aufgeteilt wie vorgeschlagen. Ergebnis: 700 is_a + 18 has_property + 2 leer —
null aktionale Kanten. Und user_confirmation_required stand zum Messzeitpunkt
bei 1, nicht 370. Dein zweiter Fall trifft also zu: liegen lassen.
Wichtig für die Erwartung: Ein bestätigter Chat-Kandidat wird nicht zu
geteiltem Wissen. confirm_candidate_by_id setzt bewusst promoted=False,
answer_basis=False, integration_gate=blocked und schreibt nichts in den
Graphen. Bestätigen ist ein weiches Signal, kein Tor.
3.4 Wiederholung erhöht den Support — eine unabhängige Quelle ist nicht nötig¶
Deine Vermutung stimmt: derselbe Fakt in zwei Turns → support=2 →
candidate_reinforced → needs_confirmation. Der Zähler ist Wiederholung, nicht
Korroboration. Nur: Fragen erzeugen gar keinen Support (es werden Aussagen
extrahiert), und wie in 3.3 beschrieben endet die Kette nicht in geteiltem Wissen.
Beantwortbar wird ein Chat-Fakt über den Tenant-Pfad — sofort, pro Nutzer,
gelabelt „aus unseren Gesprächen, nicht geteilt-verifiziert".
3.5 Befunde aus dem Code-Review, die einen anderen Stand beschreiben¶
Der begleitende Review (nicht deine QA) enthält Punkte, die gegen einen älteren lokalen Checkout gemessen wurden, nicht gegen die Produktion:
- „Retrieval läuft dauerhaft nur auf TF-IDF" → produktiv läuft hybrid mit bge-m3
- Main Brain aus
F:\Programme\old_lenny_version\…→ der Pfad existiert nicht mehr - „1016 Fragmente", „89 % tldr" → produktiv sind es ~12.900 Fragmente
Wir verifizieren deshalb jeden Befund am Live-Stand, bevor wir ihn fixen. Das ist keine Kritik — es ist die Lehre daraus, dass zwei Umgebungen auseinanderlaufen.
4. Kontext, der die Befunde lesbarer macht¶
4.1 Zwei Sprech-Pfade, ein Übergangszustand¶
Lenny hat zwei Wege, einen Satz zu erzeugen:
- Deterministischer Renderer — baut Sätze aus verifizierten Fakten nach Regeln. Halluzinationsfrei, aber sprachlich noch karg. Das ist das Ziel.
- Sprachmodell als Formulierer (
LENNY_OUTPUT_MODE=llm_assistant) — der aktuelle Interimszustand. Flüssig, aber es erfindet (siehe „luzidjahr").
Der Umstieg von 2 auf 1 ist das eigentliche Projekt („Loop A"). Bis dahin gilt: Sprachfehler in einer Antwort mit LLM-Fußzeile sind Fehler des Modells, nicht des Regelwerks. Die Fußzeile ist deshalb das wertvollste Signal in deinem Protokoll.
4.2 Was die Siegel bedeuten¶
| Fußzeile | Bedeutung |
|---|---|
| „extern gesichert (Wikipedia/Wiktionary)" | deterministisch, extern belegt |
| „Fragmentkandidat, keine freigegebene Wahrheit" | deterministisch, unbestätigt |
| „Sprachlich vom Sprachmodell formuliert, auf Basis von Lennys geprüftem Wissen" | LLM-Form, Inhalt geerdet |
| „Teilweise auf Lennys geprüftem Wissen… Ergänzungen NICHT geprüft" | LLM ging über die Erdung hinaus |
| „NICHT durch Lennys geprüftes Wissen gedeckt" | Lenny trug nichts bei — reines Modellwissen |
| „Unsicher – kein geprüftes Wissen" | Verweigerungspfad |
Die vorletzte Zeile ist die wichtigste Kennzahl: In 32,8 % deiner Fälle hat Lennys eigenes Wissen die Frage gar nicht erreicht.
4.3 Der eigentliche Engpass: Abdeckung¶
Wir haben die 116 Fälle „Lenny trug nichts bei" untersucht. 32 davon waren deine Unsinns-Fragen (korrekt ohne Erdung). Von den 84 echten Wissensfragen hatten nur 13 (15,5 %) überhaupt einen passenden Begriff im Graphen.
Lenny weiß das meiste schlicht noch nicht. Deshalb springt das Sprachmodell ein. Kein Grammatik-Fix und kein besserer Renderer ändert etwas an einer Frage, zu der kein Wissen existiert.
Dazu kam ein hausgemachter Bremsklotz: Die einzige Quelle neuen Wissens (Enrichment-Cron) verlor 60 % ihrer Läufe an Datenbank-Sperrfehlern, plus die vier Judge-Fehler oben. Alles behoben — der Durchsatz sollte jetzt steigen.
4.4 Die Doktrin, die alle Entscheidungen erklärt¶
Warum wir Dinge nicht tun, wirkt manchmal übervorsichtig. Der Grund:
- Kein Raten. Lieber weniger sagen als etwas Unbelegtes behaupten.
- Alles ist Kandidat. Auch Deutungen, nicht nur Fakten.
- Nutzung ≠ Wahrheit. Ein oft genutzter Fakt wird dadurch nicht wahr.
- Gewicht statt Veto. Belege verstärken, sie blockieren nicht.
- Ein technischer Ausfall darf nie wie eine fachliche Entscheidung aussehen. Das war der rote Faden bei den Judge-Fehlern — und der Grund, warum wir die Schwelle nicht gesenkt haben.
Deshalb auch: keine Autokorrektur an Wissensfragmenten. Ein umgeschriebenes Fragment ist ein Ratespiel mit Werkzeug — und ein harter, unumkehrbarer Anker.
5. Was in der nächsten Runde am meisten hilft¶
- Fußzeile immer mitprotokollieren — du tust das bereits, es ist Gold. Bitte in der Auswertung nach Pfad trennen: ein Grammatikfehler in einer LLM-Antwort und einer in einer deterministischen Antwort sind zwei völlig verschiedene Baustellen.
- „Siegel passt nicht" weiter messen. Deine 24 % deckten sich exakt mit unserer unabhängigen Messung (25 %) — eine belastbare Kennzahl. Sie sollte nach dem Output-Gate deutlich fallen; falls nicht, wollen wir das wissen.
- Abdeckung sichtbar machen. Bei jeder unbeantworteten Frage wäre die Angabe wertvoll, ob Lenny den Begriff überhaupt kennt. Der Anteil „NICHT gedeckt" ist die ehrlichste Fortschrittskennzahl, die wir haben.
- Unsinns-Fragen beibehalten. 3 von 3 wurden in unserer Nachmessung sauber verweigert (Runde 1 hatte hier 25 % Halluzination). Das ist der beste Beleg, dass die Doktrin trägt — bitte weiter mitmessen.
- Grammatik erst wieder prüfen, wenn Loop A läuft. Vorher misst man das Sprachmodell, nicht Lenny.
6. Offener Stand¶
- Behoben und live: Output-Gate (inkl. LLM-Pfad), Survival-Invariante mit Umlaut-/Klammer-/Mehrwort-Behandlung, Groß-/Kleinschreibung, Genus/Artikel, Verweigerungspfad, Intent-Frage-Schutz, vier Judge-Fehler, Datenbank-Sperren, drei Sicherheitsbefunde.
- Zurückgestellt mit Begründung: Grammatikregeln im Renderer (bis Loop A).
- Nicht nötig: Cleanup korrupter Fragmente (es gibt keine).
- Als Nächstes: Vorschlagsqualität des Generators — der Judge urteilt sauber, die Frage ist jetzt, wie gut die Vorschläge sind.
Danke für die Genauigkeit. Ohne diese QA hätten wir Wochen in Grammatikregeln gesteckt, die 0,8 % der Antworten betreffen.