Skip to content

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.

  1. Ein fehlgeschlagener LLM-Aufruf zählte still als NEIN.
  2. Die Konfidenz wurde durch die Zahl der Versuche geteilt statt durch die der Antworten — zwei Timeouts kippten ein einstimmiges JA unter die Schwelle.
  3. Ein technischer Ausfall schrieb die Kategorie für 14 Tage ins Backoff-Gedächtnis, ohne dass je geurteilt wurde.
  4. 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:

  1. Deterministischer Renderer — baut Sätze aus verifizierten Fakten nach Regeln. Halluzinationsfrei, aber sprachlich noch karg. Das ist das Ziel.
  2. 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

  1. 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.
  2. „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.
  3. 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.
  4. 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.
  5. 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.