fegger
1594aa9cbd
length-Retry: abgeschnittene Antworten sind die q-024-Ursache, kein Thinking (D14)
...
- Diagnose: q-024-Flakiness war KEIN Think-Ghost (thinking-Feld leer,
keine Tags), sondern num_predict=1024 — lange belegte Antworten
brachen bei done_reason=length ab (3/3 Sondenlaeufe), Zitationen
wurden unvollstaendig, CITE_RE matchte partielle IDs -> Verletzung ->
Regenerierungs-Eskalation -> UNCERTAIN.
- Fix: num_predict 1024 -> 2048; OllamaClient.chat_full() liefert
(content, done_reason); chat_with_length_retry() wiederholt bei
length einmal mit 2x Budget (technischer Retry, kein Regel-
Regenerierungszaehler) - im Antwort-, Map- und Regenerierungspfad.
- Voll-Eval (46 Fragen): Zitier-Praezision 100 %, Verweigerung korrekt
100 % (46/46) - erstmals alle M3-Gates erfuellt; erwartete Quelle
92,7 %; Latenz mean 39,6 s / p95 78 s (vollstaendige statt
abgeschnittener Antworten). q-024: 4/4 stabil.
- Tests 59 -> 60. Report lokal data/eval-qwen38-lengthfix.json.
2026-09-15 14:14:27 +02:00
fegger
4a9e06f66e
Stufe 2: Antworttyp-Routing — Survey Map-Reduce + Rueckfrage-Regel (D13, M6)
...
- Planer liefert jetzt type: survey|specific. Survey-Fragen (Uebersicht
ueber viele Dokumente) laufen ueber Map-Reduce: Retrieval auf
survey_blocks=16 erweitert, ein Map-Call destilliert JE Block als
Stichpunkte mit seiner KB-ID (MAP_SYSTEM_PROMPT), ein Reduce-Call
synthetisiert die Endantwort. Grounding unveraendert: Zitier-Validierung
strikt ueber die Retrieved-Union; leerer Map-Output -> Fallback auf
Einzelantwort.
- Systemprompt-Regel 9: haengt die Antwort wesentlich von nicht genanntem
Kontext ab (Branche, Bundesland, Zeitraum), belegte allgemeine Aussage
plus EINE Rueckfrage statt Verweigerung (API-first; Odoo-Chat kann die
Rueckfrage als Follow-up nutzen).
- Ergebnis: q-029 (WIKU-Survey, bisher hartnaeckigste Fehlverweigerung)
geheilt - Teilantwort mit 5 belegten Heften; q-015 antwortet mit
expliziter KV-Abhaengigkeit + Rueckfrage statt Branchen-Noise.
- Eval (46 Fragen): Zitier-Praezision 97,8 %, Verweigerung 97,8 % (Gate
erfuellt), erwartete Quelle 90,2 %, Latenz mean 34,2 s (Map-Reduce nur
bei Survey-Fragen, ~95 s). Report lokal data/eval-qwen38-stage2.json.
- Tests 57 -> 59 (Survey-Integration, Typ-Parsing).
2026-09-15 11:16:53 +02:00
fegger
062e010d7b
Stufe 1: komplexe Fragen via Query-Planer, Per-Query-Slots, Scope-Filter (D12, M6)
...
- Query-Planer (agent/query_planner.py): Heuristik-Gate (Jahr, Vergleichs-/
Aggregationsmarker, Laenge) entscheidet ueber einen kleinen LLM-Call,
der komplexe Fragen in 1-3 Sub-Queries zerlegt (JSON, temp 0; Fehler ->
Original als Einzel-Query). Je Sub-Query optional stand_year und scope.
- Multi-Query-Retrieval: je Sub-Query BM25+Dense mit RRF-Summe;
Per-Query-Slots (2 je Sub-Query) sichern jeden Frageaspekt im Kontext
(sonst dominieren Eintraege, die in mehreren Sub-Queries mittelgut
matchen — q-113-Befund). Scope-Filter: 'gesetz' (nur Lexis/WIKU/RIS)
und 'kv' (nur Branchen-KV) mit Fallback auf unscoped bei leerem
Ergebnis. Temporal-Intent: stand_year + temporal_boost (default 0,
FTS-jahr-Tag-Signal reichte).
- Grounding unveraendert: eine Retrieved-Menge (Union), eine Antwort,
Post-Validierung ueber die Union, Verweigerungspflicht unveraendert.
- Goldset 42 -> 46: q-110 (Temporal 2023; 2024er-Lohnordnung existiert
im Korpus nicht - Mantelvertrag ohne Lohntabelle, korrekt verweigert),
q-111 (2025), q-112 (Abfertigung-Vergleich), q-113 (Gesetz+KV).
- Eval (46 Fragen): Zitier-Praezision 97,8 %, Verweigerung 97,8 %
(Gate >94,3 % erfuellt), erwartete Quelle 90,2 %, Latenz mean 33,5 s.
- Tests 50 -> 57. Reports lokal: data/eval-qwen38-stage1*.json.
API-first festgehalten (D13-Vorbereitung): Odoo bleibt duenner Client;
Lohndaten-Zugriff in M4 erfordert Privacy-Neubewertung.
2026-09-15 09:58:25 +02:00
fegger
c594c553b5
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-*).
2026-09-15 08:31:02 +02:00
fegger
ac060c4977
KV/RIS-Erweiterung: 614 WKO-KV-Dokumente + 59 RIS-Gesetze (D9)
...
- Korpus 601 -> 1274 Layer-2-Eintraege: kv-kvt-001...614 (ein Cluster
kollektivvertraege, Branche als Tag) und ris-<cluster-prefix>-nn auf
der bestehenden Cluster-Map + 7 neue Cluster (zvr/avr/agg/lst/abo/
nso/kvt); LAW_MAP dokumentiert die 59 Gesetz-Zuordnungen.
- kv/ris-Eintraege sind quellentreu generiert (D9) - Gesetze sind
amtliche Werke, KV-Lohntabellen zahlenexakt; Tool-Output in
tools/ (ingest_sources.py, build_registry.py, kb_common.py),
eingefrorene ID-Kataloge tools/catalogs/*.json (nur Metadaten).
- kb.json/INDEX.md regeneriert (1274 Eintraege, 76 Cluster);
agent/kb.py: ID-Raeume kv|ris, source akzeptiert html-only.
- Tests 41 -> 49 (Konverter, LAW_MAP-Abdeckung, neue ID-Raeume,
Korpus-Integrationszahl).
2026-09-15 07:44:56 +02:00
fegger
2cba72aeb0
M1+M2: RAG-Pipeline mit verbindlichem Grounding
...
agent/-Paket: Ingest (601 Layer-2-Eintraege -> 3005 Chunks, FTS5-BM25 +
Vektoren-Cache), Hybrid-Retrieval (RRF, Stand-Boost, cross_ref-Erweiterung),
Ollama-Client (embed/chat, think-Flag-Fallback, kurzes Connect-Budget),
Systemprompt mit Zitierpflicht, Post-Validierung (zitierte IDs gemaess
Retrieved-Set, 1x Regenerierung, dann Verweigerung), FastAPI (/ask, /health,
/reindex), CLI, Goldset (31 Fragen, IDs gegen kb.json verifiziert, inkl.
ATZ-Konfliktfall + 4 Verweigerungsfaelle), Eval-Suite, Test-Chat.
41 Offline-Tests gruen. Baseline BM25-only: Hit-Rate 0,871 / Recall@8 0,855 /
MRR 0,476. Hybrid-Messung, Antwortmodus-Eval und Modell-Bake-off (M3) auf
dem Host ausstaendig (Ollama aus der Zed-Sandbox nicht erreichbar).
MEMORY.md und planung.md Umsetzungsstand aktualisiert.
2026-09-14 16:53:04 +02:00