eb1a768876
Diagnose: q-008 bekam die 'Verweise'-Navigationssektion von lb-end-03 als Kontext (BM25-Langennormalisierung bevorzugt duenne Chunks) -> inhaltlose Bloecke -> korrekte Verweigerung nach Regel 4. q-031 enthaelt eine falsche Praemisse (kein 'Mindestlohngesetz' in Oesterreich; Wissensbasis sagt: kein gesetzlich betraglich festgelegtes Mindestentgelt). Fixes: (a) retrieve.py _representative_chunk - pro Eintrag beste Inhalts- sektion (Zusammenfassung > Kernwerte > Rechtsgrundlagen > Payroll > sonstige > Verweise), Section-Swap aus dem Index falls nur 'Verweise' rangiert; (b) generate.py Prompt v2 - Regel 4 erlaubt Teilantworten, Regel 8 verlangt Prämisse-Korrektur mit Muster-Beispiel. Bestaetigungslauf qwen3.8:27b (35 Fragen): Zitier-Praezision 100 % (8 Regenerierungen, alle geheilt), Verweigerung korrekt 94,3 %, erwartete Quelle 83,9 % (v1 80,6 %), mean 34 s. q-008 + q-031 behoben; verbleibender bekannter Fall q-029 (breite Survey-Frage, sicherer Fehlermodus). Retrieval-Metriken unveraendert (Recall@8 0,952). 41 Tests gruen.
6.8 KiB
6.8 KiB
Agent-Memory — pv-agent
Rollender Übergabe-Log für agent-Threads. Workflow: .agents/SKILL.md
(agent-memory-Skill). Ergänzen, nicht überschreiben.
Current focus
M1, M2 und M3 (Bake-off) sind abgeschlossen — qwen3.8:27b ist als
Antwortmodell fixiert (D7). Offen: Fehlverweigerungs-Tuning (q-008,
q-031 — beide Finalisten betreffend) und Odoo-Integration (M4, separat
zu planen).
Completed (2026-09-14)
- Planung (
planung.md): Architektur, Grounding-Regeln, Modellfeld, Meilensteine M1–M4; Skill.agents/skills/pv-rag-agent/SKILL.md. - Commits:
25eb285(Wissensbasis-Import),bf8191b(Planung + Skills),2cba72a(M1+M2-Implementierung, 41 Tests). - Implementierung M1+M2 (
agent/): kb/ingest/retrieve/generate/ ollama_client/api/cli/eval, Goldset 31 Fragen, Test-Chat. - Ollama-Anbindung verifiziert (Ziel-Instanz
http://100.103.83.12:11435, Ollama 0.32.13):bge-m3per API gepullt;qwen3.8:27bwar bereits installiert. Hybrid-Index: 3.005 Chunks, alle eingebettet (144 s). - M1-Akzeptanz erreicht: Retrieval Hybrid Hit-Rate 0,968 · Recall@8 0,952 (>0,9 ✓) · MRR 0,690 (BM25-only: 0,871/0,855/0,476).
- M2-Antwortmodus-Eval (qwen3.8:27b, Thinking aus): Zitier-Präzision
100 % (4 Regenerierungen, alle geheilt) · Verweigerung korrekt
94,3 % · erwartete Quelle zitiert 80,6 % · Latenz mean 32 s / p95 53 s.
Report:
data/eval-qwen38.json. - Der ATZ-Konfliktfall (28,5 vs. 27,5 %) wird korrekt mit ⚠ und beiden IDs beantwortet; harte Verweigerung (UStVA, Retrieval nicht leer) funktioniert.
- Topologie geklärt:
100.103.83.12ist die Remote-GPU-Maschine (Entwicklungsumgebung, R9700, Tailscale); die Dev-Maschine selbst hat einen eigenen, fast leeren Ollama auf localhost:11434 (dorthin ging der erste bge-m3-Pull — auf die GPU-Maschine neu gepullt). Ziel-Instanz ist ausschließlichhttp://100.103.83.12:11435. - Bake-off M3 — abgeschlossen (D7): alle 6 Kandidaten gemessen
(Tabelle in
planung.mdAbschnitt 13).qwen3.8:27bgewinnt (100 % Zitier-Präzision, 94,3 % Verweigerung korrekt, 80,6 % erwartete Quelle, 32 s mean).gemma4:26b= dokumentierter Latenz-Kandidat (7,9 s mean, 100 % Zitier-Präzision, aber 67,7 % Quellentreue, 3 Fehlverweigerungen). mistral-small3.1: 71,4 % Verweigerungskorrektheit — Deutsch-Hypothese praktisch widerlegt. muse-glimmer:latest (nachgereicht): 100 % Zitier-Präzision bei nur 1 Regenerierung (diszipliniertestes Modell), aber 8/35 falsche Verweigerungen (Überverweigerung teils trotz vorhandener Zitate) und 37,5 s mean — Rang 5 von 6, schlägt qwen3.8 in keiner Kennzahl. qwen3.6:27B: 2 dauerhafte Zitierverletzungen, 10 Regenerierungen. gemma4:12B: 2 Verletzungen. Reports:data/eval-*.json. q-008/q-031 verweigern alle Top-Kandidaten — Prompt-/Retrieval-Tuning (nicht modellspezifisch). - Remote-GPU-Maschine: nach
systemctl restart ollama(User-Aktion) liefen alle Läufe stabil; zwischen Kandidaten wurde perkeep_alive: 0entladen (Crash-Ursache war der Modell-Swap-Stress beim gemma4-Lauf).
Open issues / blockers
- Push: Remote localhost:3003 aus der Sandbox nicht erreichbar — User pusht vom Host.
- Fehlverweigerungen — Stand nach Prompt v2: q-008 und q-031 sind behoben (Section-Priorität + Regel 8). Verbleibend: q-029 („Welche Neuerungen behandelt WIKU Personal aktuell 2026?“) — breite Survey-Frage über 12 Hefte; Kontext enthält echte Zusammenfassungen, Modell verweigert trotzdem (sicherer Fehlermodus). Mögliche spätere Hebel: Survey-Rule im Prompt, mehr Kontextblöcke oder Map-Reduce-artige Zusammenfassung. Weitere Iterationen erst mit neuen Evaluationsdaten.
- Latenz: mean 32 s/ Antwort ist hoch (Dense 27B + große Prompts). Hebel: weniger Kontextblöcke (aktuell 8+6), schnellere Kandidaten.
- Cloud-Modelle (
*:cloudauf der Ollama-Instanz) sind für Antworten tabu (Anforderung: lokal). Nicht versehentlich konfigurieren. - Bake-off M3 — erledigt (siehe Completed; Entscheidung D7 in
planung.md). Nach Tuning von Prompt/Retrieval: erneuter kurzer Bestätigungslauf nur mit dem Sieger. - M4 Odoo: native LLM-Module des konkreten Odoo-19-Stands verifizieren (keine API-Annahmen); Option A (dünnes Custom-Modul + Service-API) ist Default.
Decisions & conventions
- D1 (Planung): Schlanke Eigen-Pipeline statt LangChain/LlamaIndex — Grounding-Kontrolle schlägt Framework-Komfort bei 601 Dokumenten.
- D2: Retrieval-Korpus ist nur Layer 2; Layer 1 bleibt aus Prompts
(Lizenz); Antworten zitieren
[kb-id]+(Stand YYYY-MM). - D3: Umlaut-Folding für FTS (NFKD, ß→ss) — gilt konsistent für Index und Query; ASCII-Slug-Konvention der Wissensbasis bleibt davon unberührt.
- D4: Post-Validierung strikt: zitierte IDs ⊆ Retrieved-Set (Block-Kopf- IDs); Fließtext-Verweis-IDs sind KEINE Belege (Systemprompt-Regel 2) — Verstoß → 1× Regenerierung → Verweigerung (UNCERTAIN_MESSAGE).
- D5: Vektoren-Tabelle ist Cache (Content-Hash × Modell), Rebuild
löscht sie nicht;
--no-embedsetztembed_offim Config-Copy. - D6: Leeres Retrieval → deterministische Verweigerung ohne LLM-Call.
- D7 (Bake-off 2026-09-14):
qwen3.8:27bist das fixierte Antwortmodell (100 % Zitier-Präzision, 94,3 % Verweigerung korrekt).gemma4:26bals dokumentierter Latenz-Kandidat; ein Modellwechsel läuft nur erneut über das dokumentierte Protokoll (Skill). - D8 (Prompt-Tuning 2026-09-14): Prompt v2 + Kontext-Section-
Priorität. (a) Regel 4 erlaubt Teilantworten bei unvollständiger Deckung;
Regel 8 verlangt Prämisse-Korrektur statt Verweigerung (Muster-Beispiel
„Mindestlohngesetz“). (b)
_representative_chunkwählt pro Eintrag die beste Inhaltssektion (Zusammenfassung > Kernwerte > RechtsgrundlagenPayroll > sonstige; „Verweise“ nur als letzter Rückgriff — BM25 rangiert die dünnen Navigations-Chunks bevorzugt, q-008-Ursache). Ergebnis v1→v2: Zitier-Präzision 100 % gehalten; q-008 + q-031 behoben; erwartete Quelle 80,6 → 83,9 %; Verweigerung 94,3 % (Fehler getauscht: neu q-029 — breite Survey-Frage über 12 Hefte, sicherer Fehlermodus). Report
data/eval-qwen38-v2.json. - Bake-off-Protokoll (Skill): Modellwechsel nur über dokumentierten Goldset-Vergleich; Kriterium: Zitier-Präzision > Verweigerungs- korrektheit > Latenz.
Files that matter right now
planung.md— Plan + Entscheidungspunkte (Abschnitt 12) + Stand..agents/skills/pv-rag-agent/SKILL.md— verbindliche Regeln.agent/README.md— Betrieb, Konfiguration, Host-Schritte.agent/eval/goldset.yaml— Goldset (IDs gegen kb.json verifiziert).agent/generate.py— Grounding-Kern (Prompt, Post-Validierung).wissensbasis/README.md— Layer-2-Schema (unverändert gültig).