Tuning: Prompt-Budget + cross_ref-Erweiterung heilt Fehlverweigerungen (D11)

- Ursache der 4 Fehlverweigerungen nach KV/RIS-Erweiterung: lange
  KV-Chunks ueberlieferten num_ctx=16384 (bis 62,7 KB Prompt) — Ollama
  trunciert den Systemprompt vorn, das Modell verliert die Zitierregeln
  ('Block-N'-Zitate statt IDs -> Regenerierung -> Verweigerung).
- Fix: num_ctx 32768; trim_results (max_context_chars=90.000, niedrig
  gerankte Bloecke ganz weglassen statt truncieren, Mindestbestand 6);
  cross_ref_expand 3 -> 6 (Top-3 sind oft Branchen-KV-Bloecke mit leeren
  cross_refs - kuratierte Nachbarn kamen sonst nie nach).
- Eval: alle 4 Faelle geheilt, 10/10 Bestaetigungslaeufe OK.
  Retrieval Recall@8 0,851 -> 0,946 (cross_ref-Extras bringen
  Expected-IDs nach). Antworten: Zitier-Praezision 97,6 %, Verweigerung
  97,6 % (>94,3 %-Gate), erwartete Quelle 83,8 -> 91,9 %, Latenz mean 33 s.
- Tests 49 -> 50 (trim_results); Reports lokal (data/eval-*).
This commit is contained in:
2026-09-15 08:31:02 +02:00
parent a8234771cb
commit c594c553b5
6 changed files with 105 additions and 17 deletions
+26 -7
View File
@@ -118,13 +118,16 @@ zu planen).
- **M4 Odoo**: native LLM-Module des konkreten Odoo-19-Stands verifizieren
(keine API-Annahmen); Option A (dünnes Custom-Modul + Service-API) ist
Default.
- **Nach KV/RIS-Erweiterung (2026-09-15)**: Antwortmodus unter den Gates
(Zitier-Präzision 95,2 % — 2 Verletzungen; Verweigerung 90,5 % — 4
Fehlverweigerungen, u.a. q-022/q-029; erwartete Quelle 83,8 %) —
Report `data/eval-qwen38-kvris.json`. Retrieval-Gate erfüllt (Recall@8
0,923 nach D10-Kalibrierung). Weiteres Prompt-/Kontext-Tuning offen;
der laufende Arbeitsstand in generate.py/retrieve.py/goldset.yaml
wurde unangetastet gelassen.
- **Nach KV/RIS-Erweiterung (2026-09-15)**: Antwortmodus vor dem Tuning
(D10-Follow-up) unter den Gates (Zitier-Präzision 95,2 % — 2 Verlet-
zungen; Verweigerung 90,5 % — 4 Fehlverweigerungen, u.a. q-022/q-029;
erwartete Quelle 83,8 %) — Report `data/eval-qwen38-kvris.json`.
**D11-Fix behoben die 4 Fehlverweigerungen**: Antwortmodus jetzt
Zitier-Präzision 97,6 %, Verweigerung **97,6 %** (>94,3 %-Gate ✓),
erwartete Quelle 91,9 %, Retrieval Recall@8 0,946 — Report
`data/eval-qwen38-kvris-tuned.json`. Verbleibend: q-015 (Branchen-
Noise) und q-024 als transiente Flakiness (leerer Draft — Think-Ghost-
Verdacht bei 32k-Kontext; beobachten).
- **q-015 (Tagesgelder Dienstreisen)** — Branchen-Noise: 8 Branchen-KV-
Einträge verdrängen lb-rei-01/09 (EStG-Taggeld-Abrechnung) aus Top-8;
generische Branchen-Frage ist mehrdeutig geworden. Hebel: Frage
@@ -176,6 +179,22 @@ zu planen).
candidate_pool=150 → Recall@8 0,851 → 0,923 (>0,9 ✓), Hit-Rate
0,973, MRR 0,667. ENV: PV_DENSE_WEIGHT / PV_RRF_K /
PV_CANDIDATE_POOL. Entry-RRF-Variante getestet: kein Mehrwert.
- **D11 (Prompt-Budget + Kontext-Abdeckung, 2026-09-15):** lange KV-Chunks
überlieferten num_ctx=16384 (q-022: 62,7 KB Prompt ≈ 18k Tokens) —
Ollama trunciert den Systemprompt vorn, das Modell verliert die
Zitierregeln („Block 8“-Zitate statt IDs → Regenerierung → Verweigerung).
Fix: num_ctx 32 768, `trim_results` (max_context_chars=90 000, Tail-
Blöcke ganz weg statt trunciert, Mindestbestand 6) und
cross_ref_expand 3 → 6 (die Top-3 sind oft Branchen-KV-Blöcke mit
leeren cross_refs — kuratierte Nachbarn kamen sonst nie nach).
Ergebnis: alle 4 Fehlverweigerungs-Fälle (q-001/q-019/q-022/q-029)
geheilt, 10/10 Bestätigungsläufe OK. Eval: Zitier-Präzision 97,6 %,
Verweigerung 97,6 % (> 94,3 %-Gate ✓), erwartete Quelle 91,9 %
(vorher 83,8 %), Retrieval Recall@8 **0,946** (cross_ref-Extras
bringen Expected-IDs nach), MRR 0,671. Latenz mean 33 s.
Report `data/eval-qwen38-kvris-tuned.json`. Restrisiko: q-024
flaky (1/3 Läufe — transienter leerer Draft, Think-Ghost-Verdacht);
q-015 Branchen-Noise bleibt offen.
- **Bake-off-Protokoll** (Skill): Modellwechsel nur über dokumentierten
Goldset-Vergleich; Kriterium: Zitier-Präzision > Verweigerungs-
korrektheit > Latenz.