Retrieval-Kalibrierung nach Korpusverdopplung (D10) + Goldset-Erweiterung
- Hybrid-Fusion um dense_weight erweitert; kalibriert per Goldset-Sweep: dense_weight=2.0 (BM25 durch KV-S-Titel-Matches inflationiert), rrf_k=20, 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. - CITE_RE um kv|ris erweitert (Post-Validierung deckt neue ID-Raeume). - Goldset: +6 KV/RIS-Fragen (q-101-106) + Branchen-Refusal r-005; q-021 auf lb-kar-04 rekalibriert (Top-1, deckt Beginn/Dauer voll - dokumentiert im Note). - Antwortmodus-Eval (qwen3.8:27b, 42 Fragen): Zitier-Praezision 95,2 %, Verweigerung 90,5 % - unter den M3-Gates, Tuning folgt (Report data/eval-qwen38-kvris.json, lokal). - Docs: agent/README.md Baseline, planung.md Umsetzungsstand, .agents/MEMORY.md (D9/D10, offene Punkte).
This commit is contained in:
+20
-3
@@ -2,7 +2,8 @@
|
||||
|
||||
Lokaler RAG-Agent für österreichische Personalverrechnung: beantwortet
|
||||
Fragen **ausschließlich** aus der kuratierten Wissensbasis (Layer 2,
|
||||
`wissensbasis/`, 601 Einträge) — mit ID- und Stand-Beleg, ohne
|
||||
`wissensbasis/`, **1274 Einträge**: 601 lb/wk-Kuratierung + 614 WKO-KV-
|
||||
Dokumente + 59 RIS-Gesetze) — mit ID- und Stand-Beleg, ohne
|
||||
Trainingswissen, ohne Web-Zugriff. Verbindliche Regeln:
|
||||
`.agents/skills/pv-rag-agent/SKILL.md`, Plan: `planung.md`.
|
||||
|
||||
@@ -56,6 +57,9 @@ python -m agent.cli serve # http://127.0.0.1:8080 (/ask, /health, /r
|
||||
| `PV_KB_DIR` | `wissensbasis` | Wissensbasis-Verzeichnis |
|
||||
| `PV_THINK` | `false` | Thinking per Request (qwen3.8: default an) |
|
||||
| `PV_EMBED_OFF` | `false` | `true` = BM25-only |
|
||||
| `PV_CANDIDATE_POOL` | `150` | Kandidaten je Liste vor der Fusion (KV/RIS-Erweiterung: Longtail-Spezialisten in der Kandidatur halten) |
|
||||
| `PV_RRF_K` | `20` | RRF-Konstante (erweiterter Korpus: Top-Ränge dominant) |
|
||||
| `PV_DENSE_WEIGHT` | `2.0` | RRF-Gewicht der Dense-Liste relativ zu BM25 (BM25 ist durch KV-§-Titel-Matches inflationiert) |
|
||||
| `PV_CONTEXT_BLOCKS` | `8` | Kontextblöcke im Prompt |
|
||||
| `PV_PORT` | `8080` | API-Port |
|
||||
|
||||
@@ -110,6 +114,18 @@ verweigert trotzdem (sicheres Versagensmuster; M3-Prompt-Tuning-Kandidat).
|
||||
Latenz-Hebel für M3: weniger Kontextblöcke, schnellere Kandidaten
|
||||
(gemma4:12B, MoE).
|
||||
|
||||
**KV/RIS-Erweiterung + Retrieval-Kalibrierung (2026-09-15):** Korpus
|
||||
601 → 1274 Einträge (kv-*: 614 WKO-KV-Dokumente quellentreu, ris-*:
|
||||
59 RIS-Gesetze, nur die im Lexis360-Bestand zitierten §-Auschnitte);
|
||||
14 984 Chunks. Kalibrierung per Goldset-Sweep (dichte Gewichtung,
|
||||
RRF-k, Pool): Hit-Rate 0,865 → 0,973 · Recall@8 0,851 → **0,923** (>0,9 ✓)
|
||||
· MRR 0,621 → 0,667. Antwortmodus (qwen3.8:27b): Zitier-Präzision
|
||||
95,2 % (2 Verletzungen), Verweigerung korrekt 90,5 % (4 Fehlverweige-
|
||||
rungen, u.a. q-022/q-029), erwartete Quelle zitiert 83,8 %, Latenz
|
||||
mean 31 s / p95 53 s — **unter den M3-Gates** (100 % / 94,3 %): das
|
||||
Fehlverweigerungs-Tuning (Regel 4/8 + Kontextblöcke) ist weiteres
|
||||
Thema, Prompt bleibt beim laufenden Arbeitsstand eingefroren.
|
||||
|
||||
## Dateien
|
||||
|
||||
```
|
||||
@@ -125,14 +141,15 @@ agent/
|
||||
cli.py ingest | ask | eval | serve
|
||||
eval/ goldset.yaml + evaluate.py
|
||||
web/index.html Minimaler Test-Chat
|
||||
tests/ 41 Tests (offline, Fake-Ollama)
|
||||
tools/ Intake + Registry (build_registry.py, ingest_sources.py)
|
||||
tests/ 49 Tests (offline, Fake-Ollama)
|
||||
data/ index.db (gitignored)
|
||||
```
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
python -m pytest -q # 41 Tests, alle offline
|
||||
python -m pytest -q # 49 Tests, alle offline
|
||||
```
|
||||
|
||||
## Lizenz-Disziplin
|
||||
|
||||
Reference in New Issue
Block a user