Sendung-Detection verbessern: Tracking-Number-Hard-Override + Verb-Tempus-Heuristik #255

Closed
opened 2026-05-14 15:22:40 +02:00 by admin-mrrm · 0 comments
Owner

Kontext

Kalibrierung in #251 zeigte: NLI verwechselt Bestellung ↔ Sendung zuverlässig falsch:

L# Subject NLI top (falsch) korrekt
12 Ihre Bestellung erreicht Sie bald Bestellung 0.34 Sendung
13 Shop Apotheke Bestellung erreicht Sie schon bald Termin 0.31 Sendung
14 Bestellung wurde versandt! Bestellung 0.33 Sendung

NLI sieht das Wort Bestellung im Subject und gewinnt damit — der Verb-Tempus ("versandt", "erreicht", "unterwegs") wird ignoriert. Gleichzeitig haben wir bereits einen scharfen Tracking-Parser im Backend (apps/api/src/modules/tracking-parser/) mit Patterns für UPS/Hermes/DHL/DPD — der wird heute nur für die Sendungsverfolgung benutzt, aber ist ein deterministisches Sendung-Signal.

Ziel

Zweistufige Verbesserung:

Stufe 1 — Tracking-Number-Hard-Override (deterministisch)

Wenn parseTrackingNumber(subject + body) einen Treffer hat → in mailModelManager.suggest() direkt ['Sendung'] zurückgeben, ohne NLI/Llama aufzurufen. Tracking-Nummern (UPS 1Z + 16 chars, Hermes H + 14 digits, DHL 20 digits, DPD mit Kontext-Anchor) sind zufallsfrei genug, dass False-Positives praktisch ausgeschlossen sind.

Architektur: Patterns aus apps/api/src/modules/tracking-parser/tracking-parser.service.ts nach packages/shared-utils (neu) oder packages/shared-types/src/tracking-patterns.ts extrahieren, API und Mobile konsumieren denselben Source.

Stufe 2 — Verb-Tempus-Heuristik (textbasiert)

Wenn kein Tracking, aber NLI-Top in {Bestellung, Sendung}: Subject-Keyword-Check /versandt|unterwegs|erreicht|wird geliefert|verschickt/i → bevorzuge Sendung. /bestätigt|erhalten|wir haben deine bestellung/i → bevorzuge Bestellung.

Vorgehen (TDD)

  1. Move Tracking-Patterns nach packages/shared-* — Tests in beiden Konsumenten weiter grün
  2. Mobile-Hook: suggest() ruft parseTrackingNumber(rawSnippet) vor NLI; bei Treffer → ['Sendung']. Tests mit allen 4 Carrier-Pattern-Beispielen aus den Kalibrierungs-Mails
  3. Verb-Heuristik: wenn NLI-Top in {Bestellung, Sendung} und Subject matched Pattern → Bias-Override. Tests mit L12/L13/L14

Akzeptanz-Kriterium

Nach #251-Kalibrierungs-Replay: L12/L13/L14 = Sendung statt Bestellung; L10 (Amazon Heizkissen bestellt) = Bestellung (kein Versand-Verb, keine Tracking-Nr).

Out of Scope

  • Confidence-Scoring zwischen Tracking-Match und NLI (deterministisches Override gewinnt immer)
  • Mehr Carrier (GLS, FedEx, Post AT/CH) — eigene PRs, sobald Mails reinkommen

Abhängigkeit

Gehört zu #251 (geschlossen).

## Kontext Kalibrierung in #251 zeigte: NLI verwechselt **Bestellung ↔ Sendung** zuverlässig falsch: | L# | Subject | NLI top (falsch) | korrekt | |---|---|---|---| | 12 | Ihre Bestellung erreicht Sie bald | Bestellung 0.34 | Sendung | | 13 | Shop Apotheke Bestellung erreicht Sie schon bald | Termin 0.31 | Sendung | | 14 | Bestellung wurde versandt! | Bestellung 0.33 | Sendung | NLI sieht das Wort *Bestellung* im Subject und gewinnt damit — der Verb-Tempus ("versandt", "erreicht", "unterwegs") wird ignoriert. Gleichzeitig haben wir bereits einen scharfen Tracking-Parser im Backend (`apps/api/src/modules/tracking-parser/`) mit Patterns für UPS/Hermes/DHL/DPD — der wird heute nur für die Sendungsverfolgung benutzt, aber ist ein **deterministisches** Sendung-Signal. ## Ziel Zweistufige Verbesserung: ### Stufe 1 — Tracking-Number-Hard-Override (deterministisch) Wenn `parseTrackingNumber(subject + body)` einen Treffer hat → in `mailModelManager.suggest()` direkt `['Sendung']` zurückgeben, **ohne NLI/Llama** aufzurufen. Tracking-Nummern (UPS `1Z + 16 chars`, Hermes `H + 14 digits`, DHL `20 digits`, DPD mit Kontext-Anchor) sind zufallsfrei genug, dass False-Positives praktisch ausgeschlossen sind. **Architektur:** Patterns aus `apps/api/src/modules/tracking-parser/tracking-parser.service.ts` nach `packages/shared-utils` (neu) oder `packages/shared-types/src/tracking-patterns.ts` extrahieren, API und Mobile konsumieren denselben Source. ### Stufe 2 — Verb-Tempus-Heuristik (textbasiert) Wenn kein Tracking, aber NLI-Top in {Bestellung, Sendung}: Subject-Keyword-Check `/versandt|unterwegs|erreicht|wird geliefert|verschickt/i` → bevorzuge Sendung. `/bestätigt|erhalten|wir haben deine bestellung/i` → bevorzuge Bestellung. ## Vorgehen (TDD) 1. **Move Tracking-Patterns nach `packages/shared-*`** — Tests in beiden Konsumenten weiter grün 2. **Mobile-Hook:** `suggest()` ruft `parseTrackingNumber(rawSnippet)` vor NLI; bei Treffer → `['Sendung']`. Tests mit allen 4 Carrier-Pattern-Beispielen aus den Kalibrierungs-Mails 3. **Verb-Heuristik:** wenn NLI-Top in {Bestellung, Sendung} und Subject matched Pattern → Bias-Override. Tests mit L12/L13/L14 ## Akzeptanz-Kriterium Nach #251-Kalibrierungs-Replay: L12/L13/L14 = Sendung statt Bestellung; L10 (Amazon Heizkissen bestellt) = Bestellung (kein Versand-Verb, keine Tracking-Nr). ## Out of Scope - Confidence-Scoring zwischen Tracking-Match und NLI (deterministisches Override gewinnt immer) - Mehr Carrier (GLS, FedEx, Post AT/CH) — eigene PRs, sobald Mails reinkommen ## Abhängigkeit Gehört zu #251 (geschlossen).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
admin-mrrm/mrrmlabapp#255
No description provided.