Studios in MotionProjektkartei

Ticket-Triage

Wartet

Renés Kernprojekt: Qualität der automatischen Ticket-Zuordnung und Einordnung messen und verbessern, damit Website-Änderungen sicher in die Pipeline gehen

Bereich
Zentrale
Start
12.07.2026
Zuletzt
08.10.2026
Am Zug
ich
Nächster Schritt, ich

Soll-Labels für den Testsatz setzen und den Korrektur-Knopf als Label-Quelle bauen, danach Etappe 2 (Prompt für Geschäftspost, Triage und Mail-Einordnung zusammenführen)

Worum es geht

Die Eingangs-Triage des Ticketsystems ist das Key-Feature: Ein Sprachmodell (OpenRouter, Standard anthropic/claude-sonnet-4.5) ordnet jede neue Kundenmail ein (Kategorie, Priorität, Anweisung, Antwortvorschlag) und erkennt Website-Änderungswünsche, damit sie über die Website-Agenten in die Entwicklungsumgebung gehen. René will das messbar machen und verbessern. Entschieden am 05.08.2026: alle drei Etappen, in dieser Reihenfolge: messbar machen, Kategorien reparieren, Zustelladresse (Zuordnung zu Kunde und Website).

Stand

  • Etappe 1 (messbar machen): Testsatz mit 200 echten Mails aus dem service@-Archiv liegt in /root/transfer/triage-testsatz/ (nie ins Repo). Auswertungsskript backend/scripts/triage-eval.mjs mit --lauf und --messen. Soll-Labels sind noch nicht gesetzt, --messen zeigt deshalb nur Verteilungen. Der Korrektur-Knopf im Ticket als laufende Label-Quelle fehlt noch.
  • Größter Fund und Fix (3603da1, 05.08.): extractOwnMessage() schnitt bei „Von:“ ab und machte Weiterleitungen leer. Ohne verwertbaren Text 19 % auf 10 %, 9 echte Website-Änderungswünsche gerettet. Ohne Text wird die Konfidenz auf 0,3 gedeckelt.
  • Regelwerk (06.08.): Absender-Regeln wirken für invoice, newsletter und spam. spam wird nie übernommen, wenn der Absender zu einer bekannten Firma gehört. Zwei Regel-Vorfälle derselben Klasse behoben (kgfk.de, eigene Domain).
  • Zustelladressen: mappings.site.live von 10 auf 18 Kunden ergänzt, Werkzeug sim-ops/scripts/kundenakte-site.sh.
  • Schattenmodus (W2, seit 29.07.): 21 Wünsche in drei Wochen, 12 von 12 mit Konfidenz ab 0,9 waren echt (0 Falsch-Positive). Engpass war die Kunden-Zuordnung, nicht die Erkennung. Daraus wurde am 20.08. Stufe A der Ticket-Schleuse (siehe website-auftraege-pipeline).
  • Weitere Verbesserungen: Betreff-Zuordnung (04.09. und 07.09.), Rangfolge der Website-Kandidaten (16.09.), interne Tickets (23.09.), Stil-Regeln aus Korrekturen fließen in den Triage-Prompt (20.08.), neues Thema im alten Outlook-Faden wird eigenes Ticket mit Folge-Analyse ai_triage_folge (08.10., 3371e69).
  • Kosten der Triage werden an den Hub gemeldet (live seit 23.07.), siehe kosten-tracking.

Offen

  • ich Soll-Labels für die 200 Testmails setzen (mit René gemeinsam durchsehen) und Korrektur-Knopf im Ticket als dauerhafte Label-Quelle bauen. Vor jeder Prompt-Änderung gegen den Testsatz messen, nur mit triage-stichprobe-roh.json.
  • ich Etappe 2: Das Modell überstimmt korrekte Regel-Ergebnisse (Lieferantenrechnungen wie CCM19 und Elfsight wurden spam_irrelevant mit 0,95). Der Prompt kennt nur „Kundenanliegen“ oder „Spam“. Triage und Mail-Einordnung (non_ticket, newsletter, invoice, spam) sind noch zwei Systeme, die nicht miteinander reden.
  • ich Etappe 3 Rest: Firmen ohne Hub-Site bleiben nicht zuordenbar (strukturell). Denkbare Kür: Zuordnung zusätzlich über die Domains in mappings.emails.
  • ich 20 von 200 Mails bleiben ohne Text (HTML-only oder nur Anhang): Anhänge mitlesen wäre der nächste Hebel.
  • René Triage-Prompt optional um „ALT zu NEU vollständig“ ergänzen (Vorschlag nach dem Balance-Fall #619, 20.08.).
  • René Weiterleitungs-Hinweise der Pipeline (Warnung bei „anbei“ ohne Anhang, Warnung bei AW: mit erkannter Weiterleitung) sind vorgeschlagen, nicht gebaut; Go steht aus (24.09.).
  • Status „wartet“ und Zuordnung zu Etappe 1 bis 3 bitte gegen den heutigen Stand prüfen (die Projektnotiz ist vom 06.08., danach lief die Arbeit überwiegend im Ticketsystem und in der Pipeline).

Entscheidungen und Regeln

  • 2026-08-05: Alle drei Etappen, Reihenfolge messbar machen, Kategorien reparieren, Zustelladresse. Freigabekriterium für Stufe A: 0 Fehlalarme bei Konfidenz ab 0,9.
  • 2026-08-06: Lieber ein Newsletter zu viel als ein verlorener Auftrag. spam wird für bekannte Firmen nie übernommen. Absender-Regeln immer gegen contacts.email und contact_company_links prüfen, nicht gegen companies.domain.
  • 2026-07-12: Triage läuft über OpenRouter, nicht über Anthropic direkt.
  • Messregel: Rohtext ist Pflicht (triage-stichprobe-roh.json), das Kürzen macht die Triage selbst. Läufe nur im Backend-Container, Kundendaten bleiben auf dem Server.
  • Die Zuordnung zu Kunde oder Website ist immer nur ein Vorschlag (Regel vom 16.09., siehe website-auftraege-pipeline).

Verlauf

  1. 3371e69 neues Thema im alten Outlook-Faden wird eigenes Ticket, Folge-Analyse der jüngsten Kundennachricht (metadata.ai_triage_folge), Anzeige im Ticket. Gepusht auf Renés Go.
  2. Interne Tickets: genannte Kundenwebsite gewinnt, Schleuse nutzt dieselbe Rangfolge wie der Knopf (Hub v0.339.0 und v0.339.1).
  3. dd87e83 Kunde im Betreff erkennen; 2026-09-07 488207c Kombination mehrerer Wörter als Trefferart.
  4. edd9978 Stil-Regeln aus Korrekturen fließen in den Triage-System-Prompt. Schleuse Stufe A live (Hub v0.217.0).
  5. Regelwerk bereinigt (9fa9f38, Newsletter- und Spam-Übernahme live), Zustelladressen ergänzt (10 auf 18 Kunden), Platte auf 451 GB erweitert.
  6. Renés Ziel und Entscheidung; Testsatz und triage-eval.mjs (00c0964); Fix 3603da1 für leere Weiterleitungen.
  7. W2-Schattenmodus: Triage liefert website_change mit Konfidenz, Hub wertet aus (93ca66d, Hub v0.52.0).
  8. Triage-Kostenmeldung dauerhaft live (Org-Repo 02b5a3f), vorher nur als Brücke im laufenden Container.
  9. Triage läuft über OpenRouter statt Anthropic (f2c169c).

Wo liegt was

  • Code: /root/system-sim-ticketsystem backend/src/services/aiTriage.js, aiTriageModel.js (OpenRouter per fetch, Env OPENROUTER_API_KEY, AI_TRIAGE_MODEL), mailClassification.js, mailSync.js, mailText.js (extractOwnMessage), mailThreading.js.
  • Messung: backend/scripts/triage-eval.mjs, Aufruf im Backend-Container (docker exec -w /app <backend> node scripts/triage-eval.mjs …). Testsatz und Ergebnisse: /root/transfer/triage-testsatz/ (triage-stichprobe-roh.json, ergebnis-2026-08-05.json, ergebnis-nachher-2026-08-05.json).
  • Hub: sim-ops hub/src/ticketschatten.ts (Event ticket.website_change, Auswertung, Karte im Dashboard), ticketschleuseCore.ts, ticketsCore.ts; Werkzeug scripts/kundenakte-site.sh für mappings.site.live (eine enge Permission-Regel dafür).
  • Vault: 50-Strategien/Gesamtsystem/Triage-Qualitaet.md, 50-Strategien/Ticket Triage.md, Ticket zu Website Pipeline.md.