Skip to content

Qualitätskriterien für den „LLM-like“-Vergleich (NLG-032) – vor dem Lauf festgelegt

Stand: 06.10.2026, festgelegt mit Commit e372353 um 03:05 MESZ (01:05 UTC) - die ursprüngliche Zeitangabe „03:30 MESZ“ in dieser Zeile und in kriterien.json war eine falsche Vorabschätzung; maßgeblich ist der Commit-Zeitpunkt. Diese Datei wird vor dem ersten Bewertungslauf committet. Der Lauf (tools/native_vergleich.py) liest die Schwellen aus docs/native_language/vergleich/kriterien.json; eine Änderung der Schwellen nach Sicht der Ergebnisse wäre ein Verstoß gegen die Aufgabe (Kriterium vor dem Lauf, nicht danach).

Aufbau des Vergleichs

  • 200 Prompts (prompts.jsonl): echte Fragen an den echten Router (ask_lenny) über einen Wissensspeicher mit rund 60 Begriffen – Definition, Ja/Nein (belegt, nicht belegt), Eigenschaften, Kategorie, Beispiele, Bestandteile, Zweck, Vergleich, Herkunft, Zusammenfassung, Absage.
  • Drei Antworten je Prompt, getrennt erzeugt:
  • legacy – der deterministische Vorlagentext der Produktion (was Nutzer heute lesen),
  • llm – der bisherige LLM-Verbalizer (ask_lenny._signal_voice_answer, qwen2.5:7b-instruct über lokales Ollama, Entwicklungsvergleich) auf demselben legacy-Text,
  • native – die Native Language Engine (Modus native, Firewall aktiv, llm_calls=0).
  • Anonymisierte Bewertung: ein unabhängiger Bewerter (Claude, Headless-CLI, nur offline, nie im Antwortpfad) sieht Frage, Wissensbasis (die Claims des Frames) und zwei Antworten in zufälliger Reihenfolge („A“/„B“), ohne zu erfahren, welche Native ist. Je Antwort: Natürlichkeit, Verständlichkeit, Vollständigkeit, Präzision, Stil, Wiederholung (1–5; Wiederholung 5 = keine), Halluzination (ja/nein), fehlende Fakten, „gut brauchbar oder besser“ (ja/nein).
  • Kalibrierung des Bewerters (damit seine Urteile belastbar sind): 24 Kontrollpaare mit bekannter Qualität (intakter Native-Text gegen einen gezielt verfälschten: erfundene Aussage, fehlender Fakt, kaputte Grammatik/Wiederholung) und 40 Prompts, die mit vertauschter Reihenfolge ein zweites Mal bewertet werden (Positionsverzerrung).

Schwellen (Produktionsziel der Aufgabe, NLG-032)

Kriterium Schwelle Quelle der Messung
Semantische Vollständigkeit Native ≥ 95 % der Prompts deterministisch: alle geforderten Claims im Text (Engine NG1 und unabhängiger Prüfer)
Hard-Gate-Verstöße Native 0 Quality Gates NG1–NG10 der Endantwort
Halluzinationen Native 0 NG2 (unbelegtes Wort) und jede vom Bewerter gemeldete Halluzination, von Hand geprüft
„gut brauchbar oder besser“ Native ≥ 90 % der Vergleichsfälle Bewerter, je Prompt
Natürlichkeit, Verständlichkeit: Median Native gegenüber llm Median(Native) ≥ Median(llm) − 0,5 (Skala 1–5) Bewerter
Keine erkaufte Stilverbesserung Vollständigkeit Native ≥ Vollständigkeit llm − 0,25 (Mittel), Halluzinationsrate Native ≤ der von llm, keine zusätzlichen Unknown-Verluste Bewerter + deterministisch
Bewerter belastbar ≥ 90 % der Kontrollpaare richtig erkannt; ≥ 80 % Übereinstimmung bei vertauschter Reihenfolge Kalibrierung
Abdeckung ≥ 90 % der Prompts erreichen die Native Engine (Rest bleibt deterministischer Legacy-Text, kein LLM) Zähler kein_frame

„Brauchbar“ allein genügt nicht: die Schwelle gilt für „gut brauchbar oder besser“.

Einordnung des Ergebnisses

  • Sind alle Schwellen erfüllt und der Bewerter kalibriert, steht das Ergebnis als „extern (Bewerter-Modell, offline, anonymisiert) bewertet“ im Abschlussbericht. Eine menschliche Stichprobe ist damit nicht ersetzt; sie wird als offener Punkt benannt.
  • Ist der Bewerter nicht kalibriert oder fehlt ein Teil der Messung, lautet der Status QUALITY_CALIBRATION_PENDING; die Engine darf dann in shadow weiterlaufen, eine Umschaltung auf native erfolgt nicht.
  • Der LLM-Verbalizer dient nur als Entwicklungsvergleich: kein LLM-Satz wird übernommen, als Muster gespeichert oder zur Laufzeit zur Bewertung herangezogen (NLG-053).

Nachtrag 06.10.2026, 03:50 MESZ (01:50 UTC) – vor dem Lauf des LLM-Arms: zwei Quellen für llm

Die Schwellen und kriterien.json bleiben unverändert. Geändert hat sich nur, woher die llm-Antworten stammen können:

  • llm_ollama (vorab festgelegt, maßgeblich für den Abschluss gegen den bisherigen Verbalizer): ask_lenny._signal_voice_answer mit qwen2.5:7b-instruct über das lokale Ollama. Am 06.10. lädt Ollama kein Modell (CUDA „out of memory“, CPU-Puffer nicht allozierbar), weil der Systemspeicher erschöpft ist (0,6 GB frei von 16 GB, Commit-Reserve 3 GB; ein Renderprozess des Edge-Browsers des Nutzers hält 24 GB). Der Prozess gehört dem Nutzer und wird nicht beendet. Der Arm wird nachgeholt, sobald Speicher frei ist (Wächter-Schleife im Hintergrund).
  • llm_claude (zusätzlich, strenger): dieselbe Funktion _signal_voice_answer – derselbe Prompt, dieselbe Schrift- und Erfindungs-Sperre, derselbe Rückfall auf den Legacy-Text –, nur die Modellstelle (ask_lenny._llm_generate) ist im Werkzeugprozess durch Claude Sonnet (Headless-CLI, keine Werkzeuge, keine Sitzung) ersetzt. Ein Verbalizer dieser Güte ist stärker als qwen2.5:7b.

Einordnung (vor dem Lauf festgelegt):

Ergebnis Folge
alle Schwellen gegen llm_claude erfüllt, Bewerter kalibriert gilt als bestanden gegen die Referenzklasse „starker LLM-Verbalizer“; die Aussage „Native ist höchstens geringfügig schlechter als der bisherige Verbalizer“ folgt unter der Annahme, dass qwen2.5:7b nicht besser formuliert als Claude Sonnet – nachgeprüft, sobald llm_ollama läuft
Schwellen gegen llm_claude verfehlt, aber llm_ollama fehlt nicht entscheidbar: QUALITY_CALIBRATION_PENDING, nur Shadow, keine Umschaltung
llm_ollama liegt vor dieser Arm entscheidet; llm_claude bleibt als strengere Zusatzmessung im Bericht

Bewerter und starker Verbalizer stammen hier aus derselben Modellfamilie (Selbstbevorzugung möglich); das wirkt gegen Native und ist damit die vorsichtige Richtung. Es ersetzt keine menschliche Stichprobe.

Nachtrag 11.10.2026, 12:15 MESZ (10:15 UTC) – Ergebnis des vorab festgelegten Arms llm_ollama

Der Arm llm_ollama (bisheriger Verbalizer, qwen2.5:7b-instruct; Antworten vom 06.10. 13:35 UTC) ist blind bewertet (Bewerter Claude Sonnet, Kontrollpaare K01–K24, 40 vertauschte Wiederholungen, Übereinstimmung 1,0) und ausgewertet: docs/native_language/vergleich/ergebnis_ollama.json, bewertung_sonnet_ollama.json. Schwellen und kriterien.json sind unverändert.

Kennzahl Native bisheriger Verbalizer (Ollama)
Prompts bewertet 200 von 200 200 von 200
semantisch vollständig 100 % –
Hard-Gate-Verstöße / NG2-Halluzinationen 0 / 0 – (66 Modellantworten vom Wächter des Verbalizers verworfen, Rückfall auf den Altwortlaut)
„gut brauchbar oder besser“ 100 % 58,5 %
Median Natürlichkeit / Verständlichkeit / Vollständigkeit 5 / 5 / 5 3 / 4 / 5
Halluzinationen vom Bewerter gemeldet 0 34
paarweise (200 Paare) Native besser 191 gleich 8, Modell besser 1

Alle 13 Kriterien (kriterien) sind erfüllt, der Bewerter ist kalibriert und ohne Positionsverzerrung: Status BELEGT_EXTERN_BEWERTET. Nach der oben festgelegten Einordnung entscheidet damit dieser Arm; llm_claude (strenger) bleibt als Zusatzmessung im Bericht und besteht ebenfalls (Native besser 182, gleich 8, Modell besser 10). Vorbehalt unverändert: Bewerter und starker Verbalizer stammen aus derselben Modellfamilie, und eine menschliche Stichprobe ist damit nicht ersetzt (Bogen: menschliche_stichprobe.md) – sie bleibt ein offener Punkt des Abschlussberichts.

Nachtrag 11.10.2026, 22:00 MESZ (20:00 UTC) – Gegenprobe mit einem zweiten Bewerter

Zur Absicherung gegen die Selbstbevorzugung eines einzelnen Bewerters wurden dieselben 200 Antwortpaare des vorab festgelegten Arms (llm_ollama) zusätzlich von Claude Opus blind bewertet (gleiche Kontrollpaare K01–K24, gleiche 40 vertauschte Wiederholungen, unveränderte Schwellen; vergleich/bewertung_opus_ollama.json, vergleich/ergebnis_ollama_opus.json). Ergebnis: alle 13 Kriterien erfüllt, Status BELEGT_EXTERN_BEWERTET – Native „gut brauchbar oder besser“ 99,5 % (bisheriger Verbalizer 36,5 %), Median Natürlichkeit 5 gegen 3, paarweise Native besser 193, gleich 6, Modell besser 1; Übereinstimmung der vertauschten Wiederholungen 1,0. Die maßgebliche Auswertung bleibt die vorab festgelegte mit Sonnet (ergebnis_ollama.json); die Gegenprobe ändert sie nicht, sie bestätigt sie mit einem anderen Bewerter. Eine menschliche Stichprobe bleibt offen.